[+cc automake-patches] Reference: <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13928>
Hello everybody, sorry for the delay. On 11/03/2013 01:05 PM, Bert Wesarg wrote (more or less): > > But when I prefix a source file with '$(src)/' and use > subdir-objects then I get something like this in the Makefile.in > > $(src)/test-test.o: $(src)/test.c > > And after a configure I get in my build dir a directory named > literally "$(src)". > > Why would I want a directory named "$(src)" in my build > directory? If anything than the $(src) make variable should > be resolved. Anyway, when running make I get: > > Makefile:299: .deps/test-test.Po: No such file or directory > make: *** No rule to make target `.deps/test-test.Po'. Stop. > On 12/03/2013 03:39 PM, Bert Wesarg wrote: > > Regarding the actual bug: without knowing much (yet!) about the relevant > Automake internals, I'm a bit surprised that > > src = src > foo_SOURCES = $(src)/foo.c > > fails with subdir-objects, but on the other hand > > src = src/foo.c > foo_SOURCES = $(src) > > seems to work just fine... > Still not sure when I'll manage to look into these issues properly. But in the meantime, I've at least added a couple of test cases to expose them. See the patch below. Will soon push it to 'micro'. Regards, Stefano ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- >From 004eba9b3c19747652fa9feab9846d646c83f5d8 Mon Sep 17 00:00:00 2001 Message-Id: <004eba9b3c19747652fa9feab9846d646c83f5d8.1370725645.git.stefano.lattar...@gmail.com> From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Sat, 8 Jun 2013 22:00:32 +0200 Subject: [PATCH] tests: expose automake bug#13928 * t/subobj-indir-pr13928.sh: New test, still xfailing. * t/subobj-vpath-pr13928.sh: Likewise. * t/list-of-tests.mk (XFAIL_TESTS, handwritten_TESTS): Update. Signed-off-by: Stefano Lattarini <stefano.lattar...@gmail.com> --- t/list-of-tests.mk | 4 ++++ t/subobj-indir-pr13928.sh | 49 ++++++++++++++++++++++++++++++++++++++ t/subobj-vpath-pr13928.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 t/subobj-indir-pr13928.sh create mode 100644 t/subobj-vpath-pr13928.sh diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index 68ca58c..1d7cf87 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -40,6 +40,8 @@ t/java-nobase.sh \ t/objext-pr10128.sh \ t/remake-timing-bug-pr8365.sh \ t/lex-subobj-nodep.sh \ +t/subobj-indir-pr13928.sh \ +t/subobj-vpath-pr13928.sh \ t/remake-am-pr10111.sh \ t/remake-m4-pr10111.sh \ $(perl_fake_XFAIL_TESTS) @@ -1034,6 +1036,8 @@ t/subobj11c.sh \ t/subobjname.sh \ t/subobj-clean-pr10697.sh \ t/subobj-clean-lt-pr10697.sh \ +t/subobj-indir-pr13928.sh \ +t/subobj-vpath-pr13928.sh \ t/subpkg.sh \ t/subpkg2.sh \ t/subpkg3.sh \ diff --git a/t/subobj-indir-pr13928.sh b/t/subobj-indir-pr13928.sh new file mode 100644 index 0000000..11b865c --- /dev/null +++ b/t/subobj-indir-pr13928.sh @@ -0,0 +1,49 @@ +#! /bin/sh +# Copyright (C) 2013 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/>. + +# Expose part of Automake bug#13928: config.status generates broken +# makefiles if the subdir-objects option is used and a _SOURCES +# variable lists sources whose directory part is specified as a +# make variable ("foo_SOURCES = $(src)/foo.c"). + +required=cc +. test-init.sh + +cat >> configure.ac << 'END' +AC_PROG_CC +AM_PROG_CC_C_O +AC_OUTPUT +END + +cat > Makefile.am <<'END' +AUTOMAKE_OPTIONS = subdir-objects +src = s +bin_PROGRAMS = foo +foo_SOURCES = $(src)/foo.c +END + +mkdir s +echo 'int main(void) { return 0; }' > s/foo.c + +$ACLOCAL && $AUTOCONF && $AUTOMAKE -a || fatal_ "autotools failed" + +./configure +$MAKE +test -f s/.deps/foo.Po +find . | $FGREP '$(src)' && exit 1 +$MAKE distcheck + +: diff --git a/t/subobj-vpath-pr13928.sh b/t/subobj-vpath-pr13928.sh new file mode 100644 index 0000000..96cb219 --- /dev/null +++ b/t/subobj-vpath-pr13928.sh @@ -0,0 +1,60 @@ +#! /bin/sh +# Copyright (C) 2013 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/>. + +# Expose part of automake bug#13928: if the subdir-objects option is +# in use and a source file is listed in a _SOURCES variable with a +# leading $(srcdir) component, Automake will generate a Makefile that +# tries to create the corresponding object file in $(srcdir) as well. + +required=cc +. test-init.sh + +cat >> configure.ac << 'END' +AC_PROG_CC +AM_PROG_CC_C_O +AC_OUTPUT +END + +cat > Makefile.am <<'END' +AUTOMAKE_OPTIONS = subdir-objects +noinst_PROGRAMS = test +test_SOURCES = $(srcdir)/test.c +test-objs: + test ! -f $(srcdir)/test.$(OBJEXT) + test -f test.$(OBJEXT) +END + +$ACLOCAL && $AUTOCONF && $AUTOMAKE -a || fatal_ "autotools failed" + +$EGREP 'test\.|DEPDIR|dirstamp|srcdir' Makefile.in || : # For debugging. +$EGREP '\$.srcdir./test\.[o$]' Makefile.in && exit 1 +$FGREP '$(srcdir)/$(am__dirstamp)' Makefile.in && exit 1 +$FGREP '$(srcdir)/$(DEPDIR)' && exit 1 + +cat > test.c << 'END' +int main (void) +{ + return 0; +} +END + +mkdir build && cd build || fatal "preparation of build directory failed" +../configure || fatal_ "./configure failed" + +$MAKE +$MAKE test-objs + +: -- 1.8.3.rc3.8.g5e49f30