[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 06-libobjs-forbidden.patch,
Akim Demaille <=