[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.5.3 Third Try

For our third try at this program, we will write a `configure.in' script to discover the configuration features on the host system, rather than requiring the user to edit the `Makefile'. We will also write a `Makefile.am' rather than a `Makefile'.

The only change to `poke.c' is to add a line at the start of the file:
 
#include "config.h"

The new `configure.in' file is as follows.

 
AC_INIT(poke.c)
AM_INIT_AUTOMAKE(poke, 1.0)
AM_CONFIG_HEADER(config.h:config.in)
AC_PROG_CC
AC_HEADER_STDC
AC_CHECK_HEADERS(utime.h)
AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF))
AC_FUNC_UTIME_NULL
AC_OUTPUT(Makefile)

The first four macros in this file, and the last one, were described above; see 2.1 Write configure.in. If we omit these macros, then when we run `automake' we will get a reminder that we need them.

The other macros are standard autoconf macros.

`AC_HEADER_STDC'
Check for standard C headers.
`AC_CHECK_HEADERS'
Check whether a particular header file exists.
`AC_EGREP_HEADER'
Check for a particular string in a particular header file, in this case checking for `utimbuf' in `utime.h'.
`AC_FUNC_UTIME_NULL'
Check whether `utime' accepts a NULL second argument to set the file change time to the current time.

See the autoconf manual for a more complete description.

The new `Makefile.am' file is as follows. Note how simple this is compared to our earlier `Makefile'.

 
bin_PROGRAMS = poke

poke_SOURCES = poke.c

This means that we should build a single program name `poke'. It should be installed in the binary directory, which we called `bindir' earlier. The program `poke' is built from the source file `poke.c'.

We must also write a `acconfig.h' file. Besides `PACKAGE' and `VERSION', which must be mentioned for all packages which use automake, we must include `HAVE_STRUCT_UTIMBUF', since we mentioned it in an `AC_DEFINE'.

 
/* Name of package.  */
#undef PACKAGE

/* Version of package.  */
#undef VERSION

/* Whether utime.h defines struct utimbuf.  */
#undef HAVE_STRUCT_UTIMBUF


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated by system on December, 2 2004 using texi2html