1893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#! /bin/sh
2b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
3b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Run 'autoreconf' to build 'configure', 'Makefile.in' and other configure
4b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# control files.
5b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
6b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# The first time this is run on a GIT checkout the only files that exist are
7b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# configure.ac and Makefile.am; all of the autotools support scripts are
8b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# missing.  They are instantiated with autoreconf --force --install.
9b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
10b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# For regular ("tarball") distributions all the files should exist.  We do not
11b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# want them to be updated *under any circumstances*.  It should never be
12b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari# necessary to run autogen.sh because ./configure --enable-maintainer-mode says
13b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari# what to do if Makefile.am or configure.ac are changed.
14b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
15b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# It is *probably* OK to update the files on a GIT checkout, because they have
16b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# come from the local tools, but leave that to the user who is assumed to know
17b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# whether it is ok or required.
18b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
19b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# This script is intended to work without arguments, there are, however, hidden
20b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari# arguments (a) for use while testing the script and (b) to fix up systems that
21b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# have been broken.  If (b) is required the script prompts for the correct
22b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# options.  For this reason the options are *NOT* documented in the help; this
23b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# is deliberate; UTSL.
24b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
25b50c217251b086440efcdb273c22f86a06c80cbaChris Craikclean=
26b50c217251b086440efcdb273c22f86a06c80cbaChris Craikmaintainer=
27b50c217251b086440efcdb273c22f86a06c80cbaChris Craikwhile test $# -gt 0
28b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdo
29b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   case "$1" in
30b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      --maintainer)
31b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         maintainer=1;;
32b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
33b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      --clean)
34b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         clean=1;;
35b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
36b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      *)
37b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exec >&2
38b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "$0: usage: ./autogen.sh"
39b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         if test -d .git
40b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         then
41b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  ./autogen.sh generates the configure script and"
42b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  Makefile.in, or refreshes them after changes to Makefile.am"
43b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  or configure.ac.  You may prefer to just run autoreconf."
44b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         elif test -z "$maintainer"
45b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         then
46b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  DO NOT RUN THIS SCRIPT."
47b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  If you need to change Makefile.am or configure.ac then you"
48b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  also need to run ./configure --enable-maintainer-mode and"
49b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  use the appropriate autotools, *NOT* this script, to update"
50b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  everything, please check the documentation of autoreconf."
51b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  WARNING: libpng is intentionally generated with a known,"
52b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  fixed, set of autotools.  It is known *NOT* to work with"
53b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  the collection of autotools distributed on highly reputable"
54b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  operating systems."
55b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  Remember: autotools is GNU software, you are expected to"
56b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  pay for support."
57b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         else
58b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  You have run autogen.sh with --maintainer enabled and you"
59b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  are not using a GIT distribution, then you have given an"
60b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  unrecognized argument.  This is not good. --maintainer"
61b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  switches off any assumptions that you might not know what"
62b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "  you are doing."
63b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         fi
64b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exit 1;;
65b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   esac
66b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
67b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   shift
68b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdone
69b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
70b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# First check for a set of the autotools files; if absent then this is assumed
71b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# to be a GIT version and the local autotools must be used.  If present this
72b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# is a tarball distribution and the script should not be used.  If partially
73b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# present bad things are happening.
74b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
75b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# The autotools generated files:
76b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_autotools_files="Makefile.in aclocal.m4 config.guess config.h.in\
77b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   config.sub configure depcomp install-sh ltmain.sh missing test-driver"
78b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
79b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari# Files generated by versions of configue >2.68 or automake >1.13 (i.e. later
80b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari# versions than those required by configure.ac):
81b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurarilibpng_autotools_extra="compile"
82b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari#
83b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# These are separate because 'maintainer-clean' does not remove them.
84b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_libtool_files="scripts/libtool.m4 scripts/ltoptions.m4\
85b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   scripts/ltsugar.m4 scripts/ltversion.m4 scripts/lt~obsolete.m4"
86b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
87b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_autotools_dirs="autom4te.cache" # not required
88b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
89b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# The configure generated files:
90b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_configure_files="Makefile config.h config.log config.status\
91b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   libpng-config libpng.pc libtool stamp-h1"
92b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
93b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_configure_dirs=".deps"
94b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
95b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# We must remove the configure generated files as well as the autotools
96b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# generated files if autotools are regenerated because otherwise if configure
97b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# has been run without "--enable-maintainer-mode" make can do a partial update
98b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# of Makefile.  These functions do the two bits of cleaning.
99b50c217251b086440efcdb273c22f86a06c80cbaChris Craikclean_autotools(){
100b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   rm -rf $libpng_autotools_files $libpng_libtool_files $libpng_autotools_dirs
101b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari   rm -rf $libpng_autotools_extra
102b50c217251b086440efcdb273c22f86a06c80cbaChris Craik}
103b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
104b50c217251b086440efcdb273c22f86a06c80cbaChris Craikclean_configure(){
105b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   rm -rf $libpng_configure_files $libpng_configure_dirs
106b50c217251b086440efcdb273c22f86a06c80cbaChris Craik}
107b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
108b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Clean: remove everything (this is to help with testing)
109b50c217251b086440efcdb273c22f86a06c80cbaChris Craikif test -n "$clean"
110b50c217251b086440efcdb273c22f86a06c80cbaChris Craikthen
111b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   clean_configure
112b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   if test -n "$maintainer"
113b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   then
114b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      clean_autotools
115b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   fi
116b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
117b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   exit 0
118b50c217251b086440efcdb273c22f86a06c80cbaChris Craikfi
119b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
120b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Validate the distribution.
121b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_autotools_file_found=
122b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklibpng_autotools_file_missing=
123b50c217251b086440efcdb273c22f86a06c80cbaChris Craikfor file in $libpng_autotools_files
124b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdo
125b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   if test -f  "$file"
126b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   then
127b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      libpng_autotools_file_found=1
128b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   else
129b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      libpng_autotools_file_missing=1
130b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   fi
131b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdone
132b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
133b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Presence of one of these does not *invalidate* missing, but absence
134b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# invalidates found.
135b50c217251b086440efcdb273c22f86a06c80cbaChris Craikfor file in $libpng_libtool_files
136b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdo
137b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   if test ! -f "$file"
138b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   then
139b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      libpng_autotools_file_missing=1
140b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   fi
141b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdone
142b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
143b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# The cache directory doesn't matter - it will be regenerated and does not exist
144b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# anyway in a tarball.
145b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
146b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Either everything is missing or everything is there, the --maintainer option
147b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# just changes this so that the mode is set to generate all the files.
148b50c217251b086440efcdb273c22f86a06c80cbaChris Craikmode=
149b50c217251b086440efcdb273c22f86a06c80cbaChris Craikif test -z "$libpng_autotools_file_found" -o -n "$maintainer"
150b50c217251b086440efcdb273c22f86a06c80cbaChris Craikthen
151b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   mode="autoreconf"
152b50c217251b086440efcdb273c22f86a06c80cbaChris Craikelse
153b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   if test -n "$libpng_autotools_file_missing"
154b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   then
155b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      mode="broken"
156b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   else
157b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      mode="configure"
158b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   fi
159b50c217251b086440efcdb273c22f86a06c80cbaChris Craikfi
160b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
161b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# So:
162b50c217251b086440efcdb273c22f86a06c80cbaChris Craikcase "$mode" in
163b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   autoreconf)
164b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      # Clean in case configure files exist
165b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      clean_configure
166b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      clean_autotools
167b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      # Everything must be initialized, so use --force
168b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      if autoreconf --warnings=all --force --install
169b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      then
170b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         missing=
171b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         for file in $libpng_autotools_files
172b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         do
173b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            test -f "$file" || missing=1
174b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         done
175b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         # ignore the cache directory
176b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         test -z "$missing" || {
177b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            exec >&2
178b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "autoreconf was run, but did not produce all the expected"
179b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "files.  It is likely that your autotools installation is"
180b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            echo "not compatible with that expected by libpng."
181b50c217251b086440efcdb273c22f86a06c80cbaChris Craik            exit 1
182b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         }
183b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      else
184b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exec >&2
185b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "autoreconf failed: your version of autotools is incompatible"
186b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "with this libpng version.  Please use a distributed archive"
187b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "(which includes the autotools generated files) and run configure"
188b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "instead."
189b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exit 1
190b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      fi;;
191b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
192b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   configure)
193b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      if test -d .git
194b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      then
195b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exec >&2
196b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "ERROR: running autoreconf on an initialized sytem"
197b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "  This is not necessary; it is only necessary to remake the"
198b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "  autotools generated files if Makefile.am or configure.ac"
199b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "  change and make does the right thing with:"
200b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo
201b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "     ./configure --enable-maintainer-mode."
202b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo
203b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "  You can run autoreconf yourself if you don't like maintainer"
204b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "  mode and you can also just run autoreconf -f -i to initialize"
205b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "  everything in the first place; this script is only for"
206b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari         echo "  compatibility with prior releases."
207b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exit 1
208b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      else
209b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exec >&2
210b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "autogen.sh is intended only to generate 'configure' on systems"
211b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "that do not have it.  You have a complete 'configure', if you"
212b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "need to change Makefile.am or configure.ac you also need to"
213b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         echo "run configure with the --enable-maintainer-mode option."
214b50c217251b086440efcdb273c22f86a06c80cbaChris Craik         exit 1
215b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      fi;;
216b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
217b50c217251b086440efcdb273c22f86a06c80cbaChris Craik   broken)
218b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      exec >&2
219b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      echo "Your system has a partial set of autotools generated files."
220b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      echo "autogen.sh is unable to proceed.  The full set of files is"
221b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      echo "contained in the libpng 'tar' distribution archive and you do"
222b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      echo "not need to run autogen.sh if you use it."
223b50c217251b086440efcdb273c22f86a06c80cbaChris Craik      exit 1;;
224b50c217251b086440efcdb273c22f86a06c80cbaChris Craikesac
225