automake-commit
[Top][All Lists]
Advanced

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

[Automake-commit] [SCM] GNU Automake branch, ng/master, updated. v1.11-1


From: Stefano Lattarini
Subject: [Automake-commit] [SCM] GNU Automake branch, ng/master, updated. v1.11-1806-g4b80b05
Date: Fri, 27 Jan 2012 09:19:44 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Automake".

http://git.sv.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=4b80b05c22b13e99499c2e96ca67653779b9c27a

The branch, ng/master has been updated
       via  4b80b05c22b13e99499c2e96ca67653779b9c27a (commit)
      from  7a2fa971542b54bb2ea6761764b36a27856659cd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 4b80b05c22b13e99499c2e96ca67653779b9c27a
Author: Stefano Lattarini <address@hidden>
Date:   Thu Jan 26 15:56:21 2012 +0100

    [ng] docs: we assume GNU make now; update accordingly
    
    * doc/automake.texi: Update and adjust.  Add some FIXME comments for
    more delicate passages that should be re-worked and addressed in the
    future.
    * tests/interp3.test: New test, exposing a known Automake limitation
    that is particularly annoying for GNU make users.
    * tests/Makefile.am  (XFAIL_TESTS): Add it.
    * tests/list-of-tests.mk: Likewise.

-----------------------------------------------------------------------

Summary of changes:
 doc/automake.texi                     |  114 ++++++++++++++------------------
 tests/Makefile.am                     |    1 +
 tests/{libobj10.test => interp3.test} |   42 +++++++-----
 tests/list-of-tests.mk                |    1 +
 4 files changed, 76 insertions(+), 82 deletions(-)
 copy tests/{libobj10.test => interp3.test} (53%)

diff --git a/doc/automake.texi b/doc/automake.texi
index f3a3532..15af185 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -1829,16 +1829,18 @@ distributions from the source control system.
 
 @cindex GNU make extensions
 
-Note that most GNU make extensions are not recognized by Automake.  Using
-such extensions in a @file{Makefile.am} will lead to errors or confusing
-behavior.
+Note that most GNU make extensions are sadly not yet recognized by
+Automake.  Using such extensions in a @file{Makefile.am} will likely
+lead to errors or confusing behavior.  We hope to improve this
+situation over time.
 
 @cindex Append operator
 @cmindex +=
-A special exception is that the GNU make append operator, @samp{+=}, is
-supported.  This operator appends its right hand argument to the variable
-specified on the left.  Automake will translate the operator into
-an ordinary @samp{=} operator; @samp{+=} will thus work with any make program.
+For historical reasons, the GNU make append operator @samp{+=} (which
+appends its right hand argument to the variable specified on the left)
+is supported and handled in a special way: Automake will translate the
+operator into an ordinary @samp{=} operator @emph{at Automake (not make)
+runtime}.  This behaviour might change future versions.
 
 Automake tries to keep comments grouped with any adjoining rules or
 variable definitions.
@@ -1880,9 +1882,10 @@ names might change in future releases.
 @cindex Automake, recursive operation
 @cindex Example of recursive operation
 
-When examining a variable definition, Automake will recursively examine
-variables referenced in the definition.  For example, if Automake is
-looking at the content of @code{foo_SOURCES} in this snippet
+When examining the definition of some ``special'' variables, Automake
+might recursively examine variables referenced in the definition in order
+to perform its magic.  For example, if Automake is looking at the content
+of @code{foo_SOURCES} in this snippet
 
 @c Keep in sync with interp.test.
 @example
@@ -1893,6 +1896,19 @@ foo_SOURCES = c.c $(xs)
 it would use the files @file{a.c}, @file{b.c}, and @file{c.c} as the
 contents of @code{foo_SOURCES}.
 
