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