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