#! /bin/sh

##  bootstrap file for vlc, the VideoLAN Client
##  $Id: bootstrap,v 1.13 2002/08/29 23:53:22 massiot Exp $
##
##  Authors: Samuel Hocevar <sam@zoy.org>

###
###  get a sane environment
###
LANG=C
export LANG

###
###  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

##
## 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=""
find modules -name Modules.am | while read mf
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 '^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
    cat >> configure.ac << EOF
AM_CONDITIONAL(${mod}_plugin, test x\$${mod}_plugin = xyes)
AM_CONDITIONAL(${mod}_builtin, test x\$${mod}_builtin = xyes)
EOF
    cat >> Modules.am << EOF
###############################################################################
# The ${mod} plugin
###############################################################################

if ${mod}_plugin
LIBRARIES_${mod}_plugin = ${dir}/lib${mod}_plugin.a
DATA_${mod}_plugin = ${dir}/lib${mod}_plugin.so
BUILT_SOURCES_${mod}_plugin = \$(nodist_SOURCES_${mod})
endif
if ${mod}_builtin
LIBRARIES_${mod}_builtin = ${dir}/lib${mod}.a
LDFLAGS_${mod}_builtin = @LDFLAGS_${mod}@
if BUILD_MOZILLA
LIBRARIES_${mod}_pic = ${dir}/lib${mod}_pic.a
endif
BUILT_SOURCES_${mod}_builtin = \$(nodist_SOURCES_${mod})
endif

LIBRARIES_builtin += \$(LIBRARIES_${mod}_builtin)
LIBRARIES_builtin_pic += \$(LIBRARIES_${mod}_pic)
LDFLAGS_builtin += \$(LDFLAGS_${mod}_builtin)
${PRIVATE}BUILT_SOURCES += \$(BUILT_SOURCES_${mod}_plugin) \$(BUILT_SOURCES_${mod}_builtin)

${PRIVATE}${sym}_lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
${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}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
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}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
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)

libvlc_LIBRARIES += \$(LIBRARIES_${mod}_builtin) \$(LIBRARIES_${mod}_pic)
lib${mod}_DATA = \$(DATA_${mod}_plugin)

lib${mod}dir = \$(libdir)/vlc/${topdir}
MOSTLYCLEANFILES += \$(DATA_${mod}_plugin)
${PRIVATE}noinst_LIBRARIES += \$(LIBRARIES_${mod}_plugin)
${PRIVATE}${dir}/lib${mod}_plugin.so: \$(${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."

###
###  classic bootstrap stuff
###
set -x
rm -f aclocal.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh

# Check for gettext
if gettextize --version >/dev/null 2>&1
then
if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
        '>' 0.11.3 >/dev/null 2>&1
then
  # We have gettext, and a recent version! Everything is cool.
  autopoint --force || exit 1
  GETTEXT=yes
else
  # What?! User is not using a recent version of gettext? We'll have to
  # cheat a bit, then.
  rm -f po/ChangeLog~
  gettextize --copy --force | grep '^from the' | cut -f3 -d' '
  # Yuck!
  test -f po/ChangeLog~ && mv -f po/ChangeLog~ po/ChangeLog
  # Yuck!
  echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
  GETTEXT=old
fi;else
  # we don't have gettext. grmbl. try to continue anyway.
  mkdir -p intl
  echo > intl/Makefile.am
  echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
  GETTEXT=no
fi

# Check for automake
amvers="none"
if automake-1.6 --version >/dev/null 2>&1
then
  amvers="-1.6"
else
  if automake-1.5 --version >/dev/null 2>&1
  then
    amvers="-1.5"
  else
    if automake --version > /dev/null 2>&1
    then
      amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`

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

if test x$amvers = xnone
then
  set +x
  echo "you need automake version 1.5 or later"
  exit 1
fi

# Do the rest
aclocal${amvers} -I m4 || exit 1
autoheader || exit 1
automake${amvers} --foreign --add-missing --copy || exit 1

# 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

autoconf || exit 1

##
##  Shut up
##
set +x

##
##  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
do
  echo "touching $file"
  echo > $file
done

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

#include <vlc/vlc.h>
EOF
    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
    mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
fi
done

file=gtk_support.h
if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
then
    rm -f /tmp/$$.$file.bak
    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
    mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
fi

##
##  Update the potfiles because no one ever does it
##
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

##
##  Tell the user about gettext
##
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

