]> git.saurik.com Git - bison.git/commitdiff
* src/scan-skel.l: Output the base name parts of the parser and
authorAkim Demaille <akim@epita.fr>
Thu, 13 Oct 2005 10:13:24 +0000 (10:13 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 13 Oct 2005 10:13:24 +0000 (10:13 +0000)
header file names.
* tests/output.at (AT_CHECK_OUTPUT): Support subdirectorioes, and
additional checks.
Use this to exercise C++ outputs in subdirs.
Reported by Oleg Smolsky.

ChangeLog
THANKS
data/lalr1.cc
src/scan-skel.l
src/system.h
tests/output.at

index 5f2c3086050f3d558aad12319f9d056ab3a238a2..ace626ad10897a068629b4185b475f6bf8636786 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2005-10-13  Akim Demaille  <akim@epita.fr>
+
+       * src/scan-skel.l: Output the base name parts of the parser and
+       header file names.
+       * tests/output.at (AT_CHECK_OUTPUT): Support subdirectorioes, and
+       additional checks.
+       Use this to exercise C++ outputs in subdirs.
+       Reported by Oleg Smolsky.
+
 2005-10-12  Paul Eggert  <eggert@cs.ucla.edu>
 
        * data/c.m4 (b4_c_function_def): Look at __C99_FUNC__, not at
diff --git a/THANKS b/THANKS
index 983bf687b3dbc3da9878eb21556475eafdf8d5e3..4a5492e26d6ad756f3028e71937805f1bbd714be 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -51,6 +51,7 @@ Nelson H. F. Beebe        beebe@math.utah.edu
 Nicolas Burrus            nicolas.burrus@epita.fr
 Nicolas Tisserand         nicolas.tisserand@epita.fr
 Noah Friedman             friedman@gnu.org
+Oleg Smolsky              oleg.smolsky@pacific-simulators.co.nz
 Pascal Bart               pascal.bart@epita.fr
 Paul Eggert               eggert@cs.ucla.edu
 Paul Hilfinger            Hilfinger@CS.Berkeley.EDU
index 91bc2ec493b40c2b9dd5bd592ce2393b6b85007d..91360a529944002fae3f6506672f1a9258f0178e 100644 (file)
@@ -30,7 +30,6 @@ m4_if(b4_defines_flag, 0, [],
 b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
              [2002, 2003, 2004, 2005])
 dnl FIXME: This is wrong, we want computed header guards.
-dnl FIXME: I do not know why the macros are missing now. :(
 [
 #ifndef PARSER_HEADER_H
 # define PARSER_HEADER_H
index 06370fa6dedca1012806dd4ef4257a9d71412c53..e3a5eabd437d2c95158247b6d1dd5b18bb9b6eb5 100644 (file)
   char const *file_name = yytext + sizeof "@output " - 1;
   yytext[yyleng - 1] = '\0';
 
+  /* Decode special file names.  They include the directory part,
+     contrary to their "free" occurrences, used for issuing #includes,
+     which must not include the directory part.  */
+
   if (*file_name == '@')
     {
       if (strcmp (file_name, "@output_header_name@") == 0)
@@ -80,8 +84,8 @@
 "@oline@"  fprintf (yyout, "%d", lineno + 1);
 "@ofile@"  QPUTS (outname);
 "@dir_prefix@" QPUTS (dir_prefix);
-"@output_parser_name@" QPUTS (parser_file_name);
-"@output_header_name@" QPUTS (spec_defines_file);
+"@output_parser_name@" QPUTS (base_name (parser_file_name));
+"@output_header_name@" QPUTS (base_name (spec_defines_file));
 
   /* This pattern must not match more than the previous @ patterns. */
 @[^{}@\n]* fatal ("invalid @ in skeleton: %s", yytext);
index 1e161770ce9c03c18b43af26847455f2324f4228..9b874b9595c97fb6a944a2af4a1d887712cc0256 100644 (file)
@@ -62,6 +62,9 @@ typedef size_t uintptr_t;
 
 #include <stpcpy.h>
 
+/* From lib/basename.c. */
+char *base_name (char const *name);
+
 
 /*-----------------.
 | GCC extensions.  |
index 12a49b9050d225226cda0bb3e0e90098905cac11..574f2141e3e27369ccffceef865da688da254774 100644 (file)
 AT_BANNER([[Output file names.]])
 
 
-# AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [SHELLIO])
+# AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [SHELLIO],
+#                 [ADDITIONAL-TESTS])
 # -----------------------------------------------------------------------------
 m4_define([AT_CHECK_OUTPUT],
-[AT_SETUP([Output files: $2 & $3 $5.])
+[AT_SETUP([Output files: $2 $3 $5])
+case "$1" in
+  */*) mkdir `echo "$1" | sed 's,/.*,,'`;;
+esac
 AT_DATA([$1],
 [[$2
 %%
@@ -31,6 +35,7 @@ foo: {};
 
 AT_CHECK([bison $3 $1 $5], 0)
 AT_CHECK([ls $4], [], [ignore])
+$6
 AT_CLEANUP
 ])
 
@@ -84,3 +89,26 @@ AT_CHECK_OUTPUT([foo.yy], [],
 AT_CHECK_OUTPUT([foo.yy], [],
                 [-o foo.c++ --graph=foo.gph],
                 [foo.c++ foo.gph])
+
+
+## ------------ ##
+## C++ output.  ##
+## ------------ ##
+
+m4_define([AT_CHECK_NO_SUBDIR_PART],
+[# Also make sure that the includes do not refer to the subdirectory.
+AT_CHECK([grep 'include .subdir/' $1.cc], 1, [])
+AT_CHECK([grep 'include .subdir/' $1.hh], 1, [])
+])
+
+AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %defines %verbose], [],
+                [foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh])
+
+AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose], [],
+                [foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh],
+               [], [AT_CHECK_NO_SUBDIR_PART([foo.tab])])
+
+AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose],
+               [-o subdir/foo.cc],
+                [subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh],
+               [], [AT_CHECK_NO_SUBDIR_PART([subdir/foo])])