bootstrap 10.6 KB
Newer Older
1 2
#! /bin/sh

3
##  bootstrap file for the VLC media player
4
##  $Id: bootstrap,v 1.44 2003/03/12 04:16:02 sam Exp $
5 6 7
##
##  Authors: Samuel Hocevar <sam@zoy.org>

8 9 10 11 12 13 14
if test x$# != x0; then
  echo "Usage: ./bootstrap"
  echo "  Calls automake, autoconf, autoheader, autopoint and other auto* to build"
  echo "  Makefiles."
  exit 1
fi

15
###
16
###  Get a sane environment, just in case
17
###
18 19
LANG=C
export LANG
20 21
CYGWIN=binmode
export CYGWIN
22

23
##
24
## Naively assume our system doesn't suck. Unfortunately it seldom doesn't.
25
##
26 27 28 29
SEDSUCKS=no
PERLSUCKS=no
AUTOMAKESUCKS=no
INSTALLSUCKS=no
30

31 32 33 34 35 36 37 38
##
## Check that our tools don't suck
##
if test ! 20000 -eq `perl -e 'printf "%s\n","a"x20000' | sed -e 's/.//' 2>/dev/null | wc -c`
then
  SEDSUCKS=yes
fi

39 40 41
# Mac OS X stacksize sucks
if test x`uname -s` = xDarwin; then ulimit -s 20000; fi

42 43 44 45 46 47
##
## Generate the modules makefile, by parsing modules/**/Modules.am
##

printf "generating Modules.am and configure.ac"

48 49
rm -f Modules.am configure.ac

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
echo > Modules.am
echo > configure.ac

ALL_FLAGS="`sed -n -e '/^[^=A-Z]*[A-Z]*FLAGS_[^=]*=/s/[^=A-Z]*\([A-Z]*FLAGS_[^=]*=\).*/\1/p' < configure.ac.in | sort | uniq`"

cat >> configure.ac << EOF
dnl ################################################################
dnl # Do not edit this file, it was generated from configure.ac.in #
dnl ################################################################

EOF
sed -n -e '/dnl do not touch this line/q;p' < configure.ac.in >> configure.ac

modules=""
for mf in `sed -ne 's@[^a-z]*\([^ ]*\)am.*@modules/\1am@p' < modules/Makefile.am`
do
  printf "."
  dir=`echo ${mf} | sed -e 's@\(.*\)/.*@\1@'`
  topdir=`echo ${dir} | cut -f2 -d/`
  sym=`echo ${dir} | sed -e 'y@/@_@'`
  cat >> Modules.am << EOF
# Directory ${dir}

include ${dir}/Modules.am

EOF
  sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | while read mod
  do
78
    LINKER="LINK"
79 80 81 82 83
    if echo "$ALL_FLAGS" | grep '^CPPFLAGS_'${mod}'=$' >/dev/null 2>&1; then
        echo "AC_SUBST(CPPFLAGS_${mod})" >> configure.ac; fi
    if echo "$ALL_FLAGS" | grep '^CFLAGS_'${mod}'=$' >/dev/null 2>&1; then
        echo "AC_SUBST(CFLAGS_${mod})" >> configure.ac; fi
    if echo "$ALL_FLAGS" | grep '^CXXFLAGS_'${mod}'=$' >/dev/null 2>&1; then
84
        LINKER="CXXLINK"
85 86
        echo "AC_SUBST(CXXFLAGS_${mod})" >> configure.ac; fi
    if echo "$ALL_FLAGS" | grep '^OBJCFLAGS_'${mod}'=$' >/dev/null 2>&1; then
87
        LINKER="OBJCLINK"
88 89 90 91 92 93 94 95 96 97 98 99 100
        echo "AC_SUBST(OBJCFLAGS_${mod})" >> configure.ac; fi
    if echo "$ALL_FLAGS" | grep '^LDFLAGS_'${mod}'=$' >/dev/null 2>&1; then
        echo "AC_SUBST(LDFLAGS_${mod})" >> configure.ac; fi
    if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
        PRIVATE='#'; else
        PRIVATE=''; fi
    if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
        NODIST=''; else
        NODIST='#'; fi
    cat >> configure.ac << EOF
