]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
[ng] yacc, lex: fix subdir VPATH builds
authorStefano Lattarini <stefano.lattarini@gmail.com>
Tue, 31 Jan 2012 21:53:44 +0000 (22:53 +0100)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 1 Feb 2012 20:49:14 +0000 (21:49 +0100)
Starting with recent changes, the automake-generated configure
code does not create the '.Po' files for dependency tracking
anymore.  This is good and proper, but unfortunately, when the
'subdir-objects' option is in use *and* a VPATH build is being
performed, it breaks some rules that *implicitly* relied on that
shell code having already created the subdirectory where the
generated files were to be placed.  This happened in particular
with Yacc and Lex rules.  So fix them to instead explicitly
create the required directories, if not already present.

Bug revealed by failures of 'lex5.test' and 'yacc8.test' with
GNU make 3.82 (on all of Debian, Fedora and Solaris).

* lib/am/yacc.am, lib/am/lex.am: Update.
* tests/Makefile.am (XFAIL_TESTS): Remove 'lex-subobj-nodep.test',
as the test now passes.
* tests/yacc-subobj-nodep.test: New test.
* tests/list-of-tests.mk: Add it.

lib/am/lex.am
lib/am/yacc.am
tests/Makefile.am
tests/list-of-tests.mk
tests/yacc-subobj-nodep.test [new file with mode: 0755]

index fb4077d3f22ae059d171f724427c7fd9d4856c5c..7926d749d8a34291ee38701d35ed3c851e8a45ba 100644 (file)
@@ -1,5 +1,5 @@
 ## automake - create Makefile.in from Makefile.am
-## Copyright (C) 2001, 2002, 2003, 2004, 2006, 2009  Free Software
+## Copyright (C) 2001, 2002, 2003, 2004, 2006, 2009, 2012 Free Software
 ## Foundation, Inc.
 
 ## This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,7 @@ endif %?MAINTAINER-MODE%
 
 ?GENERIC?%EXT%%DERIVED-EXT%:
 ?!GENERIC?%OBJ%: %SOURCE%
+?SUBDIROBJ?    %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
 ?GENERIC?      %VERBOSE%$(am__skiplex) $(SHELL) $(YLWRAP) %SOURCE% $(LEX_OUTPUT_ROOT).c %OBJ% -- %COMPILE%
 ?!GENERIC?     %VERBOSE% \
 ?!GENERIC??DIST_SOURCE?        $(am__skiplex) \
index 6d35cd4bac10771a61590242b0785bc727040a77..4f608b0ac2211d71e21a1feb3a2695e72f4a36c1 100644 (file)
@@ -1,6 +1,6 @@
 ## automake - create Makefile.in from Makefile.am
-## Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2006, 2009
-##   Free Software Foundation, Inc.
+## Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2006, 2009, 2012
+## Free Software Foundation, Inc.
 
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -41,6 +41,7 @@ endif %?MAINTAINER-MODE%
 
 ?GENERIC?%EXT%%DERIVED-EXT%:
 ?!GENERIC?%OBJ%: %SOURCE%
+?SUBDIROBJ?    %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
 ?GENERIC?      %VERBOSE%$(am__skipyacc) $(SHELL) $(YLWRAP) %SOURCE% y.tab.c %OBJ% y.tab.h %BASE%.h y.output %BASE%.output -- %COMPILE%
 ?!GENERIC?     %VERBOSE% \
 ?!GENERIC??DIST_SOURCE?        $(am__skipyacc) \
index f635d12a234646969eca51f88e3bd2a9ce4364cf..65c108915a81f4be0ad44a4a59cd745b78afba17 100644 (file)
@@ -43,7 +43,6 @@ override-conditional-2.test \
 java-nobase.test \
 objext-pr10128.test \
 pr8365-remake-timing.test \
-lex-subobj-nodep.test \
 remake-am-pr10111.test \
 remake-m4-pr10111.test \
 txinfo5.test \
index 77f0d00902d0f2fd17371a4c2b2413da6c105b55..ee0edf24a799d8b5220eb9d30ee1234e776f3c65 100644 (file)
@@ -1183,6 +1183,7 @@ yacc6.test \
 yacc7.test \
 yacc8.test \
 yaccdry.test \
+yacc-subobj-nodep.test \
 yacc-dist-nobuild.test \
 yacc-nodist.test \
 yaccpp.test \
diff --git a/tests/yacc-subobj-nodep.test b/tests/yacc-subobj-nodep.test
new file mode 100755 (executable)
index 0000000..81f9c6e
--- /dev/null
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Ensure subdirs for subdir parsers are generated when subdir-objects
+# are used, even when dependency tracking is disabled.
+
+required='cc yacc'
+. ./defs || Exit 1
+
+cat >configure.in <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([no-dependencies subdir-objects])
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+bin_PROGRAMS = p1 p2
+p1_SOURCES = sub1/s1.y
+p2_SOURCES = sub2/s2.y
+p2_CPPFLAGS = -DWHATEVER
+END
+
+mkdir sub1 sub2
+
+cat >sub1/s1.y <<END
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+int main (void) { yyparse (); return 1; }
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cp sub1/s1.y sub2/s2.y
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+mkdir build
+cd build
+
+# Sanity check.
+../configure --help # For debugging.
+../configure --help | $EGREP '(dis|en)able-depend' \
+  && fatal_ "couldn't disable dependency tracking support globally"
+
+../configure
+$MAKE sub1/s1.c
+$MAKE sub2/s2.c
+rm -rf sub1 sub2
+$MAKE
+
+: