* ./bootstrap: we use the proper linker for plugin compilation.
[vlc.git] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for vlc, the VideoLAN Client
4 ##  $Id: bootstrap,v 1.18 2002/10/04 13:13:54 sam Exp $
5 ##
6 ##  Authors: Samuel Hocevar <sam@zoy.org>
7
8 ###
9 ###  get a sane environment
10 ###
11 LANG=C
12 export LANG
13
14 ###
15 ###  argument check
16 ###
17 do_po=no
18 while test $# -gt 0; do
19   case "$1" in
20     --update-po)
21       do_po=yes
22       ;;
23     *)
24       echo "unknown option $1"
25       ;;
26   esac
27   shift
28 done
29
30 ##
31 ## Check that our tools don't suck
32 ##
33 SEDSUCKS=no
34 if test ! 20000 -eq `perl -e 'printf "%s\n","a"x20000' | sed -e 's/.//' 2>/dev/null | wc -c`
35 then
36   SEDSUCKS=yes
37 fi
38
39 PERLSUCKS=no
40 AUTOMAKESUCKS=no
41
42 ##
43 ## Generate the modules makefile, by parsing modules/**/Modules.am
44 ##
45
46 printf "generating Modules.am and configure.ac"
47
48 echo > Modules.am
49 echo > configure.ac
50
51 ALL_FLAGS="`sed -n -e '/^[^=A-Z]*[A-Z]*FLAGS_[^=]*=/s/[^=A-Z]*\([A-Z]*FLAGS_[^=]*=\).*/\1/p' < configure.ac.in | sort | uniq`"
52
53 cat >> configure.ac << EOF
54 dnl ################################################################
55 dnl # Do not edit this file, it was generated from configure.ac.in #
56 dnl ################################################################
57
58 EOF
59 sed -n -e '/dnl do not touch this line/q;p' < configure.ac.in >> configure.ac
60
61 modules=""
62 for mf in `sed -ne 's@[^a-z]*\([^ ]*\)am.*@modules/\1am@p' < modules/Makefile.am`
63 do
64   printf "."
65   dir=`echo ${mf} | sed -e 's@\(.*\)/.*@\1@'`
66   topdir=`echo ${dir} | cut -f2 -d/`
67   sym=`echo ${dir} | sed -e 'y@/@_@'`
68   cat >> Modules.am << EOF
69 # Directory ${dir}
70
71 include ${dir}/Modules.am
72
73 EOF
74   sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | while read mod
75   do
76     LINKER="LINK"
77     if echo "$ALL_FLAGS" | grep '^CPPFLAGS_'${mod}'=$' >/dev/null 2>&1; then
78         echo "AC_SUBST(CPPFLAGS_${mod})" >> configure.ac; fi
79     if echo "$ALL_FLAGS" | grep '^CFLAGS_'${mod}'=$' >/dev/null 2>&1; then
80         echo "AC_SUBST(CFLAGS_${mod})" >> configure.ac; fi
81     if echo "$ALL_FLAGS" | grep '^CXXFLAGS_'${mod}'=$' >/dev/null 2>&1; then
82         LINKER="CXXLINK"
83         echo "AC_SUBST(CXXFLAGS_${mod})" >> configure.ac; fi
84     if echo "$ALL_FLAGS" | grep '^OBJCFLAGS_'${mod}'=$' >/dev/null 2>&1; then
85         LINKER="OBJCLINK"
86         echo "AC_SUBST(OBJCFLAGS_${mod})" >> configure.ac; fi
87     if echo "$ALL_FLAGS" | grep '^LDFLAGS_'${mod}'=$' >/dev/null 2>&1; then
88         echo "AC_SUBST(LDFLAGS_${mod})" >> configure.ac; fi
89     if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
90         PRIVATE='#'; else
91         PRIVATE=''; fi
92     if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
93         NODIST=''; else
94         NODIST='#'; fi
95     cat >> configure.ac << EOF
96 AM_CONDITIONAL(${mod}_plugin, test x\$${mod}_plugin = xyes)
97 AM_CONDITIONAL(${mod}_builtin, test x\$${mod}_builtin = xyes)
98 EOF
99 # Generation of Modules.am
100 # ~~~~~~~~~~~~~~~~~~~~~~~~
101 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
102 #   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
103 #   the resulting file size.
104 # - *_CFLAGS, *_CXXFLAGS etc. include *_CPPFLAGS because per-object CPPFLAGS
105 #   does not seem to work properly with any automake version I tested.
106     cat >> Modules.am << EOF
107 # The ${mod} plugin
108
109 if ${mod}_plugin
110 L_${mod}_p = ${dir}/lib${mod}_plugin.a
111 D_${mod}_p = ${dir}/lib${mod}_plugin\$(LIBEXT)
112 ${NODIST}B_${mod}_p = \$(nodist_SOURCES_${mod})
113 endif
114 if ${mod}_builtin
115 L_${mod}_b = ${dir}/lib${mod}.a
116 F_${mod}_b = \$(LDFLAGS_${mod})
117 if BUILD_MOZILLA
118 L_${mod}_pic = ${dir}/lib${mod}_pic.a
119 endif
120 ${NODIST}B_${mod}_b = \$(nodist_SOURCES_${mod})
121 endif
122
123 L_builtin += \$(L_${mod}_b)
124 L_builtin_pic += \$(L_${mod}_pic)
125 LDFLAGS_builtin += \$(F_${mod}_b)
126 ${PRIVATE}BUILT_SOURCES += \$(B_${mod}_p) \$(B_${mod}_b)
127
128 ${PRIVATE}${sym}_lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
129 ${NODIST}${PRIVATE}nodist_${sym}_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
130 ${sym}_lib${mod}_plugin_a_CPPFLAGS = \$(CPPFLAGS_plugin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
131 ${sym}_lib${mod}_plugin_a_CFLAGS = \$(CFLAGS_plugin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
132 ${sym}_lib${mod}_plugin_a_CXXFLAGS = \$(CXXFLAGS_plugin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
133 ${sym}_lib${mod}_plugin_a_OBJCFLAGS = \$(OBJCFLAGS_plugin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
134
135 ${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
136 ${NODIST}nodist_${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
137 ${sym}_lib${mod}_pic_a_CPPFLAGS = \$(CPPFLAGS_builtin_pic) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
138 ${sym}_lib${mod}_pic_a_CFLAGS = \$(CFLAGS_builtin_pic) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
139 ${sym}_lib${mod}_pic_a_CXXFLAGS = \$(CXXFLAGS_builtin_pic) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
140 ${sym}_lib${mod}_pic_a_OBJCFLAGS = \$(OBJCFLAGS_builtin_pic) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
141
142 ${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
143 ${NODIST}nodist_${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
144 ${sym}_lib${mod}_a_CPPFLAGS = \$(CPPFLAGS_builtin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
145 ${sym}_lib${mod}_a_CFLAGS = \$(CFLAGS_builtin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
146 ${sym}_lib${mod}_a_CXXFLAGS = \$(CXXFLAGS_builtin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
147 ${sym}_lib${mod}_a_OBJCFLAGS = \$(OBJCFLAGS_builtin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
148
149 libvlc_LIBRARIES += \$(L_${mod}_b) \$(L_${mod}_pic)
150 lib${mod}_DATA = \$(D_${mod}_p)
151
152 lib${mod}dir = \$(libdir)/vlc/${topdir}
153 MOSTLYCLEANFILES += \$(D_${mod}_p)
154 ${PRIVATE}noinst_LIBRARIES += \$(L_${mod}_p)
155 ${PRIVATE}${dir}/lib${mod}_plugin\$(LIBEXT): \$(${sym}_lib${mod}_plugin_a_OBJECTS)
156 ${PRIVATE}      \$(${LINKER}) \$^ -o \$@ -shared \$(LDFLAGS_plugins) \$(LDFLAGS_${mod})
157
158
159 EOF
160   done
161 done
162
163 sed -n -e '/dnl do not touch this line/,//p' < configure.ac.in >> configure.ac
164
165 echo "done."
166
167 ###
168 ###  classic bootstrap stuff
169 ###
170 set -x
171 rm -f aclocal.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh
172
173 # Check for gettext
174 if gettextize --version >/dev/null 2>&1
175 then
176 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
177         '>' 0.11.3 >/dev/null 2>&1
178 then
179   # We have gettext, and a recent version! Everything is cool.
180   autopoint --force || exit 1
181   GETTEXT=yes
182 else
183   # What?! User is not using a recent version of gettext? We'll have to
184   # cheat a bit, then.
185   rm -f po/ChangeLog~
186   gettextize --copy --force | grep '^from the' | cut -f3 -d' '
187   test -f po/ChangeLog~ && mv -f po/ChangeLog~ po/ChangeLog
188   # Yuck!
189   mkdir -p intl
190   test -f intl/Makefile.am || echo > intl/Makefile.am
191   # Yuck!
192   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
193   GETTEXT=old
194 fi;else
195   # we don't have gettext. grmbl. try to continue anyway.
196   mkdir -p intl
197   echo > intl/Makefile.am
198   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
199   GETTEXT=no
200 fi
201
202 # Check for automake
203 amvers="none"
204 if automake-1.6 --version >/dev/null 2>&1
205 then
206   amvers="-1.6"
207   if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
208   then AUTOMAKESUCKS=yes
209   fi
210 else
211   if automake-1.5 --version >/dev/null 2>&1
212   then
213     amvers="-1.5"
214   else
215     if automake --version > /dev/null 2>&1
216     then
217       amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
218       case $amvers in
219       1.6|1.6.0|1.6.1)
220         AUTOMAKESUCKS=yes ;;
221       esac
222
223       if expr "$amvers" "<" "1.5" > /dev/null 2>&1
224       then amvers="none"
225       else amvers=""
226       fi
227     fi
228   fi
229 fi
230
231 if test x$amvers = xnone
232 then
233   set +x
234   echo "you need automake version 1.5 or later"
235   exit 1
236 fi
237
238 # Do the rest
239 aclocal${amvers} -I m4 || exit 1
240 autoheader || exit 1
241
242 automake${amvers} --foreign --add-missing --copy || PERLSUCKS=yes
243
244 case "$PERLSUCKS" in
245   no)
246   ;;
247   yes)
248     set +x
249     echo ""
250     echo "==========================================================="
251     echo "IMPORTANT NOTE: automake failed. On certain systems this is"
252     echo "because of insufficient stack size. Please set the stack"
253     echo "size to something bigger or unlimited (\`unlimit stacksize')"
254     echo "and try again."
255     exit 1
256   ;;
257 esac
258
259 # Wrap automake's long lines, because the Solaris sed doesn't support lines
260 # longer than 3999 characters, and ./configure calls sed. We use Perl instead
261 # of sed for obvious reasons :)
262 perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
263
264 autoconf || exit 1
265
266 ##
267 ##  headers which need to be regenerated
268 ##
269 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
270 rm -f include/vlc_symbols.h
271 rm -f mozilla/vlcintf.h
272
273 ##
274 ##  Shut up
275 ##
276 set +x
277
278 ##
279 ##  Glade sometimes sucks
280 ##
281 echo "workarounds for annoying glade features"
282 for file in gnome_interface.c gtk_interface.c
283 do
284 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
285 then
286     rm -f /tmp/$$.$file.bak
287     cat > /tmp/$$.$file.bak << EOF
288 /* This file was created automatically by glade and fixed by bootstrap */
289
290 #include <vlc/vlc.h>
291 EOF
292     sed -e 1,7d \
293         -e 's#_("-:--:--")#"-:--:--"#' \
294         -e 's#_("---")#"---"#' \
295         -e 's#_("--")#"--"#' \
296         -e 's#_("/dev/dvd")#"/dev/dvd"#' \
297         -e 's#_(\("./."\))#\1#' \
298         < modules/gui/gtk/$file >> /tmp/$$.$file.bak
299     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
300 fi
301 done
302
303 file=gtk_support.h
304 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
305 then
306     rm -f /tmp/$$.$file.bak
307     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
308     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
309 fi
310
311 ##
312 ##  Update the potfiles because no one ever does it
313 ##
314 if test "$do_po" = "no"
315 then
316   echo "not updating potfiles. use --update-po to force doing it."
317 else
318   cd po
319   make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
320   cd ..
321 fi
322
323 ##
324 ##  Tell the user about gettext and sed
325 ##
326 case "$GETTEXT" in
327   yes)
328   ;;
329   no)
330     echo ""
331     echo "==========================================================="
332     echo "IMPORTANT NOTE: you do not have gettext installed on your"
333     echo "system. The vlc build will work, but you will not have"
334     echo "internationalization support. We suggest installing gettext."
335   ;;
336   old)
337     echo ""
338     echo "=========================================================="
339     echo "NOTE: you have an old version of gettext installed on your"
340     echo "system. We suggest upgrading to gettext 0.11.3 or later."
341   ;;
342 esac
343
344 case "$AUTOMAKESUCKS" in
345   no)
346   ;;
347   yes)
348     echo ""
349     echo "============================================================="
350     echo "IMPORTANT NOTE: your version of automake has a bug which will"
351     echo "prevent proper plugin compilation. Either compile VLC with"
352     echo "the --disable-plugins flag, or use a version of automake newer"
353     echo "than 1.6.1 (1.6.2 is OK, and so are the 1.5 series)."
354   ;;
355 esac
356
357 case "$SEDSUCKS" in
358   no)
359   ;;
360   yes)
361     echo ""
362     echo "============================================================="
363     echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
364     echo "to handle long lines. bootstrap will try its best to generate"
365     echo "a correct Makefile, but you should expect problems. We highly"
366     echo "recommend installing GNU sed."
367   ;;
368 esac
369