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