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