(automake-1.16.info)Scripts


Next: Headers Up: Other Objects
Enter node , (file) or (file)node

9.1 Executable Scripts
======================

It is possible to define and install programs that are scripts.  Such
programs are listed using the ‘SCRIPTS’ primary name.  When the script
is distributed in its final, installable form, the ‘Makefile’ usually
looks as follows:

     # Install my_script in $(bindir) and distribute it.
     dist_bin_SCRIPTS = my_script

   Scripts are not distributed by default; as we have just seen, those
that should be distributed can be specified using a ‘dist_’ prefix as
with other primaries.

   Scripts can be installed in ‘bindir’, ‘sbindir’, ‘libexecdir’,
‘pkglibexecdir’, or ‘pkgdatadir’.

   Scripts that need not be installed can be listed in ‘noinst_SCRIPTS’,
and among them, those which are needed only by ‘make check’ should go in
‘check_SCRIPTS’.

   When a script needs to be built, the ‘Makefile.am’ should include the
appropriate rules.  For instance the ‘automake’ program itself is a Perl
script that is generated from ‘automake.in’.  Here is how this is
handled:

     bin_SCRIPTS = automake
     CLEANFILES = $(bin_SCRIPTS)
     EXTRA_DIST = automake.in

     do_subst = sed -e 's,[@]datadir[@],$(datadir),g' \
                 -e 's,[@]PERL[@],$(PERL),g' \
                 -e 's,[@]PACKAGE[@],$(PACKAGE),g' \
                 -e 's,[@]VERSION[@],$(VERSION),g' \
                 ...

     automake: automake.in Makefile
             $(do_subst) < $(srcdir)/automake.in > automake
             chmod +x automake

   Such scripts for which a build rule has been supplied need to be
deleted explicitly using ‘CLEANFILES’ (Note: Clean), and their sources
have to be distributed, usually with ‘EXTRA_DIST’ (Note: Basics of
Distribution).

   Another common way to build scripts is to process them from
‘configure’ with ‘AC_CONFIG_FILES’.  In this situation Automake knows
which files should be cleaned and distributed, and what the rebuild
rules should look like.

   For instance if ‘configure.ac’ contains

     AC_CONFIG_FILES([src/my_script], [chmod +x src/my_script])

to build ‘src/my_script’ from ‘src/my_script.in’, then a
‘src/Makefile.am’ to install this script in ‘$(bindir)’ can be as simple
as

     bin_SCRIPTS = my_script
     CLEANFILES = $(bin_SCRIPTS)

There is no need for ‘EXTRA_DIST’ or any build rule: Automake infers
them from ‘AC_CONFIG_FILES’ (Note: Requirements).  ‘CLEANFILES’ is
still useful, because by default Automake will clean targets of
‘AC_CONFIG_FILES’ in ‘distclean’, not ‘clean’.

   Although this looks simpler, building scripts this way has one
drawback: directory variables such as ‘$(datadir)’ are not fully
expanded and may refer to other directory variables.


automatically generated by info2www version 1.2.2.9