Autotools
From HCL
http://en.wikipedia.org/wiki/Autoconf
http://sourceware.org/autobook/autobook/autobook_toc.html
Contents
Manuals
- http://www.gnu.org/software/autoconf/manual/index.html
- http://www.gnu.org/software/automake/manual/index.html
- http://www.gnu.org/software/libtool/manual/index.html
Tutorials
- http://www.lrde.epita.fr/~adl/autotools.html (very nice set of slides)
Libraries
- includes (for the include directory):
include_HEADERS = ...
- library: static
lib_LIBRARIES = library.a
or dynamiclib_LTLIBRARIES = library.la
- sources (internal C data structures and C++ template classes):
library_X_SOURCES = library.h ...
, whereX
=a
orla
For example, http://hcl.ucd.ie/repos/CPM/trunk/MPIBlib/benchmarks/Makefile.am
Configured headers
Configured headers (created from *.h.in) must not be included into the package, that is include_HEADERS
or *_SOURCES
-
nodist_include_HEADERS = *.h
for the configured headers as includes -
nodist_*_SOURCES = *.h
orBUILT_SOURCES = *.h
for the configured headers as sources
For example, http://hcl.ucd.ie/repos/CPM/trunk/MPIBlib/collectives/Makefile.am
Extra files
To add extra files into package, use EXTRA_DIST = *
.
For example, http://hcl.ucd.ie/repos/CPM/trunk/MPIBlib/tools/Makefile.am
Conditional building
- http://www.gnu.org/software/hello/manual/automake/Conditionals.html
- In the source code, use macros
#ifdef SYMBOL
...
#endif
MPI support
- Define MPI compilers/linkers in configure.ac
AC_PROG_CC([mpicc])
AC_PROG_CXX([mpic++ mpicxx])
C/C++ support
- To check C++ features, switch to C++ language in configure.ac
AC_LANG_PUSH(C++)
AC_CHECK_HEADER([header.hpp])
AC_LANG_POP(C++)
- To link C code with C++ libraries, add a non-existent C++ file dummy.cpp to sources in Makefile.am
bin_PROGRAMS = program
program_SOURCES = program.c
nodist_EXTRA_program_SOURCES = dummy.cpp
program_LDADD = cpplibrary.a
Script for downloading & installing recent versions (in March 2010) of m4, libtool, autoconf, automake
#!/bin/bash parent_dir=$PWD export PATH=$HOME/$ARCH/bin:$PATH wget http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.gz tar xzf libtool-2.2.6b.tar.gz cd libtool-2.2.6b ./configure --prefix=$HOME/$ARCH make install cd $parent_dir wget http://ftp.gnu.org/gnu/m4/m4-1.4.14.tar.gz tar xfz m4-1.4.14.tar.gz cd m4-1.4.14 ./configure --prefix=$HOME/$ARCH make install cd $parent_dir wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.bz2 tar xjf autoconf-2.65.tar.bz2 cd autoconf-2.65 ./configure --prefix=$HOME/$ARCH make install cd $parent_dir wget http://ftp.gnu.org/gnu/automake/automake-1.10.3.tar.bz2 tar xjf automake-1.10.3.tar.bz2 cd automake-1.10.3 ./configure --prefix=$HOME/$ARCH make install cd $parent_dir