GNU `make'

Node:Utilities in Makefiles, Next:Command Variables, Previous:Makefile Basics, Up:Makefile Conventions

### Utilities in Makefiles

Write the Makefile commands (and any shell scripts, such as `configure`) to run in `sh`, not in `csh`. Don't use any special features of `ksh` or `bash`.

The `configure` script and the Makefile rules for building and installation should not use any utilities directly except these:

         cat cmp cp diff echo egrep expr false grep install-info
         ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true

The compression program `gzip` can be used in the `dist` rule.

Stick to the generally supported options for these programs. For example, don't use `mkdir -p`, convenient as it may be, because most systems don't support it.

It is a good idea to avoid creating symbolic links in makefiles, since a few systems don't support them.

The Makefile rules for building and installation can also use compilers and related programs, but should do so via `make` variables so that the user can substitute alternatives. Here are some of the programs we mean:

         ar bison cc flex install ld ldconfig lex
         make makeinfo ranlib texi2dvi yacc

Use the following `make` variables to run those programs:

         $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
         $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)

When you use `ranlib` or `ldconfig`, you should make sure nothing bad happens if the system does not have the program in question. Arrange to ignore an error from that command, and print a message before the command to tell the user that failure of this command does not mean a problem. (The Autoconf `AC_PROG_RANLIB` macro can help with this.)

If you use symbolic links, you should implement a fallback for systems that don't have symbolic links.

Additional utilities that can be used via Make variables are:

         chgrp chmod chown mknod

It is ok to use other utilities in Makefile portions (or scripts) intended only for particular systems where you know those utilities exist.