#!/bin/sh
#
# $Id: xdt-autogen.in 24486 2007-01-15 17:47:49Z benny $
#
# Copyright (c) 2002-2006
#         The Xfce development team. All rights reserved.
#
# Written for Xfce by Benedikt Meurer <benny@xfce.org>.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307  USA
#
# xdt-autogen - Part of the Xfce developer tools.
#


##
## Helper function to lookup configure.{in,ac} files recursively.
## Sets $CONFIGURE_FILES to the list of configure files found.
##
lookup_configure_files()
{
  if test -f "$1/configure.ac"; then
    configure_file="$1/configure.ac";
  elif test -f "$1/configure.in"; then
    configure_file="$1/configure.in";
  else
    cat >&2 <<EOF
xdt-autogen: Directory "$1" does not look like a package
             directory, neither configure.ac nor configure.in is
             present.
EOF
    exit 1
  fi

  if test x"$CONFIGURE_FILES" = x""; then
    CONFIGURE_FILES="$configure_file";
  else
    CONFIGURE_FILES="$CONFIGURE_FILES $configure_file";
  fi

  subdirs=`cat ${configure_file} | tr '\\n\\t\\\\' '   ' | sed -ne 's|.*AC_CONFIG_SUBDIRS(\[\{0,1\}\([[:alnum:]_ @/-]\{1,\}\).*|\1|p'`
  for subdir in $subdirs; do
    lookup_configure_files "$1/$subdir";
  done
}


##
## Determine XDG data dirs
##
test -z "${XDG_DATA_HOME}" && XDG_DATA_HOME="${HOME}/.local/share"
test -z "${XDG_DATA_DIRS}" && XDG_DATA_DIRS="/usr/local/share:/usr/share"
test -d "@DATADIR@" && XDG_DATA_DIRS="@DATADIR@:${XDG_DATA_DIRS}"
XDG_DATA_DIRS="${XDG_DATA_HOME}:${XDG_DATA_DIRS}"
export XDG_DATA_DIRS XDG_DATA_HOME


##
## Search for the configure.{ac,in} files
##
CONFIGURE_FILES=""
MASTER_DIR=`pwd`; test -z "${MASTER_DIR}" && MASTER_DIR="."
lookup_configure_files "$MASTER_DIR"


##
## Check for a suitable make
##
if test x"${MAKE}" = x""; then
  if (type gmake) >/dev/null 2>/dev/null; then
    MAKE="gmake"
  elif (type make) >/dev/null 2>/dev/null; then
    MAKE="make"
  else
    cat >&2 <<EOF
xdt-autogen: You must have "make" installed on your system.
EOF
    exit 1
  fi
  export MAKE
fi


##
## cleanup autogenerated files
##
if test x"$1" = x"clean"; then
  for configure_file in $CONFIGURE_FILES; do
    directory=`dirname ${configure_file}`
    
    echo "Running ${MAKE} distclean in ${directory}..."
    (cd ${directory} ; ${MAKE} distclean) >/dev/null 2>&1

    echo "Cleaning generated files in ${directory}..."

    (cd ${directory} ;
     rm -f config.* configure configure.lineno aclocal.m4 ;
     rm -f compile depcomp ltmain.sh missing install-sh ;
     rm -f po/Makefile.in.in ;
     rm -f stamp-h1 *.spec ;
     rm -f mkinstalldirs libtool ;
     rm -rf autom4te.cache ;
     rm -f intltool-* gtk-doc.make)

    # determine the output files used in this package directory
    output_files=`tr '\\n\\t\\\\' '   ' < ${configure_file} | sed -ne 's|.*AC_OUTPUT(\[\{0,1\}\([[:alnum:]_@/\. -]\{1,\}\).*|\1|p'`;
    for output_file in $output_files; do
      if test x`basename $output_file` = x"Makefile"; then
        rm -f "${directory}/${output_file}.in";
        rm -f "${directory}/${output_file}.in.in";
      fi
      rm -f "${directory}/${output_file}";
    done

    # determine translations used in this package directory
