]> git.sesse.net Git - vlc/blob - bootstrap
Remove gettext template
[vlc] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for the VLC media player
4 ##
5 ## Copyright (C) 2005-2006 the VideoLAN team
6 ##
7 ##  Authors: Sam Hocevar <sam@zoy.org>
8 ##           RĂ©mi Denis-Courmont <rem # videolan # 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 ${ACLOCAL_ARGS}"
35
36 # Check for contrib directory
37 if test -d extras/contrib/bin; then
38   export PATH="`pwd`/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 elif test ".`uname -s`" = ".Darwin"; then
50   set +x
51   echo ""
52   echo "ERR: Contribs haven't been built"
53   echo "ERR: Please run:"
54   echo "ERR: "
55   echo "ERR:    'cd extras/contrib && ./bootstrap && make && cd ../..'"
56   echo "ERR: "
57   echo "ERR: Make sure fink has been disabled too."
58   echo ""
59   set -x
60   exit 1
61 fi
62
63 # Check for autoconf
64 rm -f m4/autoconf260.m4
65 case "$(autoconf --version|head -n 1)" in
66   *2.5[012345678]*)
67     echo "Hey, your autoconf is quite old. Update it." >&2
68     exit 1
69     ;;
70
71   *2.59*)
72     echo "Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP."
73     cp -f extras/m4/autoconf260.m4 m4/
74     ;;
75 esac
76
77 # Check for automake
78 amvers="no"
79 for v in "-1.10" "110" "-1.9" "19"; do
80   if automake${v} --version >/dev/null 2>&1; then
81     amsuff="${v}"
82     amvers="`echo ${v} | sed -e 's/^-//'`"
83     break
84   fi
85 done
86
87 if test "${amvers}" = "no" && automake --version > /dev/null 2>&1; then
88   amvers="`automake --version | sed -e '1s/[^0-9]*//' -e q`"
89   amsuff=""
90 fi
91
92 case "${amvers}" in
93   no|1.[012345678]|1.[0123456].*|1[0123456]|1.[0123456]-*)
94     set +x
95     echo "$0: you need automake version 1.9 or later"
96     exit 1
97     ;;
98 esac
99
100 # Check for libtool
101 libtoolize="no"
102 if test -x extras/contrib/bin/libtoolize; then
103   libtoolize="extras/contrib/bin/libtoolize"
104 elif glibtoolize --version >/dev/null 2>&1; then
105   libtoolize="glibtoolize"
106 elif libtoolize --version >/dev/null 2>&1; then
107   libtoolize="libtoolize"
108 fi
109
110 if test "$libtoolize" = "no"; then
111   set +x
112   echo "$0: you need libtool"
113   exit 1
114 fi
115
116 # Check for gettext
117 if gettextize --version >/dev/null 2>&1; then
118 # Autopoint is available from 0.11.3, but we need 0.11.5
119 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
120         '>=' 0.11.5 >/dev/null 2>&1; then
121   # We have gettext, and a recent version! Everything is cool.
122   autopoint=autopoint
123   GETTEXT=yes
124 else
125   # User's gettext is too old. try to continue anyway.
126   autopoint=:
127   GETTEXT=old
128 fi;else
129   set +x
130   echo "you need gettextize (package gettext-devel or gettext)"
131   exit 1
132 fi
133
134 # Check for pkg-config
135 if pkg-config --version >/dev/null 2>&1; then
136   # We have pkg-config, everything is cool.
137   PKGCONFIG=yes
138 else
139   PKGCONFIG=no
140 fi
141
142 aclocal=aclocal${amsuff}
143 automake=automake${amsuff}
144 autoconf=autoconf
145 autoheader=autoheader
146
147 ##
148 ## Generate the modules makefile, by parsing modules/**/Modules.am
149 ##
150
151 set +x
152 echo "generating modules/**/Makefile.am and m4/private.m4"
153
154 # Prepare m4/private.m4
155 rm -f m4/private.m4 && cat > m4/private.m4 << EOF
156 dnl  Private VLC macros - generated by bootstrap
157
158 EOF
159
160 if [ "${PKGCONFIG}" = "no" ]; then cat >> m4/private.m4 << EOF
161 dnl  User does not have pkg-config, so assume package was not found
162 AC_DEFUN([PKG_CHECK_MODULES],[ifelse([\$4], , :, [\$4])])
163
164 EOF
165 fi
166
167 if [ "${GETTEXT}" != "yes" ]; then cat >> m4/private.m4 << EOF
168 dnl  User does not have gettext, so this is a no-op
169 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
170
171 EOF
172 fi
173
174 cat >> m4/private.m4 << EOF
175 dnl  Helper macro for vlc-config generation
176 AC_DEFUN([VLC_CONFIG_HELPER], [
177   cat >> vlc-config.in << BLAH
178 EOF
179
180 modules=""
181
182 rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
183 # Autogenerated by bootstrap - DO NOT EDIT
184 EXTRA_DIST = LIST
185 SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
186 EOF
187
188 for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
189 do
190   printf "."
191   modf="modules/${dir}/Modules.am"
192   makf="modules/${dir}/Makefile.am"
193   basedir="`echo "${dir}" | cut -f1 -d/`"
194   # automake will not recurse for make dist if we don't define SUBDIRS = .
195   subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
196   mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`"
197   extra_ltlibs=""
198   for mod in $mods
199   do
200     extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la"
201   done
202   rm -f "${makf}" && cat > "${makf}" << EOF
203
204 # ${makf} automatically generated from ${modf} by bootstrap
205 # DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead
206
207 basedir = ${basedir}
208 mods = ${mods}
209
210 NULL =
211 libvlc_LTLIBRARIES =
212 EXTRA_DIST = Modules.am
213 BUILT_SOURCES =
214 CLEANFILES =
215 SUBDIRS = ${subdirs}
216 SUFFIXES = _plugin\$(LIBEXT) _plugin.la
217
218 libvlcdir = \$(libdir)/vlc/\$(basedir)
219
220 EXTRA_LTLIBRARIES = ${extra_ltlibs}
221
222 include Modules.am
223
224 LTLIBVLC = -L\$(top_builddir)/src -lvlc
225
226 AM_LDFLAGS = -rpath '\$(libvlcdir)' -avoid-version \\
227         -module -no-undefined -shrext \$(LIBEXT) \\
228         -export-symbol-regex ^\$(VLC_ENTRY)\$\$
229
230 if USE_LIBTOOL
231 AM_LIBADD = \$(LTLIBVLC)
232 else
233 LIBVLC = -l\$(top_builddir) -lvlc
234 endif
235
236 all: all-modules
237
238 nice:
239         \$(top_builddir)/compile
240
241 # Find out which modules were enabled and tell make to build them
242 all-modules:
243 if USE_LIBTOOL
244         @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
245         z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin.la;; esac; done; \\
246         \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
247         test -z "\$\$fail"
248 else
249         @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
250         z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin\$(LIBEXT);; esac; done; \\
251         z=\$\$(\$(VLC_CONFIG) --list builtin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}.a;; esac; done; \\
252         \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
253         test -z "\$\$fail"
254 endif
255
256 # Build a plugin with the adequate linker and linker's flags
257 _plugin.la_plugin\$(LIBEXT):
258         @mod="\$*" ; mod=\$\${mod#lib} ; \
259         ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBVLC) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \
260         case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\
261           c++)  ld="\$(CXXLINK)" ;; \
262           objc) ld="\$(OBJCLINK)" ;; \
263           c|*)  ld="\$(LINK)" ;; \
264         esac ; \
265         echo \$\$ld \$< \$\$ldfl ; \
266         \$\$ld \$< \$\$ldfl
267         @if test -f "\$@.exe"; then mv -f -- "\$@.exe" "\$@"; fi
268
269 if MAINTAINER_MODE
270 \$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap
271         cd \$(top_srcdir) && \$(SHELL) ./bootstrap
272 endif
273
274 mostlyclean-local:
275         -rm -f *.la
276 if !USE_LIBTOOL
277         -rm -f *\$(LIBEXT)
278 endif
279
280 ### automake creates libvlcdir after running install-*-local
281 ### so we have to create it ourselves first
282 install-exec-local: all-modules
283 if USE_LIBTOOL
284         @if test -z "\$(libvlc_LTLIBRARIES)"; then \
285           z=\$\$(\$(VLC_CONFIG) --list plugin); \
286           m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
287           test -z "\$\$m" || \
288             \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install-libvlcLTLIBRARIES || exit \$\$? ; \
289         fi
290 else
291         mkdir -p -- "\$(DESTDIR)\$(libvlcdir)"
292         @z=\$\$(\$(VLC_CONFIG) --list plugin); \
293         for mod in \$(mods); do \
294           case "\$\$z " \
295             in *\ \$\${mod}\ *) \
296               echo \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" ; \
297               \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" || exit \$\$?; \
298               ;; \
299           esac; \
300         done
301 endif
302
303 uninstall-local:
304 if USE_LIBTOOL
305         @if test -z "\$(libvlc_LTLIBRARIES)"; then \
306           z=\$\$(\$(VLC_CONFIG) --list plugin); \
307           m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
308           test -z "\$\$m" || \
309             \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall-libvlcLTLIBRARIES || exit \$\$?; \
310         fi
311 else
312         @z=\$\$(\$(VLC_CONFIG) --list plugin); \
313         for mod in \$(mods); do \
314           case "\$\$z " \
315             in *\ \$\${mod}\ *) \
316               echo rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" ; \
317               rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" || 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 << 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     cat >> "${makf}" << EOF
344 lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod})
345 EOF
346     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
347 nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod})
348 CLEANFILES += "\$(nodist_SOURCES_${mod})"
349 BUILT_SOURCES += \$(B${mod})
350 EOF
351     fi
352     cat >> "${makf}" << EOF
353 lib${mod}_plugin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
354 lib${mod}_plugin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
355 lib${mod}_plugin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
356 lib${mod}_plugin_la_LDFLAGS = \`\$(VLC_CONFIG) --libs plugin ${mod}\` \$(AM_LDFLAGS)
357 lib${mod}_plugin_la_LIBADD = \$(AM_LIBADD)
358 EOF
359   done
360 done
361
362 cat >> m4/private.m4 << EOF
363 BLAH
364 ])
365 EOF
366
367 ###
368 ###  classic bootstrap stuff
369 ###
370 set -x
371
372 # remove autotools cruft
373 rm -f aclocal.m4 configure config.log config.h config.h.in
374 rm -Rf autom4te*.cache
375 # remove old autotools extra cruft
376 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
377 # remove new autotools extra cruft
378 rm -Rf autotools
379 mkdir autotools
380 # remove libtool cruft
381 rm -f ltmain.sh libtool ltconfig
382 # remove gettext cruft
383 rm -f ABOUT-NLS
384 rm -Rf intl
385 # remove vlc cruft
386 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
387
388 # Automake complains if these are not present
389 rm -f vlc-config.in && printf "" > vlc-config.in
390 if [ "$GETTEXT" != "yes" ]; then
391   test -d intl || mkdir intl
392   printf "" > intl/Makefile.am
393   printf "" > ABOUT-NLS
394 fi
395
396 # Libtoolize directory
397 ${libtoolize} --copy --force
398 if test -f "ltmain.sh"; then
399   echo "$0: working around a minor libtool issue"
400   mv ltmain.sh autotools/
401 fi
402
403 # patch for DLL link for libtool on cygwin (remove when fixed)
404 if test ".`uname -s|sed -n '/^CYGWIN/p'`" != "."; then
405 patch -s -p0 << 'EOF'
406 --- autotools/ltmain.orig       2006-12-05 15:15:42.064607000 +0000
407 +++ autotools/ltmain.sh 2006-12-05 15:16:24.705777800 +0000
408 @@ -4360,7 +4360,7 @@
409  
410      prog)
411        case $host in
412 -       *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
413 +       *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,;s,.dll.exe$,.dll,'` ;;
414        esac
415        if test -n "$vinfo"; then
416         $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
417 EOF
418 fi
419
420 # Do the rest
421 ${autopoint} -f
422 rm -f po/Makevars.template
423 ${aclocal} ${ACLOCAL_ARGS}
424 ${autoconf}
425 ${autoheader}
426 ${automake} --add-missing --copy -Wall
427
428 ##
429 ##  files which need to be regenerated
430 ##
431 rm -f vlc-config.in vlc-config
432 rm -f src/misc/modules_builtin.h
433
434 # Shut up
435 set +x
436
437 ##
438 ##  Tell the user about gettext, pkg-config and sed
439 ##
440 if [ "${GETTEXT}" = "old" ]; then
441   cat << EOF
442
443 ==========================================================
444 NOTE: you have an old version of gettext installed on your
445 system. The vlc build will work, but if your system does not
446 have libintl you will not have internationalization support.
447 We suggest upgrading to gettext 0.11.5 or later.
448 EOF
449 fi
450
451 if [ "$PKGCONFIG" = "no" ]; then
452   cat << EOF
453
454 ==============================================================
455 NOTE: you do not have the "pkg-config" utility on your system;
456 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
457 reliable.
458 EOF
459 fi
460