Difference between revisions of "Autotools"
From HCL
					
										
					
					 (→Libraries)  | 
				|||
| Line 16: | Line 16: | ||
* sources (internal C data structures and C++ template classes): <code>library_X_SOURCES = library.h ...</code>, where <code>X</code> = <code>a</code> or <code>la</code>  | * sources (internal C data structures and C++ template classes): <code>library_X_SOURCES = library.h ...</code>, where <code>X</code> = <code>a</code> or <code>la</code>  | ||
| − | + | [http://gforge.ucd.ie/scm/viewvc.php/*checkout*/trunk/MPIBlib/benchmarks/Makefile.am?root=cpm Example]  | |
== Configured headers ==  | == Configured headers ==  | ||
| Line 23: | Line 23: | ||
* <code>nodist_*_SOURCES = *.h</code> or <code>BUILT_SOURCES = *.h</code> for the configured headers as sources  | * <code>nodist_*_SOURCES = *.h</code> or <code>BUILT_SOURCES = *.h</code> for the configured headers as sources  | ||
| − | + | [http://gforge.ucd.ie/scm/viewvc.php/*checkout*/trunk/MPIBlib/collectives/Makefile.am?root=cpm Example]  | |
== Extra files ==  | == Extra files ==  | ||
To add extra files into package, use <code>EXTRA_DIST = *</code>.  | To add extra files into package, use <code>EXTRA_DIST = *</code>.  | ||
| − | + | [http://gforge.ucd.ie/scm/viewvc.php/*checkout*/trunk/MPIBlib/tools/Makefile.am?root=cpm Example]  | |
== Conditional building ==  | == Conditional building ==  | ||
Latest revision as of 10:01, 16 August 2012
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.aor dynamiclib_LTLIBRARIES = library.la -  sources (internal C data structures and C++ template classes): 
library_X_SOURCES = library.h ..., whereX=aorla 
Configured headers
Configured headers (created from *.h.in) must not be included into the package, that is include_HEADERS or *_SOURCES
-  
nodist_include_HEADERS = *.hfor the configured headers as includes -  
nodist_*_SOURCES = *.horBUILT_SOURCES = *.hfor the configured headers as sources 
Extra files
To add extra files into package, use EXTRA_DIST = *.
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