Transcript The GNU Autotools: Your very own ./configure
The GNU Autotools
Your very own ./configure Wed Mar 15 2006 Michael Imamura / LUG@GT
Say Hello to the Autotools
• Autoconf, with the power of ./configure!
• Automake, making makefiles suck less!
• Libtool, friend to shared and static library alike!
Wed Mar 15 2006 Michael Imamura / LUG@GT
The Autotools are Hard!
• No, they’re not!
• Well, maybe a little… • Okay, here’s why you should learn them anyway.
– User configurability – Standards are everybody’s friend!
– Portability – your code isn’t as portable as you think!
Wed Mar 15 2006 Michael Imamura / LUG@GT
Getting Started
• From scratch: A blank Autotools project – http://lugatgt.org/articles/autotools/autoblank.tar.gz
– Use an IDE (like Anjuta) • Retrofit an existing project Wed Mar 15 2006 Michael Imamura / LUG@GT
The Initial Process
• Create a few initial stub sources (if you don’t already have any) • Create Makefile.am files – http://lugatgt.org/articles/autotools/amwiz/ • Run autoscan and create configure.ac
– Autoconf Macro Archive http://autoconf-archive.cryp.to/ • Run autoreconf --install • Run ./configure!
Wed Mar 15 2006 Michael Imamura / LUG@GT
Automake
• Makefile.am Makefile.in Makefile • Basically, a Makefile with special variable declarations • Primaries: What is being produced – bin_PROGRAMS, lib_LTLIBRARIES, etc.
• Secondaries: How to produce it – _CFLAGS, _SOURCES, _LIBADD, etc.
Wed Mar 15 2006 Michael Imamura / LUG@GT
Autoconf
• Run “autoscan” to produce configure.scan
– Detects source file types – Detects toolchain dependencies • Merge configure.scan into configure.ac
• Add AM_INIT_AUTOMAKE to add Automake support • Add AC_PROG_LIBTOOL to add Libtool support Wed Mar 15 2006 Michael Imamura / LUG@GT
Developing, developing, developing…
• Whenever configure.ac or Makefile.am changes, re-run autoreconf – autoreconf --make is useful here – Generated Makefile is often smart enough to do it for you • Standard make targets generated by Automake – User: all (default), install, clean – Developer: dist, check, distcheck Wed Mar 15 2006 Michael Imamura / LUG@GT
Debugging
• Libtool hides linking issues – Automatically relinks on install • Oops… Libtool gets in the way – Your binary may not be a binary!
– Use “libtool gdb” instead of “gdb” Wed Mar 15 2006 Michael Imamura / LUG@GT
Source control: What to check in
• General rule: Only check in files that you have created – Only configure.ac and Makefile.am
– Set ignores for the generated files – Add to note to HACKING about what versions of Autoconf, Automake, and Libtool you used Wed Mar 15 2006 Michael Imamura / LUG@GT
What about portability?
• The other reason to use Autoconf • General strategy: – Study the config.h generated by ./configure – For every #define: • Can we work around the issue?
• Is the tested feature an absolute requirement?
• Autoconf is not a magic bullet!
– It’s up to YOU to decide how to react Wed Mar 15 2006 Michael Imamura / LUG@GT
Beyond ./configure
• “make check”: Unit tests with DejaGNU • Custom configure.ac tests – Tests are written in GNU M4 – Use AC_ARG_ENABLE to allow the user to customize your package with --enable-feature • Fine-tuning – Different flavors of “clean” Wed Mar 15 2006 Michael Imamura / LUG@GT
There’s much more to say…
• But this presentation is too small to contain it.
• http://lugatgt.org/articles/autotools/ • Autoconf Macro Archive: http://autoconf-archive.cryp.to/ • “GNU Autoconf, Automake, and Libtool” by Gary Vaughan, et al.
http://sourceware.org/autobook/ (free download!) Wed Mar 15 2006 Michael Imamura / LUG@GT