+Unfortunately, for historical reasons, this interpolation processes
+has the effect of currently making it impossible to use more advanced
+GNU make features in the definitions of special variables like
address@hidden; for example, Automake will generate a broken
address@hidden on this input:
+
address@hidden Keep in sync with interp3.test.
address@hidden
+bin_PROGRAMS = foo
+xs = one two
+foo_SOURCES = main.c $(foreach base, $(xs), $(base).c $(base).h)
address@hidden example
+
 @cindex @code{##} (special Automake comment)
 @cindex Special Automake comment
 @cindex Comment, special to Automake
@@ -2688,8 +2704,10 @@ obsolete features or constructions
 @item override
 user redefinitions of Automake rules or variables
 @item portability
-portability issues (e.g., use of @command{make} features that are
-known to be not portable)
+portability issues; e.g., use of file names like @file{aux} that are
+reserved on some systems (like Windows), or use of Automake features
+that require support from the target C compiler, support that is
+known not be present on all the mainstream C compilers.
 @item extra-portability
 extra portability issues related to obscure tools.  One example of such
 a tool is the Microsoft @command{lib} archiver.
@@ -6794,8 +6812,7 @@ the @code{_LDFLAGS} variable for the program.
 
 Automake provides initial support for Vala
 (@uref{http://www.vala-project.org/}).
-This requires valac version 0.7.0 or later, and currently requires
-the user to use GNU @command{make}.
+This requires valac version 0.7.0 or later.
 
 @example
 foo_SOURCES = foo.vala bar.vala zardoc.c
@@ -9181,14 +9198,7 @@ to avoid this limitation.
 
 Please note that it is currently not possible to use @code{$(srcdir)/}
 or @code{$(top_srcdir)/} in the @code{TESTS} variable.  This technical
-limitation is necessary to avoid generating test logs in the source tree
-and has the unfortunate consequence that it is not possible to specify
-distributed tests that are themselves generated by means of explicit
-rules, in a way that is portable to all @command{make} implementations
-(@pxref{Make Target Lookup,,, autoconf, The Autoconf Manual}, the
-semantics of FreeBSD and OpenBSD @command{make} conflict with this).
-In case of doubt you may want to require to use GNU @command{make},
-or work around the issue with inference rules to generate the tests.
+limitation is necessary to avoid generating test logs in the source tree.
 
 @node Custom Test Drivers
 @section Custom Test Drivers
@@ -10705,7 +10715,7 @@ debugging and error assessment very difficult.
 
 @item @command{make --no-print-directory}
 
-This is GNU @command{make} specific.  When called with the
+When called with the
 @option{--no-print-directory} option, GNU @command{make} will disable
 printing of the working directory by invoked address@hidden (the
 well-known address@hidden/Leaving directory ...}'' messages).  This helps
@@ -11359,7 +11369,7 @@ keep the third-party sources untouched to ease upgrades 
to new
 versions.
 
 @cindex @file{GNUmakefile} including @file{Makefile}
-Here are two other ideas.  If GNU make is assumed, one possibility is
+Here are two other ideas.  One possibility is
 to add to that subdirectory a @file{GNUmakefile} that defines the
 required targets and includes the third-party @file{Makefile}.  For
 this to work in VPATH builds, @file{GNUmakefile} must lie in the build
@@ -11855,49 +11865,24 @@ even though a file is missing. By listing files, 
@samp{make dist}
 @emph{will} complain.
 
 @item
-Wildcards are not portable to some non-GNU @command{make} implementations,
-e.g., NetBSD @command{make} will not expand globs such as @samp{*} in
-prerequisites of a target.
-
address@hidden
 Finally, it's really hard to @emph{forget} to add a file to
 @file{Makefile.am}: files that are not listed in @file{Makefile.am} are
 not compiled or installed, so you can't even test them.
 @end itemize
 
 Still, these are philosophical objections, and as such you may disagree,
-or find enough value in wildcards to dismiss all of them.  Before you
-start writing a patch against Automake to teach it about wildcards,
-let's see the main technical issue: portability.
-
-Although @samp{$(wildcard ...)} works with GNU @command{make}, it is
-not portable to other @command{make} implementations.
-
-The only way Automake could support @command{$(wildcard ...)} is by
-expending @command{$(wildcard ...)} when @command{automake} is run.
-The resulting @file{Makefile.in}s would be portable since they would
-list all files and not use @samp{$(wildcard ...)}.  However that
-means developers would need to remember to run @command{automake} each
-time they add, delete, or rename files.
-
-Compared to editing @file{Makefile.am}, this is a very small gain.  Sure,
-it's easier and faster to type @samp{automake; make} than to type
address@hidden Makefile.am; make}.  But nobody bothered enough to write a
-patch to add support for this syntax.  Some people use scripts to
-generate file lists in @file{Makefile.am} or in separate
address@hidden fragments.
-
-Even if you don't care about portability, and are tempted to use
address@hidden(wildcard ...)} anyway because you target only GNU Make, you
-should know there are many places where Automake needs to know exactly
-which files should be processed.  As Automake doesn't know how to
-expand @samp{$(wildcard ...)}, you cannot use it in these places.
+or find enough value in wildcards to dismiss all of them.  Still, before
+you start ignoring our advice and using @samp{$(wildcard ...)} all over
+the place, you should know there are many places where Automake needs to
+know exactly which files should be processed @footnote{This limitation
+is mostly due to historical reasons; unfortunately, the current
+implementation has been heavily influenced by that assumption, and
+is difficult to change now.  We hope this situation will improve in
+the future (no promises though).}.  As Automake doesn't know how to
+expand @samp{$(wildcard ...)}, you @emph{cannot} use it in these places;
 @samp{$(wildcard ...)} is a black box comparable to @code{AC_SUBST}ed
 variables as far Automake is concerned.
 
-You can get warnings about @samp{$(wildcard ...}) constructs using the
address@hidden flag.
-
 @node Limitations on File Names
 @section Limitations on File Names
 @cindex file names, limitations on
