[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
AM_SUBST_NOTMAKE
From: |
Ralf Wildenhues |
Subject: |
AM_SUBST_NOTMAKE |
Date: |
Mon, 3 Nov 2008 06:05:59 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
This came up again recently in gnulib:
<http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/15226>
I would like to apply the first patch to Autoconf, and the second one to
Automake. Any reasons against doing so?
Thanks!
Ralf
Point at AM_SUBST_NOTMAKE.
* doc/autoconf.texi (Setting Output Variables): Add cross
reference to new Automake macro AM_SUBST_NOTMAKE.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 2a7fc4a..20fd9a0 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -8761,7 +8761,12 @@ Setting Output Variables
replaces instances of @samp{@@@var{variable}@@} in input files with the
value that the shell variable @var{variable} has when @code{AC_OUTPUT}
is called. The value can contain any address@hidden character, including
-newline.
+newline. If you are using Automake 1.11 or newer, for newlines in values
+you might want to consider using @code{AM_SUBST_NOTMAKE} to prevent
address@hidden from adding a line @address@hidden =
+@@@var{variable}@@} to the @file{Makefile.in} files (@pxref{Optional, ,
+Automake, automake, Other things Automake recognizes}).
+
Variable occurrences should not overlap: e.g., an input file should
not contain @samp{@@@var{var1}@@@var{var2}@@} if @var{var1} and @var{var2}
are variable names.
New public macro AM_SUBST_NOTMAKE.
* m4/substnot.m4 (AM_SUBST_NOTMAKE): New public macro; invoke
_AM_SUBST_NOTMAKE with arguments.
* doc/automake.texi (Optional): Document it.
* NEWS: Update.
* tests/subst4.test: New test.
* tests/Makefile.am: Update.
Suggestion by Bruno Haible.
Signed-off-by: Ralf Wildenhues <address@hidden>
diff --git a/NEWS b/NEWS
index 80fae1a..cc7c41f 100644
--- a/NEWS
+++ b/NEWS
@@ -125,6 +125,9 @@ New in 1.10a:
- AM_MAINTAINER_MODE now allows for an optional argument specifying
the default setting.
+ - AM_SUBST_NOTMAKE may prevent substitution of AC_SUBSTed variables,
+ useful especially for multi-line values.
+
Bugs fixed in 1.10a:
* Long standing bugs:
diff --git a/doc/automake.texi b/doc/automake.texi
index 2ac7043..0c6146f 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -2897,7 +2897,8 @@ The Autoconf Manual}.
@item AC_SUBST
The first argument is automatically defined as a variable in each
-generated @file{Makefile.in}. @xref{Setting Output Variables, , Setting
+generated @file{Makefile.in}, unless @code{AM_SUBST_NOTMAKE} is also
+used for this variable. @xref{Setting Output Variables, , Setting
Output Variables, autoconf, The Autoconf Manual}.
If the Autoconf manual says that a macro calls @code{AC_SUBST} for
@@ -2942,6 +2943,17 @@ generated @file{Makefile.in}s, unless @var{default-mode}
is
conditional, which you can use in your own @file{Makefile.am}.
@xref{maintainer-mode}.
address@hidden AM_SUBST_NOTMAKE(@var{var})
+Prevent that Automake defines a variable @var{var} even if it is
+substituted by @command{config.status}. Normally, Automake defines a
address@hidden variable for each @command{configure} substitution,
+i.e., for each @code{AC_SUBST(address@hidden)}. This macro prevents that
+definition from Automake. If @code{AC_SUBST} has not been called
+for this variable, then @code{AM_SUBST_NOTMAKE} has no effects.
+Preventing variable definitions may be useful for substitution of
+multi-line values, where @address@hidden = @@@var{value}@@} might yield
+unintended results.
+
@item m4_include
Files included by @file{configure.ac} using this macro will be
detected by Automake and automatically distributed. They will also
diff --git a/m4/substnot.m4 b/m4/substnot.m4
index 5958962..811d286 100644
--- a/m4/substnot.m4
+++ b/m4/substnot.m4
@@ -1,12 +1,19 @@
## -*- Autoconf -*-
-# Copyright (C) 2006 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008 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 2
+
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2e64c25..4b4a780 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -595,6 +595,7 @@ subpkg3.test \
subst.test \
subst2.test \
subst3.test \
+subst4.test \
substref.test \
substre2.test \
substtarg.test \
diff --git a/tests/subst4.test b/tests/subst4.test
new file mode 100755
index 0000000..02e46bd
--- /dev/null
+++ b/tests/subst4.test
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2008 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 3, 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/>.
+
+# Test AM_SUBST_NOTMAKE.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'EOF'
+myrule="\
+foo: bar
+ echo making \$@ from bar
+ echo \$@ > \$@
+"
+AC_SUBST([myrule])
+AM_SUBST_NOTMAKE([myrule])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
address@hidden@
+EOF
+: > bar
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE foo
+test -f foo
+:
- AM_SUBST_NOTMAKE,
Ralf Wildenhues <=