[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Always put auxiliary code files in the same dir as other output files.,
Joel E. Denny <=