Introduction to Autotools

Introduction to Autotools

Introduction to Autotools July 8, 2007 Jim Huang (jserv) <[email protected]> Overview ● Autoconf, Automake, and libtool working together ● Address portability, configuration needs ● Support GNU Coding Standards ● Provide consistent user experience ● Very popular in Free/Open Source World The Bad Old Days ● 1990 ● Edit Makefile ● Edit source ● Build ● No ªmake installº Handy Quote It it easier to write a portable shell than to write a portable shell script. -- Larry Wall Useful tools ● colormake – make with colorful decoration ● remake – modified version of GNU make with debugging and tracing support TheThe realreal ProblemProblem How do we handle platform specific issues? Providing a different Makefile for each architecture Using Autoconf, Automake and Libtool The installer needs only Bourne shell C compilers Make program SomeSome advantagesadvantages whenwhen usingusing GNUGNU autotoolsautotools The installation of a program is straightforward: ./configure; make; make install This procedure checks for system parameters, libraries, location of programs, availability of functions and writes a Makefile ./configure supports many options to overwrite defaults settings Development Use Cases GNU toolchain flow (simplified) Developer User configure.in autoconf configure ./configure Check for required libraries automake Makefile.in Generate Makefile Makefile.am Makefile Autotools Overview (no libtool) Under source control Starting, Source [autoscan] [configure.scan] configure.ac occasional files configure.ac autoconf configure Developer, on distribute development [acinclude.m4] [autoheader] [config.h.in] system Makefile.am automake Makefile.in Source configure config.cache Installer, on files target [config.h.in] config.log system [config.h] Makefile.in make config.status Makefile End User Executables, libraries, documents, etc. GNUGNU autoconfautoconf Source Code configure.ac (configure.in) aclocal autoscan autoconf configure.scan configure GNUGNU automakeautomake Makefile.am Makefile.in automake configure Makefile Autoconf(1) ● Preprocessor based on m4 ● Turns configure.ac into configure ● World©s most insane shell scripts – But portable ones! Autoconf(2) ● Some philosophy – Feature tests, not platform tests – The programmer makes the code portable – The programmer decides what matters Autoconf(3) ● Test what is on the actual machine ● Write conclusions into text files – Makefile, config.h, etc ● Uniform command line options – Standard directories like bindir, includedir ● Large, extensible library of tests Autoconf Example AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([-Wall -Werror]) AC_PROG_CC AC_CHECK_LIB(z, deflate) AC_CHECK_HEADERS([unistd.h bstring.h]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT Boilerplate AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([-Wall -Werror]) AC_PROG_CC AC_CHECK_LIB(z, deflate) AC_CHECK_HEADERS([unistd.h bstring.h]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT Program Checks AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([-Wall -Werror]) AC_PROG_CC AC_CHECK_LIB(z, deflate) AC_CHECK_HEADERS([unistd.h bstring.h]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT Library Checks AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([-Wall -Werror]) AC_PROG_CC AC_CHECK_LIB(z, deflate) Adds -lz to LIBS; defines HAVE_LIBZ AC_CHECK_HEADERS([unistd.h bstring.h]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT Header Checks AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([-Wall -Werror]) AC_PROG_CC AC_CHECK_LIB(z, deflate) AC_CHECK_HEADERS([unistd.h bstring.h]) defines HAVE_UNISTD_H, HAVE_BSTRING_H AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT Automake ● Support GNU Coding Standards ● Make common things simple ● Automate some difficult things ● Turns Makefile.am into Makefile.in ● Unrecognized input passed through Automake Features(1) ● Low-cost, precise automatic dependency tracking ● Non-srcdir builds ● dist/distcheck ● Various clean targets ● install/uninstall ● Parallel builds Automake Features(2) ● DESTDIR ● Hooks ● Platform integration Automake Example bin_PROGRAMS = hello hello_SOURCES = hello.c Install Directory(1) bin_PROGRAMS = hello hello_SOURCES = hello.c Install Directory(2) ● You can make your own directories – mylibdir = $(libdir)/whatever – mylib_PROGRAMS = echo Primary(1) bin_PROGRAMS = hello hello_SOURCES = hello.c Primary(2) ● There are many primaries – PROGRAMS, LIBRARIES, LTLIBRARIES, LISP, PYTHON, JAVA, SCRIPTS, DATA, HEADERS, MANS, TEXINFOS ● You won©t use most of them ● Other prefixes control semantics: nobase, nodist – nobase_nodist_include_HEADERS = foo/foo.h Object Naming(1) bin_PROGRAMS = hello hello_SOURCES = hello.c Object Naming(2) ● Names are made ªmake-friendlyº by automake – Weird characters are turned to ª_º Object Suffix(1) bin_PROGRAMS = hello hello_SOURCES = hello.c Object Suffix(2) ● Object suffixes depend on the type of object ● Typical ones: SOURCES, CFLAGS, LDFLAGS ● SOURCES handles many languages – C, C++, Yacc, Lex, assembly, Fortran, Java (with gcj) – Also header files Libtool ● Portable creation of shared libraries ● Integration with autoconf and automake ● Side features – libltdl – Convenience libraries Libtool Example(1) ● configure.ac: – AC_PROG_LIBTOOL ● That©s it! Libtool Example(2) lib_LTLIBRARIES = libexample.la libexample_LA_SOURCES = src/example1.c x2.c URLs ● Google Alexandre Duret-Lutz ● http://sources.redhat.com/autobook/ ● http://www.gnu.org/software/autoconf/ ● http://autoconf-archive.cryp.to/ ● http://www.gnu.org/prep/standards/.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    36 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us