]> git.sesse.net Git - vlc/blob - bootstrap
* ./configure.ac.in, ./src/libvlc.c: attempt at activating gettext support
[vlc] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for vlc, the VideoLAN Client
4 ##  $Id: bootstrap,v 1.19 2002/10/16 15:10:38 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 rm -Rf intl
173
174 # Check for gettext
175 if gettextize --version >/dev/null 2>&1
176 then
177 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
178         '>' 0.11.2 >/dev/null 2>&1
179 then
180   # We have gettext, and a recent version! Everything is cool.
181   autopoint || exit 1
182   GETTEXT=yes
183 else
184   # User's gettext is too old. try to continue anyway.
185   mkdir -p intl
186   echo > intl/Makefile.am
187   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
188   GETTEXT=old
189 fi;else
190   # we don't have gettext. grmbl. try to continue anyway.
191   mkdir -p intl
192   echo > intl/Makefile.am
193   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
194   GETTEXT=no
195 fi
196
197 # Check for automake
198 amvers="none"
199 if automake-1.6 --version >/dev/null 2>&1
200 then
201   amvers="-1.6"
202   if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
203   then AUTOMAKESUCKS=yes
204   fi
205 else
206   if automake-1.5 --version >/dev/null 2>&1
207   then
208     amvers="-1.5"
209   else
210     if automake --version > /dev/null 2>&1
211     then
212       amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
213       case $amvers in
214       1.6|1.6.0|1.6.1)
215         AUTOMAKESUCKS=yes ;;
216       esac
217
218       if expr "$amvers" "<" "1.5" > /dev/null 2>&1
219       then amvers="none"
220       else amvers=""
221       fi
222     fi
223   fi
224 fi
225
226 if test x$amvers = xnone
227 then
228   set +x
229   echo "you need automake version 1.5 or later"
230   exit 1
231 fi
232
233 # Do the rest
234 aclocal${amvers} -I m4 || exit 1
235 autoheader || exit 1
236
237 automake${amvers} --foreign --add-missing --copy || PERLSUCKS=yes
238
239 case "$PERLSUCKS" in
240   no)
241   ;;
242   yes)
243     set +x
244     echo ""
245     echo "==========================================================="
246     echo "IMPORTANT NOTE: automake failed. On certain systems this is"
247     echo "because of insufficient stack size. Please set the stack"
248     echo "size to something bigger or unlimited (\`unlimit stacksize')"
249     echo "and try again."
250     exit 1
251   ;;
252 esac
253
254 # Wrap automake's long lines, because the Solaris sed doesn't support lines
255 # longer than 3999 characters, and ./configure calls sed. We use Perl instead
256 # of sed for obvious reasons :)
257 perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
258
259 autoconf || exit 1
260
261 ##
262 ##  headers which need to be regenerated
263 ##
264 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
265 rm -f include/vlc_symbols.h
266 rm -f mozilla/vlcintf.h
267
268 ##
269 ##  Shut up
270 ##
271 set +x
272
273 ##
274 ##  Glade sometimes sucks
275 ##
276 echo "workarounds for annoying glade features"
277 for file in gnome_interface.c gtk_interface.c
278 do
279 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
280 then
281     rm -f /tmp/$$.$file.bak
282     cat > /tmp/$$.$file.bak << EOF
283 /* This file was created automatically by glade and fixed by bootstrap */
284
285 #include <vlc/vlc.h>
286 EOF
287     sed -e 1,7d \
288         -e 's#_("-:--:--")#"-:--:--"#' \
289         -e 's#_("---")#"---"#' \
290         -e 's#_("--")#"--"#' \
291         -e 's#_("/dev/dvd")#"/dev/dvd"#' \
292         -e 's#_(\("./."\))#\1#' \
293         < modules/gui/gtk/$file >> /tmp/$$.$file.bak
294     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
295 fi
296 done
297
298 file=gtk_support.h
299 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
300 then
301     rm -f /tmp/$$.$file.bak
302     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
303     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
304 fi
305
306 ##
307 ##  Update the potfiles because no one ever does it
308 ##
309 if test "$do_po" = "no"
310 then
311   echo "not updating potfiles. use --update-po to force doing it."
312 else
313   cd po
314   make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
315   cd ..
316 fi
317
318 ##
319 ##  Tell the user about gettext and sed
320 ##
321 case "$GETTEXT" in
322   yes)
323   ;;
324   no)
325     echo ""
326     echo "==========================================================="
327     echo "IMPORTANT NOTE: you do not have gettext installed on your"
328     echo "system. The vlc build will work, but you will not have"
329     echo "internationalization support. We suggest installing gettext."
330   ;;
331   old)
332     echo ""
333     echo "=========================================================="
334     echo "NOTE: you have an old version of gettext installed on your"
335     echo "system. We suggest upgrading to gettext 0.11.3 or later."
336   ;;
337 esac
338
339 case "$AUTOMAKESUCKS" in
340   no)
341   ;;
342   yes)
343     echo ""
344     echo "============================================================="
345     echo "IMPORTANT NOTE: your version of automake has a bug which will"
346     echo "prevent proper plugin compilation. Either compile VLC with"
347     echo "the --disable-plugins flag, or use a version of automake newer"
348     echo "than 1.6.1 (1.6.2 is OK, and so are the 1.5 series)."
349   ;;
350 esac
351
352 case "$SEDSUCKS" in
353   no)
354   ;;
355   yes)
356     echo ""
357     echo "============================================================="
358     echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
359     echo "to handle long lines. bootstrap will try its best to generate"
360     echo "a correct Makefile, but you should expect problems. We highly"
361     echo "recommend installing GNU sed."
362   ;;
363 esac
364