@@ -12596,8 +12581,7 @@ to the timestamp ordering of @file{data.h}, 
@file{data.w},
 @file{data.x}, and @file{data.c}.  Another one is a race condition
 if a parallel @command{make} attempts to run multiple instances of the
 recover block at once.  Finally, the recursive rule breaks @samp{make -n}
-when run with GNU @command{make} (as well as some other @command{make}
-implementations), as it may remove @file{data.h} even when it should not
+as it may remove @file{data.h} even when it should not
 (@pxref{MAKE Variable, , How the @code{MAKE} Variable Works, make,
 The GNU Make Manual}).
 
@@ -12774,6 +12758,8 @@ $(ELCFILES): elc-stamp
         fi
 @end example
 
address@hidden Automake-NG does assume GNU make, so we might want to
+re-work this section to take advantage of pattern rules support.}
 For completeness it should be noted that GNU @command{make} is able to
 express rules with multiple output files using pattern rules
 (@pxref{Pattern Examples, , Pattern Rule Examples, make, The GNU Make
@@ -12933,10 +12919,10 @@ If less verbose output has been enabled in the 
package with the
 @code{make V=1} to see the commands being executed.
 @item
 @code{make -n} can help show what would be done without actually doing
-it.  Note however, that this will @emph{still execute} commands prefixed
-with @samp{+}, and, when using GNU @command{make}, commands that contain
-the strings @samp{$(MAKE)} or @address@hidden@}} (@pxref{Instead of
-Execution,,, make, The GNU Make Manual}).
+it.  Note however, that this will @emph{still execute} recipes prefixed
+with @samp{+} and recipes that contain the strings @samp{$(MAKE)} or
address@hidden@address@hidden (@pxref{Instead of Execution,,, make, The GNU Make
+Manual}).
 Typically, this is helpful to show what recursive rules would do, but it
 means that, in your own rules, you should not mix such recursion with
 actions that change any address@hidden's @samp{dist} and
diff --git a/tests/Makefile.am b/tests/Makefile.am
index dc16ad5..9381f26 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -38,6 +38,7 @@ XFAIL_TESTS = \
 all.test \
 cond17.test \
 gcj6.test \
+interp3.test \
 override-conditional-2.test \
 java-nobase.test \
 objext-pr10128.test \
diff --git a/tests/libobj10.test b/tests/interp3.test
similarity index 53%
copy from tests/libobj10.test
copy to tests/interp3.test
index 306d370..ba74339 100755
--- a/tests/libobj10.test
+++ b/tests/interp3.test
@@ -1,6 +1,5 @@
 #! /bin/sh
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2010, 2011 Free Software
-# Foundation, Inc.
+# 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
@@ -15,40 +14,47 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Do not complain about the nonexistence of a source for LIBOBJS if
-# it's in BUILT_SOURCES.  Reported by Erez Zadok.
+# Variable interpolation should work even when GNU make functions are
+# involved.  This is unfortunately not the case currently, due to
+# historical and hard-to-lift limitations (this is also documented in
+# the manual, using an example that is a stripped-down version of this
+# test case).
 
 required=cc
 . ./defs || Exit 1
 
 cat >> configure.in << 'END'
 AC_PROG_CC
-AM_PROG_AR
-AC_PROG_RANLIB
-AC_LIBOBJ([foo])
 AC_OUTPUT
 END
 
 cat > Makefile.am << 'END'
-noinst_LIBRARIES = libfoo.a
-libfoo_a_SOURCES =
-libfoo_a_LIBADD = $(LIBOBJS)
-BUILT_SOURCES = foo.c
-CLEANFILES = foo.c
-foo.c:
-       echo 'extern int dummy;' > $@
+bin_PROGRAMS = foo
+xs = one two
+foo_SOURCES = main.c $(foreach base, $(xs), $(base).c $(base).h)
 END
 
-: > ar-lib
-
 $ACLOCAL
-$AUTOCONF
 $AUTOMAKE
+$AUTOCONF
 
 ./configure
 
+echo 'int one (void) { return 1; }' > one.c
+echo 'extern int one (void);' > one.h
+echo 'int two (void) { return 2; }' > two.c
+echo 'extern int two (void);' > two.h
+
+cat > main.c <<'END'
+#include "one.h"
+#include "two.h"
+int maint (void)
+{
+  return one () + two ();
+}
+END
+
 $MAKE
-ar t libfoo.a # For debugging.
 $MAKE distcheck
 
 :
diff --git a/tests/list-of-tests.mk b/tests/list-of-tests.mk
index 8f66c26..ea04a10 100644
--- a/tests/list-of-tests.mk
+++ b/tests/list-of-tests.mk
@@ -491,6 +491,7 @@ instmany-python.test \
 install-info-dir.test \
 interp.test \
 interp2.test \
+interp3.test \
 java.test \
 java2.test \
 java3.test \


hooks/post-receive
-- 
GNU Automake



reply via email to

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