update-autogen: new tool to generate module autogen.sh files from a common template
authorTim-Philipp Müller <tim@centricular.net>
Sun, 14 Apr 2013 14:17:12 +0000 (15:17 +0100)
committerTim-Philipp Müller <tim@centricular.net>
Sun, 14 Apr 2013 16:12:35 +0000 (17:12 +0100)
Maybe one day an autogen.sh consisting of just 'autoreconf' will
be enough. Until then, let's try to at least use consistent autogen.sh
in the different modules. This tool will hopefully help with that.

The autogen.sh.in template is currently based on the autogen.sh
from core. There are changes in other modules which should probably
be merged into that.

One bug has already been fixed: touch gstreamer-1.0.pot not -0.10.pot

autogen.sh.in [new file with mode: 0755]
update-autogen [new file with mode: 0755]

diff --git a/autogen.sh.in b/autogen.sh.in
new file mode 100755 (executable)
index 0000000..c303a32
--- /dev/null
@@ -0,0 +1,118 @@
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+
+olddir=`pwd`
+cd "$srcdir"
+
+DIE=0
+package=@PACKAGE@
+srcfile=@SRCFILE@
+
+# Make sure we have common
+if test ! -f common/gst-autogen.sh;
+then
+  echo "+ Setting up common submodule"
+  git submodule init
+fi
+git submodule update
+
+# source helper functions
+if test ! -f common/gst-autogen.sh;
+then
+  echo There is something wrong with your source tree.
+  echo You are missing common/gst-autogen.sh
+  exit 1
+fi
+. common/gst-autogen.sh
+
+# install pre-commit hook for doing clean commits
+if test ! \( -x .git/hooks/pre-commit -a -L .git/hooks/pre-commit \);
+then
+    rm -f .git/hooks/pre-commit
+    ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit
+fi
+
+# GNU gettext automake support doesn't get along with git.
+# https://bugzilla.gnome.org/show_bug.cgi?id=661128
+touch -t 200001010000 po/@PACKAGE@-@API_VERSION@.pot
+
+CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-failing-tests --enable-poisoning --enable-gtk-doc --enable-docbook'
+
+autogen_options $@
+
+printf "+ check for build tools"
+if test ! -z "$NOCHECK"; then echo ": skipped version checks"; else  echo; fi
+version_check "autoconf" "$AUTOCONF autoconf autoconf270 autoconf269 autoconf268 autoconf267 autoconf266 autoconf265 autoconf264 autoconf263 autoconf262" \
+              "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 62 || DIE=1
+version_check "automake" "$AUTOMAKE automake automake-1.11" \
+              "ftp://ftp.gnu.org/pub/gnu/automake/" 1 11 || DIE=1
+version_check "autopoint" "autopoint" \
+              "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 17 || DIE=1
+version_check "libtoolize" "libtoolize glibtoolize" \
+              "ftp://ftp.gnu.org/pub/gnu/libtool/" 2 2 6 || DIE=1
+version_check "pkg-config" "" \
+              "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
+
+die_check $DIE
+
+aclocal_check || DIE=1
+autoheader_check || DIE=1
+
+die_check $DIE
+
+# if no arguments specified then this will be printed
+if test -z "$*" && test -z "$NOCONFIGURE"; then
+  echo "+ checking for autogen.sh options"
+  echo "  This autogen script will automatically run ./configure as:"
+  echo "  ./configure $CONFIGURE_DEF_OPT"
+  echo "  To pass any additional options, please specify them on the $0"
+  echo "  command line."
+fi
+
+toplevel_check $srcfile
+
+# autopoint
+#    older autopoint (< 0.12) has a tendency to complain about mkinstalldirs
+if test -x mkinstalldirs; then rm mkinstalldirs; fi
+#    first remove patch if necessary, then run autopoint, then reapply
+if test -f po/Makefile.in.in;
+then
+  patch -p0 -R --forward < common/gettext.patch
+fi
+tool_run "$autopoint" "--force" "patch -p0 < common/gettext.patch"
+patch -p0 < common/gettext.patch
+
+# aclocal
+if test -f acinclude.m4; then rm acinclude.m4; fi
+
+tool_run "$libtoolize" "--copy --force"
+tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS"
+tool_run "$autoheader"
+
+# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode
+echo timestamp > stamp-h.in 2> /dev/null
+
+tool_run "$autoconf"
+debug "automake: $automake"
+tool_run "$automake" "--add-missing --copy"
+
+test -n "$NOCONFIGURE" && {
+  echo "skipping configure stage for package $package, as requested."
+  echo "autogen.sh done."
+  exit 0
+}
+
+cd "$olddir"
+
+echo "+ running configure ... "
+test ! -z "$CONFIGURE_DEF_OPT" && echo "  ./configure default flags: $CONFIGURE_DEF_OPT"
+test ! -z "$CONFIGURE_EXT_OPT" && echo "  ./configure external flags: $CONFIGURE_EXT_OPT"
+echo
+
+echo "$srcdir/configure" $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT
+"$srcdir/configure" $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT || {
+        echo "  configure failed"
+        exit 1
+}
+
+echo "Now type 'make' to compile $package."
diff --git a/update-autogen b/update-autogen
new file mode 100755 (executable)
index 0000000..d267556
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+if [ ! -f "common/update-autogen" ]; then
+  echo "Run ./common/update-autogen from the top-level source directory of a GStreamer module";
+  exit 1;
+fi
+
+if ! ls -1 *.doap 2>/dev/null >/dev/null; then
+  echo "Could not find *.doap file";
+  exit 1;
+fi
+
+PACKAGE=`ls -1 *.doap | head -n1 | sed -e 's/.doap$//'`
+
+#echo "Package: $PACKAGE"
+
+DIR=`mktemp -d`
+if [[ $? != 0 ]]; then
+  echo "Could not create temp dir";
+  exit 1;
+fi
+
+TEMP_AUTOGEN_SH="$DIR/autogen.sh"
+echo "\
+#!/bin/sh
+#
+# $PACKAGE autogen.sh
+#
+# Run this to generate all the initial makefiles, etc.
+#
+# This file has been generated from common/autogen.sh.in via common/update-autogen
+
+" > $TEMP_AUTOGEN_SH
+
+sed \
+    -e "s/@API_VERSION@/1.0/g" \
+    -e "s/@PACKAGE@/$PACKAGE/g" \
+    -e "s/@SRCFILE@/$PACKAGE.doap/g" < common/autogen.sh.in >> $TEMP_AUTOGEN_SH
+
+chmod +x $TEMP_AUTOGEN_SH
+
+mv $TEMP_AUTOGEN_SH autogen.sh || {
+  echo "Failed to update autogen.sh"
+  exit 1;
+}
+rmdir $DIR
+
+echo "Updated $PACKAGE autogen.sh"