#! /bin/sh


##  toolbox for the VLC media player
##  $Id$
##
##  Copyright (C) 2002-2006  the VideoLAN team
##
##  Authors: Samuel Hocevar <sam@zoy.org>
##           Rémi Denis-Courmont <rem # videolan.org>

###
###  Get a sane environment, just in case
###
LC_ALL=C
export LC_ALL
LANG=C
export LANG
CYGWIN=binmode
export CYGWIN

##
##  Give help
##
help()
{
  cat << EOF
recognized flags are:
  --update-po             update translation files
  --update-includes       generate various include files
  --update-glade2         generate and fix Glade 2 code
  --update-flexml         generate and fix flexml and flex code
  --distclean             "make distclean" on steroids
  --dist-contrib          add the contrib dir to MAKE_DIST
EOF
  exit 1
}

##
##  Extract stuff from Makefile.am
##
getfiles()
{
  awk 'BEGIN{a=0}{if(!a&&$0~/^'"$1"'[^-_a-zA-Z0-9]*=/){a=1;print$0;next;}if(a){if($0~/^[a-zA-Z]/){exit;}print $0}}' < "${srcdir}/Makefile.am" | \
    tr '\\ ' '\n\n' | \
    sed -ne 's/[^-$()_a-zA-Z0-9][^-$()_a-zA-Z0-9]*\([a-zA-Z]\)/\1/p' | \
    sed -e "s,^,${srcdir}/,"
}

###
###  argument check
###

if test "$1" = ""
then
  help
fi

case "$1" in
  --changelog|--update-changelog)
    action=changelog
    ;;
  --update-po)
    action=po
    ;;
  --update-includes)
    action=includes
    ;;
  --update-flexml)
    action=flexml
    ;;
  --update-glade2|--update-glade-2|--fix-glade2)
    action=glade2
    ;;
  --distclean)
    action=distclean
    ;;
  --add-include)
    action=include
    ;;
  --dist-contrib)
    action=contrib
    ;;
  --help)
    help
    ;;
  *)
    echo "$0: unknown option $1"
    help
    ;;
esac
shift

##
##  Add includes to help doxygen
##
if test "${action}" = "include"
then
  case "$1" in
    */vlc_common.h|*/include/vlc/*);;
    */include/*.h) echo "#include <vlc_common.h>" ;;
  esac
  cat $1
  exit 0
fi

##
##  Update the CVS changelog
##
if test "${action}" = "changelog"
then
  YEAR="`date +%Y`"
  echo "toolbox --changelog no longer required. use this instead:"
  echo " LANG=C svn log -v -r '{$YEAR-12-31}:{$YEAR-01-01}' > ChangeLog"
  exit 0
fi

##
##  Update the potfiles because no one ever does it
##
if test "${action}" = "po"
then
  # find out the source files
  echo "WARNING: you should run \"make update-po\" instead!" >&2
  make update-po
  exit $?
fi

##
##  Create include files
##
if test "${action}" = "includes"
then
  #set -x

  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
  if test -z "${builddir}"; then
    builddir="`sed -ne 's/^top_builddir *= *//p' < Makefile`"
  fi
  BUILTINS=`sed -ne 's/.*builtins *= *" *\([^"]*\)".*/\1/p' ${builddir}/vlc-config`

  file="${builddir}/src/modules/builtin.h"

  rm -f "${file}.tmp"
  mkdir -p -- "${builddir}/src/modules"
  cat "${srcdir}/src/modules/builtin.h.in" > "${file}.tmp" || exit 1
  if test -n "${BUILTINS}"
  then
    for i in `echo ${BUILTINS}`
    do
      echo "int vlc_entry__`echo $i | sed -e 'y@/@_@' -e 's@\..*@@'`( module_t* );" >> "${file}.tmp"
    done
    echo "" >> "${file}.tmp"
  fi
  echo "#define ALLOCATE_ALL_BUILTINS() \\" >> ${file}.tmp
  echo "    do \\" >> "${file}.tmp"
  echo "    { \\" >> "${file}.tmp"
  if test -n "${BUILTINS}"
  then
    for i in `echo ${BUILTINS}`
    do
      echo "        ALLOCATE_BUILTIN(`echo $i | sed -e 'y@/@_@' -e 's@\..*@@'`); \\" >> "${file}.tmp"
    done
  fi
  echo "    } while( 0 );" >> "${file}.tmp"
  echo "" >> "${file}.tmp" || exit 1
  if diff >/dev/null 2>&1 "${file}" "${file}.tmp"
  then
    rm -f "${file}.tmp"
  else
    echo "creating new ${file}"
    mv -f "${file}.tmp" "${file}"
  fi

  exit 0
