123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #! /bin/sh
- #
- # Run 'autoreconf' to build 'configure', 'Makefile.in' and other configure
- # control files.
- #
- # The first time this is run on a GIT checkout the only files that exist are
- # configure.ac and Makefile.am; all of the autotools support scripts are
- # missing. They are instantiated with autoreconf --force --install.
- #
- # For regular ("tarball") distributions all the files should exist. We do not
- # want them to be updated *under any circumstances*. It should never be
- # necessary to run autogen.sh because ./configure --enable-maintainer-mode says
- # what to do if Makefile.am or configure.ac are changed.
- #
- # It is *probably* OK to update the files on a GIT checkout, because they have
- # come from the local tools, but leave that to the user who is assumed to know
- # whether it is ok or required.
- #
- # This script is intended to work without arguments, there are, however, hidden
- # arguments (a) for use while testing the script and (b) to fix up systems that
- # have been broken. If (b) is required the script prompts for the correct
- # options. For this reason the options are *NOT* documented in the help; this
- # is deliberate; UTSL.
- #
- clean=
- maintainer=
- while test $# -gt 0
- do
- case "$1" in
- --maintainer)
- maintainer=1;;
- --clean)
- clean=1;;
- *)
- exec >&2
- echo "$0: usage: ./autogen.sh"
- if test -d .git
- then
- echo " ./autogen.sh generates the configure script and"
- echo " Makefile.in, or refreshes them after changes to Makefile.am"
- echo " or configure.ac. You may prefer to just run autoreconf."
- elif test -z "$maintainer"
- then
- echo " DO NOT RUN THIS SCRIPT."
- echo " If you need to change Makefile.am or configure.ac then you"
- echo " also need to run ./configure --enable-maintainer-mode and"
- echo " use the appropriate autotools, *NOT* this script, to update"
- echo " everything, please check the documentation of autoreconf."
- echo " WARNING: libpng is intentionally generated with a known,"
- echo " fixed, set of autotools. It is known *NOT* to work with"
- echo " the collection of autotools distributed on highly reputable"
- echo " operating systems."
- echo " Remember: autotools is GNU software, you are expected to"
- echo " pay for support."
- else
- echo " You have run autogen.sh with --maintainer enabled and you"
- echo " are not using a GIT distribution, then you have given an"
- echo " unrecognized argument. This is not good. --maintainer"
- echo " switches off any assumptions that you might not know what"
- echo " you are doing."
- fi
- exit 1;;
- esac
- shift
- done
- #
- # First check for a set of the autotools files; if absent then this is assumed
- # to be a GIT version and the local autotools must be used. If present this
- # is a tarball distribution and the script should not be used. If partially
- # present bad things are happening.
- #
- # The autotools generated files:
- libpng_autotools_files="Makefile.in aclocal.m4 config.guess config.h.in
- config.sub configure depcomp install-sh ltmain.sh missing\
- test-driver"
- #
- # Files generated by versions of configue >2.68 or automake >1.13 (i.e. later
- # versions than those required by configure.ac):
- libpng_autotools_extra="compile config.h.in~"
- #
- # These are separate because 'maintainer-clean' does not remove them.
- libpng_libtool_files="scripts/libtool.m4 scripts/ltoptions.m4\
- scripts/ltsugar.m4 scripts/ltversion.m4 scripts/lt~obsolete.m4"
- libpng_autotools_dirs="autom4te.cache" # not required
- #
- # The configure generated files:
- libpng_configure_files="Makefile config.h config.log config.status\
- libpng-config libpng.pc libtool stamp-h1"
- libpng_configure_dirs=".deps"
- #
- # We must remove the configure generated files as well as the autotools
- # generated files if autotools are regenerated because otherwise if configure
- # has been run without "--enable-maintainer-mode" make can do a partial update
- # of Makefile. These functions do the two bits of cleaning.
- clean_autotools(){
- rm -rf $libpng_autotools_files $libpng_libtool_files $libpng_autotools_dirs
- rm -rf $libpng_autotools_extra
- }
- clean_configure(){
- rm -rf $libpng_configure_files $libpng_configure_dirs
- }
- #
- # Clean: remove everything (this is to help with testing)
- if test -n "$clean"
- then
- clean_configure
- if test -n "$maintainer"
- then
- clean_autotools
- fi
- exit 0
- fi
- #
- # Validate the distribution.
- libpng_autotools_file_found=
- libpng_autotools_file_missing=
- for file in $libpng_autotools_files
- do
- if test -f "$file"
- then
- libpng_autotools_file_found=1
- else
- libpng_autotools_file_missing=1
- fi
- done
- #
- # Presence of one of these does not *invalidate* missing, but absence
- # invalidates found.
- for file in $libpng_libtool_files
- do
- if test ! -f "$file"
- then
- libpng_autotools_file_missing=1
- fi
- done
- #
- # The cache directory doesn't matter - it will be regenerated and does not exist
- # anyway in a tarball.
- #
- # Either everything is missing or everything is there, the --maintainer option
- # just changes this so that the mode is set to generate all the files.
- mode=
- if test -z "$libpng_autotools_file_found" -o -n "$maintainer"
- then
- mode="autoreconf"
- else
- if test -n "$libpng_autotools_file_missing"
- then
- mode="broken"
- else
- mode="configure"
- fi
- fi
- #
- # So:
- case "$mode" in
- autoreconf)
- # Clean in case configure files exist
- clean_configure
- clean_autotools
- # Everything must be initialized, so use --force
- if autoreconf --warnings=all --force --install
- then
- missing=
- for file in $libpng_autotools_files
- do
- test -f "$file" || missing=1
- done
- # ignore the cache directory
- test -z "$missing" || {
- exec >&2
- echo "autoreconf was run, but did not produce all the expected"
- echo "files. It is likely that your autotools installation is"
- echo "not compatible with that expected by libpng."
- exit 1
- }
- else
- exec >&2
- echo "autoreconf failed: your version of autotools is incompatible"
- echo "with this libpng version. Please use a distributed archive"
- echo "(which includes the autotools generated files) and run configure"
- echo "instead."
- exit 1
- fi;;
- configure)
- if test -d .git
- then
- exec >&2
- echo "ERROR: running autoreconf on an initialized sytem"
- echo " This is not necessary; it is only necessary to remake the"
- echo " autotools generated files if Makefile.am or configure.ac"
- echo " change and make does the right thing with:"
- echo
- echo " ./configure --enable-maintainer-mode."
- echo
- echo " You can run autoreconf yourself if you don't like maintainer"
- echo " mode and you can also just run autoreconf -f -i to initialize"
- echo " everything in the first place; this script is only for"
- echo " compatibility with prior releases."
- exit 1
- else
- exec >&2
- echo "autogen.sh is intended only to generate 'configure' on systems"
- echo "that do not have it. You have a complete 'configure', if you"
- echo "need to change Makefile.am or configure.ac you also need to"
- echo "run configure with the --enable-maintainer-mode option."
- exit 1
- fi;;
- broken)
- exec >&2
- echo "Your system has a partial set of autotools generated files."
- echo "autogen.sh is unable to proceed. The full set of files is"
- echo "contained in the libpng 'tar' distribution archive and you do"
- echo "not need to run autogen.sh if you use it."
- exit 1;;
- esac
|