src/third-party/libpng/autogen.sh (view raw)
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 configue >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/libtool.m4 scripts/ltoptions.m4\
86 scripts/ltsugar.m4 scripts/ltversion.m4 scripts/lt~obsolete.m4"
87
88libpng_autotools_dirs="autom4te.cache" # not required
89#
90# The configure generated files:
91libpng_configure_files="Makefile config.h config.log config.status\
92 libpng-config libpng.pc libtool stamp-h1"
93
94libpng_configure_dirs=".deps"
95#
96# We must remove the configure generated files as well as the autotools
97# generated files if autotools are regenerated because otherwise if configure
98# has been run without "--enable-maintainer-mode" make can do a partial update
99# of Makefile. These functions do the two bits of cleaning.
100clean_autotools(){
101 rm -rf $libpng_autotools_files $libpng_libtool_files $libpng_autotools_dirs
102 rm -rf $libpng_autotools_extra
103}
104
105clean_configure(){
106 rm -rf $libpng_configure_files $libpng_configure_dirs
107}
108#
109# Clean: remove everything (this is to help with testing)
110if test -n "$clean"
111then
112 clean_configure
113 if test -n "$maintainer"
114 then
115 clean_autotools
116 fi
117
118 exit 0
119fi
120#
121# Validate the distribution.
122libpng_autotools_file_found=
123libpng_autotools_file_missing=
124for file in $libpng_autotools_files
125do
126 if test -f "$file"
127 then
128 libpng_autotools_file_found=1
129 else
130 libpng_autotools_file_missing=1
131 fi
132done
133#
134# Presence of one of these does not *invalidate* missing, but absence
135# invalidates found.
136for file in $libpng_libtool_files
137do
138 if test ! -f "$file"
139 then
140 libpng_autotools_file_missing=1
141 fi
142done
143#
144# The cache directory doesn't matter - it will be regenerated and does not exist
145# anyway in a tarball.
146#
147# Either everything is missing or everything is there, the --maintainer option
148# just changes this so that the mode is set to generate all the files.
149mode=
150if test -z "$libpng_autotools_file_found" -o -n "$maintainer"
151then
152 mode="autoreconf"
153else
154 if test -n "$libpng_autotools_file_missing"
155 then
156 mode="broken"
157 else
158 mode="configure"
159 fi
160fi
161#
162# So:
163case "$mode" in
164 autoreconf)
165 # Clean in case configure files exist
166 clean_configure
167 clean_autotools
168 # Everything must be initialized, so use --force
169 if autoreconf --warnings=all --force --install
170 then
171 missing=
172 for file in $libpng_autotools_files
173 do
174 test -f "$file" || missing=1
175 done
176 # ignore the cache directory
177 test -z "$missing" || {
178 exec >&2
179 echo "autoreconf was run, but did not produce all the expected"
180 echo "files. It is likely that your autotools installation is"
181 echo "not compatible with that expected by libpng."
182 exit 1
183 }
184 else
185 exec >&2
186 echo "autoreconf failed: your version of autotools is incompatible"
187 echo "with this libpng version. Please use a distributed archive"
188 echo "(which includes the autotools generated files) and run configure"
189 echo "instead."
190 exit 1
191 fi;;
192
193 configure)
194 if test -d .git
195 then
196 exec >&2
197 echo "ERROR: running autoreconf on an initialized sytem"
198 echo " This is not necessary; it is only necessary to remake the"
199 echo " autotools generated files if Makefile.am or configure.ac"
200 echo " change and make does the right thing with:"
201 echo
202 echo " ./configure --enable-maintainer-mode."
203 echo
204 echo " You can run autoreconf yourself if you don't like maintainer"
205 echo " mode and you can also just run autoreconf -f -i to initialize"
206 echo " everything in the first place; this script is only for"
207 echo " compatibility with prior releases."
208 exit 1
209 else
210 exec >&2
211 echo "autogen.sh is intended only to generate 'configure' on systems"
212 echo "that do not have it. You have a complete 'configure', if you"
213 echo "need to change Makefile.am or configure.ac you also need to"
214 echo "run configure with the --enable-maintainer-mode option."
215 exit 1
216 fi;;
217
218 broken)
219 exec >&2
220 echo "Your system has a partial set of autotools generated files."
221 echo "autogen.sh is unable to proceed. The full set of files is"
222 echo "contained in the libpng 'tar' distribution archive and you do"
223 echo "not need to run autogen.sh if you use it."
224 exit 1;;
225esac