From: Joel E. Denny Date: Thu, 30 Oct 2008 19:35:01 +0000 (-0400) Subject: Always put auxiliary code files in the same dir as other output files. X-Git-Tag: v2.4~6 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/cae5057f472945d5947cffbc39d56ee7c6995357?hp=4af432ba25fdfc4555a423bad118bc4828947448 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/ChangeLog b/ChangeLog index 95477a25..40037cf8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-10-30 Joel E. Denny + + 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. + 2008-10-29 Joel E. Denny * gnulib: Update submodule to HEAD. diff --git a/src/files.c b/src/files.c index a64234f4..07f761b4 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 3e815d70..1e37347f 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])