]> git.sesse.net Git - vlc/blob - bootstrap
* ./bootstrap, ./Makefile.am: workarounds for automake 1.5.
[vlc] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for vlc, the VideoLAN Client
4 ##  $Id: bootstrap,v 1.15 2002/10/02 12:59:59 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 ##  headers which need to be regenerated
252 ##
253 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
254 rm -f include/vlc_symbols.h
255 rm -f mozilla/vlcintf.h
256
257 ##
258 ##  Shut up
259 ##
260 set +x
261
262 ##
263 ##  Glade sometimes sucks
264 ##
265 echo "workarounds for annoying glade features"
266 for file in gnome_interface.c gtk_interface.c
267 do
268 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
269 then
270     rm -f /tmp/$$.$file.bak
271     cat > /tmp/$$.$file.bak << EOF
272 /* This file was created automatically by glade and fixed by bootstrap */
273
274 #include <vlc/vlc.h>
275 EOF
276     sed -e 1,7d \
277         -e 's#_("-:--:--")#"-:--:--"#' \
278         -e 's#_("---")#"---"#' \
279         -e 's#_("--")#"--"#' \
280         -e 's#_("/dev/dvd")#"/dev/dvd"#' \
281         -e 's#_(\("./."\))#\1#' \
282         < modules/gui/gtk/$file >> /tmp/$$.$file.bak
283     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
284 fi
285 done
286
287 file=gtk_support.h
288 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
289 then
290     rm -f /tmp/$$.$file.bak
291     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
292     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
293 fi
294
295 ##
296 ##  Update the potfiles because no one ever does it
297 ##
298 if test "$do_po" = "no"
299 then
300   echo "not updating potfiles. use --update-po to force doing it."
301 else
302   cd po
303   make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
304   cd ..
305 fi
306
307 ##
308 ##  Tell the user about gettext and sed
309 ##
310 case "$GETTEXT" in
311   yes)
312   ;;
313   no)
314     echo ""
315     echo "==========================================================="
316     echo "IMPORTANT NOTE: you do not have gettext installed on your"
317     echo "system. The vlc build will work, but you will not have"
318     echo "internationalization support. We suggest installing gettext."
319   ;;
320   old)
321     echo ""
322     echo "=========================================================="
323     echo "NOTE: you have an old version of gettext installed on your"
324     echo "system. We suggest upgrading to gettext 0.11.3 or later."
325   ;;
326 esac
327
328 case "$SEDSUCKS" in
329   no)
330   ;;
331   yes)
332     echo ""
333     echo "============================================================="
334     echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
335     echo "to handle long lines. bootstrap will try its best to generate"
336     echo "a correct Makefile, but you should expect problems. We highly"
337     echo "recommend installing GNU sed."
338   ;;
339 esac
340