fix for missing modules - hope this closes #412
[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   set +x
99   echo "you need gettextize (package gettext-devel or gettext)"
100   exit 1
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 assume package was not found
131 AC_DEFUN([PKG_CHECK_MODULES],[ifelse([\$4], , :, [\$4])])
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#lib} ; \
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 if MAINTAINER_MODE
232 \$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap
233         cd \$(top_srcdir) && \$(SHELL) ./bootstrap
234 endif
235
236 mostlyclean-local:
237         -rm -f *.a *\$(LIBEXT)
238
239 ### automake creates libvlcdir after running install-*-local
240 ### so we have to create it ourselves first
241 install-exec-local: all-modules
242         mkdir -p -- "\$(DESTDIR)\$(libvlcdir)"
243         @z=\$\$(\$(VLC_CONFIG) --list plugin); \
244         for mod in \$(mods); do \
245           case "\$\$z " \
246             in *\ \$\${mod}\ *) \
247               echo \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" ; \
248               \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" || exit \$\$?; \
249               ;; \
250           esac; \
251         done
252         @z=\$\$(\$(VLC_CONFIG) --list builtin); \
253         for mod in \$(mods); do \
254           case "\$\$z " \
255             in *\ \$\${mod}\ *) \
256               echo \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
257               \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
258               ;; \
259           esac; \
260         done
261 if BUILD_MOZILLA
262         @z=\$\$(\$(VLC_CONFIG) --list builtin); \
263         for mod in \$(mods); do \
264           case "\$\$z " \
265             in *\ \$\${mod}\ *) \
266               echo \$(INSTALL_DATA) "lib\$\${mod}_pic.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
267               \$(INSTALL_DATA) "lib\$\${mod}_pic.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
268               ;; \
269           esac; \
270         done
271 endif
272
273 uninstall-local:
274         @z=\$\$(\$(VLC_CONFIG) --list plugin); \
275         for mod in \$(mods); do \
276           case "\$\$z " \
277             in *\ \$\${mod}\ *) \
278               echo rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" ; \
279               rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" || true; \
280               ;; \
281           esac; \
282         done
283         @z=\$\$(\$(VLC_CONFIG) --list builtin); \
284         for mod in \$(mods); do \
285           case "\$\$z " \
286             in *\ \$\${mod}\ *) \
287               echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" ; \
288               rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" || true; \
289               ;; \
290           esac; \
291         done
292 if BUILD_MOZILLA
293         @z=\$\$(\$(VLC_CONFIG) --list builtin); \
294         for mod in \$(mods); do \
295           case "\$\$z " \
296             in *\ \$\${mod}\ *) \
297               echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}_pic.a" ; \
298               rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}_pic.a" || true; \
299               ;; \
300           esac; \
301         done
302 endif
303
304 EOF
305   for mod in $mods
306   do
307     if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then
308         NODIST=''; else
309         NODIST='#'; fi
310     cat >> m4/private.m4-tmp4 << EOF
311     ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
312 EOF
313 # Generation of modules/**/Makefile.am
314 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
315 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
316 #   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
317 #   the resulting file size.
318 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
319 #   work properly with any automake version I tested.
320     cat >> "${makf}" << EOF
321 # The ${mod} plugin
322
323 EOF
324     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
325 clean-local: clean-${mod}
326 clean-${mod}:
327         -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
328
329 EOF
330     fi
331     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
332 BUILT_SOURCES += \$(B${mod})
333 EOF
334     fi
335     cat >> "${makf}" << EOF
336 lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
337 EOF
338     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
339 nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
340 EOF
341     fi
342     cat >> "${makf}" << EOF
343 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
344 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
345 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
346
347 lib${mod}_pic_a_SOURCES = \$(SOURCES_${mod})
348 EOF
349     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
350 nodist_lib${mod}_pic_a_SOURCES = \$(nodist_SOURCES_${mod})
351 EOF
352     fi
353     cat >> "${makf}" << EOF
354 lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
355 lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
356 lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`
357
358 lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
359 EOF
360     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
361 nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
362 EOF
363     fi
364     cat >> "${makf}" << EOF
365 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
366 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
367 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
368
369 EOF
370   done
371 done
372
373 cat >> m4/private.m4-tmp1 << EOF
374 ])
375 EOF
376 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
377 cat >> m4/private.m4-tmp2 << EOF
378 ])
379 EOF
380 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
381 cat >> m4/private.m4-tmp3 << EOF
382 ])])
383 EOF
384 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
385 cat >> m4/private.m4-tmp4 << EOF
386 BLAH
387 ])
388 EOF
389 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
390
391 echo " done."
392
393 ###
394 ###  classic bootstrap stuff
395 ###
396 set -x
397
398 # remove autotools cruft
399 rm -f aclocal.m4 configure config.log config.h config.h.in
400 rm -Rf autom4te*.cache
401 # remove old autotools extra cruft
402 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
403 # remove new autotools extra cruft
404 rm -Rf autotools
405 mkdir autotools
406 # remove libtool cruft
407 rm -f ltmain.sh libtool ltconfig
408 # remove gettext cruft
409 rm -f ABOUT-NLS
410 rm -Rf intl
411 # remove old vlc cruft
412 rm -f m4/oldgettext.m4 stamp-pic configure.ac.in Modules.am
413 # remove new vlc cruft
414 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
415
416 # Automake complains if these are not present
417 rm -f vlc-config.in && printf "" > vlc-config.in
418 if [ "$GETTEXT" != "yes" ]; then
419   test -d intl || mkdir intl
420   printf "" > intl/Makefile.am
421   printf "" > ABOUT-NLS
422 fi
423
424 # Do the rest
425 ${autopoint} -f
426 ${aclocal} ${ACLOCAL_ARGS}
427 ${autoconf}
428 ${autoheader}
429 ${automake} --add-missing --copy
430
431 ##
432 ##  files which need to be regenerated
433 ##
434 rm -f vlc-config.in vlc-config
435 rm -f src/misc/modules_builtin.h
436 rm -f mozilla/vlcintf.h
437
438 # Shut up
439 set +x
440
441 ##
442 ##  Tell the user about gettext, pkg-config and sed
443 ##
444 if [ "${GETTEXT}" = "old" ]; then
445   cat << EOF
446
447 ==========================================================
448 NOTE: you have an old version of gettext installed on your
449 system. The vlc build will work, but if your system does not
450 have libintl you will not have internationalization support.
451 We suggest upgrading to gettext 0.11.5 or later.
452 EOF
453 fi
454
455 if [ "$PKGCONFIG" = "no" ]; then
456   cat << EOF
457
458 ==============================================================
459 NOTE: you do not have the "pkg-config" utility on your system;
460 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
461 reliable.
462 EOF
463 fi
464
465 if [ "$AUTOMAKESUCKS" = "yes" ]; then
466   cat << EOF
467
468 =============================================================
469 IMPORTANT NOTE: your version of automake has a bug which will
470 prevent proper plugin compilation. Either compile VLC with
471 the --disable-plugins flag, or use a version of automake newer
472 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
473 EOF
474 fi
475
476 if [ "$INSTALLSUCKS" = "yes" ]; then
477   cat << EOF
478
479 =============================================================
480 IMPORTANT NOTE: your version of automake has a bug which will
481 prevent proper installation. Do not use "make install" with this
482 version of automake, or use a version of automake newer than 1.5
483 (such as 1.6 or 1.7).
484 EOF
485 fi
486