AM_CONDITIONAL(${mod}_plugin, test x\$${mod}_plugin = xyes)
AM_CONDITIONAL(${mod}_builtin, test x\$${mod}_builtin = xyes)
EOF
101 102 103 104 105 106 107
# Generation of Modules.am
# ~~~~~~~~~~~~~~~~~~~~~~~~
# - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
#   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
#   the resulting file size.
# - *_CFLAGS, *_CXXFLAGS etc. include *_CPPFLAGS because per-object CPPFLAGS
#   does not seem to work properly with any automake version I tested.
108 109 110 111
    cat >> Modules.am << EOF
# The ${mod} plugin

if ${mod}_plugin
112
if UNTRUE
113
L_${mod}_p = ${dir}/lib${mod}_plugin.a
114
endif
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
D_${mod}_p = ${dir}/lib${mod}_plugin\$(LIBEXT)
${NODIST}B_${mod}_p = \$(nodist_SOURCES_${mod})
endif
if ${mod}_builtin
L_${mod}_b = ${dir}/lib${mod}.a
F_${mod}_b = \$(LDFLAGS_${mod})
if BUILD_MOZILLA
L_${mod}_pic = ${dir}/lib${mod}_pic.a
endif
${NODIST}B_${mod}_b = \$(nodist_SOURCES_${mod})
endif

L_builtin += \$(L_${mod}_b)
L_builtin_pic += \$(L_${mod}_pic)
LDFLAGS_builtin += \$(F_${mod}_b)
${PRIVATE}BUILT_SOURCES += \$(B_${mod}_p) \$(B_${mod}_b)
131
PLUGIN_FILES += \$(D_${mod}_p)
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159

