[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RFC: yacc.c: factor (was: yacc.c does not prototype yyparse in the h
From: |
Akim Demaille |
Subject: |
Re: RFC: yacc.c: factor (was: yacc.c does not prototype yyparse in the header) |
Date: |
Wed, 13 Jun 2012 23:08:58 +0200 |
Le 12 juin 2012 à 18:24, Akim Demaille a écrit :
> Fourth step. This introduces a weakness in Bison: when
> given arguments such as
>
> --output=sub1/foo.c --defines=sub2/foo.h
>
> then sub1/foo.c features '#include "sub2/foo.h"'. But we actually
> already have this problem in glr.c which already prefers to include
> the header instead of duplicating its content.
>
> So we really need to be able to compute "relative" paths here, to
> be addressed in the near future.
>
> Ok to install?
I have given a try to computing relative paths by stealing some
bits from the coreutils (relpath.[ch] and a function from ln.c,
as suggested by Eric Blake). I have pushed in gnulib an akim/relpath
branch with this.
Then I used it in Bison, see below, but I am frighten by the sheer
number of dependencies that this simple idea incurs. Am I missing
something? Just have a look at the gitignore changes…
(this is in the declare-yyparse branch of Bison).
Any opinion is *most* welcome.
From 424cb4f460a0f4f1f8325a8eb7e1d0686635962b Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Wed, 13 Jun 2012 22:22:38 +0200
Subject: [PATCH] compute relative paths from parser.c to parser.h for
#include
* bootstrap.conf: Request relpath.
* gnulib: Update to get it.
* src/scan-skel.l (@relative): New.
* data/glr.c: Use it.
---
bootstrap.conf | 2 ++
data/glr.c | 2 +-
gnulib | 2 +-
lib/.gitignore | 47 +++++++++++++++++++++++++++++++++++++++++++++++
m4/.gitignore | 25 +++++++++++++++++++++++++
src/scan-skel.l | 14 ++++++++++++++
6 files changed, 90 insertions(+), 2 deletions(-)
diff --git a/bootstrap.conf b/bootstrap.conf
index aa05e34..1b68ef5 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -28,6 +28,7 @@ gnulib_modules='
quote quotearg
readme-release
realloc-posix
+ relpath
spawn-pipe stdbool stpcpy strdup-posix strerror strtoul strverscmp
unistd unistd-safer unlocked-io update-copyright unsetenv verify
warnings
@@ -42,6 +43,7 @@ XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
--from-code=UTF-8\\\
--flag=asprintf:2:c-format\\\
--flag=complain:1:c-format --flag=complain_at:2:c-format\\\
+ --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
--flag=fatal:1:c-format --flag=fatal_at:2:c-format\\\
--flag=warn:1:c-format --flag=warn_at:2:c-format\\\
--flag=unexpected_end:2:c-format\\\
diff --git a/data/glr.c b/data/glr.c
index 7ebc65c..117ccaa 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -202,7 +202,7 @@ m4_if(b4_prefix, [yy], [],
]b4_null_define[
-]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
+]b4_defines_if([[#include "@relative(]b4_spec_defines_file[@,
]b4_parser_file_name[@)"]],
[b4_shared_declarations])[
/* Enabling traces. */
diff --git a/gnulib b/gnulib
index b42157d..2005fbf 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit b42157dd01e3243646f5a8270c09ee125a8aca21
+Subproject commit 2005fbf739536a0f60bf970c24c1ecf3c9cc8a43
diff --git a/lib/.gitignore b/lib/.gitignore
index 5eec743..bb516bd 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -268,3 +268,50 @@
/xmemdup0.c
/xmemdup0.h
/sys_types.in.h
+/relpath.c
+/relpath.h
+/areadlink-with-size.c
+/areadlink.h
+/at-func.c
+/canonicalize.c
+/canonicalize.h
+/chdir-long.c
+/chdir-long.h
+/closedir.c
+/dirent-private.h
+/dirent.in.h
+/dirfd.c
+/dup.c
+/fchdir.c
+/fdopendir.c
+/file-set.c
+/file-set.h
+/filename.h
+/filenamecat-lgpl.c
+/filenamecat.h
+/fstatat.c
+/getcwd-lgpl.c
+/getcwd.c
+/hash-pjw.c
+/hash-pjw.h
+/hash-triple.c
+/hash-triple.h
+/lstat.c
+/mempcpy.c
+/memrchr.c
+/openat-die.c
+/openat-priv.h
+/openat-proc.c
+/openat.c
+/openat.h
+/opendir.c
+/readdir.c
+/readlink.c
+/rewinddir.c
+/same-inode.h
+/same.c
+/same.h
+/save-cwd.c
+/save-cwd.h
+/xgetcwd.c
+/xgetcwd.h
diff --git a/m4/.gitignore b/m4/.gitignore
index d47aee0..d505bf8 100644
--- a/m4/.gitignore
+++ b/m4/.gitignore
@@ -178,3 +178,28 @@
/xstrndup.m4
/off_t.m4
/sys_types_h.m4
+/canonicalize.m4
+/chdir-long.m4
+/closedir.m4
+/d-ino.m4
+/dirent_h.m4
+/dirfd.m4
+/dup.m4
+/fchdir.m4
+/fdopendir.m4
+/filenamecat.m4
+/fstatat.m4
+/getcwd-abort-bug.m4
+/getcwd-path-max.m4
+/getcwd.m4
+/lstat.m4
+/mempcpy.m4
+/memrchr.m4
+/openat.m4
+/opendir.m4
+/readdir.m4
+/readlink.m4
+/rewinddir.m4
+/same.m4
+/save-cwd.m4
+/xgetcwd.m4
diff --git a/src/scan-skel.l b/src/scan-skel.l
index 2433905..7e7f68e 100644
--- a/src/scan-skel.l
+++ b/src/scan-skel.l
@@ -36,6 +36,7 @@
#include "complain.h"
#include "getargs.h"
#include "files.h"
+#include "relpath.h"
#include "scan-skel.h"
#define YY_DECL static int skel_lex (void)
@@ -265,6 +266,19 @@ at_directive_perform (int at_directive_argc,
break;
}
}
+ else if (0 == strcmp (at_directive_argv[0], "@relative"))
+ {
+ if (at_directive_argc < 3)
+ fail_for_at_directive_too_few_args (at_directive_argv[0]);
+ if (at_directive_argc > 3)
+ fail_for_at_directive_too_many_args (at_directive_argv[0]);
+ {
+ char *rel = convert_abs_rel(at_directive_argv[1],
+ at_directive_argv[2]);
+ fputs (rel, yyout);
+ free (rel);
+ }
+ }
else if (0 == strcmp (at_directive_argv[0], "@output"))
{
if (at_directive_argc > 2)
--
1.7.10.4
Message not available
Message not available
- Message not available
- Message not available
- Message not available
- RFC: yacc.c: factor (was: yacc.c does not prototype yyparse in the header), Akim Demaille, 2012/06/12
- Re: RFC: yacc.c: factor (was: yacc.c does not prototype yyparse in the header), Akim Demaille, 2012/06/12
- Re: RFC: yacc.c: factor (was: yacc.c does not prototype yyparse in the header),
Akim Demaille <=
- Re: yacc.c: instead of duplicating y.tab.h inside y.tac.c, include it (was: RFC: yacc.c: factor), Akim Demaille, 2012/06/15
- ylwrap does not rename y.tab.h in y.tab.c (was: yacc.c: instead of duplicating y.tab.h inside y.tac.c, include it), Akim Demaille, 2012/06/20
- Re: ylwrap does not rename y.tab.h in y.tab.c (was: yacc.c: instead of duplicating y.tab.h inside y.tac.c, include it), Akim Demaille, 2012/06/25
- Re: ylwrap does not rename y.tab.h in y.tab.c, Stefano Lattarini, 2012/06/25
- [PATCH] yacc, lex: new 'no-ylwrap' option to prevent use of the 'ylwrap' script, Stefano Lattarini, 2012/06/25
- Re: [PATCH] yacc, lex: new 'no-ylwrap' option to prevent use of the 'ylwrap' script, Akim Demaille, 2012/06/26
- Re: [PATCH] yacc, lex: new 'no-ylwrap' option to prevent use of the 'ylwrap' script, Stefano Lattarini, 2012/06/26
- Re: [PATCH] yacc, lex: new 'no-ylwrap' option to prevent use of the 'ylwrap' script, Akim Demaille, 2012/06/26
- Re: [PATCH] yacc, lex: new 'no-ylwrap' option to prevent use of the 'ylwrap' script, Eric Blake, 2012/06/26
- Re: [PATCH] yacc, lex: new 'no-ylwrap' option to prevent use of the 'ylwrap' script, Akim Demaille, 2012/06/26