#    translations=`tr '\\n\\\\' '  ' < ${configure_file} | sed -ne 's/.*XDT_I18N(\[\{0,1\}\([a-zA-Z_@ ]\{1,\}\).*/\1/p'`;
#    for translation in $translations; do
#      rm -f "${directory}/po/${translation}.gmo";
#    done
    rm -f ${directory}/po/*.gmo;
  done

  exit 0
fi


##
## Check for autoconf, first trying autoconf-2.59, then autoconf-2.58, then
## autoconf-2.57, then autoconf-2.53, and finally simply autoconf.
##
test -z "${XDT_PROG_AUTOCONF}" &&
for i in autoconf-2.61 autoconf-2.60 autoconf-2.59 autoconf-2.58 autoconf-2.57 autoconf-2.53 autoconf; do
  (${i} --version) </dev/null >/dev/null 2>&1 &&
  XDT_PROG_AUTOCONF=${i} && break
done

test -z "${XDT_PROG_AUTOCONF}" && {
  cat >&2 <<EOF
xdt-autogen: You must have "autoconf" installed on your system.
             Download the appropriate package for your distribution,
             or get the source tarball at ftp://ftp.gnu.org/pub/gnu/.
EOF
  exit 1
}


##
## Check for intltoolize
##
test -z "${XDT_PROG_INTLTOOLIZE}" && XDT_PROG_INTLTOOLIZE="intltoolize"
for configure_file in $CONFIGURE_FILES; do
  if grep "^AC_PROG_INTLTOOL" "${configure_file}" >/dev/null 2>&1; then
    (${XDT_PROG_INTLTOOLIZE} --version) </dev/null >/dev/null 2>&1 || {
      cat >&2 <<EOF
xdt-autogen: You must have "intltool" installed on your system.
             You can download the source tarball from
             ftp://ftp.gnome.org/pub/GNOME/.
EOF
      exit 1
    };
    break;
  fi;
done


##
## Check for libtoolize
##
test -z "${XDT_PROG_LIBTOOLIZE}" && XDT_PROG_LIBTOOLIZE="libtoolize"
for configure_file in $CONFIGURE_FILES; do
  if grep "^AC_PROG_LIBTOOL" "${configure_file}" >/dev/null 2>&1; then
    (${XDT_PROG_LIBTOOLIZE} --version) </dev/null >/dev/null 2>&0 || {
      cat >&2 <<EOF
xdt-autogen: You must have "libtool" installed on your system.
             Download the appropriate package for your distribution,
             or get the source tarball at ftp://ftp.gnu.org/pub/gnu/.
EOF
      exit 1
    };
    break;
  fi;
done


##
## Check for glib-gettextize
##
test -z "${XDT_PROG_GLIB_GETTEXTIZE}" && XDT_PROG_GLIB_GETTEXTIZE="glib-gettextize"
for configure_file in $CONFIGURE_FILES; do
  directory=`dirname ${configure_file}`
  if test -d "${directory}/po"; then
    (${XDT_PROG_GLIB_GETTEXTIZE} --version) </dev/null >/dev/null 2>&1 || {
      cat >&2 <<EOF
xdt-autogen: You must have "glib2" installed. You can get if from
             ftp://ftp.gtk.org/pub/gtk/.
EOF
      exit 1
    };
    break;
  fi;
done


##
## Check for gtkdocize
##
test -z "${XDT_PROG_GTKDOCIZE}" && XDT_PROG_GTKDOCIZE="gtkdocize"
for configure_file in $CONFIGURE_FILES; do
  if grep "^GTK_DOC_CHECK" "${configure_file}" >/dev/null 2>&1; then
    (${XDT_PROG_GTKDOCIZE} --version) </dev/null >/dev/null 2>&1 || {
      cat >&2 <<EOF
xdt-autogen: You must have "gtk-doc" installed. You can get if from
             http://www.gtk.org/gtk-doc/.
EOF
      exit 1
    };
    break;
  fi;
done


##
## Check for aclocal, first trying aclocal-1.9, then aclocal-1.8, and finally
## simply aclocal.
##
test -z "${XDT_PROG_ACLOCAL}" &&
for i in aclocal-1.10 aclocal-1.9 aclocal-1.8 aclocal; do
  (${i} --version) </dev/null >/dev/null 2>&1 &&
  XDT_PROG_ACLOCAL=${i} && break
done

test -z "${XDT_PROG_ACLOCAL}" && {
  cat >&2 <<EOF
xdt-autogen: You must have "automake" installed (which includes the
             "aclocal" tool). You can get the source tarball at
             ftp://ftp.gnu.org/pub/gnu/.
EOF
  exit 1
}


##
## Check for autoheader, first trying autoheader-2.59, then autoheader-2.58,
## then autoheader-2.57, then autoheader-2.53, and finally simply autoheader.
##
test -z "${XDT_PROG_AUTOHEADER}" &&
for configure_file in $CONFIGURE_FILES; do
  if grep "^AM_CONFIG_HEADER" "${configure_file}" >/dev/null 2>&1; then
    for i in autoheader-2.61 autoheader-2.60 autoheader-2.59 autoheader-2.58 autoheader-2.57 autoheader-2.53 autoheader; do
      (${i} --version) </dev/null >/dev/null 2>&1 &&
      XDT_PROG_AUTOHEADER=${i} && break
    done
    test -z "${XDT_PROG_AUTOHEADER}" && {
      cat >&2 <<EOF
xdt-autogen: You must have "autoconf" installed (which includes the
             "autoheader" tool). You can get the source tarball at
             ftp://ftp.gnu.org/pub/gnu/.
EOF
      exit 1
    };
    break;
  fi;
done


##
## Check for automake, first trying automake-1.9, then automake-1.8, and finally
## simply automake.
##
test -z "${XDT_PROG_AUTOMAKE}" &&
for i in automake-1.10 automake-1.9 automake-1.8 automake; do
  (${i} --version) </dev/null >/dev/null 2>&1 &&
  XDT_PROG_AUTOMAKE=${i} && break
done

test -z "${XDT_PROG_AUTOMAKE}" && {
  cat >&2 <<EOF
xdt-autogen: You must have "automake" installed on your system.
             You can get the source tarball at
             ftp://ftp.gnu.org/pub/gnu/.
EOF
  exit 1
}


##
## Check for configure flags
##
test -z "${XDT_CONFIGURE_FLAGS}" && XDT_CONFIGURE_FLAGS="--enable-maintainer-mode"
CONFIGURE_FLAGS="${XDT_CONFIGURE_FLAGS} $@"


##
## Check for aclocal flags
##
XDT_ACLOCAL_FLAGS="${ACLOCAL_FLAGS} ${XDT_ACLOCAL_FLAGS}"
for path in `echo "${XDG_DATA_DIRS}" | sed 's,:, ,g'`; do
  if test -d "${path}/xfce4/dev-tools/m4macros"; then
    XDT_ACLOCAL_FLAGS="${XDT_ACLOCAL_FLAGS} -I ${path}/xfce4/dev-tools/m4macros"
  elif test -d "${path}/xfce4/dev-tools/m4"; then
    XDT_ACLOCAL_FLAGS="${XDT_ACLOCAL_FLAGS} -I ${path}/xfce4/dev-tools/m4"
  fi
done


##
## Do the real work(TM)
##
for configure_file in ${CONFIGURE_FILES}; do
  # figure out the package dir path
  source_dir=`dirname ${configure_file}`
  echo "Preparing package directory ${source_dir}..."

  # set aclocal flags
  ACLOCAL_FLAGS="${XDT_ACLOCAL_FLAGS}"
  if test -d "${source_dir}/m4macros"; then
    ACLOCAL_FLAGS="${ACLOCAL_FLAGS} -I ${source_dir}/m4macros";
  fi
  if test -d "${source_dir}/m4"; then
    ACLOCAL_FLAGS="${ACLOCAL_FLAGS} -I ${source_dir}/m4";
  fi

  if test -d "${source_dir}/po"; then
    if test ! -f "${source_dir}/aclocal.m4"; then
      (echo "Creating ${source_dir}/aclocal.m4..." &&
       echo "dnl Auto-generated by xdt-autogen" > "${source_dir}/aclocal.m4") || exit 1
    fi
    (echo "Running ${XDT_PROG_GLIB_GETTEXTIZE} --force --copy..." &&
     ${XDT_PROG_GLIB_GETTEXTIZE} --force --copy) || exit 1
    if test -f "${source_dir}/aclocal.m4" -a ! -w "${source_dir}/aclocal.m4"; then
      (echo "Making ${source_dir}/aclocal.m4 writable..." &&
       chmod u+w "${source_dir}/aclocal.m4") || exit 1
    fi
  fi

  if grep "^AC_PROG_INTLTOOL" "${configure_file}" >/dev/null 2>&1; then
    (echo "Running ${XDT_PROG_INTLTOOLIZE} --automake --copy --force" &&
     cd "${source_dir}" &&
     ${XDT_PROG_INTLTOOLIZE} --automake --copy --force) || exit 1
  fi

  # patch the po/Makefile.in.in to take into account the setting of
  # XGETTEXT_ARGS properly
  if test -f "${source_dir}/po/Makefile.in.in"; then
    grep -q '^XGETTEXT_ARGS[ ]*=[ ]*@XGETTEXT_ARGS@$' \
      "${source_dir}/po/Makefile.in.in" 2> /dev/null
    if test $? -ne 0; then
      echo "Patching file 'po/Makefile.in.in'"
      sed \
        -e 's/^\(XGETTEXT[ ]*=[ ]*@XGETTEXT@\)[ ]*$/\1 $(XGETTEXT_ARGS)/' \
        -e 's/^\(MSGMERGE[ ]*=\)[ ]*\(INTLTOOL_EXTRACT=\)/\1 XGETTEXT_ARGS="$(XGETTEXT_ARGS)" \2/' \
        -e 's/^\(GENPOT[ ]*=\)[ ]*\(INTLTOOL_EXTRACT=\)/\1 XGETTEXT_ARGS="$(XGETTEXT_ARGS)" \2/' \
        -e "/^XGETTEXT = @XGETTEXT@/{
i\\
XGETTEXT_ARGS = @XGETTEXT_ARGS@
}" < "${source_dir}/po/Makefile.in.in" > "${source_dir}/po/Makefile.in.in.tmp"
      if test $? -eq 0; then
        mv -f "${source_dir}/po/Makefile.in.in.tmp" \
          "${source_dir}/po/Makefile.in.in" || exit 1
      fi
    fi
  fi

  if grep "^AC_PROG_LIBTOOL" "${configure_file}" >/dev/null 2>&1; then
    (echo "Running ${XDT_PROG_LIBTOOLIZE} --force --copy..." &&
     cd "${source_dir}" &&
     ${XDT_PROG_LIBTOOLIZE} --force --copy) || exit 1
  fi

  if grep "^GTK_DOC_CHECK" "${configure_file}" >/dev/null 2>&1; then
    (echo "Running ${XDT_PROG_GTKDOCIZE} --copy..." &&
     cd ${source_dir} &&
     ${XDT_PROG_GTKDOCIZE} --copy) || exit 1
  fi

  (echo "Running ${XDT_PROG_ACLOCAL} ${ACLOCAL_FLAGS}..." &&
   cd ${source_dir} &&
   ${XDT_PROG_ACLOCAL} ${ACLOCAL_FLAGS}) || exit 1

  if grep "^AM_CONFIG_HEADER" "${configure_file}" >/dev/null 2>&1; then
    (echo "Running ${XDT_PROG_AUTOHEADER}..." &&
     cd ${source_dir} &&
     ${XDT_PROG_AUTOHEADER}) || exit 1
  fi

  (echo "Running ${XDT_PROG_AUTOMAKE} --force-missing --add-missing --copy --gnu..." &&
   cd ${source_dir} &&
   ${XDT_PROG_AUTOMAKE} --force-missing --add-missing --copy --gnu) || exit 1

  (echo "Running ${XDT_PROG_AUTOCONF}..." &&
   cd ${source_dir} &&
   ${XDT_PROG_AUTOCONF}) || exit 1

  echo
done


##
## Run configure
##
if test x"${NOCONFIGURE}" = x""; then
  (echo "Running ${MASTER_DIR}/configure ${CONFIGURE_FLAGS}..." &&
   cd "${MASTER_DIR}" &&
   ./configure ${CONFIGURE_FLAGS} &&
   echo "Now type \"make\" to compile.") || exit 1
else
  echo "Skipping configure process."
fi


# vi:set ts=2 sw=2 et ai:


syntax highlighted by Code2HTML, v. 0.9.1