Commit 7ef8b710 authored by Tim-Philipp Müller's avatar Tim-Philipp Müller

gst-app: use minimal configure.ac

Get rid of all the custom GStreamer autogen.sh and configure.ac
cruft, turn configure.ac into a minimal example, so people have
a chance to make sense of it. Use autoreconf in autogen.sh.
parent 3fbab315
aclocal.m4
autom4te.cache
autoregen.sh
config.*
configure
libtool
INSTALL
Makefile.in
depcomp
install-sh
ltmain.sh
missing
stamp-*
compile
my-app-*.tar.*
*~
src/gst-app
SUBDIRS=src
EXTRA_DIST=depcomp autogen.sh gst-autogen.sh
EXTRA_DIST=autogen.sh
#!/bin/sh
# you can either set the environment variables AUTOCONF and AUTOMAKE
# to the right versions, or leave them unset and get the RedHat 7.3 defaults
# you can either set the environment variables AUTOCONF, AUTOHEADER, AUTOMAKE,
# ACLOCAL, AUTOPOINT and/or LIBTOOLIZE to the right versions, or leave them
# unset and get the defaults
DIE=0
package=gst-app
srcfile=src/main.c
# autogen.sh helper functions (copied from GStreamer's common/ CVS module)
if test ! -f ./gst-autogen.sh;
then
echo There is something wrong with your source tree.
echo You are either missing ./gst-autogen.sh or not
echo running autogen.sh from the top-level source
echo directory.
exit 1
fi
. ./gst-autogen.sh
CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-debug'
autogen_options $@
echo -n "+ check for build tools"
if test ! -z "$NOCHECK"; then echo " skipped"; else echo; fi
version_check "autoconf" "$AUTOCONF autoconf autoconf259 autoconf257 autoconf-2.54 autoconf-2.53 autoconf-2.52" \
"ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 52 || DIE=1
version_check "automake" "$AUTOMAKE automake automake-1.9 automake19 automake-1.7 automake-1.6 automake-1.5" \
"ftp://ftp.gnu.org/pub/gnu/automake/" 1 7 || DIE=1
###version_check "autopoint" "autopoint" \
### "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 11 5 || DIE=1
version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \
"ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1
version_check "pkg-config" "" \
"http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
die_check $DIE
autoconf_2_52d_check || DIE=1
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
tool_run "$aclocal" "$ACLOCAL_FLAGS"
tool_run "$libtoolize" "--copy --force"
tool_run "$autoheader"
tool_run "$autoconf"
tool_run "$automake" "-a -c"
# if enable exists, add an -enable option for each of the lines in that file
if test -f enable; then
for a in `cat enable`; do
CONFIGURE_FILE_OPT="--enable-$a"
done
fi
# if disable exists, add an -disable option for each of the lines in that file
if test -f disable; then
for a in `cat disable`; do
CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a"
done
fi
test -n "$NOCONFIGURE" && {
echo "+ skipping configure stage for package $package, as requested."
echo "+ autogen.sh done."
exit 0
autoreconf --verbose --force --install --make || {
echo 'autogen.sh failed';
exit 1;
}
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"
test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT"
echo
./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || {
echo " configure failed"
exit 1
./configure || {
echo 'configure failed';
exit 1;
}
echo "Now type 'make' to compile $package."
echo
echo "Now type 'make' to compile this module."
echo
AC_INIT
dnl required version of autoconf
AC_PREREQ([2.53])
dnl Fill in your package name and version here
PACKAGE=gst-app
VERSION=0.1.1
dnl TODO: fill in your package name and package version here
AC_INIT([my-app],[0.1.1])
dnl these AC_DEFINE_UNQUOTED's are necessary for make dist to work
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
dnl required version of gstreamer and gst-plugins-base
GST_REQUIRED=0.10.16
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h])
AM_CONFIG_HEADER(config.h)
dnl required version of automake
AM_INIT_AUTOMAKE([1.10])
AC_PROG_CC
AC_PROG_LIBTOOL
dnl enable mainainer mode by default
AM_MAINTAINER_MODE([enable])
dnl Check for pkgconfig first
AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, yes, no)
dnl check for tools (compiler etc.)
AM_PROG_CC_C_O
dnl Give error and exit if we don't have pkgconfig
if test "x$HAVE_PKGCONFIG" = "xno"; then
AC_MSG_ERROR(you need to have pkgconfig installed !)
fi
dnl required version of libtool
LT_PREREQ([2.2.6])
LT_INIT
dnl Now we're ready to ask for gstreamer libs and cflags
dnl And we can also ask for the right version of gstreamer
GST_MAJORMINOR=0.10
GSTCORE_REQUIRED=0.10.0
GSTBASE_REQUIRED=0.10.0
dnl error out if we can't find pkg-config
AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, [ ], [
AC_MSG_ERROR([You need to have pkg-config installed or set the PATH.])
])
dnl =======================================================================
dnl We are checking for a lot of things from the GStreamer core that
dnl an app might possibly be interested in here. Your app might not need
dnl all of these, but it can't hurt to check for them either (and they
dnl should all be installed on development systems anyway)
dnl Check for the required version of GStreamer core (and gst-plugins-base)
dnl
dnl This will export GST_CFLAGS and GST_LIBS variables for use in Makefile.am
dnl
dnl If you need libraries from gst-plugins-base here, also add:
dnl for libgstaudio-0.10: gstreamer-audio-0.10 >= $GST_REQUIRED
dnl for libgstvideo-0.10: gstreamer-video-0.10 >= $GST_REQUIRED
dnl for libgsttag-0.10: gstreamer-tag-0.10 >= $GST_REQUIRED
dnl for libgstpbutils-0.10: gstreamer-pbutils-0.10 >= $GST_REQUIRED
dnl for libgstfft-0.10: gstreamer-fft-0.10 >= $GST_REQUIRED
dnl for libgstinterfaces-0.10: gstreamer-interfaces-0.10 >= $GST_REQUIRED
dnl for libgstrtp-0.10: gstreamer-rtp-0.10 >= $GST_REQUIRED
dnl for libgstrtsp-0.10: gstreamer-rtsp-0.10 >= $GST_REQUIRED
dnl etc.
dnl =======================================================================
PKG_CHECK_MODULES(GST, [
gstreamer-$GST_MAJORMINOR >= $GSTCORE_REQUIRED
gstreamer-base-$GST_MAJORMINOR >= $GSTCORE_REQUIRED
gstreamer-controller-$GST_MAJORMINOR >= $GSTCORE_REQUIRED
gstreamer-0.10 >= $GST_REQUIRED
gstreamer-base-0.10 >= $GST_REQUIRED
gstreamer-controller-0.10 >= $GST_REQUIRED
], [
HAVE_GST=yes
AC_SUBST(GST_CFLAGS)
AC_SUBST(GST_LIBS)
], [
HAVE_GST=no
])
dnl =======================================================================
dnl Give error and exit if couldn't find gstreamer development files
dnl =======================================================================
if test "x$HAVE_GST" = "xno";
then
AC_MSG_ERROR([
Can't find the following GStreamer development packages:
gstreamer-$GST_MAJORMINOR >= $GSTCORE_REQUIRED
gstreamer-base-$GST_MAJORMINOR >= $GSTCORE_REQUIRED
gstreamer-controller-$GST_MAJORMINOR >= $GSTCORE_REQUIRED
gstreamer-0.10 >= $GST_REQUIRED
gstreamer-base-0.10 >= $GST_REQUIRED
gstreamer-controller-0.10 >= $GST_REQUIRED
Please make sure you have the necessary GStreamer-$GST_MAJORMINOR
Please make sure you have the necessary GStreamer-0.10
development headers installed.
On debian/Ubuntu systems you will probably need to install the
the 'libgstreamer$GST_MAJORMINOR-dev' package.
'libgstreamer0.10-dev' and 'libgstreamer-plugins-base0.10-dev' packages.
On RPM-based systems you will probably need to install the
'gstreamer-devel-$GST_MAJORMINOR' package.
'gstreamer-devel-0.10' package.
])
fi
dnl =======================================================================
dnl Make GST_CFLAGS and GST_LIBS available for use in Makefile.am files
dnl =======================================================================
AC_SUBST(GST_CFLAGS)
AC_SUBST(GST_LIBS)
dnl =======================================================================
dnl OPTIONAL:
dnl Also check for extra stuff that is in gst-plugins-base, like additional
dnl tags for example. You might not need this.
dnl =======================================================================
])
PKG_CHECK_MODULES(GST_PLUGINS_BASE, [
gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTBASE_REQUIRED
], [
HAVE_GST_PLUGINS_BASE=yes
], [
HAVE_GST_PLUGINS_BASE=no
])
dnl check if compiler understands -Wall (if yes, add -Wall to GST_CFLAGS)
AC_MSG_CHECKING([to see if compiler understands -Wall])
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wall"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ ], [ ])], [
GST_CFLAGS="$GST_CFLAGS -Wall"
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
])
dnl =======================================================================
dnl Give a warning only if we don't find the gstreamer plugins base stuff
dnl =======================================================================
if test "x$HAVE_GST_PLUGINS_BASE" = "xno"
then
AC_MSG_NOTICE([
Can't find the following GStreamer development packages:
gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTBASE_REQUIRED
Please make sure you have the necessary GStreamer-$GST_MAJORMINOR
development headers installed.
On debian/Ubuntu systems you will probably need to install the
the 'libgstreamer-plugins-base$GST_MAJORMINOR-dev' package.
On RPM-based systems you will probably need to install the
'gstreamer-plugins-base-devel-$GST_MAJORMINOR' package.
])
sleep 3
fi
dnl =======================================================================
dnl Make GST_CFLAGS and GST_LIBS available for use in Makefile.am files
dnl =======================================================================
AC_SUBST(GST_PLUGINS_BASE_CFLAGS)
AC_SUBST(GST_PLUGINS_BASE_LIBS)
dnl =======================================================================
dnl Finally, create Makefiles in all directories
dnl =======================================================================
AC_OUTPUT([
AC_CONFIG_FILES([
Makefile
src/Makefile
])
AC_OUTPUT
# a silly hack that generates autoregen.sh but it's handy
# Remove the old autoregen.sh first to create a new file,
# as the current one may be being read by the shell executing
# this script.
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
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"
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
}
autoconf_2_52d_check ()
{
# autoconf 2.52d has a weird issue involving a yes:no error
# so don't allow it's use
test -z "$NOCHECK" && {
ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'`
if test "$ac_version" = "2.52d"; then
echo "autoconf 2.52d has an issue with our current build."
echo "We don't know who's to blame however. So until we do, get a"
echo "regular version. RPM's of a working version are on the gstreamer site."
exit 1
fi
}
return 0
}
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
run_if_fail=$3
echo "+ running $tool $options..."
$tool $options || {
echo
echo $tool failed
eval $run_if_fail
exit 1
}
}
......@@ -10,5 +10,5 @@ noinst_HEADERS = gst-app.h play.h
# our CFLAGS and LDFLAGS used for compiling and linking
# make sure you prefix these with the name of your binary
gst_app_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) -Wall -g -O2
gst_app_LDFLAGS = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS)
gst_app_CFLAGS = $(GST_CFLAGS)
gst_app_LDFLAGS = $(GST_LIBS)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment