3 ## bootstrap file for vlc, the VideoLAN Client
4 ## $Id: bootstrap,v 1.25 2002/11/10 18:04:22 sam Exp $
6 ## Authors: Samuel Hocevar <sam@zoy.org>
9 ### get a sane environment
19 while test $# -gt 0; do
28 echo "$0: unknown option $1"
29 echo "recognized flags are --update-msvc and --update-po"
37 ## Update the MSVC project files
39 if test "$do_msvc" = "no"
41 echo "not updating MSVC project file. use --update-msvc to force doing it."
45 echo "no Makefile found, did you run ./configure?"
52 # Sources that get built under Win32
53 VLC_SOURCES=`make show-vlc-sources | grep '^X: ' | cut -b3-`
54 LIBVLC_SOURCES=`make show-libvlc-sources | grep '^X: ' | cut -b3-`
55 LIBVLC_HEADERS=`make show-libvlc-headers | grep '^X: ' | cut -b3-`
56 LIBVLC_PKG_HEADERS=`make show-libvlc-pkg-headers | grep '^X: ' | cut -b3-`
58 for target in msvc/vlc.vcp msvc/vlc.dsp
61 # Top of the project file
62 cat ${target}.in > ${target}
64 cat >> ${target} << EOF
65 # Begin Group "Source Files"${M}
66 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"${M}
67 # Begin Group "vlc"${M}
69 for file in ${VLC_SOURCES}
71 cat >> ${target} << EOF
72 # Begin Source File${M}
73 SOURCE="..\\`echo $file | sed -e 's%/%\\\\%g'`"${M}
77 cat >> ${target} << EOF
79 # Begin Group "libvlc"${M}
81 for file in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep -v "/.*/"`
83 cat >> ${target} << EOF
84 # Begin Source File${M}
85 SOURCE="..\\`echo $file | sed -e 's%/%\\\\%g'`"${M}
86 # ADD CPP /D "__VLC__" /D PLUGIN_PATH=\\"plugins\\" /D DATA_PATH=\\"share\\"${M}
90 for subdir in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep "/.*/" | cut -f2 -d/ | sort | uniq`
92 cat >> ${target} << EOF
93 # Begin Group "${subdir}"${M}
95 for file in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep "/${subdir}/"`
97 if test "${target}" = "msvc/vlc.vcp"
99 cat >> ${target} << EOF
100 # Begin Source File${M}
101 SOURCE="..\\`echo $file | sed -e 's%/%\\\\%g'`"${M}
102 # ADD CPP /D "__VLC__" /D PLUGIN_PATH=\\"plugins\\" /D DATA_PATH=\\"share\\"${M}
103 !IF "\$(CFG)" == "vlc - Win32 (WCE MIPS) Release"${M}
104 # PROP Intermediate_Dir "Release\\${subdir}"${M}
105 # PROP Output_Dir "Release\\${subdir}"${M}
106 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE MIPS) Debug"${M}
107 # PROP Intermediate_Dir "Debug\\${subdir}"${M}
108 # PROP Output_Dir "Debug\\${subdir}"${M}
109 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE SH4) Release"${M}
110 # PROP Intermediate_Dir "Release\\${subdir}"${M}
111 # PROP Output_Dir "Release\\${subdir}"${M}
112 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE SH4) Debug"${M}
113 # PROP Intermediate_Dir "Debug\\${subdir}"${M}
114 # PROP Output_Dir "Debug\\${subdir}"${M}
115 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE SH3) Release"${M}
116 # PROP Intermediate_Dir "Release\\${subdir}"${M}
117 # PROP Output_Dir "Release\\${subdir}"${M}
118 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE SH3) Debug"${M}
119 # PROP Intermediate_Dir "Debug\\${subdir}"${M}
120 # PROP Output_Dir "Debug\\${subdir}"${M}
121 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE ARM) Release"${M}
122 # PROP Intermediate_Dir "Release\\${subdir}"${M}
123 # PROP Output_Dir "Release\\${subdir}"${M}
124 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE ARM) Debug"${M}
125 # PROP Intermediate_Dir "Debug\\${subdir}"${M}
126 # PROP Output_Dir "Debug\\${subdir}"${M}
127 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE x86em) Release"${M}
128 # PROP Intermediate_Dir "Release\\${subdir}"${M}
129 # PROP Output_Dir "Release\\${subdir}"${M}
130 !ELSEIF "\$(CFG)" == "vlc - Win32 (WCE x86em) Debug"${M}
131 # PROP Intermediate_Dir "Debug\\${subdir}"${M}
132 # PROP Output_Dir "Debug\\${subdir}"${M}
134 # End Source File${M}
137 cat >> ${target} << EOF
138 # Begin Source File${M}
139 SOURCE="..\\`echo $file | sed -e 's%/%\\\\%g'`"${M}
140 # ADD CPP /D "__VLC__" /D PLUGIN_PATH=\\"plugins\\" /D DATA_PATH=\\"share\\"${M}
141 !IF "\$(CFG)" == "vlc - Win32 Release"${M}
142 # PROP Intermediate_Dir "Release\\${subdir}"${M}
143 # PROP Output_Dir "Release\\${subdir}"${M}
144 !ELSEIF "\$(CFG)" == "vlc - Win32 Debug"${M}
145 # PROP Intermediate_Dir "Debug\\${subdir}"${M}
146 # PROP Output_Dir "Debug\\${subdir}"${M}
148 # End Source File${M}
152 cat >> ${target} << EOF
156 cat >> ${target} << EOF
161 echo 'no modules yet'
163 cat >> ${target} << EOF
164 # Begin Group "Header Files"${M}
165 # PROP Default_Filter "h;hpp;hxx;hm;inl"${M}
167 for file in ${LIBVLC_HEADERS}
169 cat >> ${target} << EOF
170 # Begin Source File${M}
171 SOURCE="..\\`echo $file | sed -e 's%/%\\\\%g'`"${M}
172 # End Source File${M}
175 cat >> ${target} << EOF
176 # Begin Group "vlc"${M}
178 for file in ${LIBVLC_PKG_HEADERS}
180 cat >> ${target} << EOF
181 # Begin Source File${M}
182 SOURCE="..\\`echo $file | sed -e 's%/%\\\\%g'`"${M}
183 # End Source File${M}
186 cat >> ${target} << EOF
190 # Bottom of the project file - handles resource files too
191 cat ${target}.out >> ${target}
198 ## Update the potfiles because no one ever does it
200 if test "$do_po" = "no"
202 echo "not updating potfiles. use --update-po to force doing it."
205 make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
212 ## Check that our tools don't suck
215 if test ! 20000 -eq `perl -e 'printf "%s\n","a"x20000' | sed -e 's/.//' 2>/dev/null | wc -c`
224 ## Generate the modules makefile, by parsing modules/**/Modules.am
227 printf "generating Modules.am and configure.ac"
232 ALL_FLAGS="`sed -n -e '/^[^=A-Z]*[A-Z]*FLAGS_[^=]*=/s/[^=A-Z]*\([A-Z]*FLAGS_[^=]*=\).*/\1/p' < configure.ac.in | sort | uniq`"
234 cat >> configure.ac << EOF
235 dnl ################################################################
236 dnl # Do not edit this file, it was generated from configure.ac.in #
237 dnl ################################################################
240 sed -n -e '/dnl do not touch this line/q;p' < configure.ac.in >> configure.ac
243 for mf in `sed -ne 's@[^a-z]*\([^ ]*\)am.*@modules/\1am@p' < modules/Makefile.am`
246 dir=`echo ${mf} | sed -e 's@\(.*\)/.*@\1@'`
247 topdir=`echo ${dir} | cut -f2 -d/`
248 sym=`echo ${dir} | sed -e 'y@/@_@'`
249 cat >> Modules.am << EOF
252 include ${dir}/Modules.am
255 sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | while read mod
258 if echo "$ALL_FLAGS" | grep '^CPPFLAGS_'${mod}'=$' >/dev/null 2>&1; then
259 echo "AC_SUBST(CPPFLAGS_${mod})" >> configure.ac; fi
260 if echo "$ALL_FLAGS" | grep '^CFLAGS_'${mod}'=$' >/dev/null 2>&1; then
261 echo "AC_SUBST(CFLAGS_${mod})" >> configure.ac; fi
262 if echo "$ALL_FLAGS" | grep '^CXXFLAGS_'${mod}'=$' >/dev/null 2>&1; then
264 echo "AC_SUBST(CXXFLAGS_${mod})" >> configure.ac; fi
265 if echo "$ALL_FLAGS" | grep '^OBJCFLAGS_'${mod}'=$' >/dev/null 2>&1; then
267 echo "AC_SUBST(OBJCFLAGS_${mod})" >> configure.ac; fi
268 if echo "$ALL_FLAGS" | grep '^LDFLAGS_'${mod}'=$' >/dev/null 2>&1; then
269 echo "AC_SUBST(LDFLAGS_${mod})" >> configure.ac; fi
270 if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
273 if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
276 cat >> configure.ac << EOF
277 AM_CONDITIONAL(${mod}_plugin, test x\$${mod}_plugin = xyes)
278 AM_CONDITIONAL(${mod}_builtin, test x\$${mod}_builtin = xyes)
280 # Generation of Modules.am
281 # ~~~~~~~~~~~~~~~~~~~~~~~~
282 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
283 # S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
284 # the resulting file size.
285 # - *_CFLAGS, *_CXXFLAGS etc. include *_CPPFLAGS because per-object CPPFLAGS
286 # does not seem to work properly with any automake version I tested.
287 cat >> Modules.am << EOF
292 L_${mod}_p = ${dir}/lib${mod}_plugin.a
294 D_${mod}_p = ${dir}/lib${mod}_plugin\$(LIBEXT)
295 ${NODIST}B_${mod}_p = \$(nodist_SOURCES_${mod})
298 L_${mod}_b = ${dir}/lib${mod}.a
299 F_${mod}_b = \$(LDFLAGS_${mod})
301 L_${mod}_pic = ${dir}/lib${mod}_pic.a
303 ${NODIST}B_${mod}_b = \$(nodist_SOURCES_${mod})
306 L_builtin += \$(L_${mod}_b)
307 L_builtin_pic += \$(L_${mod}_pic)
308 LDFLAGS_builtin += \$(F_${mod}_b)
309 ${PRIVATE}BUILT_SOURCES += \$(B_${mod}_p) \$(B_${mod}_b)
310 PLUGIN_FILES += \$(D_${mod}_p)
312 ${PRIVATE}${sym}_lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
313 ${NODIST}${PRIVATE}nodist_${sym}_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
314 ${sym}_lib${mod}_plugin_a_CPPFLAGS = \$(CPPFLAGS_plugin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
315 ${sym}_lib${mod}_plugin_a_CFLAGS = \$(CFLAGS_plugin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
316 ${sym}_lib${mod}_plugin_a_CXXFLAGS = \$(CXXFLAGS_plugin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
317 ${sym}_lib${mod}_plugin_a_OBJCFLAGS = \$(OBJCFLAGS_plugin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
319 ${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
320 ${NODIST}nodist_${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
321 ${sym}_lib${mod}_pic_a_CPPFLAGS = \$(CPPFLAGS_builtin_pic) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
322 ${sym}_lib${mod}_pic_a_CFLAGS = \$(CFLAGS_builtin_pic) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
323 ${sym}_lib${mod}_pic_a_CXXFLAGS = \$(CXXFLAGS_builtin_pic) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
324 ${sym}_lib${mod}_pic_a_OBJCFLAGS = \$(OBJCFLAGS_builtin_pic) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
326 ${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
327 ${NODIST}nodist_${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
328 ${sym}_lib${mod}_a_CPPFLAGS = \$(CPPFLAGS_builtin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
329 ${sym}_lib${mod}_a_CFLAGS = \$(CFLAGS_builtin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
330 ${sym}_lib${mod}_a_CXXFLAGS = \$(CXXFLAGS_builtin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
331 ${sym}_lib${mod}_a_OBJCFLAGS = \$(OBJCFLAGS_builtin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
333 libvlc_LIBRARIES += \$(L_${mod}_b) \$(L_${mod}_pic)
334 lib${mod}_DATA = \$(D_${mod}_p)
336 lib${mod}dir = \$(libdir)/vlc/${topdir}
337 ${PRIVATE}noinst_LIBRARIES += \$(L_${mod}_p)
338 ${PRIVATE}${dir}/lib${mod}_plugin\$(LIBEXT): \$(${sym}_lib${mod}_plugin_a_OBJECTS)
339 ${PRIVATE} \$(${LINKER}) \$^ -shared \$(LDFLAGS_plugins) \$(LDFLAGS_${mod})
346 echo "AM_CONDITIONAL(UNTRUE, false)" >> configure.ac
347 sed -n -e '/dnl do not touch this line/,//p' < configure.ac.in >> configure.ac
352 ### classic bootstrap stuff
355 rm -f aclocal.m4 m4/oldgettext.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh
359 if gettextize --version >/dev/null 2>&1
361 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
362 '>' 0.11.2 >/dev/null 2>&1
364 # We have gettext, and a recent version! Everything is cool.
368 # User's gettext is too old. try to continue anyway.
370 echo > intl/Makefile.am
371 echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
374 # we don't have gettext. grmbl. try to continue anyway.
376 echo > intl/Makefile.am
377 echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
383 if automake-1.7 --version >/dev/null 2>&1
387 if automake-1.6 --version >/dev/null 2>&1
390 if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
391 then AUTOMAKESUCKS=yes
394 if automake-1.5 --version >/dev/null 2>&1
398 if automake --version > /dev/null 2>&1
400 amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
406 if expr "$amvers" "<" "1.5" > /dev/null 2>&1
415 if test x$amvers = xnone
418 echo "you need automake version 1.5 or later"
423 aclocal${amvers} -I m4 || exit 1
426 automake${amvers} --foreign --add-missing --copy || PERLSUCKS=yes
434 echo "==========================================================="
435 echo "IMPORTANT NOTE: automake failed. On certain systems this is"
436 echo "because of insufficient stack size. Please set the stack"
437 echo "size to something bigger or unlimited (\`unlimit stacksize')"
438 echo "and try again."
443 # Wrap automake's long lines, because the Solaris sed doesn't support lines
444 # longer than 3999 characters, and ./configure calls sed. We use Perl instead
445 # of sed for obvious reasons :)
446 perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
451 ## headers which need to be regenerated
453 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
454 rm -f include/vlc_symbols.h
455 rm -f mozilla/vlcintf.h
463 ## Glade sometimes sucks
465 echo "workarounds for annoying glade features"
466 for file in gnome_interface.c gtk_interface.c
468 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
470 rm -f /tmp/$$.$file.bak
471 cat > /tmp/$$.$file.bak << EOF
472 /* This file was created automatically by glade and fixed by bootstrap */
477 -e 's#_("-:--:--")#"-:--:--"#' \
478 -e 's#_("---")#"---"#' \
479 -e 's#_("--")#"--"#' \
480 -e 's#_("/dev/dvd")#"/dev/dvd"#' \
481 -e 's#_(\("./."\))#\1#' \
482 < modules/gui/gtk/$file >> /tmp/$$.$file.bak
483 mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
488 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
490 rm -f /tmp/$$.$file.bak
491 sed -e 's/DO NOT EDIT THIS FILE.*/This file was created automatically by glade and fixed by bootstrap/ ; s/#if.*ENABLE_NLS.*/#if defined( ENABLE_NLS ) \&\& defined ( HAVE_GETTEXT )/' < modules/gui/gtk/$file > /tmp/$$.$file.bak
492 mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
496 ## Tell the user about gettext and sed
503 echo "==========================================================="
504 echo "IMPORTANT NOTE: you do not have gettext installed on your"
505 echo "system. The vlc build will work, but you will not have"
506 echo "internationalization support. We suggest installing gettext."
510 echo "=========================================================="
511 echo "NOTE: you have an old version of gettext installed on your"
512 echo "system. We suggest upgrading to gettext 0.11.3 or later."
516 case "$AUTOMAKESUCKS" in
521 echo "============================================================="
522 echo "IMPORTANT NOTE: your version of automake has a bug which will"
523 echo "prevent proper plugin compilation. Either compile VLC with"
524 echo "the --disable-plugins flag, or use a version of automake newer"
525 echo "than 1.6.1 (1.6.2 is OK, and so are the 1.5 series)."
534 echo "============================================================="
535 echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
536 echo "to handle long lines. bootstrap will try its best to generate"
537 echo "a correct Makefile, but you should expect problems. We highly"
538 echo "recommend installing GNU sed."