From: Stefano Lattarini Date: Tue, 31 Jan 2012 21:53:44 +0000 (+0100) Subject: [ng] yacc, lex: fix subdir VPATH builds X-Git-Tag: ng-0.5a~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc04691d13078ee7aebb12d161abfa7301a6332b;p=thirdparty%2Fautomake.git [ng] yacc, lex: fix subdir VPATH builds 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. --- diff --git a/lib/am/lex.am b/lib/am/lex.am index fb4077d3f..7926d749d 100644 --- a/lib/am/lex.am +++ b/lib/am/lex.am @@ -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) \ diff --git a/lib/am/yacc.am b/lib/am/yacc.am index 6d35cd4ba..4f608b0ac 100644 --- a/lib/am/yacc.am +++ b/lib/am/yacc.am @@ -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) \ diff --git a/tests/Makefile.am b/tests/Makefile.am index f635d12a2..65c108915 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 \ diff --git a/tests/list-of-tests.mk b/tests/list-of-tests.mk index 77f0d0090..ee0edf24a 100644 --- a/tests/list-of-tests.mk +++ b/tests/list-of-tests.mk @@ -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 index 000000000..81f9c6e02 --- /dev/null +++ b/tests/yacc-subobj-nodep.test @@ -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 . + +# 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 <Makefile.am <sub1/s1.y <