buzztrax/autogen.sh

391 lines
11 KiB
Bash

#!/bin/sh
# Run this to generate all the initial makefiles, etc.
DIE=0
package=buzztrax
# a silly hack that generates autoregen.sh but it's handy
if [ -f "autoregen.sh" ]; then
rm autoregen.sh
fi
echo "#!/bin/sh" > autoregen.sh
echo "./autogen.sh $@ \$@" >> autoregen.sh
chmod +x autoregen.sh
# helper functions for autogen.sh
debug ()
# print out a debug message if DEBUG is a defined variable
{
if test ! -z "$DEBUG"
then
echo "DEBUG: $1"
fi
}
version_check ()
# check the version of a package
# first argument : package name (executable)
# second argument : optional path where to look for it instead
# third argument : source download url
# rest of arguments : major, minor, micro version
# all consecutive ones : suggestions for binaries to use
# (if not specified in second argument)
{
PACKAGE=$1
PKG_PATH=$2
URL=$3
MAJOR=$4
MINOR=$5
MICRO=$6
# for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null
if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi
debug "major $MAJOR minor $MINOR micro $MICRO"
VERSION=$MAJOR
if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
debug "major $MAJOR minor $MINOR micro $MICRO"
for SUGGESTION in $PKG_PATH; do
COMMAND="$SUGGESTION"
# don't check if asked not to
test -z "$NOCHECK" && {
echo -n " checking for $COMMAND >= $VERSION ... "
} || {
# we set a var with the same name as the package, but stripped of
# unwanted chars
VAR=`echo $PACKAGE | sed 's/-//g'`
debug "setting $VAR"
eval $VAR="$COMMAND"
return 0
}
debug "checking version with $COMMAND"
($COMMAND --version) < /dev/null > /dev/null 2>&1 ||
{
echo "not found."
continue
}
# strip everything that's not a digit, then use cut to get the first field
pkg_version=`$COMMAND --version|head -n 1|sed 's/^[^0-9]*//'|cut -d' ' -f1`
debug "pkg_version $pkg_version"
# remove any non-digit characters from the version numbers to permit numeric
# comparison
pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
test -z "$pkg_major" && pkg_major=0
test -z "$pkg_minor" && pkg_minor=0
test -z "$pkg_micro" && pkg_micro=0
debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
#start checking the version
debug "version check"
# reset check
WRONG=
if [ ! "$pkg_major" -gt "$MAJOR" ]; then
debug "major: $pkg_major <= $MAJOR"
if [ "$pkg_major" -lt "$MAJOR" ]; then
debug "major: $pkg_major < $MAJOR"
WRONG=1
elif [ ! "$pkg_minor" -gt "$MINOR" ]; then
debug "minor: $pkg_minor <= $MINOR"
if [ "$pkg_minor" -lt "$MINOR" ]; then
debug "minor: $pkg_minor < $MINOR"
WRONG=1
elif [ "$pkg_micro" -lt "$MICRO" ]; then
debug "micro: $pkg_micro < $MICRO"
WRONG=1
fi
fi
fi
if test ! -z "$WRONG"; then
echo "found $pkg_version, not ok !"
continue
else
echo "found $pkg_version, ok."
# we set a var with the same name as the package, but stripped of
# unwanted chars
VAR=`echo $PACKAGE | sed 's/-//g'`
debug "setting $VAR"
eval $VAR="$COMMAND"
return 0
fi
done
if test ! -z "$URL"; then
echo "not found !"
echo "You must have $PACKAGE installed to compile $package."
echo "Download the appropriate package for your distribution,"
echo "or get the source tarball at $URL"
fi
return 1;
}
aclocal_check ()
{
# normally aclocal is part of automake
# so we expect it to be in the same place as automake
# so if a different automake is supplied, we need to adapt as well
# so how's about replacing automake with aclocal in the set var,
# and saving that in $aclocal ?
# note, this will fail if the actual automake isn't called automake*
# or if part of the path before it contains it
if [ -z "$automake" ]; then
echo "Error: no automake variable set !"
return 1
else
aclocal=`echo $automake | sed s/automake/aclocal/`
debug "aclocal: $aclocal"
if [ "$aclocal" != "aclocal" ];
then
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal"
fi
if [ ! -x `which $aclocal` ]; then
echo "Error: cannot execute $aclocal !"
return 1
fi
fi
}
autoheader_check ()
{
# same here - autoheader is part of autoconf
# use the same voodoo
if [ -z "$autoconf" ]; then
echo "Error: no autoconf variable set !"
return 1
else
autoheader=`echo $autoconf | sed s/autoconf/autoheader/`
debug "autoheader: $autoheader"
if [ "$autoheader" != "autoheader" ];
then
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader"
fi
if [ ! -x `which $autoheader` ]; then
echo "Error: cannot execute $autoheader !"
return 1
fi
fi
}
die_check ()
{
# call with $DIE
# if set to 1, we need to print something helpful then die
DIE=$1
if test "x$DIE" = "x1";
then
echo
echo "- Please get the right tools before proceeding."
echo "- Alternatively, if you're sure we're wrong, run with --nocheck."
exit 1
fi
}
autogen_options ()
{
if test "x$1" = "x"; then
return 0
fi
while test "x$1" != "x" ; do
optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
case "$1" in
--noconfigure)
NOCONFIGURE=defined
AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure"
echo "+ configure run disabled"
shift
;;
--nocheck)
AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck"
NOCHECK=defined
echo "+ autotools version check disabled"
shift
;;
--debug)
DEBUG=defined
AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug"
echo "+ debug output enabled"
shift
;;
--prefix=*)
CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$optarg"
echo "+ passing --prefix=$optarg to configure"
shift
;;
--prefix)
shift
echo "DEBUG: $1"
CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$1"
echo "+ passing --prefix=$1 to configure"
shift
;;
-h|--help)
echo "autogen.sh (autogen options) -- (configure options)"
echo "autogen.sh help options: "
echo " --noconfigure don't run the configure script"
echo " --nocheck don't do version checks"
echo " --debug debug the autogen process"
echo " --prefix will be passed on to configure"
echo
echo " --with-autoconf PATH use autoconf in PATH"
echo " --with-automake PATH use automake in PATH"
echo
echo "to pass options to configure, put them as arguments after -- "
exit 1
;;
--with-automake=*)
AUTOMAKE=$optarg
echo "+ using alternate automake in $optarg"
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE"
shift
;;
--with-autoconf=*)
AUTOCONF=$optarg
echo "+ using alternate autoconf in $optarg"
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF"
shift
;;
--disable*|--enable*|--with*)
echo "+ passing option $1 to configure"
CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1"
shift
;;
--) shift ; break ;;
*) echo "- ignoring unknown autogen.sh argument $1"; shift ;;
esac
done
for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done
if test ! -z "$CONFIGURE_EXT_OPT"
then
echo "+ options passed to configure: $CONFIGURE_EXT_OPT"
fi
}
toplevel_check ()
{
srcfile=$1
test -f $srcfile || {
echo "You must run this script in the top-level $package directory"
exit 1
}
}
tool_run ()
{
tool=$1
options=$2
echo "+ running $tool $options..."
$tool $options || {
echo
echo $tool failed
exit 1
}
}
CONFIGURE_DEF_OPT='--enable-debug=yes'
autogen_options $@
have_gtkdoc_1_9=0
echo -n "+ check for build tools"
if test ! -z "$NOCHECK"; then echo ": skipped version checks"; else echo; fi
version_check "autoconf" "$AUTOCONF autoconf" \
"ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 61 || DIE=1
version_check "automake" "$AUTOMAKE automake automake-1.7 automake17 automake-1.6" \
"ftp://ftp.gnu.org/pub/gnu/automake/" 1 6 || DIE=1
version_check "autopoint" "autopoint" \
"ftp://ftp.gnu.org/pub/gnu/gettext/" 0 12 1 || DIE=1
version_check "gtkdocize" "" "" 1 9 && have_gtkdoc_1_9=1
if test "x$have_gtkdoc_1_9" = "x0"; then
version_check "gtkdocize" "" \
"ftp://ftp.gnome.org/pub/gnome/sources/gtk-doc/" 1 4
fi
version_check "intltoolize" "" \
"ftp://ftp.gnome.org/pub/gnome/sources/intltool/" 0 1 5 || DIE=1
version_check "libtoolize" "libtoolize glibtoolize" \
"ftp://ftp.gnu.org/pub/gnu/libtool/" 2 2 0 || DIE=1
version_check "pkg-config" "" \
"ftp://ftp.gnome.org/pub/gnome/sources/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 "$*"; 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
tool_run "$autopoint --force"
# must be run before aclocal, as this installs some m4 files
tool_run "$libtoolize" "--copy --force"
# aclocal
if test -f acinclude.m4; then rm acinclude.m4; fi
tool_run "$aclocal" "-I m4 $ACLOCAL_FLAGS"
tool_run "$intltoolize" "--copy --force --automake"
if test -n "$gtkdocize"; then
if test "x$have_gtkdoc_1_9" = "x0"; then
tool_run "$gtkdocize" "--copy"
else
tool_run "$gtkdocize" "--copy --flavour no-tmpl"
fi
else
echo "EXTRA_DIST = " > gtk-doc.make
fi
tool_run "$autoheader"
# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo
echo timestamp > stamp-h.in 2> /dev/null
tool_run "$autoconf"
debug "automake: $automake"
tool_run "$automake" "--add-missing --copy --gnu -Wno-portability"
test -n "$NOCONFIGURE" && {
echo "skipping configure stage for package $package, as requested."
echo "autogen.sh done."
exit 0
}
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 ./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT
./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT || {
echo " configure failed"
exit 1
}
echo "Now type 'make' to compile $package."