fi

##
##  Fix glade2-generated files
##
if test "${action}" = "glade2"
then
  file="modules/gui/pda/pda.glade"
  echo "generating code from $file"
  glade-2 -w "$file" || exit 1

  file="modules/gui/pda/pda_interface.c"
  echo "fixing $file"
  if grep "DO NOT EDIT THIS FILE" "$file" >/dev/null 2>&1
  then
    rm -f -- "$file.$$.bak"
    cat > "$file.$$.bak" << EOF
/* This file was created automatically by glade2 and fixed by bootstrap */

#include <vlc/vlc.h>
EOF
    sed -e 1,7d \
        -e 's#_(\(".:..:.."\))#\1#' \
        -e 's#_(\("[a-z0-9]*://[^"]*"\))#\1#' \
        -e 's#_("---")#"---"#' \
        -e 's#_("--")#"--"#' \
        -e 's#_(\("/dev/[^"]*"\))#\1#' \
        -e 's#_(\("./."\))#\1#' \
        < "$file" >> "$file.$$.bak"
    mv -f "$file.$$.bak" "$file"
  fi

  exit 0
fi

##
##  Make distclean
##
if test "${action}" = "distclean"
then
  set -x
  # a naive sanity check to make sure we are in a VLC tree
  test -f vlc.mandriva.spec -a -f vlc.win32.nsi.in || exit 1
  # let's rock!
  find . -false -path './extras/contrib/*' -type f '(' -name '*.[oa]' -o -name '*.l[oa]' -o -name '*.so' -o -name '*.sl' -o -name '*.dylib' -o -name '*.dll' -o -name .dirstamp -o '(' '(' ! -path '\./doc/developer/Makefile\.in' ')' -a -name Makefile.in ')' -o -name 'stamp-h*' -o -name '*~' -o -name '*.bak' -o -name '*.moc.cpp' ')' -exec rm -f '{}' ';'
  (cd autotools && find . -maxdepth 1 -name '[a-z]*' -exec rm -f '{}' ';')
  find . -type d -name '.deps' -exec rm -Rf '{}' ';'
  find . -type d -name '.libs' -exec rm -Rf '{}' ';'
  # there's some more cruft all around
  rm -f config.h config.log config.status
  rm -f vlc vlc-config Makefile Modules.am
  rm -Rf autom4te.cache
  echo "\`toolbox --distclean\' is known to be broken."
  echo "Don't complain if it does not work, or better yet, don't use it."
  echo "You were warned."
  # FIXME: a lot of Makefiles are still there
fi

##
## Add the extras/contrib dir to the distribution
##
if test "${action}" = "contrib"
then
  set -x
  if test ! -d "${distdir}/extras"
  then
    mkdir "${distdir}/extras"
  fi
  if test ! -d "${distdir}/extras/contrib"
  then
    mkdir "${distdir}/extras/contrib"
  fi
  cp "${srcdir}/extras/contrib/Makefile" "${distdir}/extras/contrib/Makefile"
  cp "${srcdir}/extras/contrib/README" "${distdir}/extras/contrib/README"
  cp "${srcdir}/extras/contrib/bootstrap" "${distdir}/extras/contrib/bootstrap"
  cp "${srcdir}/extras/contrib/change_prefix.sh" "${distdir}/extras/contrib/change_prefix.sh"
  if test ! -d "${distdir}/extras/contrib/src"
  then
    mkdir "${distdir}/extras/contrib/src"
  fi
  cp "${srcdir}/extras/contrib/src/Makefile" "${distdir}/extras/contrib/src/Makefile"
  cp "${srcdir}/extras/contrib/src/packages.mak" "${distdir}/extras/contrib/src/packages.mak"
  if test ! -d "${distdir}/extras/contrib/src/Patches"
  then
    mkdir "${distdir}/extras/contrib/src/Patches"
  fi
  cp ${srcdir}/extras/contrib/src/Patches/* "${distdir}/extras/contrib/src/Patches/"
fi

