dnl Perform a check for a feature for GStreamer dnl Richard Boulton dnl Thomas Vander Stichele 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_ to "yes" or "no" depending dnl on whether the feature is available. dnl dnl The macro will set USE_ to "yes" or "no" depending on dnl whether the feature is to be used. dnl Thomas changed this, so that when USE_ was already set dnl to no, then it stays that way. dnl dnl The macro will call AM_CONDITIONAL(USE_, ...) 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_ 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 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 #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 ])