blob: 876215ed477d89c3092ec08e7c86302dbdc4b619 [file] [log] [blame]
dnl Perform a check for a feature for GStreamer
dnl Richard Boulton <richard-alsa@tartarus.org>
dnl Thomas Vander Stichele <thomas@apestaart.org> added useful stuff
dnl Last modification: 25/06/2001
dnl
dnl AG_GST_CHECK_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION,
dnl DEPENDENT-PLUGINS, TEST-FOR-FEATURE,
dnl DISABLE-BY-DEFAULT, ACTION-IF-USE, ACTION-IF-NOTUSE)
dnl
dnl This macro adds a command line argument to allow the user to enable
dnl or disable a feature, and if the feature is enabled, performs a supplied
dnl test to check if the feature is available.
dnl
dnl The test should define HAVE_<FEATURE-NAME> to "yes" or "no" depending
dnl on whether the feature is available.
dnl
dnl The macro will set USE_<FEATURE-NAME> to "yes" or "no" depending on
dnl whether the feature is to be used.
dnl Thomas changed this, so that when USE_<FEATURE-NAME> was already set
dnl to no, then it stays that way.
dnl
dnl The macro will call AM_CONDITIONAL(USE_<FEATURE-NAME>, ...) to allow
dnl the feature to control what is built in Makefile.ams. If you want
dnl additional actions resulting from the test, you can add them with the
dnl ACTION-IF-USE and ACTION-IF-NOTUSE parameters.
dnl
dnl FEATURE-NAME is the name of the feature, and should be in
dnl purely upper case characters.
dnl FEATURE-DESCRIPTION is used to describe the feature in help text for
dnl the command line argument.
dnl DEPENDENT-PLUGINS lists any plug-ins which depend on this feature.
dnl TEST-FOR-FEATURE is a test which sets HAVE_<FEATURE-NAME> to "yes"
dnl or "no" depending on whether the feature is
dnl available.
dnl DISABLE-BY-DEFAULT if "disabled", the feature is disabled by default,
dnl if any other value, the feature is enabled by default.
dnl ACTION-IF-USE any extra actions to perform if the feature is to be
dnl used.
dnl ACTION-IF-NOTUSE any extra actions to perform if the feature is not to
dnl be used.
dnl
dnl
dnl thomas :
dnl we also added a history.
dnl GST_PLUGINS_YES will contain all plugins to be built
dnl that were checked through AG_GST_CHECK_FEATURE
dnl GST_PLUGINS_NO will contain those that won't be built
AC_DEFUN([AG_GST_CHECK_FEATURE],
[echo
AC_MSG_NOTICE(*** checking feature: [$2] ***)
if test "x[$3]" != "x"
then
AC_MSG_NOTICE(*** for plug-ins: [$3] ***)
fi
dnl
builtin(define, [gst_endisable], ifelse($5, [disabled], [enable], [disable]))dnl
dnl if it is set to NO, then don't even consider it for building
NOUSE=
if test "x$USE_[$1]" = "xno"; then
NOUSE="yes"
fi
AC_ARG_ENABLE(translit([$1], A-Z, a-z),
[ ]builtin(format, --%-26s gst_endisable %s, gst_endisable-translit([$1], A-Z, a-z), [$2]ifelse([$3],,,: [$3])),
[ case "${enableval}" in
yes) USE_[$1]=yes;;
no) USE_[$1]=no;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-translit([$1], A-Z, a-z)) ;;
esac],
[ USE_$1=]ifelse($5, [disabled], [no], [yes])) dnl DEFAULT
dnl *** set it back to no if it was preset to no
if test "x$NOUSE" = "xyes"; then
USE_[$1]="no"
AC_MSG_WARN(*** $3 pre-configured not to be built)
fi
NOUSE=
dnl *** Check if it is ported or not
if echo " [$GST_PLUGINS_NONPORTED] " | tr , ' ' | grep -i " [$1] " > /dev/null; then
USE_[$1]="no"
AC_MSG_WARN(*** $3 not ported)
fi
dnl *** If it's enabled
if test x$USE_[$1] = xyes; then
dnl save compile variables before the test
gst_check_save_LIBS=$LIBS
gst_check_save_LDFLAGS=$LDFLAGS
gst_check_save_CFLAGS=$CFLAGS
gst_check_save_CPPFLAGS=$CPPFLAGS
gst_check_save_CXXFLAGS=$CXXFLAGS
HAVE_[$1]=no
dnl TEST_FOR_FEATURE
$4
LIBS=$gst_check_save_LIBS
LDFLAGS=$gst_check_save_LDFLAGS
CFLAGS=$gst_check_save_CFLAGS
CPPFLAGS=$gst_check_save_CPPFLAGS
CXXFLAGS=$gst_check_save_CXXFLAGS
dnl If it isn't found, unset USE_[$1]
if test x$HAVE_[$1] = xno; then
USE_[$1]=no
else
ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will be built: [$3])])
fi
fi
dnl *** Warn if it's disabled or not found
if test x$USE_[$1] = xyes; then
ifelse([$6], , :, [$6])
if test "x$3" != "x"; then
GST_PLUGINS_YES="\t[$3]\n$GST_PLUGINS_YES"
fi
AC_DEFINE(HAVE_[$1], , [Define to enable $2]ifelse($3,,, [ (used by $3)]).)
else
ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will not be built: [$3])])
if test "x$3" != "x"; then
GST_PLUGINS_NO="\t[$3]\n$GST_PLUGINS_NO"
fi
ifelse([$7], , :, [$7])
fi
dnl *** Define the conditional as appropriate
AM_CONDITIONAL(USE_[$1], test x$USE_[$1] = xyes)
])
dnl Use AC_CHECK_LIB and AC_CHECK_HEADER to do both tests at once
dnl sets HAVE_module if we have it
dnl Richard Boulton <richard-alsa@tartarus.org>
dnl Last modification: 26/06/2001
dnl AG_GST_CHECK_LIBHEADER(FEATURE-NAME, LIB NAME, LIB FUNCTION, EXTRA LD FLAGS,
dnl HEADER NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
dnl
dnl This check was written for GStreamer: it should be renamed and checked
dnl for portability if you decide to use it elsewhere.
dnl
AC_DEFUN([AG_GST_CHECK_LIBHEADER],
[
AC_CHECK_LIB([$2], [$3], HAVE_[$1]=yes, HAVE_[$1]=no,[$4])
if test "x$HAVE_[$1]" = "xyes"; then
AC_CHECK_HEADER([$5], :, HAVE_[$1]=no)
if test "x$HAVE_[$1]" = "xyes"; then
dnl execute what needs to be
ifelse([$6], , :, [$6])
else
ifelse([$7], , :, [$7])
fi
else
ifelse([$7], , :, [$7])
fi
AC_SUBST(HAVE_[$1])
]
)
dnl 2004-02-14 Thomas - changed to get set properly and use proper output
dnl 2003-06-27 Benjamin Otte - changed to make this work with gstconfig.h
dnl
dnl Add a subsystem --disable flag and all the necessary symbols and substitions
dnl
dnl AG_GST_CHECK_SUBSYSTEM_DISABLE(SYSNAME, [subsystem name])
dnl
AC_DEFUN([AG_GST_CHECK_SUBSYSTEM_DISABLE],
[
dnl this define will replace each literal subsys_def occurrence with
dnl the lowercase hyphen-separated subsystem
dnl e.g. if $1 is GST_DEBUG then subsys_def will be a macro with gst-debug
define([subsys_def],translit([$1], _A-Z, -a-z))
AC_ARG_ENABLE(subsys_def,
AC_HELP_STRING(--disable-subsys_def, [disable $2]),
[
case "${enableval}" in
yes) GST_DISABLE_[$1]=no ;;
no) GST_DISABLE_[$1]=yes ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-subsys_def]) ;;
esac
],
[GST_DISABLE_[$1]=no]) dnl Default value
if test x$GST_DISABLE_[$1] = xyes; then
AC_MSG_NOTICE([disabled subsystem [$2]])
GST_DISABLE_[$1]_DEFINE="#define GST_DISABLE_$1 1"
else
GST_DISABLE_[$1]_DEFINE="/* #undef GST_DISABLE_$1 */"
fi
AC_SUBST(GST_DISABLE_[$1]_DEFINE)
undefine([subsys_def])
])
dnl Parse gstconfig.h for feature and defines add the symbols and substitions
dnl
dnl AG_GST_PARSE_SUBSYSTEM_DISABLE(GST_CONFIGPATH, FEATURE)
dnl
AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLE],
[
grep >/dev/null "#undef GST_DISABLE_$2" $1
if test $? = 0; then
GST_DISABLE_[$2]=0
else
GST_DISABLE_[$2]=1
fi
AC_SUBST(GST_DISABLE_[$2])
])
dnl Parse gstconfig.h and defines add the symbols and substitions
dnl
dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-1.0`"/gst/gstconfig.h"
dnl AG_GST_PARSE_SUBSYSTEM_DISABLES(GST_CONFIGPATH)
dnl
AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLES],
[
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,GST_DEBUG)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,LOADSAVE)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PARSE)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,TRACE)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,ALLOC_TRACE)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,REGISTRY)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PLUGIN)
AG_GST_PARSE_SUBSYSTEM_DISABLE($1,XML)
])
dnl AG_GST_CHECK_GST_DEBUG_DISABLED(ACTION-IF-DISABLED, ACTION-IF-NOT-DISABLED)
dnl
dnl Checks if the GStreamer debugging system is disabled in the core version
dnl we are compiling against (by checking gstconfig.h)
dnl
AC_DEFUN([AG_GST_CHECK_GST_DEBUG_DISABLED],
[
AC_REQUIRE([AG_GST_CHECK_GST])
AC_MSG_CHECKING([whether the GStreamer debugging system is enabled])
AC_LANG_PUSH([C])
save_CFLAGS="$CFLAGS"
CFLAGS="$GST_CFLAGS $CFLAGS"
AC_COMPILE_IFELSE([
AC_LANG_SOURCE([[
#include <gst/gstconfig.h>
#ifdef GST_DISABLE_GST_DEBUG
#error "debugging disabled, make compiler fail"
#endif]])], [ debug_system_enabled=yes], [debug_system_enabled=no])
CFLAGS="$save_CFLAGS"
AC_LANG_POP([C])
AC_MSG_RESULT([$debug_system_enabled])
if test "x$debug_system_enabled" = "xyes" ; then
$2
true
else
$1
true
fi
])
dnl relies on GST_PLUGINS_ALL, GST_PLUGINS_SELECTED, GST_PLUGINS_YES,
dnl GST_PLUGINS_NO, and BUILD_EXTERNAL
AC_DEFUN([AG_GST_OUTPUT_PLUGINS], [
printf "configure: *** Plug-ins without external dependencies that will be built:\n"
( for i in $GST_PLUGINS_SELECTED; do printf '\t'$i'\n'; done ) | sort
printf "\n"
printf "configure: *** Plug-ins without external dependencies that will NOT be built:\n"
( for i in $GST_PLUGINS_ALL; do
case " $GST_PLUGINS_SELECTED " in
*\ $i\ *)
;;
*)
printf '\t'$i'\n'
;;
esac
done ) | sort
printf "\n"
printf "configure: *** Plug-ins that have NOT been ported:\n"
( for i in $GST_PLUGINS_NONPORTED; do
printf '\t'$i'\n'
done ) | sort
printf "\n"
if test "x$BUILD_EXTERNAL" = "xno"; then
printf "configure: *** No plug-ins with external dependencies will be built\n"
else
printf "configure: *** Plug-ins with dependencies that will be built:"
printf "$GST_PLUGINS_YES\n" | sort
printf "\n"
printf "configure: *** Plug-ins with dependencies that will NOT be built:"
printf "$GST_PLUGINS_NO\n" | sort
printf "\n"
fi
])