automake-ng
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-ng] [PATCH 4/4] [ng] yacc, lex: fix subdir VPATH builds


From: Stefano Lattarini
Subject: [Automake-ng] [PATCH 4/4] [ng] yacc, lex: fix subdir VPATH builds
Date: Wed, 1 Feb 2012 10:09:21 +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                |    3 +-
 lib/am/yacc.am               |    5 ++-
 tests/Makefile.am            |    1 -
 tests/list-of-tests.mk       |    1 +
 tests/yacc-subobj-nodep.test |   71 ++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 77 insertions(+), 4 deletions(-)
 create mode 100755 tests/yacc-subobj-nodep.test

diff --git a/lib/am/lex.am b/lib/am/lex.am
index fb4077d..7926d74 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 6d35cd4..4f608b0 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 f635d12..65c1089 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 77f0d00..ee0edf2 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 0000000..81f9c6e
--- /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 <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
+
+:
-- 
1.7.7.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]