* bootstrap:
[vlc.git] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for the VLC media player
4 ##  $Id: bootstrap,v 1.77 2003/10/25 04:48:55 sam Exp $
5 ##
6 ##  Authors: Sam Hocevar <sam@zoy.org>
7
8 if test "$#" != "0"; then
9   echo "Usage: $0"
10   echo "  Calls automake, autoconf, autoheader, autopoint and other auto* to generate"
11   echo "  m4 macros and prepare Makefiles."
12   exit 1
13 fi
14
15 ###
16 ###  Get a sane environment, just in case
17 ###
18 LANG=C
19 export LANG
20 CYGWIN=binmode
21 export CYGWIN
22
23 set -e
24 set -x
25
26 ##
27 ## Check for various tools
28 ##
29 AUTOMAKESUCKS=no
30 INSTALLSUCKS=no
31
32 # Check for automake
33 amvers="none"
34 if automake-1.7 --version >/dev/null 2>&1; then
35   amvers="-1.7"
36   # If we also have 1.6 (>> 1.6.1), use it instead because it is faster
37   if automake-1.6 --version >/dev/null 2>&1; then
38     if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" ">" "1.6.1" > /dev/null 2>&1; then
39       amvers="-1.6"
40     fi
41   fi
42 elif automake-1.6 --version >/dev/null 2>&1; then
43   amvers="-1.6"
44   if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1; then
45     AUTOMAKESUCKS=yes
46   fi
47 elif automake-1.5 --version >/dev/null 2>&1; then
48   INSTALLSUCKS=yes
49   amvers="-1.5"
50 elif automake --version > /dev/null 2>&1; then
51   amvers=""
52   case "`automake --version | sed -e '1s/[^0-9]*//' -e q`" in
53     0|0.*|1|1.[01234]|1.[01234][-.]*)
54       amvers="none" ;;
55     1.5|1.5.*)
56       INSTALLSUCKS=yes ;;
57     1.6|1.6.0|1.6.1)
58       AUTOMAKESUCKS=yes ;;
59   esac
60 fi
61
62 if test "${amvers}" = "none"; then
63   set +x
64   echo "you need automake version 1.5 or later"
65   exit 1
66 fi
67
68 # Check for gettext
69 if gettextize --version >/dev/null 2>&1; then
70 # Autopoint is available from 0.11.3, but we need 0.11.5
71 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
72         '>=' 0.11.5 >/dev/null 2>&1; then
73   # We have gettext, and a recent version! Everything is cool.
74   autopoint=autopoint
75   GETTEXT=yes
76 else
77   # User's gettext is too old. try to continue anyway.
78   echo > ABOUT-NLS
79   mkdir -p intl
80   echo > intl/Makefile.am
81   cat >> m4/private.m4 << EOF
82 dnl  User's gettext is too old, so this is a no-op
83 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
84
85 EOF
86   autopoint=:
87   GETTEXT=old
88 fi;else
89   # we don't have gettext. grmbl. try to continue anyway.
90   echo > ABOUT-NLS
91   mkdir -p intl
92   echo > intl/Makefile.am
93   cat >> m4/private.m4 << EOF
94 dnl  User does not have gettext, so this is a no-op
95 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
96
97 EOF
98   autopoint=:
99   GETTEXT=no
100 fi
101
102 # Check for pkg-config
103 if pkg-config --version >/dev/null 2>&1; then
104   # We have pkg-config, everything is cool.
105   PKGCONFIG=yes
106 else
107   # Not present, use a workaround.
108   cat >> m4/private.m4 << EOF
109 dnl  User does not have pkg-config, so this is a no-op
110 AC_DEFUN([PKG_CHECK_MODULES], [:])
111
112 EOF
113   PKGCONFIG=no
114 fi
115
116 aclocal=aclocal${amvers}
117 automake=automake${amvers}
118 autoconf=autoconf
119 autoheader=autoheader
120
121 ##
122 ## Generate the modules makefile, by parsing modules/**/Modules.am
123 ##
124
125 set +x
126 printf "generating modules/**/Makefile.am and m4/private.m4"
127
128 # Prepare m4/private.m4
129 rm -f m4/private.m4 && cat > m4/private.m4 << EOF
130 dnl  Private VLC macros - generated by bootstrap
131
132 EOF
133 rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF
134 dnl  The required AM_CONDITIONAL calls
135 dnl  XXX: too many conditionals make the build very slow, disabled them
136 AC_DEFUN([AX_VLC_CONDITIONALS], [
137 EOF
138 rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF
139 dnl  The required AC_SUBST calls
140 AC_DEFUN([AX_VLC_SUBSTS], [
141 EOF
142 rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF
143 dnl  The required AC_OUTPUT calls
144 dnl  XXX: this feature is only supported starting from automake-1.7
145 AC_DEFUN([AX_VLC_MAKEFILES], [AC_OUTPUT([
146 EOF
147 rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF
148 dnl  Helper macro for vlc-config generation
149 AC_DEFUN([AX_VLC_CONFIG_HELPER], [
150   cat >> vlc-config.in << BLAH
151 EOF
152
153 modules=""
154
155 rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
156 # Autogenerated by bootstrap - DO NOT EDIT
157 EXTRA_DIST = LIST
158 SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
159 #DIST_SUBDIRS = \$(SUBDIRS)
160 EOF
161
162 for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
163 do
164   printf "."
165   mf="modules/${dir}/Modules.am"
166   basedir="${dir%%\/*}"
167   # automake will not recurse for make dist if we don't define SUBDIRS = .
168   subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
169   rm -f modules/${dir}/Makefile.am && cat > modules/${dir}/Makefile.am << EOF
170
171 # Autogenerated by bootstrap - DO NOT EDIT - edit Modules.am instead
172
173 NULL =
174 libvlc_LIBRARIES =
175 noinst_LIBRARIES =
176 noinst_HEADERS =
177 EXTRA_DIST = Modules.am
178 BUILT_SOURCES =
179 SUBDIRS = ${subdirs}
180 #DIST_SUBDIRS = \$(SUBDIRS)
181 libvlcdir = \$(libdir)/vlc/${basedir}
182 include Modules.am
183
184 if BUILD_MOZILLA
185 if HAVE_WIN32
186 # There's no need for pic code on win32 so get rid of this to substantially
187 # reduce the compilation time.
188 pic = no
189 endif
190 else
191 pic = no
192 endif
193
194 clean-local:
195         -rm -f *.a *.so *.dll *.sl *.dylib
196
197 all: all-modules
198 all-modules:
199         @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
200         if test "\$(plugin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --target plugin); for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | xargs`; do case "\$\$z" in *\$\${mod}_plugin*) echo lib\$\${mod}_plugin\$(LIBEXT);; esac; done; fi; \\
201         if test "\$(builtin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --target builtin); for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | xargs`; do case "\$\$z" in *\$\${mod}.a*) echo lib\$\${mod}.a;; esac; done; fi; \\
202         if test "\$(pic)" != "no"; then z=\$\$(\$(VLC_CONFIG) --target builtin pic); for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | xargs`; do case "\$\$z" in *\$\${mod}_pic.a*) echo lib\$\${mod}_pic.a;; esac; done; fi; \\
203         \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
204         test -z "\$\$fail"
205
206 EOF
207   for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}`
208   do
209     if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
210         PRIVATE='#'; else
211         PRIVATE=''; fi
212     if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
213         NODIST=''; else
214         NODIST='#'; fi
215 #    cat >> m4/private.m4-tmp1 << EOF
216 #dnl  AM_CONDITIONAL(${mod}_p, test x\$${mod}_p = xyes)
217 #dnl  AM_CONDITIONAL(${mod}_b, test x\$${mod}_b = xyes)
218 #EOF
219     cat >> m4/private.m4-tmp4 << EOF
220     ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
221 EOF
222 # Generation of modules/**/Makefile.am
223 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
224 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
225 #   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
226 #   the resulting file size.
227 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
228 #   work properly with any automake version I tested.
229     cat >> modules/${dir}/Makefile.am << EOF
230 # The ${mod} plugin
231
232 EOF
233     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
234 clean-local: clean-${mod}
235 clean-${mod}:
236         -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
237
238 EOF
239     fi
240     cat >> modules/${dir}/Makefile.am << EOF
241 if UNTRUE
242 L${mod}p = lib${mod}_plugin.a
243 D${mod}p = lib${mod}_plugin\$(LIBEXT)
244 L${mod}b = lib${mod}.a
245 L${mod}pic = lib${mod}_pic.a
246 EOF
247     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
248 B${mod} = \$(nodist_SOURCES_${mod})
249 EOF
250     fi
251     cat >> modules/${dir}/Makefile.am << EOF
252 endif
253
254 EOF
255     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
256 ${PRIVATE}BUILT_SOURCES += \$(B${mod})
257 EOF
258     fi
259     cat >> modules/${dir}/Makefile.am << EOF
260 ${PRIVATE}lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
261 EOF
262     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
263 ${PRIVATE}nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
264 EOF
265     fi
266     cat >> modules/${dir}/Makefile.am << EOF
267 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
268 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
269 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
270
271 lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
272 EOF
273     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
274 nodist_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
275 EOF
276     fi
277     cat >> modules/${dir}/Makefile.am << EOF
278 lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
279 lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
280 lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`
281
282 lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
283 EOF
284     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
285 nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
286 EOF
287     fi
288     cat >> modules/${dir}/Makefile.am << EOF
289 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
290 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
291 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
292
293 libvlc_LIBRARIES += \$(L${mod}b) \$(L${mod}pic)
294 lib${mod}_DATA = \$(D${mod}p)
295
296 lib${mod}dir = \$(libdir)/vlc/${topdir}
297 ${PRIVATE}noinst_LIBRARIES += \$(L${mod}p)
298 ${PRIVATE}lib${mod}_plugin\$(LIBEXT): \$(lib${mod}_plugin_a_OBJECTS)
299 ${PRIVATE}      @case \`\$(VLC_CONFIG) --linkage ${mod}\` in \\
300 ${PRIVATE}        c++) echo \$(CXXLINK) \$(lib${mod}_plugin_a_OBJECTS) \\\`\$(VLC_CONFIG) --libs plugin ${mod}\\\` ; \$(CXXLINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\
301 ${PRIVATE}        objc) echo \$(OBJCLINK) \$(lib${mod}_plugin_a_OBJECTS) \\\`\$(VLC_CONFIG) --libs plugin ${mod}\\\` ; \$(OBJCLINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\
302 ${PRIVATE}        c|*) echo \$(LINK) \$(lib${mod}_plugin_a_OBJECTS) \\\`\$(VLC_CONFIG) --libs plugin ${mod}\\\` ; \$(LINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\
303 ${PRIVATE}      esac
304
305
306 EOF
307   done
308 done
309
310 cat >> m4/private.m4-tmp1 << EOF
311   AM_CONDITIONAL(UNTRUE, false)
312 ])
313 EOF
314 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
315 cat >> m4/private.m4-tmp2 << EOF
316 ])
317 EOF
318 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
319 cat >> m4/private.m4-tmp3 << EOF
320 ])])
321 EOF
322 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
323 cat >> m4/private.m4-tmp4 << EOF
324 BLAH
325 ])
326 EOF
327 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
328
329 echo "done."
330
331 ###
332 ###  classic bootstrap stuff
333 ###
334 set -x
335
336 # remove autotools cruft
337 rm -f aclocal.m4 configure config.log config.h config.h.in
338 # remove old autotools extra cruft
339 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
340 # remove new autotools extra cruft
341 (cd autotools && rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh)
342 # remove libtool cruft
343 rm -f ltmain.sh libtool ltconfig
344 # remove gettext cruft
345 rm -f ABOUT-NLS
346 rm -Rf intl
347 # remove old vlc cruft
348 rm -f m4/oldgettext.m4 stamp-pic configure.ac.in Modules.am
349 # remove new vlc cruft
350 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
351
352 # Automake complains if this is not present
353 rm -f vlc-config.in && printf "" > vlc-config.in
354
355 # Do the rest
356 ${autopoint} -f
357 ${aclocal} -I m4
358 ${autoconf}
359 ${autoheader}
360 ${automake} --add-missing --copy
361
362 ##
363 ##  files which need to be regenerated
364 ##
365 rm -f vlc-config.in vlc-config
366 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
367 rm -f include/vlc_symbols.h
368 rm -f mozilla/vlcintf.h
369
370 # Shut up
371 set +x
372
373 ##
374 ##  Tell the user about gettext, pkg-config and sed
375 ##
376 case "${GETTEXT}" in
377   yes) ;;
378   no) cat << EOF
379
380 ===========================================================
381 IMPORTANT NOTE: you do not have gettext installed on your
382 system. The vlc build will work, but you will not have
383 internationalization support. We suggest installing gettext.
384 EOF
385   ;;
386   old) cat << EOF
387
388 ==========================================================
389 NOTE: you have an old version of gettext installed on your
390 system. The vlc build will work, but if your system does not
391 have libintl you will not have internationalization support.
392 We suggest upgrading to gettext 0.11.5 or later.
393 EOF
394   ;;
395 esac
396
397 case "$PKGCONFIG" in
398   yes) ;;
399   no) cat << EOF
400
401 ==============================================================
402 NOTE: you do not have the "pkg-config" utility on your system;
403 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
404 reliable.
405 EOF
406   ;;
407 esac
408
409 case "$AUTOMAKESUCKS" in
410   no) ;;
411   yes) cat << EOF
412
413 =============================================================
414 IMPORTANT NOTE: your version of automake has a bug which will
415 prevent proper plugin compilation. Either compile VLC with
416 the --disable-plugins flag, or use a version of automake newer
417 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
418 EOF
419   ;;
420 esac
421
422 case "$INSTALLSUCKS" in
423   no) ;;
424   yes) cat << EOF
425
426 =============================================================
427 IMPORTANT NOTE: your version of automake has a bug which will
428 prevent proper installation. Do not use "make install" with this
429 version of automake, or use a version of automake newer than 1.5
430 (such as 1.6 or 1.7).
431 EOF
432   ;;
433 esac
434