]> git.sesse.net Git - vlc/blob - bootstrap
fa85b8b46ea6b72453ab0024a92fab7fdbaa08ff
[vlc] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for vlc, the VideoLAN Client
4 ##  $Id: bootstrap,v 1.21 2002/10/29 18:12:07 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 if UNTRUE
111 L_${mod}_p = ${dir}/lib${mod}_plugin.a
112 endif
113 D_${mod}_p = ${dir}/lib${mod}_plugin\$(LIBEXT)
114 ${NODIST}B_${mod}_p = \$(nodist_SOURCES_${mod})
115 endif
116 if ${mod}_builtin
117 L_${mod}_b = ${dir}/lib${mod}.a
118 F_${mod}_b = \$(LDFLAGS_${mod})
119 if BUILD_MOZILLA
120 L_${mod}_pic = ${dir}/lib${mod}_pic.a
121 endif
122 ${NODIST}B_${mod}_b = \$(nodist_SOURCES_${mod})
123 endif
124
125 L_builtin += \$(L_${mod}_b)
126 L_builtin_pic += \$(L_${mod}_pic)
127 LDFLAGS_builtin += \$(F_${mod}_b)
128 ${PRIVATE}BUILT_SOURCES += \$(B_${mod}_p) \$(B_${mod}_b)
129
130 ${PRIVATE}${sym}_lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
131 ${NODIST}${PRIVATE}nodist_${sym}_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
132 ${sym}_lib${mod}_plugin_a_CPPFLAGS = \$(CPPFLAGS_plugin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
133 ${sym}_lib${mod}_plugin_a_CFLAGS = \$(CFLAGS_plugin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
134 ${sym}_lib${mod}_plugin_a_CXXFLAGS = \$(CXXFLAGS_plugin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
135 ${sym}_lib${mod}_plugin_a_OBJCFLAGS = \$(OBJCFLAGS_plugin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
136
137 ${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
138 ${NODIST}nodist_${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
139 ${sym}_lib${mod}_pic_a_CPPFLAGS = \$(CPPFLAGS_builtin_pic) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
140 ${sym}_lib${mod}_pic_a_CFLAGS = \$(CFLAGS_builtin_pic) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
141 ${sym}_lib${mod}_pic_a_CXXFLAGS = \$(CXXFLAGS_builtin_pic) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
142 ${sym}_lib${mod}_pic_a_OBJCFLAGS = \$(OBJCFLAGS_builtin_pic) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
143
144 ${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
145 ${NODIST}nodist_${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
146 ${sym}_lib${mod}_a_CPPFLAGS = \$(CPPFLAGS_builtin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
147 ${sym}_lib${mod}_a_CFLAGS = \$(CFLAGS_builtin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
148 ${sym}_lib${mod}_a_CXXFLAGS = \$(CXXFLAGS_builtin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
149 ${sym}_lib${mod}_a_OBJCFLAGS = \$(OBJCFLAGS_builtin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
150
151 libvlc_LIBRARIES += \$(L_${mod}_b) \$(L_${mod}_pic)
152 lib${mod}_DATA = \$(D_${mod}_p)
153
154 lib${mod}dir = \$(libdir)/vlc/${topdir}
155 MOSTLYCLEANFILES += \$(D_${mod}_p)
156 ${PRIVATE}noinst_LIBRARIES += \$(L_${mod}_p)
157 ${PRIVATE}${dir}/lib${mod}_plugin\$(LIBEXT): \$(${sym}_lib${mod}_plugin_a_OBJECTS)
158 ${PRIVATE}      \$(${LINKER}) \$^ -shared \$(LDFLAGS_plugins) \$(LDFLAGS_${mod})
159
160
161 EOF
162   done
163 done
164
165 echo "AM_CONDITIONAL(UNTRUE, false)" >> configure.ac
166 sed -n -e '/dnl do not touch this line/,//p' < configure.ac.in >> configure.ac
167
168 echo "done."
169
170 ###
171 ###  classic bootstrap stuff
172 ###
173 set -x
174 rm -f aclocal.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh
175 rm -Rf intl
176
177 # Check for gettext
178 if gettextize --version >/dev/null 2>&1
179 then
180 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
181         '>' 0.11.2 >/dev/null 2>&1
182 then
183   # We have gettext, and a recent version! Everything is cool.
184   autopoint || exit 1
185   GETTEXT=yes
186 else
187   # User's gettext is too old. try to continue anyway.
188   mkdir -p intl
189   echo > intl/Makefile.am
190   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
191   GETTEXT=old
192 fi;else
193   # we don't have gettext. grmbl. try to continue anyway.
194   mkdir -p intl
195   echo > intl/Makefile.am
196   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
197   GETTEXT=no
198 fi
199
200 # Check for automake
201 amvers="none"
202 if automake-1.6 --version >/dev/null 2>&1
203 then
204   amvers="-1.6"
205   if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
206   then AUTOMAKESUCKS=yes
207   fi
208 else
209   if automake-1.5 --version >/dev/null 2>&1
210   then
211     amvers="-1.5"
212   else
213     if automake --version > /dev/null 2>&1
214     then
215       amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
216       case $amvers in
217       1.6|1.6.0|1.6.1)
218         AUTOMAKESUCKS=yes ;;
219       esac
220
221       if expr "$amvers" "<" "1.5" > /dev/null 2>&1
222       then amvers="none"
223       else amvers=""
224       fi
225     fi
226   fi
227 fi
228
229 if test x$amvers = xnone
230 then
231   set +x
232   echo "you need automake version 1.5 or later"
233   exit 1
234 fi
235
236 # Do the rest
237 aclocal${amvers} -I m4 || exit 1
238 autoheader || exit 1
239
240 automake${amvers} --foreign --add-missing --copy || PERLSUCKS=yes
241
242 case "$PERLSUCKS" in
243   no)
244   ;;
245   yes)
246     set +x
247     echo ""
248     echo "==========================================================="
249     echo "IMPORTANT NOTE: automake failed. On certain systems this is"
250     echo "because of insufficient stack size. Please set the stack"
251     echo "size to something bigger or unlimited (\`unlimit stacksize')"
252     echo "and try again."
253     exit 1
254   ;;
255 esac
256
257 # Wrap automake's long lines, because the Solaris sed doesn't support lines
258 # longer than 3999 characters, and ./configure calls sed. We use Perl instead
259 # of sed for obvious reasons :)
260 perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
261
262 autoconf || exit 1
263
264 ##
265 ##  headers which need to be regenerated
266 ##
267 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
268 rm -f include/vlc_symbols.h
269 rm -f mozilla/vlcintf.h
270
271 ##
272 ##  Shut up
273 ##
274 set +x
275
276 ##
277 ##  Glade sometimes sucks
278 ##
279 echo "workarounds for annoying glade features"
280 for file in gnome_interface.c gtk_interface.c
281 do
282 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
283 then
284     rm -f /tmp/$$.$file.bak
285     cat > /tmp/$$.$file.bak << EOF
286 /* This file was created automatically by glade and fixed by bootstrap */
287
288 #include <vlc/vlc.h>
289 EOF
290     sed -e 1,7d \
291         -e 's#_("-:--:--")#"-:--:--"#' \
292         -e 's#_("---")#"---"#' \
293         -e 's#_("--")#"--"#' \
294         -e 's#_("/dev/dvd")#"/dev/dvd"#' \
295         -e 's#_(\("./."\))#\1#' \
296         < modules/gui/gtk/$file >> /tmp/$$.$file.bak
297     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
298 fi
299 done
300
301 file=gtk_support.h
302 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
303 then
304     rm -f /tmp/$$.$file.bak
305     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
306     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
307 fi
308
309 ##
310 ##  Update the potfiles because no one ever does it
311 ##
312 if test "$do_po" = "no"
313 then
314   echo "not updating potfiles. use --update-po to force doing it."
315 else
316   cd po
317   make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
318   cd ..
319 fi
320
321 ##
322 ##  Tell the user about gettext and sed
323 ##
324 case "$GETTEXT" in
325   yes)
326   ;;
327   no)
328     echo ""
329     echo "==========================================================="
330     echo "IMPORTANT NOTE: you do not have gettext installed on your"
331     echo "system. The vlc build will work, but you will not have"
332     echo "internationalization support. We suggest installing gettext."
333   ;;
334   old)
335     echo ""
336     echo "=========================================================="
337     echo "NOTE: you have an old version of gettext installed on your"
338     echo "system. We suggest upgrading to gettext 0.11.3 or later."
339   ;;
340 esac
341
342 case "$AUTOMAKESUCKS" in
343   no)
344   ;;
345   yes)
346     echo ""
347     echo "============================================================="
348     echo "IMPORTANT NOTE: your version of automake has a bug which will"
349     echo "prevent proper plugin compilation. Either compile VLC with"
350     echo "the --disable-plugins flag, or use a version of automake newer"
351     echo "than 1.6.1 (1.6.2 is OK, and so are the 1.5 series)."
352   ;;
353 esac
354
355 case "$SEDSUCKS" in
356   no)
357   ;;
358   yes)
359     echo ""
360     echo "============================================================="
361     echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
362     echo "to handle long lines. bootstrap will try its best to generate"
363     echo "a correct Makefile, but you should expect problems. We highly"
364     echo "recommend installing GNU sed."
365   ;;
366 esac
367