Subject: Re: bug#27781: LIBOBJS should depend on LIBOBJDIR

From: Mathieu Lirzin <[email-masked]>
Date: Tue, 22 Aug 2017 00:23:36 +0200

Michael Haubenwallner <[email-masked]> writes:

> On 08/17/2017 01:29 AM, Mathieu Lirzin wrote:
>> Michael Haubenwallner <[email-masked]> writes:
>>> On 08/08/2017 11:17 PM, Mathieu Lirzin wrote:
>>>> Michael Haubenwallner <[email-masked]> writes:
>
>>>
>>> This change fixes automake bug#27781.
>>>
>>> * bin/automake.in: Add Makefile dependency on LIBOBJDIR/dirstamp for
>>> each LIBOBJS/ALLOCA variable used.
>>> ---
>> 
>> Excellent!
>> 
>> To ensure this bug is not reintroduced later, I think it is important to
>> combine this patch with a test.  Are you willing to look into adding
>> one?
>
> Ok - like this one?
>
> Thanks!
> /haubi/
>

Yes, I have made some changes to your original patch (i.e. changing the
test name and the description).  If you are OK with those I will push it.

>From 236cb06666a44f23157aa95adc26450fdec92126 Mon Sep 17 00:00:00 2001
From: Michael Haubenwallner <[email-masked]>
Date: Thu, 17 Aug 2017 14:12:20 +0200
Subject: [PATCH] automake: Ensure that LIBOBJ_DIR builddir is created

* t/libobj-no-dependency-tracking.sh: New test reproducing the issue
described in automake bug#27781.
* t/list-of-tests.mk (handwritten_TESTS, XFAIL_TESTS): Add it.
---
 t/libobj-no-dependency-tracking.sh | 56 ++++++++++++++++++++++++++++++++++++++
 t/list-of-tests.mk                 |  2 ++
 2 files changed, 58 insertions(+)
 create mode 100644 t/libobj-no-dependency-tracking.sh

diff --git a/t/libobj-no-dependency-tracking.sh b/t/libobj-no-dependency-tracking.sh
new file mode 100644
index 0000000..1f02405
--- /dev/null
+++ b/t/libobj-no-dependency-tracking.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2017 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 that LIBOBJS source files are properly built without dependency
+# tracking when using out of tree builds.
+#
+# This is a non regression test which is following an issue in flex-2.6.4 when
+# "malloc.o" was required, see <https://github.com/westes/flex/issues/244>.
+
+. test-init.sh
+
+# The LIBOBJS are in a separate LIBOBJ_DIR directory without anything else in
+# it to not trigger the creation of the build directory accidentally.
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_CONFIG_LIBOBJ_DIR([foo])
+AC_LIBOBJ([foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = helldl
+LDADD = $(LIBOBJS)
+.PHONY: dummy
+dummy: $(LIBOBJS)
+END
+
+mkdir foo
+cat > foo/foo.c << 'END'
+int foo() { return 0; }
+END
+
+mkdir build
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cd build
+../configure --disable-dependency-tracking
+run_make dummy
+:
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index dacdc8d..dab4a7c 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -38,6 +38,7 @@ t/override-conditional-pr13940.sh \
 t/dist-pr109765.sh \
 t/instdir-cond2.sh \
 t/java-nobase.sh \
+t/libobj-no-dependency-tracking.sh \
 t/objext-pr10128.sh \
 t/remake-timing-bug-pr8365.sh \
 t/lex-subobj-nodep.sh \
@@ -602,6 +603,7 @@ t/lflags.sh \
 t/lflags-cxx.sh \
 t/libexec.sh \
 t/libobj-basic.sh \
+t/libobj-no-dependency-tracking.sh \
 t/libobj2.sh \
 t/libobj3.sh \
 t/libobj4.sh \
-- 
2.9.5

-- 
Mathieu Lirzin
GPG: F2A3 8D7E EB2B 6640 5761  070D 0ADE E100 9460 4D37