${PRIVATE}${sym}_lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
${NODIST}${PRIVATE}nodist_${sym}_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
${sym}_lib${mod}_plugin_a_CPPFLAGS = \$(CPPFLAGS_plugin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
${sym}_lib${mod}_plugin_a_CFLAGS = \$(CFLAGS_plugin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
${sym}_lib${mod}_plugin_a_CXXFLAGS = \$(CXXFLAGS_plugin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
${sym}_lib${mod}_plugin_a_OBJCFLAGS = \$(OBJCFLAGS_plugin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)

${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
${NODIST}nodist_${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
${sym}_lib${mod}_pic_a_CPPFLAGS = \$(CPPFLAGS_builtin_pic) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
${sym}_lib${mod}_pic_a_CFLAGS = \$(CFLAGS_builtin_pic) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
${sym}_lib${mod}_pic_a_CXXFLAGS = \$(CXXFLAGS_builtin_pic) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
${sym}_lib${mod}_pic_a_OBJCFLAGS = \$(OBJCFLAGS_builtin_pic) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)

${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
${NODIST}nodist_${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
${sym}_lib${mod}_a_CPPFLAGS = \$(CPPFLAGS_builtin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
${sym}_lib${mod}_a_CFLAGS = \$(CFLAGS_builtin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
${sym}_lib${mod}_a_CXXFLAGS = \$(CXXFLAGS_builtin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
${sym}_lib${mod}_a_OBJCFLAGS = \$(OBJCFLAGS_builtin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)

libvlc_LIBRARIES += \$(L_${mod}_b) \$(L_${mod}_pic)
lib${mod}_DATA = \$(D_${mod}_p)

lib${mod}dir = \$(libdir)/vlc/${topdir}
${PRIVATE}noinst_LIBRARIES += \$(L_${mod}_p)
${PRIVATE}${dir}/lib${mod}_plugin\$(LIBEXT): \$(${sym}_lib${mod}_plugin_a_OBJECTS)
160
${PRIVATE}	\$(${LINKER}) \$(${sym}_lib${mod}_plugin_a_OBJECTS) -shared \$(LDFLAGS_plugins) \$(LDFLAGS_${mod})
161 162 163 164 165 166


EOF
  done
done

167
echo "AM_CONDITIONAL(UNTRUE, false)" >> configure.ac
168 169 170 171
sed -n -e '/dnl do not touch this line/,//p' < configure.ac.in >> configure.ac

echo "done."

172
###
173
###  classic bootstrap stuff
174
###
175
set -x
176
rm -f aclocal.m4 m4/oldgettext.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh ABOUT-NLS
177
rm -Rf intl
178

179
# Check for gettext
180
if gettextize --version >/dev/null 2>&1
181 182
then
if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
183
        '>' 0.11.2 >/dev/null 2>&1
184
then
185
  # We have gettext, and a recent version! Everything is cool.
186
  autopoint || exit 1
187
  GETTEXT=yes
188
else
189
  # User's gettext is too old. try to continue anyway.
190
  echo > ABOUT-NLS
191
  mkdir -p intl
192
  echo > intl/Makefile.am
193
  echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
194 195 196
  GETTEXT=old
fi;else
  # we don't have gettext. grmbl. try to continue anyway.
197
  echo > ABOUT-NLS
198 199
  mkdir -p intl
  echo > intl/Makefile.am
200
  echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
201
  GETTEXT=no
202
fi
203

204
# Check for automake
205
amvers="none"
206
if automake-1.7 --version >/dev/null 2>&1
207
then
208
  amvers="-1.7"
209
else
210
  if automake-1.6 --version >/dev/null 2>&1
211
  then
212 213 214 215
    amvers="-1.6"
    if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
    then AUTOMAKESUCKS=yes
    fi
216
  else
217
    if automake-1.5 --version >/dev/null 2>&1
218
    then
219
      INSTALLSUCKS=yes
220 221 222 223 224 225 226 227
      amvers="-1.5"
    else
      if automake --version > /dev/null 2>&1
      then
        amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
        case $amvers in
        1.6|1.6.0|1.6.1)
          AUTOMAKESUCKS=yes ;;
228
        1.5|1.5.*)
229
          INSTALLSUCKS=yes ;;
230 231 232 233 234 235
        esac

        if expr "$amvers" "<" "1.5" > /dev/null 2>&1
        then amvers="none"
        else amvers=""
        fi
236 237 238 239 240 241 242
      fi
    fi
  fi
fi

if test x$amvers = xnone
then
243 244
  set +x
  echo "you need automake version 1.5 or later"
245
  exit 1
246
fi
247 248

# Do the rest
249 250 251
aclocal${amvers} -I m4 || exit 1
autoheader || exit 1

252
automake${amvers} --add-missing --copy || PERLSUCKS=yes
253 254 255 256 257 258

case "$PERLSUCKS" in
  no)
  ;;
  yes)
    set +x
259 260 261 262 263 264 265 266
    cat << EOF

=======================================================================
IMPORTANT NOTE: automake failed, please check the error messages. If it
actually segfaulted, it might be because of insufficient stack size; set
the stack size to something bigger or unlimited (\`unlimit stacksize')
and try again.
EOF
267 268 269 270 271 272 273 274
    exit 1
  ;;
esac

# Wrap automake's long lines, because the Solaris sed doesn't support lines
# longer than 3999 characters, and ./configure calls sed. We use Perl instead
# of sed for obvious reasons :)
perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
275

276
autoconf || exit 1
277 278

##
279
##  headers which need to be regenerated
280
##
281 282 283
rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
rm -f include/vlc_symbols.h
rm -f mozilla/vlcintf.h
284

285
##
286
##  Shut up
287
##
288
set +x
289

290
##
291
##  Tell the user about gettext and sed
292 293 294 295 296
##
case "$GETTEXT" in
  yes)
  ;;
  no)
297 298 299 300 301 302 303
    cat << EOF

===========================================================
IMPORTANT NOTE: you do not have gettext installed on your
system. The vlc build will work, but you will not have
internationalization support. We suggest installing gettext.
EOF
304 305
  ;;
  old)
306 307 308 309
    cat << EOF

==========================================================
NOTE: you have an old version of gettext installed on your
310 311 312
system. The vlc build will work, but if your system does not
have libintl you will not have internationalization support.
We suggest upgrading to gettext 0.11.3 or later.
313
EOF
314 315 316
  ;;
esac

317 318 319 320
case "$AUTOMAKESUCKS" in
  no)
  ;;
  yes)
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343
    cat << EOF

=============================================================
IMPORTANT NOTE: your version of automake has a bug which will
prevent proper plugin compilation. Either compile VLC with
the --disable-plugins flag, or use a version of automake newer
than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
EOF
  ;;
esac

case "$INSTALLSUCKS" in
  no)
  ;;
  yes)
    cat << EOF

=============================================================
IMPORTANT NOTE: your version of automake has a bug which will
prevent proper installation. Do not use "make install" with this
version of automake, or use a version of automake newer than 1.5
(such as 1.6 or 1.7).
EOF
344 345 346
  ;;
esac

347 348 349 350
case "$SEDSUCKS" in
  no)
  ;;
  yes)
351 352 353 354 355 356 357 358
    cat << EOF

=============================================================
IMPORTANT NOTE: the version of 'sed' on your system is unable
to handle long lines. bootstrap will try its best to generate
a correct Makefile, but you should expect problems. We highly
recommend installing GNU sed.
EOF
359 360 361
  ;;
esac