99bc67347048b454a064a63198d0db4676e7e202
[vlc.git] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for the VLC media player
4 ##  $Id: bootstrap,v 1.76 2003/10/25 03:44:46 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-local:
198         @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
199         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; \\
200         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; \\
201         if test "\$(pic)" != "no"; then z=\$\$(\$(VLC_CONFIG) --target 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; \\
202         \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
203         test -z "\$\$fail"
204
205 EOF
206   for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}`
207   do
208     if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
209         PRIVATE='#'; else
210         PRIVATE=''; fi
211     if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
212         NODIST=''; else
213         NODIST='#'; fi
214 #    cat >> m4/private.m4-tmp1 << EOF
215 #dnl  AM_CONDITIONAL(${mod}_p, test x\$${mod}_p = xyes)
216 #dnl  AM_CONDITIONAL(${mod}_b, test x\$${mod}_b = xyes)
217 #EOF
218     cat >> m4/private.m4-tmp4 << EOF
219     ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
220 EOF
221 # Generation of modules/**/Makefile.am
222 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
223 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
224 #   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
225 #   the resulting file size.
226 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
227 #   work properly with any automake version I tested.
228     cat >> modules/${dir}/Makefile.am << EOF
229 # The ${mod} plugin
230
231 EOF
232     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
233 clean-local: clean-${mod}
234 clean-${mod}:
235         -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
236
237 EOF
238     fi
239     cat >> modules/${dir}/Makefile.am << EOF
240 if UNTRUE
241 L${mod}p = lib${mod}_plugin.a
242 D${mod}p = lib${mod}_plugin\$(LIBEXT)
243 L${mod}b = lib${mod}.a
244 L${mod}pic = lib${mod}_pic.a
245 EOF
246     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
247 B${mod} = \$(nodist_SOURCES_${mod})
248 EOF
249     fi
250     cat >> modules/${dir}/Makefile.am << EOF
251 endif
252
253 EOF
254     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
255 ${PRIVATE}BUILT_SOURCES += \$(B${mod})
256 EOF
257     fi
258     cat >> modules/${dir}/Makefile.am << EOF
259 ${PRIVATE}lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
260 EOF
261     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
262 ${PRIVATE}nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
263 EOF
264     fi
265     cat >> modules/${dir}/Makefile.am << EOF
266 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
267 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
268 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
269
270 lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
271 EOF
272     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
273 nodist_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
274 EOF
275     fi
276     cat >> modules/${dir}/Makefile.am << EOF
277 lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
278 lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
279 lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`
280
281 lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
282 EOF
283     if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
284 nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
285 EOF
286     fi
287     cat >> modules/${dir}/Makefile.am << EOF
288 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
289 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
290 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
291
292 libvlc_LIBRARIES += \$(L${mod}b) \$(L${mod}pic)
293 lib${mod}_DATA = \$(D${mod}p)
294
295 lib${mod}dir = \$(libdir)/vlc/${topdir}
296 ${PRIVATE}noinst_LIBRARIES += \$(L${mod}p)
297 ${PRIVATE}lib${mod}_plugin\$(LIBEXT): \$(lib${mod}_plugin_a_OBJECTS)
298 ${PRIVATE}      @case \`\$(VLC_CONFIG) --linkage ${mod}\` in \\
299 ${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}\` ;; \\
300 ${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}\` ;; \\
301 ${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}\` ;; \\
302 ${PRIVATE}      esac
303
304
305 EOF
306   done
307 done
308
309 cat >> m4/private.m4-tmp1 << EOF
310   AM_CONDITIONAL(UNTRUE, false)
311 ])
312 EOF
313 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
314 cat >> m4/private.m4-tmp2 << EOF
315 ])
316 EOF
317 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
318 cat >> m4/private.m4-tmp3 << EOF
319 ])])
320 EOF
321 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
322 cat >> m4/private.m4-tmp4 << EOF
323 BLAH
324 ])
325 EOF
326 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
327
328 echo "done."
329
330 ###
331 ###  classic bootstrap stuff
332 ###
333 set -x
334
335 # remove autotools cruft
336 rm -f aclocal.m4 configure config.log config.h config.h.in
337 # remove old autotools extra cruft
338 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
339 # remove new autotools extra cruft
340 (cd autotools && rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh)
341 # remove libtool cruft
342 rm -f ltmain.sh libtool ltconfig
343 # remove gettext cruft
344 rm -f ABOUT-NLS
345 rm -Rf intl
346 # remove old vlc cruft
347 rm -f m4/oldgettext.m4 stamp-pic configure.ac.in Modules.am
348 # remove new vlc cruft
349 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
350
351 # Automake complains if this is not present
352 rm -f vlc-config.in && printf "" > vlc-config.in
353
354 # Do the rest
355 ${autopoint} -f
356 ${aclocal} -I m4
357 ${autoconf}
358 ${autoheader}
359 ${automake} --add-missing --copy
360
361 ##
362 ##  files which need to be regenerated
363 ##
364 rm -f vlc-config.in vlc-config
365 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
366 rm -f include/vlc_symbols.h
367 rm -f mozilla/vlcintf.h
368
369 # Shut up
370 set +x
371
372 ##
373 ##  Tell the user about gettext, pkg-config and sed
374 ##
375 case "${GETTEXT}" in
376   yes) ;;
377   no) cat << EOF
378
379 ===========================================================
380 IMPORTANT NOTE: you do not have gettext installed on your
381 system. The vlc build will work, but you will not have
382 internationalization support. We suggest installing gettext.
383 EOF
384   ;;
385   old) cat << EOF
386
387 ==========================================================
388 NOTE: you have an old version of gettext installed on your
389 system. The vlc build will work, but if your system does not
390 have libintl you will not have internationalization support.
391 We suggest upgrading to gettext 0.11.5 or later.
392 EOF
393   ;;
394 esac
395
396 case "$PKGCONFIG" in
397   yes) ;;
398   no) cat << EOF
399
400 ==============================================================
401 NOTE: you do not have the "pkg-config" utility on your system;
402 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
403 reliable.
404 EOF
405   ;;
406 esac
407
408 case "$AUTOMAKESUCKS" in
409   no) ;;
410   yes) cat << EOF
411
412 =============================================================
413 IMPORTANT NOTE: your version of automake has a bug which will
414 prevent proper plugin compilation. Either compile VLC with
415 the --disable-plugins flag, or use a version of automake newer
416 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
417 EOF
418   ;;
419 esac
420
421 case "$INSTALLSUCKS" in
422   no) ;;
423   yes) cat << EOF
424
425 =============================================================
426 IMPORTANT NOTE: your version of automake has a bug which will
427 prevent proper installation. Do not use "make install" with this
428 version of automake, or use a version of automake newer than 1.5
429 (such as 1.6 or 1.7).
430 EOF
431   ;;
432 esac
433