autoconf-patches
[Top][All Lists]
Advanced

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

06-libobjs-forbidden.patch


From: Akim Demaille
Subject: 06-libobjs-forbidden.patch
Date: Mon, 04 Mar 2002 15:23:59 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * doc/autoconf.texi (AC_LIBOBJ vs. LIBOBJS): New.
        * lib/autoconf/general.m4 (AC_INIT): More informative error
        message for LIBOBJ.

Index: NEWS
--- NEWS Sat, 02 Mar 2002 20:14:27 +0100 akim
+++ NEWS Sun, 03 Mar 2002 14:10:48 +0100 akim
@@ -22,6 +22,9 @@
   types.
   Emphasizes that `cross-compilation' == `--host is given'.
   If you are working on compilers etc., be sure to read this section.
+- Section `AC_LIBOBJ vs. LIBOBJS'
+  Explains why assigning LIBOBJS directly is now an error.
+  Details how to update the code.

 ** configure

Index: doc/autoconf.texi
--- doc/autoconf.texi Sat, 02 Mar 2002 22:02:54 +0100 akim
+++ doc/autoconf.texi Sun, 03 Mar 2002 14:13:04 +0100 akim
@@ -413,6 +413,7 @@ @node Top
 * Changed Quotation::           Broken code which used to work
 * New Macros::                  Interaction with foreign macros
 * Hosts and Cross-Compilation::  Bugward compatibility kludges
+* AC_LIBOBJ vs. LIBOBJS::

 Generating Test Suites with Autotest

@@ -11786,6 +11787,7 @@ @node Autoconf 2.13
 * Changed Quotation::           Broken code which used to work
 * New Macros::                  Interaction with foreign macros
 * Hosts and Cross-Compilation::  Bugward compatibility kludges
+* AC_LIBOBJ vs. LIBOBJS::       LIBOBJS is a forbidden token
 @end menu

 @node Changed Quotation
@@ -12027,6 +12029,91 @@ Hint: if you mean to override the result
 ./configure CC=m68k-coff-gcc
 @end example

+
address@hidden AC_LIBOBJ vs. LIBOBJS
address@hidden @code{AC_LIBOBJ} vs. @code{LIBOBJS}
+
+Up to Autoconf 2.13, the replacement of functions was triggered via the
+variable @code{LIBOBJS}.  Since Autoconf 2.50, the macro
address@hidden should be used instead (@pxref{Generic Functions}).
+Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
+
+This change is mandated by the unification of the GNU Build System
+components.  In particular, the various fragile techniques used to parse
+a @file{configure.ac} are all replaced with the use of traces.  As a
+consequence, any action must be traceable, which obsoletes critical
+variable assignments.  Fortunately, @code{LIBOBJS} was the only problem.
+
+At the time this documentation is written, Automake does not rely on
+traces yet, but this is planed for a near future.  Nevertheless, to
+ease the transition, and to guarantee this future Automake release will
+be able to use Autoconf 2.53, using @code{LIBOBJS} directly will make
address@hidden fail.  But note that the output, @command{configure},
+is correct and fully functional: you have some delay to adjust your
+source.
+
+There are two typical uses of @code{LIBOBJS}: asking for a replacement
+function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
+
address@hidden 1
+
+As for function replacement, the fix is immediate: use
address@hidden  For instance:
+
address@hidden
+LIBOBJS="$LIBOBJS fnmatch.o"
+LIBOBJS="$LIBOBJS malloc.$ac_objext"
address@hidden example
+
address@hidden
+should be replaced with:
+
address@hidden
+AC_LIBOBJ([fnmatch])
+AC_LIBOBJ([malloc])
address@hidden example
+
address@hidden 1
+
+When asked for automatic de-ANSI-fication, Automake needs
address@hidden'ed filenames to have @samp{$U} appended to the
+base names.   Libtool requires the definition of @code{LTLIBOBJS}, which
+suffixes are mapped to @samp{.lo}.  Although Autoconf provides them with
+means to free the user to do that by herself, by the time of this
+writing, none do.  Therefore, it is common to see @file{configure.ac}
+end with:
+
address@hidden
+# This is necessary so that .o files in LIBOBJS are also built via
+# the ANSI2KNR-filtering rules.
+LIBOBJS=`echo "$LIBOBJS" | sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
+LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/\.lo/g'`
+AC_SUBST(LTLIBOBJS)
address@hidden example
+
address@hidden
+First, note that this code is @emph{wrong}, because @samp{.o} is not the
+only possible address@hidden
address@hidden
+Yet another reason why assigning @code{LIBOBJS} directly is discouraged.
address@hidden
+}!  Because the token @code{LIBOBJS} is now
+forbidden, you will have to replace this snippet with:
+
address@hidden
+# This is necessary so that .o files in LIBOBJS are also built via
+# the ANSI2KNR-filtering rules.
+LIB@@&t@@OBJS=`echo "$LIB@@&t@@OBJS" |
+             sed 's,\.[[^.]]* ,$U&,g;s,\.[[^.]]*$,$U&,'`
+LTLIBOBJS=`echo "$LIB@@&t@@OBJS" |
+           sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
+AC_SUBST(LTLIBOBJS)
address@hidden example
+
address@hidden
+Unfortunately, @command{autoupdate} cannot help here, since... this is
+not a macro!  Of course, first make sure your release of Automake and/or
+Libtool still requires these.

 @c ============================= Generating Test Suites with Autotest

Index: lib/autoconf/general.m4
--- lib/autoconf/general.m4 Sat, 02 Mar 2002 20:11:13 +0100 akim
+++ lib/autoconf/general.m4 Sun, 03 Mar 2002 14:13:46 +0100 akim
@@ -1251,7 +1251,7 @@ m4_define([AC_INIT],
 m4_pattern_forbid([^_?A[CHUM]_])
 m4_pattern_forbid([_AC_])
 m4_pattern_forbid([^LIBOBJS$],
-                  [do not use LIBOBJS directly, use AC_LIBOBJ])
+                  [do not use LIBOBJS directly, use AC_LIBOBJ (see section 
`AC_LIBOBJ vs. LIBOBJS'])
 # Actually reserved by M4sh.
 m4_pattern_allow([^AS_FLAGS$])
 AS_INIT



reply via email to

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