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