Autoconf, Libtool, and an undefined AC_PROG_LIBTOOL

autoconf

I am trying to build a library, and the README instructions are to call configure.ac, then make.

Unfortunately, I am running into an error:

configure.ac:75 :error: possibly undefined macro: AC_PROG_LIBTOOL
    If this token is legitimate please use m4_pattern_allow

Now, I know I have libtool installed (I'm running Scientific Linux 6.2 (un-upgraded), and have used yum –downloadonly to get the rpms of automake, autoconf, libtool, and libtool-devel just in case).

They are installed, and libtool currently lives in /usr/share/libtool. However, autoconf can't seem to find it.

All of the google results were of the 'install libtool' kind, which doesn't help me at all. Any help or guidance would be really appreciated. I'm not sure if the issue is that rpm -i screwed up getting libtool on here, or if i need to link the /usr/share/libtool to somewhere else (so which and everything else can find it).

Best Answer

I wasn't satisfied with all the "just reinstall" answers I've found all over the Internet in various forums, so was bound and determined to resolve this without installing a non-distro libtool. (I'm running on CentOS 7.)

The lightbulb above my head lit up when I read https://www.gnu.org/software/automake/manual/html_node/Macro-Search-Path.html. The search path used to find the macro files is the one defined by --prefix, which by default is usually /usr/local. So autoconf for a package which will be installed to /usr/local searches /usr/local/share/aclocal-APIVERSION and /usr/local/share/aclocal.

On many distros, including CentOS7, the seven macro files for libtools are installed under /usr/share/aclocal rather than under /usr/local/share/aclocal. Consequently, they aren't found when the package you are building sets prefix to /usr/local.

To fix this if you already have a /usr/local/share/aclocal directory, type the following as root:

for file in argz libtool ltdl ltoptions ltsugar ltversion lt~obsolete
do
  ln -s /usr/share/aclocal/$file.m4 /usr/local/share/aclocal/$file.m4
done

To fix this if you don't have a /usr/local/share/aclocal directory, type the following as root:

ln -s /usr/share/aclocal /usr/local/share/aclocal

Voilà -- problem solved.

Related Question