Discussion:
How to configure Autoconf in /usr/local to use M4 in /usr/local?
Jeffrey Walton
2018-01-04 08:02:43 UTC
Permalink
I have a really dumb question.... I'm trying to track down the cause
of missing M4 macros like AC_MSG_ERROR after updating M4, Autoconf,
Automake and Libtool. All of them were installed in /usr/local. They
were installed in the exact order M4, Autoconf, Automake and Libtool.
/usr/local is on-path, so all the tools know where everything is.

According to this Stack Overflow answer, it could be due to a
non-updated pkg-config: https://stackoverflow.com/a/9024469/608639.
But according to this comment, installing pkg-config just hides the
problem: https://stackoverflow.com/questions/8811381/possibly-undefined-macro-ac-msg-error#comment63407099_9024469
.

I don't really understand how new M4 macros from a new installation
can go missing. Everything is located in the well known directory, and
the directory is on-path. I want to get into a state where things
"just work" without parts going missing.

I want to reinstall M4, Autoconf, Automake and Libtool. But this time
I want to be very explicit since the tools can't seem to find things
on their own. Autoconf's 'configure --help' does not discuss how to
tell it where M4 macros are (or it is an option I am not connecting to
"here are the M4 macros").

My question is, how do I tell Autoconf where the missing macros are?

Thanks in advance.

****************************************

Here is what I see when looking for the M4 macros. It appears I need
to get these wired into Autoconf.

$ find /usr/local -name '*.m4'
/usr/local/share/libtool/aclocal.m4
/usr/local/share/aclocal/ltoptions.m4
/usr/local/share/aclocal/inttypes-pri.m4
/usr/local/share/aclocal/size_max.m4
/usr/local/share/aclocal/intdiv0.m4
/usr/local/share/aclocal/xsize.m4
/usr/local/share/aclocal/wchar_t.m4
/usr/local/share/aclocal/progtest.m4
/usr/local/share/aclocal/po.m4
/usr/local/share/aclocal/stdint_h.m4
/usr/local/share/aclocal/extern-inline.m4
/usr/local/share/aclocal/iconv.m4
/usr/local/share/aclocal/fcntl-o.m4
/usr/local/share/aclocal/printf-posix.m4
/usr/local/share/aclocal/lcmessage.m4
/usr/local/share/aclocal/intl.m4
/usr/local/share/aclocal/guile.m4
/usr/local/share/aclocal/uintmax_t.m4
/usr/local/share/aclocal/ltdl.m4
/usr/local/share/aclocal/codeset.m4
/usr/local/share/aclocal/intlmacosx.m4
/usr/local/share/aclocal/nls.m4
/usr/local/share/aclocal/ltsugar.m4
/usr/local/share/aclocal/intldir.m4
/usr/local/share/aclocal/ltargz.m4
/usr/local/share/aclocal/lib-link.m4
/usr/local/share/aclocal/gettext.m4
/usr/local/share/aclocal/inttypes_h.m4
/usr/local/share/aclocal/libcurl.m4
/usr/local/share/aclocal/glibc21.m4
/usr/local/share/aclocal/lt~obsolete.m4
/usr/local/share/aclocal/intmax.m4
/usr/local/share/aclocal/lib-prefix.m4
/usr/local/share/aclocal/longlong.m4
/usr/local/share/aclocal/visibility.m4
/usr/local/share/aclocal/libtool.m4
/usr/local/share/aclocal/wint_t.m4
/usr/local/share/aclocal/glibc2.m4
/usr/local/share/aclocal/lock.m4
/usr/local/share/aclocal/ltversion.m4
/usr/local/share/aclocal/threadlib.m4
/usr/local/share/aclocal/lib-ld.m4
/usr/local/share/aclocal-1.15/depend.m4
/usr/local/share/aclocal-1.15/make.m4
/usr/local/share/aclocal-1.15/prog-cc-c-o.m4
/usr/local/share/aclocal-1.15/init.m4
/usr/local/share/aclocal-1.15/cond-if.m4
/usr/local/share/aclocal-1.15/dmalloc.m4
/usr/local/share/aclocal-1.15/substnot.m4
/usr/local/share/aclocal-1.15/depout.m4
/usr/local/share/aclocal-1.15/maintainer.m4
/usr/local/share/aclocal-1.15/strip.m4
/usr/local/share/aclocal-1.15/missing.m4
/usr/local/share/aclocal-1.15/amversion.m4
/usr/local/share/aclocal-1.15/auxdir.m4
/usr/local/share/aclocal-1.15/options.m4
/usr/local/share/aclocal-1.15/runlog.m4
/usr/local/share/aclocal-1.15/vala.m4
/usr/local/share/aclocal-1.15/sanity.m4
/usr/local/share/aclocal-1.15/gcj.m4
/usr/local/share/aclocal-1.15/obsolete.m4
/usr/local/share/aclocal-1.15/internal/ac-config-macro-dirs.m4
/usr/local/share/aclocal-1.15/python.m4
/usr/local/share/aclocal-1.15/install-sh.m4
/usr/local/share/aclocal-1.15/lead-dot.m4
/usr/local/share/aclocal-1.15/as.m4
/usr/local/share/aclocal-1.15/upc.m4
/usr/local/share/aclocal-1.15/lispdir.m4
/usr/local/share/aclocal-1.15/lex.m4
/usr/local/share/aclocal-1.15/silent.m4
/usr/local/share/aclocal-1.15/cond.m4
/usr/local/share/aclocal-1.15/tar.m4
/usr/local/share/aclocal-1.15/mkdirp.m4
/usr/local/share/aclocal-1.15/ar-lib.m4
/usr/local/share/aclocal-1.15/extra-recurs.m4
/usr/local/share/autoconf/autoconf/types.m4
/usr/local/share/autoconf/autoconf/c.m4
/usr/local/share/autoconf/autoconf/autoconf.m4
/usr/local/share/autoconf/autoconf/libs.m4
/usr/local/share/autoconf/autoconf/programs.m4
/usr/local/share/autoconf/autoconf/oldnames.m4
/usr/local/share/autoconf/autoconf/autoheader.m4
/usr/local/share/autoconf/autoconf/erlang.m4
/usr/local/share/autoconf/autoconf/functions.m4
/usr/local/share/autoconf/autoconf/lang.m4
/usr/local/share/autoconf/autoconf/status.m4
/usr/local/share/autoconf/autoconf/autotest.m4
/usr/local/share/autoconf/autoconf/fortran.m4
/usr/local/share/autoconf/autoconf/go.m4
/usr/local/share/autoconf/autoconf/headers.m4
/usr/local/share/autoconf/autoconf/autoupdate.m4
/usr/local/share/autoconf/autoconf/autoscan.m4
/usr/local/share/autoconf/autoconf/specific.m4
/usr/local/share/autoconf/autoconf/general.m4
/usr/local/share/autoconf/autotest/autotest.m4
/usr/local/share/autoconf/autotest/specific.m4
/usr/local/share/autoconf/autotest/general.m4
/usr/local/share/autoconf/m4sugar/m4sh.m4
/usr/local/share/autoconf/m4sugar/foreach.m4
/usr/local/share/autoconf/m4sugar/version.m4
/usr/local/share/autoconf/m4sugar/m4sugar.m4

