configure.info: Getting Started Example 2

Go forward to Getting Started Example 3
Go backward to Getting Started Example 1
Go up to Getting Started Example
Go to the top op configure

Second Try

   Here is our second try at this program.
   We modify `poke.c' to use preprocessor macros to control what
features are available.  (I've cheated a bit by using the same macro
names which autoconf will use).
     #include <stdio.h>
     #ifdef STDC_HEADERS
     #include <stdlib.h>
     #endif
     #include <sys/types.h>
     #ifdef HAVE_UTIME_H
     #include <utime.h>
     #endif
     #ifndef HAVE_UTIME_NULL
     #include <time.h>
     #ifndef HAVE_STRUCT_UTIMBUF
     struct utimbuf
     {
       long actime;
       long modtime;
     };
     #endif
     static int
     utime_now (file)
          char *file;
     {
       struct utimbuf now;
       now.actime = now.modtime = time (NULL);
       return utime (file, &now);
     }
     #define utime(f, p) utime_now (f)
     #endif /* HAVE_UTIME_NULL  */
     int
     main (argc, argv)
          int argc;
          char **argv;
     {
       if (argc != 2)
         {
           fprintf (stderr, "Usage: poke file\n");
           exit (1);
         }
       if (utime (argv[1], NULL) < 0)
         {
           perror ("utime");
           exit (1);
         }
       exit (0);
     }
   Here is the associated `Makefile'.  We've added support for the
preprocessor flags we use.  We've also added `install' and `clean'
targets.
     # Set this to your installation directory.
     bindir = /usr/local/bin
     # Uncomment this if you have the standard ANSI/ISO C header files.
     # STDC_HDRS = -DSTDC_HEADERS
     # Uncomment this if you have utime.h.
     # UTIME_H = -DHAVE_UTIME_H
     # Uncomment this if utime (FILE, NULL) works on your system.
     # UTIME_NULL = -DHAVE_UTIME_NULL
     # Uncomment this if struct utimbuf is defined in utime.h.
     # UTIMBUF = -DHAVE_STRUCT_UTIMBUF
     CC = gcc
     CFLAGS = -g -O2
     ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS)
     all: poke
     poke: poke.o
     	$(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o
     .c.o:
     	$(CC) -c $(ALL_CFLAGS) poke.c
     install: poke
     	cp poke $(bindir)/poke
     clean:
     	rm poke poke.o
   Some problems with this approach should be clear.
   Users who want to compile poke will have to know how `utime' works
on their systems, so that they can uncomment the `Makefile' correctly.
   The installation is done using `cp', but many systems have an
`install' program which may be used, and which supports optional
features such as stripping debugging information out of the installed
binary.
   The use of `Makefile' variables like `CC', `CFLAGS' and `LDFLAGS'
follows the requirements of the GNU standards.  This is convenient for
all packages, since it reduces surprises for users.  However, it is
easy to get the details wrong, and wind up with a slightly nonstandard
distribution.