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