configure.ac

  • Written in m4sh (m4 + shell)
  • Program initialization: AC_INIT macro—needs name, version, maintainer
  • Initialize automake: AM_INIT_AUTOMAKE
  • Make sure that C-compiler exists: AC_PROG_CC
  • Build Makefile from Makefile.in, replaces @PACKAGE_VERSION@-type variables: AC_CONFIG_FILES([Makefile])
  • Output the script: AC_OUTPUT
AC_INIT([hello-world], [0.1], [tyler@tylercipriani.com])

# Initialize automake
AM_INIT_AUTOMAKE

# Ensure C-compiler exists
AC_PROG_CC

# Specify what files are to be created
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Makefile.am

  • The ./configure script (created by configure.ac), expects to find Makefile.in
  • Makefile.in is long and dumb (just like ./configure), so we make a Makefile.am
  • automake generates Makefile.in
  • foreign AUTOMAKEOPTIONS tells that the layout is "non standard"
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = hello-world
hello-world_SOURCES = hello-world.c

Put it all together:

  • create m4 environment: aclocal
  • autoconf does: configure.acconfigure
  • automake --add-missing does: Makefile.amMakefile.in
  • autoreconf --install: autoreconf runs autoconf, autoheader, aclocal, automake, libtoolize, and autopoint