bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Always put auxiliary code files in the same dir as other output


From: Joel E. Denny
Subject: [PATCH] Always put auxiliary code files in the same dir as other output files.
Date: Thu, 30 Oct 2008 15:45:48 -0400 (EDT)

While working on documentation for the new output file name computation in 
comparison with the old, I noticed a definite bug in the old.  I pushed 
the following fix.

>From cae5057f472945d5947cffbc39d56ee7c6995357 Mon Sep 17 00:00:00 2001
From: Joel E. Denny <address@hidden>
Date: Thu, 30 Oct 2008 15:35:01 -0400
Subject: [PATCH] Always put auxiliary code files in the same dir as other 
output files.

* src/files.c (compute_file_name_parts): When the user specifies
--output but not --file-prefix, extract the directory prefix from the
file prefix not from the grammar file name.  This affects the location
of files like location.hh generated by the C++ skeleton.  The includes
in the other output files require this fix.
* tests/output.at (AT_CHECK_OUTPUT): Automatically create directories
for expected output files.
(Output files): Add a test for the above.

diff --git a/src/files.c b/src/files.c
index a64234f..07f761b 100644
--- a/src/files.c
+++ b/src/files.c
@@ -267,7 +267,9 @@ compute_file_name_parts (void)
       if (spec_file_prefix)
        {
          /* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT = `foo'.  */
-         dir_prefix = xstrndup (grammar_file, base - grammar_file);
+         dir_prefix =
+            xstrndup (spec_file_prefix,
+                      last_component (spec_file_prefix) - spec_file_prefix);
          all_but_tab_ext = xstrdup (spec_file_prefix);
        }
       else if (yacc_flag)
diff --git a/tests/output.at b/tests/output.at
index 3e815d7..1e37347 100644
--- a/tests/output.at
+++ b/tests/output.at
@@ -23,9 +23,11 @@ AT_BANNER([[Output file names.]])
 # -----------------------------------------------------------------------------
 m4_define([AT_CHECK_OUTPUT],
 [AT_SETUP([[Output files: $2 $3 $5]])
-case "$1" in
-  */*) mkdir `echo "$1" | sed 's,/.*,,'`;;
-esac
+for file in $1 $4; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 AT_DATA([$1],
 [[$2
 %%
@@ -116,6 +118,11 @@ AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" 
%defines %verbose],
                [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])])
 
+AT_CHECK_OUTPUT([gram_dir/foo.yy],
+                [%skeleton "lalr1.cc" %defines %verbose %file-prefix 
"output_dir/foo"],
+                [],
+               [output_dir/foo.tab.cc output_dir/foo.tab.hh 
output_dir/foo.output output_dir/location.hh output_dir/stack.hh 
output_dir/position.hh])
+
 
 # AT_CHECK_CONFLICTING_OUTPUT(INPUT-FILE, DIRECTIVES, FLAGS, STDERR,
 #                             [EXIT-STATUS])
-- 
1.5.4.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]