autoconf
[Top][All Lists]
Advanced

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

automatic update Makefile.am -> Makefile.in -> Makefile no longer workin


From: Bruno Haible
Subject: automatic update Makefile.am -> Makefile.in -> Makefile no longer working
Date: Thu, 21 Jun 2007 01:14:11 +0200
User-agent: KMail/1.5.4

Hi,

This error message

    aclocal.m4:14: error: this file was generated for autoconf 2.61.
    You have another version of autoconf.

is causing a major regression in the functioning of automake and the GNU
build system. Namely, a change in Makefile.am does not cause a corresponding
change to Makefile.in to happen during "make", in many circumstances.

Before automake-1.10, for ten years, you could make modifications to
Makefile.am, then type "make", and Makefile.in was updated, provided that
you had installed reasonably up-to-date versions of automake, autoconf, m4
and perl.

This is no longer the case.

It does not work any more if the version of autoconf that you have installed
is not *precisely* the same version as was used to generate the configure and
Makefile.in. And since there are 3 current releases of autoconf (2.59, 2.60,
2.61), you have a 2/3 chance of failing this criterion.

To reproduce: my system has

  $ automake --version
  automake (GNU automake) 1.10
  $ autoconf --version
  autoconf (GNU Autoconf) 2.61b

Download http://josefsson.org/libidn/releases/libidn-0.6.14.tar.gz,
unpack it, and do "./configure" and "make".

I'm not the author of this package, but I need to try a modification to
its Makefile.am. So I change it like this:

--- lib/Makefile.am.bak 2007-05-31 12:31:00.000000000 +0200
+++ lib/Makefile.am     2007-06-21 00:40:53.000000000 +0200
@@ -37,7 +37,7 @@
 
 idn-int.h:
        if test -n "$(STDINT_H)"; then \
-               cp gl/stdint.h idn-int.h; \
+               sed -e s/include_next/include/ gl/stdint.h > idn-int.h; \
        else \
                echo '#include <stdint.h>' > idn-int.h; \
        fi

Then:

  $ rm lib/idn-int.h
  $ make

What I expected, is that the new command for creating lib/idn-int.h gets
executed. Instead, the old command gets executed:

$ make
make  all-recursive
make[1]: Entering directory `/build/libidn-0.6.14'
Making all in gl
make[2]: Entering directory `/build/libidn-0.6.14/gl'
 cd .. && /bin/sh ./config.status gl/Makefile depfiles
config.status: creating gl/Makefile
config.status: executing depfiles commands
make[2]: Leaving directory `/build/libidn-0.6.14/gl'
make[2]: Entering directory `/build/libidn-0.6.14/gl'
make  all-am
make[3]: Entering directory `/build/libidn-0.6.14/gl'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/build/libidn-0.6.14/gl'
make[2]: Leaving directory `/build/libidn-0.6.14/gl'
Making all in lib/gl
make[2]: Entering directory `/build/libidn-0.6.14/lib/gl'
 cd ../.. && /bin/sh ./config.status lib/gl/Makefile depfiles
config.status: creating lib/gl/Makefile
config.status: executing depfiles commands
make[2]: Leaving directory `/build/libidn-0.6.14/lib/gl'
make[2]: Entering directory `/build/libidn-0.6.14/lib/gl'
make  all-am
make[3]: Entering directory `/build/libidn-0.6.14/lib/gl'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/build/libidn-0.6.14/lib/gl'
make[2]: Leaving directory `/build/libidn-0.6.14/lib/gl'
Making all in lib
make[2]: Entering directory `/build/libidn-0.6.14/lib'
 cd .. && /bin/sh /build/libidn-0.6.14/build-aux/missing --run automake-1.10 
--gnits  lib/Makefile
aclocal.m4:14: error: this file was generated for autoconf 2.61.
You have another version of autoconf.  If you want to use that,
you should regenerate the build system entirely.
aclocal.m4:14: the top level
autom4te: /packages/gnu/bin/m4 failed with exit status: 63
automake-1.10: autoconf failed with exit status: 63
WARNING: `automake-1.10' is probably too old.  You should only need it if
         you modified `Makefile.am', `acinclude.m4' or `configure.ac'.
         You might want to install the `Automake' and `Perl' packages.
         Grab them from any GNU archive site.
 cd .. && /bin/sh ./config.status lib/Makefile depfiles
config.status: creating lib/Makefile
config.status: executing depfiles commands
make[2]: Leaving directory `/build/libidn-0.6.14/lib'
make[2]: Entering directory `/build/libidn-0.6.14/lib'
if test -n "stdint.h"; then \
                cp gl/stdint.h idn-int.h; \
        else \
                echo '#include <stdint.h>' > idn-int.h; \
        fi
make  all-am
make[3]: Entering directory `/build/libidn-0.6.14/lib'
/bin/sh ../libtool --tag=CC   --mode=compile gcc 
-DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I..  -I./gl -Igl   
-g -O2 -MT nfkc.lo -MD -MP -MF .deps/nfkc.Tpo -c -o nfkc.lo nfkc.c
...

Are we now supposed to edit Makefile.in by hand each time we modify
Makefile.am?

Or are we supposed to have each autoconf release installed in a separate
directory, and before digging into a package, first look into the header of
the aclocal.m4 of that package for the version of autoconf being used, and
then set our PATH so as to have an autoconf from precisely that version
available in PATH?

Or is there an "obvious" workaround that I'm not seeing?

Bruno





reply via email to

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