So, I'm still reading O'Rielly's 21st Century C. I know, too many books on the go and I read slowly, and not often enough. I'm going through the section on GNU autotools, which I've never been a heavy user of, albiet I'm a heavy consumer of. I just don't spend much time distributing C/C++ across platforms.
I have a little C tool that I figured I'd try it on, a small replacement for GNU tree that I wrote a while back, and since tree isn't available on OS X, it seemed a good excuse to port it. Previously I just had a Makefile that I maintained, and it works fine, but it's a good excuse to learn how to use autotools for the future. I do have some libraries, and they're harder to port, which is where libtool comes in.
This build script outlines the process of using autotools for the first time. This script borrows very heavily from the book's author.
#!/bin/sh
echo "Creating Makefile.am"
cat > Makefile.am <<EOF
bin_PROGRAMS=twig
twig_SOURCES=twig.c
EOF
echo "Running autoscan..."
autoscan
echo "Creating configure.ac..."
sed -e 's/FULL-PACKAGE-NAME/twig/' \
-e 's/VERSION/1.0/' \
-e 's|BUG-REPORT-ADDRESS|msoulier@digitaltorque.ca|' \
-e '10i\
AM_INIT_AUTOMAKE' \
< configure.scan > configure.ac
echo "Creating additional files..."
touch NEWS README AUTHORS ChangeLog
echo "Running autoreconf..."
autoreconf -iv
echo "Running configure..."
./configure
echo "Running make distcheck to package sources..."
make distcheck
At this point, it's not ready to ship, as the NEWS, README, AUTHORS and ChangeLog aren't populated yet. But it's close. The configure script works, and I could then build it on OS X using the expected.
./configure --prefix=/usr/local
make
make install
My next project to package is a shared library for work, so that will be more interesting. Still, if you're looking to use autotools for the first time for something simple, this should take the mystery out of kick-starting it. Sure, there's some magic like the AM_INIT_AUTOMAKE macro, and I've a ton to learn yet, but this worked on the first try, and the resulting tarball is good to push to SourceForge or elsewhere if you want to.
As I pick up more, I'll try to share it. I don't find autotools intuitive at all, but with some simple recipes I think I'll survive.
Comments !