bug#9859: subdir-objects, dirstamps and --disable-dependency-tracking

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view

bug#9859: subdir-objects, dirstamps and --disable-dependency-tracking

Stefano Lattarini

Hello automakers.

The recent commit `v1.11-512-g40c3432', required to fix automake bugs #8485

and #8526, has re-introduced the bug reported by Ignacy Gawedzki in his

message "subdir-objects, dirstamps and --disable-dependency-tracking (bug?)",

posted to the automake list in March 2011. I'm thus registering this

bug in the automake tracker so that we won't forget about it.









Original message follows ...



I suspect I found a bug in automake 1.11.1 .

I have a project in which some program has .ll and .yy sources that must be

generated by flex and bison. It also happens I need to have specific

preprocessor options passed to that program using a _CPPFLAGS variable. This

makes everything produced for that program prefixed with the program name.

Besides, I need to use the subdir-objects automake option.

Now the problem is that some subdirectories are not created automatically in

$(builddir) as expected and I think I have found why. It happens when

configure is called with --disable-dependency-tracking, as is usually the case

when called through debhelper.

In the attached tarball, there is a minimal setup illustrating the problem.

Try to configure and build the project in a separate build directory and you

should be able to observe how automake fails to create $(builddir)/src before

calling ylwrap to generate src/bug-scanner.cc .

The Makefile has the following rule (number 1):

src/bug-scanner.$(OBJEXT): src/$(am__dirstamp) \


But the bug_CPPFLAGS line in Makefile.am ultimately leads to the production of

the following rule (number 2):

src/bug-scanner.o: src/scanner.cc


Whereas there is *no* rule of the kind :

src/scanner.cc: src/$(am__dirstamp)


This looks like src/scanner.cc gets regenerated *before* src/$(am_dirstamp)

gets a chance to be considered, supposedly because of the explicit rule number


Does anybody know of a clean fix/workaround?



automake-dirstamp-bug.tar.gz (674 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view

bug#9859: automake bug#9859 has been fixed in Automake-NG

Stefano Lattarini
JFTR: this bug has been fixed in the Automake-NG fork of Automake
(which assumes GNU make is used to execute its generated makefiles);
see commits v1.11-1838-gdc04691 "[ng] yacc, lex: fix subdir VPATH
builds" and v1.11-1839-ge5b964c "[ng] yacc, lex, compiling: better
use of '$<' (simplify and fix bug)" in the 'ng/master' branch of
the official automake repository.

See also:


More information about Automake-NG, from its first git commit:



Reply | Threaded
Open this post in threaded view

bug#9859: [PATCH] yacc and lex built objects without dependancy tracking

Nick Brown
In reply to this post by Stefano Lattarini
 lib/am/lex.am  | 1 +
 lib/am/yacc.am | 1 +
 2 files changed, 2 insertions(+)

diff --git a/lib/am/lex.am b/lib/am/lex.am
index d7ddc77..6357507 100644
--- a/lib/am/lex.am
+++ b/lib/am/lex.am
@@ -23,6 +23,7 @@ endif %?MAINTAINER-MODE%
+?SUBDIROBJ? %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
 ?!GENERIC??DIST_SOURCE? $(am__skiplex) \
diff --git a/lib/am/yacc.am b/lib/am/yacc.am
index 2b3f92a..2c33023 100644
--- a/lib/am/yacc.am
+++ b/lib/am/yacc.am
@@ -43,6 +43,7 @@ endif %?FIRST%
+?SUBDIROBJ? %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
 ?GENERIC? %VERBOSE%$(am__skipyacc) $(SHELL) $(YLWRAP) %SOURCE% y.tab.c %OBJ% y.tab.h `echo %OBJ% | $(am__yacc_c2h)` y.output %BASE%.output -- %COMPILE%
 ?!GENERIC??DIST_SOURCE? $(am__skipyacc) \