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

3 4
##  bootstrap file for vlc, the VideoLAN Client
##  $Id: bootstrap,v 1.14 2002/09/30 11:05:32 sam Exp $
5 6 7
##
##  Authors: Samuel Hocevar <sam@zoy.org>

8 9 10
###
###  get a sane environment
###
11 12
LANG=C
export LANG
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

###
###  argument check
###
do_po=no
while test $# -gt 0; do
  case "$1" in
    --update-po)
      do_po=yes
      ;;
    *)
      echo "unknown option $1"
      ;;
  esac
  shift
done

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 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
##
## Check that our tools don't suck
##
SEDSUCKS=no
if test ! 20000 -eq `perl -e 'printf "%s\n","a"x20000' | sed -e 's/.//' 2>/dev/null | wc -c`
then
  SEDSUCKS=yes
fi

PERLSUCKS=no

##
## Generate the modules makefile, by parsing modules/**/Modules.am
##

printf "generating Modules.am and configure.ac"

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
    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
        echo "AC_SUBST(CXXFLAGS_${mod})" >> configure.ac; fi
    if echo "$ALL_FLAGS" | grep '^OBJCFLAGS_'${mod}'=$' >/dev/null 2>&1; then
        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
# L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_
# _p is for _plugin, _b is for _builtin
    cat >> Modules.am << EOF
# The ${mod} plugin

if ${mod}_plugin
L_${mod}_p = ${dir}/lib${mod}_plugin.a
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)

${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}
MOSTLYCLEANFILES += \$(D_${mod}_p)
${PRIVATE}noinst_LIBRARIES += \$(L_${mod}_p)
${PRIVATE}${dir}/lib${mod}_plugin\$(LIBEXT): \$(${sym}_lib${mod}_plugin_a_OBJECTS)
${PRIVATE}	\$(CC) \$^ -o \$@ -shared \$(LDFLAGS) \$(LDFLAGS_plugins) \$(LDFLAGS_${mod})


EOF
  done
done

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

echo "done."

158
###
159
###  classic bootstrap stuff
160
###
161 162
set -x
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 167
then
if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
168 169
        '>' 0.11.3 >/dev/null 2>&1
then
170
  # We have gettext, and a recent version! Everything is cool.
171
  autopoint --force || exit 1
172
  GETTEXT=yes
173 174 175 176
else
  # What?! User is not using a recent version of gettext? We'll have to
  # cheat a bit, then.
  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 181
  mkdir -p intl
  test -f intl/Makefile.am || echo > intl/Makefile.am
182
  # Yuck!
183
  echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
184 185 186
  GETTEXT=old
fi;else
  # we don't have gettext. grmbl. try to continue anyway.
187 188
  mkdir -p intl
  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 196
if automake-1.6 --version >/dev/null 2>&1
then
197
  amvers="-1.6"
198
else
199 200 201 202 203 204
  if automake-1.5 --version >/dev/null 2>&1
  then
    amvers="-1.5"
  else
    if automake --version > /dev/null 2>&1
    then
205
      amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
206 207 208 209 210 211 212 213 214 215 216

      if expr "$amvers" "<" "1.5" > /dev/null 2>&1
      then amvers="none"
      else amvers=""
      fi
    fi
  fi
fi

if test x$amvers = xnone
then
217 218
  set +x
  echo "you need automake version 1.5 or later"
219
  exit 1
220
fi
221 222

# Do the rest
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
aclocal${amvers} -I m4 || exit 1
autoheader || exit 1

automake${amvers} --foreign --add-missing --copy || PERLSUCKS=yes

case "$PERLSUCKS" in
  no)
  ;;
  yes)
    set +x
    echo ""
    echo "==========================================================="
    echo "IMPORTANT NOTE: automake failed. On certain systems this is"
    echo "because of insufficient stack size. Please set the stack"
    echo "size to something bigger or unlimited (\`unlimit stacksize')"
    echo "and try again."
    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
247

248
autoconf || exit 1
249 250

##
251
##  Shut up
252
##
253
set +x
254

255 256 257 258 259 260 261 262 263
##
##  headers which need to be regenerated because of the VLC_EXPORT macro
##
files="src/misc/modules_builtin.h src/misc/modules_plugin.h include/vlc_symbols.h"
for file in src/misc/modules_builtin.h src/misc/modules_plugin.h include/vlc_symbols.h mozilla/vlcintf.h
do
  echo "touching $file"
  echo > $file
done
264 265 266 267

##
##  Glade sometimes sucks
##
268
echo "workarounds for annoying glade features"
269 270
for file in gnome_interface.c gtk_interface.c
do
271
if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
272 273 274
then
    rm -f /tmp/$$.$file.bak
    cat > /tmp/$$.$file.bak << EOF
275
/* This file was created automatically by glade and fixed by bootstrap */
276 277 278

#include <vlc/vlc.h>
EOF
279 280 281 282 283 284 285
    sed -e 1,7d \
        -e 's#_("-:--:--")#"-:--:--"#' \
        -e 's#_("---")#"---"#' \
        -e 's#_("--")#"--"#' \
        -e 's#_("/dev/dvd")#"/dev/dvd"#' \
        -e 's#_(\("./."\))#\1#' \
	< modules/gui/gtk/$file >> /tmp/$$.$file.bak
286
    mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
287 288 289 290
fi
done

file=gtk_support.h
291
if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
292 293
then
    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 297 298 299 300
fi

##
##  Update the potfiles because no one ever does it
##
301 302 303 304 305 306 307 308
if test "$do_po" = "no"
then
  echo "not updating potfiles. use --update-po to force doing it."
else
  cd po
  make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
  cd ..
fi
309

310
##
311
##  Tell the user about gettext and sed
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
##
case "$GETTEXT" in
  yes)
  ;;
  no)
    echo ""
    echo "==========================================================="
    echo "IMPORTANT NOTE: you do not have gettext installed on your"
    echo "system. The vlc build will work, but you will not have"
    echo "internationalization support. We suggest installing gettext."
  ;;
  old)
    echo ""
    echo "=========================================================="
    echo "NOTE: you have an old version of gettext installed on your"
    echo "system. We suggest upgrading to gettext 0.11.3 or later."
  ;;
esac

331 332 333 334 335 336 337 338 339 340 341 342 343
case "$SEDSUCKS" in
  no)
  ;;
  yes)
    echo ""
    echo "============================================================="
    echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
    echo "to handle long lines. bootstrap will try its best to generate"
    echo "a correct Makefile, but you should expect problems. We highly"
    echo "recommend installing GNU sed."
  ;;
esac