xref: /aosp_15_r20/external/libpng/autogen.sh (revision a67afe4df73cf47866eedc69947994b8ff839aba)
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