****************************************

Here is Autoconf's configure options.

skylake:autoconf-2.69$ ./configure --help
`configure' configures GNU Autoconf 2.69 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']

Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/autoconf]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]

Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names

System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]

Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-lispdir override the default lisp directory

Some influential environment variables:
M4 Location of GNU M4 1.4.6 or later. Defaults to the first program
of `m4', `gm4', or `gnum4' on PATH that meets Autoconf needs.
EMACS the Emacs editor command
EMACSLOADPATH
the Emacs library search path

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Earnie
2018-01-07 15:28:48 UTC
Permalink
Post by Jeffrey Walton
My question is, how do I tell Autoconf where the missing macros are?
Just like GCC, use one or more -I options.
--
Earnie
Jeffrey Walton
2018-01-07 15:38:12 UTC
Permalink
Post by Earnie
Post by Jeffrey Walton
My question is, how do I tell Autoconf where the missing macros are?
Just like GCC, use one or more -I options.
Thanks. This is a site-wide setting. How do I configure it that way?

Jeff
Earnie
2018-01-07 15:53:57 UTC
Permalink
Post by Jeffrey Walton
Post by Earnie
Post by Jeffrey Walton
My question is, how do I tell Autoconf where the missing macros are?
Just like GCC, use one or more -I options.
Thanks. This is a site-wide setting. How do I configure it that way?
See AC_CONFIG_MACRO_DIR[1] but if you plan to distribute the package
then using /usr/local or any other directory that isn't in the source
package is a bad idea. So instead copy the /usr/local/m4 directory to
the source.

[1] https://www.gnu.org/software/autoconf/manual/autoconf.html#Input
--
Earnie
Loading...