[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: automake silent-rules feature is not compatible with --disable-depen
From: |
Ralf Wildenhues |
Subject: |
Re: automake silent-rules feature is not compatible with --disable-dependency-tracking |
Date: |
Sun, 24 Jan 2010 12:47:41 +0100 |
User-agent: |
Mutt/1.5.20 (2009-10-28) |
> * Dmitry V. Levin wrote on Sun, Jan 17, 2010 at 02:37:10AM CET:
> > There seems to be a bug in automake: silent-rules support is not
> > compatible with --disable-dependency-tracking yet. Passing this option to
> > configure results to garbage both in silent and verbose output.
> > Here is a reproducer on GNU/Linux:
Thanks again for the bug report. I'm fast-forwarding the je-silent
branch to the tip of 'maint', committing this to the je-silent branch,
including adding you to THANKS, and merging je-silent to the master
branch.
Will merge je-silent to branch-1.11 soonish, maybe in a week or two,
if no regressions show up in master.
Cheers,
Ralf
Fix silent-rules output for disabled dependency tracking.
* lib/am/depend2.am [!%FASTDEP%]: Rework silent-rules variable
expansion code to also work in the case where %AMDEP% expands
to FALSE at config.status time, using new substitution string
%VERBOSE-NODEP%.
* automake.in (verbose_nodep_flag): New function, appending
address@hidden@' to the verbose-variable name.
(handle_languages): If dependencies are not disabled, use it to
set %VERBOSE-NODEP%.
* m4/depend.m4: Substitute am__nodep as '_no', so the second
verbose-variable will always expand to an empty string, if
dependencies are enabled.
* tests/silent5.test: Also test --disable-dependency-tracking;
also test per-target flags for non-C language files.
* tests/silent9.test: New test, like silent4.test but disable
dependency tracking.
* tests/Makefile.am: Adjust.
* NEWS, THANKS: Update.
Report by Dmitry V. Levin <address@hidden>.
Signed-off-by: Ralf Wildenhues <address@hidden>
diff --git a/NEWS b/NEWS
index cd427fb..bf80253 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,11 @@ Bugs fixed in 1.11.0a:
- The `parallel-tests' test driver works around a GNU make 3.80 bug with
trailing white space in the test list (`TESTS = foo $(EMPTY)').
+ - The `silent-rules' option now also silences all compile rules if dependency
+ tracking is disabled. Also, when `silent-rules' is not used, the output
from
+ `make' does not contain spurious extra lines with only a backslash in them
+ any more; it now again matches that from pre-1.11 Automake.
+
* Long standing bugs:
- On Darwin 9, `pythondir' and `pyexecdir' pointed below `/Library/Python'
diff --git a/automake.in b/automake.in
index 8692d61..116fc7d 100755
--- a/automake.in
+++ b/automake.in
@@ -1183,6 +1183,14 @@ sub verbose_flag ($)
return '';
}
+sub verbose_nodep_flag ($)
+{
+ my ($name) = @_;
+ return '$(' . verbose_var ($name) . subst ('am__nodep') . ')'
+ if (option 'silent-rules');
+ return '';
+}
+
# silent_flag
# -----------
# Contents of %SILENT%: variable to expand to `@' when silent.
@@ -1380,6 +1388,8 @@ sub handle_languages
? ('FALSE', 'FALSE') : ('AMDEP', "am__fastdep$fpfx");
my $verbose = verbose_flag ($lang->ccer || 'GEN');
+ my $verbose_nodep = ($AMDEP eq 'FALSE')
+ ? $verbose : verbose_nodep_flag ($lang->ccer || 'GEN');
my $silent = silent_flag ();
my %transform = ('EXT' => $ext,
@@ -1394,6 +1404,7 @@ sub handle_languages
'DERIVED-EXT' => 'BUG',
DIST_SOURCE => 1,
VERBOSE => $verbose,
+ 'VERBOSE-NODEP' => $verbose_nodep,
SILENT => $silent,
);
@@ -1616,6 +1627,7 @@ sub handle_languages
LTOBJ => "$obj.lo",
VERBOSE => $verbose,
+ 'VERBOSE-NODEP' => $verbose_nodep,
SILENT => $silent,
COMPILE => $obj_compile,
LTCOMPILE => $obj_ltcompile,
diff --git a/lib/am/depend2.am b/lib/am/depend2.am
index 3674fee..9a193a4 100644
--- a/lib/am/depend2.am
+++ b/lib/am/depend2.am
@@ -1,6 +1,6 @@
## automake - create Makefile.in from Makefile.am
## Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-## 2003, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+## 2003, 2004, 2006, 2008, 2009, 2010 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
@@ -71,18 +71,17 @@ if %FASTDEP%
?GENERIC??SUBDIROBJ? %COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o
%OBJ% %SOURCEFLAG%%SOURCE% &&\
?GENERIC??SUBDIROBJ? $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
else !%FASTDEP%
-?VERBOSE? %VERBOSE% @AM_BACKSLASH@
if %AMDEP%
- source='%SOURCE%' object='%OBJ%' libtool=no @AMDEPBACKSLASH@
+ %VERBOSE%source='%SOURCE%' object='%OBJ%' libtool=no @AMDEPBACKSLASH@
DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@
endif %AMDEP%
if %?GENERIC%
-?-o? %COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%%SOURCE%
-?!-o? %COMPILE% %-c% %SOURCEFLAG%%SOURCE%
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%%SOURCE%
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%%SOURCE%
else !%?GENERIC%
## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
-?-o? %COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo
'$(srcdir)/'`%SOURCE%
-?!-o? %COMPILE% %-c% %SOURCEFLAG%`test -f '%SOURCE%' || echo
'$(srcdir)/'`%SOURCE%
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%`test -f
'%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%`test -f '%SOURCE%' || echo
'$(srcdir)/'`%SOURCE%
endif !%?GENERIC%
endif !%FASTDEP%
@@ -99,18 +98,17 @@ if %FASTDEP%
?GENERIC??SUBDIROBJ? %COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c%
-o %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'` &&\
?GENERIC??SUBDIROBJ? $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
else !%FASTDEP%
-?VERBOSE? %VERBOSE% @AM_BACKSLASH@
if %AMDEP%
- source='%SOURCE%' object='%OBJOBJ%' libtool=no @AMDEPBACKSLASH@
+ %VERBOSE%source='%SOURCE%' object='%OBJOBJ%' libtool=no @AMDEPBACKSLASH@
DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@
endif %AMDEP%
if %?GENERIC%
-?-o? %COMPILE% %-c% %-o% %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'`
-?!-o? %COMPILE% %-c% `$(CYGPATH_W) %SOURCEFLAG%'%SOURCE%'`
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W)
'%SOURCE%'`
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% `$(CYGPATH_W) %SOURCEFLAG%'%SOURCE%'`
else !%?GENERIC%
## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
-?-o? %COMPILE% %-c% %-o% %OBJOBJ% %SOURCEFLAG%`if test -f '%SOURCE%'; then
$(CYGPATH_W) '%SOURCE%'; else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
-?!-o? %COMPILE% %-c% %SOURCEFLAG%`if test -f '%SOURCE%'; then $(CYGPATH_W)
'%SOURCE%'; else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJOBJ% %SOURCEFLAG%`if test -f
'%SOURCE%'; then $(CYGPATH_W) '%SOURCE%'; else $(CYGPATH_W)
'$(srcdir)/%SOURCE%'; fi`
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%`if test -f '%SOURCE%'; then
$(CYGPATH_W) '%SOURCE%'; else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
endif !%?GENERIC%
endif !%FASTDEP%
endif %?NONLIBTOOL%
@@ -129,14 +127,13 @@ if %FASTDEP%
?GENERIC??SUBDIROBJ? %LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c%
-o %LTOBJ% %SOURCEFLAG%%SOURCE% &&\
?GENERIC??SUBDIROBJ? $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
else !%FASTDEP%
-?VERBOSE? %VERBOSE% @AM_BACKSLASH@
if %AMDEP%
- source='%SOURCE%' object='%LTOBJ%' libtool=yes @AMDEPBACKSLASH@
+ %VERBOSE%source='%SOURCE%' object='%LTOBJ%' libtool=yes @AMDEPBACKSLASH@
DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@
endif %AMDEP%
## We can always use `-o' with Libtool.
-?GENERIC? %LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%%SOURCE%
+?GENERIC? %VERBOSE-NODEP%%LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%%SOURCE%
## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
-?!GENERIC? %LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%`test -f '%SOURCE%' ||
echo '$(srcdir)/'`%SOURCE%
+?!GENERIC? %VERBOSE-NODEP%%LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%`test -f
'%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
endif !%FASTDEP%
endif %?LIBTOOL%
diff --git a/m4/depend.m4 b/m4/depend.m4
index efe8643..8304180 100644
--- a/m4/depend.m4
+++ b/m4/depend.m4
@@ -1,12 +1,12 @@
## -*- Autoconf -*-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 10
+# serial 11
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
@@ -175,8 +175,11 @@ AC_DEFUN([AM_DEP_TRACK],
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
+ am__nodep='_no'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index c160028..3b4c850 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -605,6 +605,7 @@ silent4.test \
silent5.test \
silent6.test \
silent7.test \
+silent9.test \
sinclude.test \
srcsub.test \
srcsub2.test \
diff --git a/tests/silent4.test b/tests/silent4.test
index 37e690c..3fd9f65 100755
--- a/tests/silent4.test
+++ b/tests/silent4.test
@@ -1,5 +1,5 @@
#!/bin/sh
-# Copyright (C) 2009 Free Software Foundation, Inc.
+# Copyright (C) 2009, 2010 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
@@ -17,7 +17,7 @@
# Check silent-rules mode, with libtool, non-fastdep case
# (so that, with GCC, we also cover the other code paths in depend2).
-# Please keep this file in sync with silent3.test.
+# Please keep this file in sync with silent3.test and silent9.test.
required="libtoolize gcc"
. ./defs
diff --git a/tests/silent5.test b/tests/silent5.test
index 8d517be..1f06cf0 100755
--- a/tests/silent5.test
+++ b/tests/silent5.test
@@ -1,5 +1,5 @@
#!/bin/sh
-# Copyright (C) 2009 Free Software Foundation, Inc.
+# Copyright (C) 2009, 2010 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
@@ -37,9 +37,13 @@ EOF
cat > Makefile.am <<'EOF'
# Need generic and non-generic rules.
-bin_PROGRAMS = foo bar
+bin_PROGRAMS = foo bar fo2
bar_CFLAGS = $(AM_CFLAGS)
foo_SOURCES = foo1.cpp foo2.f90 foo3.f foo5.l foo6.y
+fo2_SOURCES = $(foo_SOURCES)
+fo2_CPPFLAGS = $(AM_CPPFLAGS)
+fo2_FFLAGS = $(AM_FFLAGS)
+fo2_FCFLAGS = $(AM_FCFLAGS)
SUBDIRS = sub
AM_YFLAGS = -d
LDADD = $(LEXLIB)
@@ -49,9 +53,13 @@ EOF
cat > sub/Makefile.am <<'EOF'
AUTOMAKE_OPTIONS = subdir-objects
# Need generic and non-generic rules.
-bin_PROGRAMS = baz bla
+bin_PROGRAMS = baz bla ba2
bla_CFLAGS = $(AM_CFLAGS)
baz_SOURCES = baz1.cpp baz2.f90 baz3.f baz5.l baz6.y
+ba2_SOURCES = $(baz_SOURCES)
+ba2_CPPFLAGS = $(AM_CPPFLAGS)
+ba2_FFLAGS = $(AM_FFLAGS)
+ba2_FCFLAGS = $(AM_FCFLAGS)
AM_YFLAGS = -d
LDADD = $(LEXLIB)
BUILT_SOURCES = baz6.h
@@ -100,8 +108,9 @@ $ACLOCAL
$AUTOMAKE --add-missing
$AUTOCONF
-# configure once for fastdep, once for non-fastdep
-for config_args in '' am_cv_CC_dependencies_compiler_type=gcc
+# configure once for fastdep, once for non-fastdep, once for nodep
+for config_args in '' am_cv_CC_dependencies_compiler_type=gcc \
+ --disable-dependency-tracking
do
./configure $config_args --enable-silent-rules
$MAKE >stdout || { cat stdout; Exit 1; }
diff --git a/tests/silent9.test b/tests/silent9.test
new file mode 100755
index 0000000..6be0f98
--- /dev/null
+++ b/tests/silent9.test
@@ -0,0 +1,97 @@
+#!/bin/sh
+# Copyright (C) 2009, 2010 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/>.
+
+# Check silent-rules mode, with libtool, nodep case.
+
+# Please keep this file in sync with silent3.test and silent4.test.
+
+required="libtoolize"
+. ./defs
+
+set -e
+
+mkdir sub
+
+cat >>configure.in <<'EOF'
+AM_SILENT_RULES
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_LIBTOOL
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+lib_LTLIBRARIES = libfoo.la libbar.la
+libbar_la_CFLAGS = $(AM_CFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+lib_LTLIBRARIES = libbaz.la libbla.la
+libbla_la_CFLAGS = $(AM_CFLAGS)
+EOF
+
+cat > libfoo.c <<'EOF'
+int main ()
+{
+ return 0;
+}
+EOF
+cp libfoo.c libbar.c
+cp libfoo.c sub/libbaz.c
+cp libfoo.c sub/libbla.c
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure --disable-dependency-tracking --enable-silent-rules
+$MAKE >stdout || { cat stdout; Exit 1; }
+cat stdout
+grep ' -c' stdout && Exit 1
+grep ' -o libfoo' stdout && Exit 1
+grep mv stdout && Exit 1
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep ' CC .*baz\.' stdout
+grep ' CC .*bla\.' stdout
+grep ' CCLD .*foo' stdout
+grep ' CCLD .*bar' stdout
+grep ' CCLD .*baz' stdout
+grep ' CCLD .*bla' stdout
+
+$MAKE clean
+$MAKE V=1 >stdout || { cat stdout; Exit 1; }
+cat stdout
+grep ' -c' stdout
+grep ' -o libfoo' stdout
+grep ' CC .*foo\.' stdout && Exit 1
+grep ' CC .*bar\.' stdout && Exit 1
+grep ' CC .*baz\.' stdout && Exit 1
+grep ' CC .*bla\.' stdout && Exit 1
+grep ' CCLD .*foo' stdout && Exit 1
+grep ' CCLD .*bar' stdout && Exit 1
+grep ' CCLD .*baz' stdout && Exit 1
+grep ' CCLD .*bla' stdout && Exit 1
+
+$MAKE distclean
+
+: