From 3544a43c4923f767467536d02abb511d7e04ab2c Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Fri, 7 Jan 2011 21:52:56 +0100 Subject: [PATCH] yacc: support variable expansions in *YFLAGS definition. This change fixes automake bug#7800. * automake.in (lang_yacc_target_hook): Use 'value_as_list_recursive' instead of 'variable_value' to get the value of *YFLAGS variables. Related changes. ($DASH_D_PATTERN): Removed. * tests/Makefile.am (XFAIL_TESTS): Remove yflags-var-expand.test. * tests/yacc-clean.test: Remove workaround for now-fixed bug. * NEWS: Update. --- ChangeLog | 12 ++++++++++++ NEWS | 6 ++++++ automake.in | 15 ++++++++------- tests/Makefile.am | 1 - tests/Makefile.in | 1 - tests/yacc-clean.test | 5 ----- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f6d3aede..06f9b8454 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2011-01-08 Stefano Lattarini + + yacc: support variable expansions in *YFLAGS definition. + This change fixes automake bug#7800. + * automake.in (lang_yacc_target_hook): Use 'value_as_list_recursive' + instead of 'variable_value' to get the value of *YFLAGS variables. + Related changes. + ($DASH_D_PATTERN): Removed. + * tests/Makefile.am (XFAIL_TESTS): Remove yflags-var-expand.test. + * tests/yacc-clean.test: Remove workaround for now-fixed bug. + * NEWS: Update. + 2011-01-08 Stefano Lattarini yacc: more tests on *YFLAGS support diff --git a/NEWS b/NEWS index 05759351d..79860ad75 100644 --- a/NEWS +++ b/NEWS @@ -56,6 +56,12 @@ Bugs fixed in 1.11.0a: - The code for automatic dependency tracking works around a Solaris make bug triggered by sources containing repeated slashes when the `subdir-objects' option was used. + + - Automake now detects the presence of the `-d' flag in the various + `*YFLAGS' variables even when their definitions involve indirections + through other variables, such as in: + foo_opts = -d + AM_YFLAGS = $(foo_opts) New in 1.11: diff --git a/automake.in b/automake.in index b97d4a635..2bffe4814 100755 --- a/automake.in +++ b/automake.in @@ -208,8 +208,6 @@ my $INCLUDE_PATTERN = ('^include\s+' . '|(\$\(srcdir\)/' . $PATH_PATTERN . ')' . '|([^/\$]' . $PATH_PATTERN . '))\s*(#.*)?' . "\$"); -# Match `-d' as a command-line argument in a string. -my $DASH_D_PATTERN = "(^|\\s)-d(\\s|\$)"; # Directories installed during 'install-exec' phase. my $EXEC_DIR_PATTERN = '^(?:bin|sbin|libexec|sysconf|localstate|lib|pkglib|.*exec.*)' . "\$"; @@ -6063,11 +6061,14 @@ sub lang_yacc_target_hook { my ($self, $aggregate, $output, $input, %transform) = @_; - my $flag = $aggregate . "_YFLAGS"; - my $flagvar = var $flag; - my $YFLAGSvar = var 'YFLAGS'; - if (($flagvar && $flagvar->variable_value =~ /$DASH_D_PATTERN/o) - || ($YFLAGSvar && $YFLAGSvar->variable_value =~ /$DASH_D_PATTERN/o)) + my $flagvar = var ($aggregate . "_YFLAGS"); + my $YFLAGSvar = var ('YFLAGS'); + # We cannot work reliably with conditionally-defined YFLAGS. + $flagvar->check_defined_unconditionally if $flagvar; + $YFLAGSvar->check_defined_unconditionally if $YFLAGSvar; + my @flags = $flagvar ? $flagvar->value_as_list_recursive : (); + my @YFLAGS = $YFLAGSvar ? $YFLAGSvar->value_as_list_recursive : (); + if (grep (/^-d$/, @flags) || grep (/^-d$/, @YFLAGS)) { (my $output_base = $output) =~ s/$KNOWN_EXTENSIONS_PATTERN$//; my $header = $output_base . '.h'; diff --git a/tests/Makefile.am b/tests/Makefile.am index 490c4660b..bb1d786b5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -21,7 +21,6 @@ all.test \ auxdir2.test \ cond17.test \ gcj6.test \ -yflags-var-expand.test \ txinfo5.test include $(srcdir)/parallel-tests.am diff --git a/tests/Makefile.in b/tests/Makefile.in index 0addaf639..e83cf3344 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -277,7 +277,6 @@ all.test \ auxdir2.test \ cond17.test \ gcj6.test \ -yflags-var-expand.test \ txinfo5.test parallel_tests = \ diff --git a/tests/yacc-clean.test b/tests/yacc-clean.test index a8df065ac..d6a3fcaa8 100755 --- a/tests/yacc-clean.test +++ b/tests/yacc-clean.test @@ -62,10 +62,6 @@ END cat > sub2/Makefile.am << 'END' include $(top_srcdir)/sub1/Makefile.am AM_YFLAGS = -d -## FIXME: these apparently redundant definitions are required to -## work around automake bug#7800. -bar_YFLAGS += -d -qux_YFLAGS += -d END cat > sub1/parse.y << 'END' @@ -86,7 +82,6 @@ int main () END cp sub1/main.c sub2/main.c - $ACLOCAL $AUTOCONF $AUTOMAKE -a -- 2.47.2