mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-16 05:16:36 +00:00
the cothreads library now builds, but it's untested the public api is in cothreads.h
Original commit message from CVS: the cothreads library now builds, but it's untested the public api is in cothreads.h
This commit is contained in:
parent
9d34e82b9a
commit
45a4d305fd
13 changed files with 2987 additions and 115 deletions
|
@ -4,12 +4,16 @@
|
|||
# ``UNIX -- where you can do anything
|
||||
# in two keystrokes, or less...''
|
||||
|
||||
noinst_LTLIBRARIES = libpth-mctx.la
|
||||
noinst_LTLIBRARIES = libpth-mctx.la libgstcothreads.la
|
||||
|
||||
libpth_mctx_la_SOURCES = pth_mctx.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
|
||||
|
||||
libgstcothreads_la_SOURCES = cothreads.c cothread-stack.c cothreads.h
|
||||
libgstcothreads_la_LIBADD = libpth-mctx.la $(GLIB_LIBS)
|
||||
libgstcothreads_la_CFLAGS = $(GLIB_CFLAGS)
|
||||
|
||||
noinst_PROGRAMS = test-pth test-pth-pthreads test-pthreads test-pth-pthreads2
|
||||
noinst_HEADERS = linuxthreads.h
|
||||
noinst_HEADERS = linuxthreads.h cothreads-private.h cothreads.h
|
||||
|
||||
test_pth_LDADD = libpth-mctx.la
|
||||
test_pth_pthreads_LDADD = libpth-mctx.la -lpthread
|
||||
|
|
|
@ -1,3 +1,452 @@
|
|||
# Configure paths for GLIB
|
||||
# Owen Taylor 97-11-3
|
||||
|
||||
dnl AM_PATH_GLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
|
||||
dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or
|
||||
dnl gthread is specified in MODULES, pass to glib-config
|
||||
dnl
|
||||
AC_DEFUN(AM_PATH_GLIB,
|
||||
[dnl
|
||||
dnl Get the cflags and libraries from the glib-config script
|
||||
dnl
|
||||
AC_ARG_WITH(glib-prefix,[ --with-glib-prefix=PFX Prefix where GLIB is installed (optional)],
|
||||
glib_config_prefix="$withval", glib_config_prefix="")
|
||||
AC_ARG_WITH(glib-exec-prefix,[ --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)],
|
||||
glib_config_exec_prefix="$withval", glib_config_exec_prefix="")
|
||||
AC_ARG_ENABLE(glibtest, [ --disable-glibtest Do not try to compile and run a test GLIB program],
|
||||
, enable_glibtest=yes)
|
||||
|
||||
if test x$glib_config_exec_prefix != x ; then
|
||||
glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix"
|
||||
if test x${GLIB_CONFIG+set} != xset ; then
|
||||
GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config
|
||||
fi
|
||||
fi
|
||||
if test x$glib_config_prefix != x ; then
|
||||
glib_config_args="$glib_config_args --prefix=$glib_config_prefix"
|
||||
if test x${GLIB_CONFIG+set} != xset ; then
|
||||
GLIB_CONFIG=$glib_config_prefix/bin/glib-config
|
||||
fi
|
||||
fi
|
||||
|
||||
for module in . $4
|
||||
do
|
||||
case "$module" in
|
||||
gmodule)
|
||||
glib_config_args="$glib_config_args gmodule"
|
||||
;;
|
||||
gthread)
|
||||
glib_config_args="$glib_config_args gthread"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
AC_PATH_PROG(GLIB_CONFIG, glib-config, no)
|
||||
min_glib_version=ifelse([$1], ,0.99.7,$1)
|
||||
AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
|
||||
no_glib=""
|
||||
if test "$GLIB_CONFIG" = "no" ; then
|
||||
no_glib=yes
|
||||
else
|
||||
GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags`
|
||||
GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs`
|
||||
glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test "x$enable_glibtest" = "xyes" ; then
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
||||
LIBS="$GLIB_LIBS $LIBS"
|
||||
dnl
|
||||
dnl Now check if the installed GLIB is sufficiently new. (Also sanity
|
||||
dnl checks the results of glib-config to some extent
|
||||
dnl
|
||||
rm -f conf.glibtest
|
||||
AC_TRY_RUN([
|
||||
#include <glib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int major, minor, micro;
|
||||
char *tmp_version;
|
||||
|
||||
system ("touch conf.glibtest");
|
||||
|
||||
/* HP/UX 9 (%@#!) writes to sscanf strings */
|
||||
tmp_version = g_strdup("$min_glib_version");
|
||||
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
||||
printf("%s, bad version string\n", "$min_glib_version");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((glib_major_version != $glib_config_major_version) ||
|
||||
(glib_minor_version != $glib_config_minor_version) ||
|
||||
(glib_micro_version != $glib_config_micro_version))
|
||||
{
|
||||
printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
|
||||
$glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
|
||||
glib_major_version, glib_minor_version, glib_micro_version);
|
||||
printf ("*** was found! If glib-config was correct, then it is best\n");
|
||||
printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n");
|
||||
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
|
||||
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
|
||||
printf("*** required on your system.\n");
|
||||
printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n");
|
||||
printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n");
|
||||
printf("*** before re-running configure\n");
|
||||
}
|
||||
else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
|
||||
(glib_minor_version != GLIB_MINOR_VERSION) ||
|
||||
(glib_micro_version != GLIB_MICRO_VERSION))
|
||||
{
|
||||
printf("*** GLIB header files (version %d.%d.%d) do not match\n",
|
||||
GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
|
||||
printf("*** library (version %d.%d.%d)\n",
|
||||
glib_major_version, glib_minor_version, glib_micro_version);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((glib_major_version > major) ||
|
||||
((glib_major_version == major) && (glib_minor_version > minor)) ||
|
||||
((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
|
||||
glib_major_version, glib_minor_version, glib_micro_version);
|
||||
printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
|
||||
major, minor, micro);
|
||||
printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
|
||||
printf("***\n");
|
||||
printf("*** If you have already installed a sufficiently new version, this error\n");
|
||||
printf("*** probably means that the wrong copy of the glib-config shell script is\n");
|
||||
printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
||||
printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n");
|
||||
printf("*** correct copy of glib-config. (In this case, you will have to\n");
|
||||
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
||||
printf("*** so that the correct libraries are found at run-time))\n");
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
if test "x$no_glib" = x ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test "$GLIB_CONFIG" = "no" ; then
|
||||
echo "*** The glib-config script installed by GLIB could not be found"
|
||||
echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in"
|
||||
echo "*** your path, or set the GLIB_CONFIG environment variable to the"
|
||||
echo "*** full path to glib-config."
|
||||
else
|
||||
if test -f conf.glibtest ; then
|
||||
:
|
||||
else
|
||||
echo "*** Could not run GLIB test program, checking why..."
|
||||
CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
||||
LIBS="$LIBS $GLIB_LIBS"
|
||||
AC_TRY_LINK([
|
||||
#include <glib.h>
|
||||
#include <stdio.h>
|
||||
], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
|
||||
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||
echo "*** that the run-time linker is not finding GLIB or finding the wrong"
|
||||
echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
|
||||
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||
echo "*** is required on your system"
|
||||
echo "***"
|
||||
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
|
||||
echo "***"
|
||||
echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
|
||||
echo "*** came with the system with the command"
|
||||
echo "***"
|
||||
echo "*** rpm --erase --nodeps gtk gtk-devel" ],
|
||||
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||
echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
|
||||
echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
|
||||
echo "*** may want to edit the glib-config script: $GLIB_CONFIG" ])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
GLIB_CFLAGS=""
|
||||
GLIB_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(GLIB_CFLAGS)
|
||||
AC_SUBST(GLIB_LIBS)
|
||||
rm -f conf.glibtest
|
||||
])
|
||||
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 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 enable 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 plugins 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 GST_CHECK_FEATURE
|
||||
dnl GST_PLUGINS_NO will contain those that won't be built
|
||||
|
||||
AC_DEFUN(GST_CHECK_FEATURE,
|
||||
[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 *** If it's enabled
|
||||
|
||||
if test x$USE_[$1] = xyes; then
|
||||
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
|
||||
$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
|
||||
fi
|
||||
fi
|
||||
dnl *** Warn if it's disabled or not found
|
||||
if test x$USE_[$1] = xyes; then
|
||||
ifelse([$6], , :, [$6])
|
||||
GST_PLUGINS_YES="$GST_PLUGINS_YES \n\t[$3]"
|
||||
else
|
||||
ifelse([$3], , :, [AC_MSG_NOTICE(
|
||||
These plugins will not be built: [$3]
|
||||
)])
|
||||
GST_PLUGINS_NO="$GST_PLUGINS_NO \n\t[$3]"
|
||||
ifelse([$7], , :, [$7])
|
||||
fi
|
||||
dnl *** Define the conditional as appropriate
|
||||
AM_CONDITIONAL(USE_[$1], test x$USE_[$1] = xyes)
|
||||
])
|
||||
|
||||
dnl Use a -config program which accepts --cflags and --libs parameters
|
||||
dnl to set *_CFLAGS and *_LIBS and check existence of a feature.
|
||||
dnl Richard Boulton <richard-alsa@tartarus.org>
|
||||
dnl Last modification: 26/06/2001
|
||||
dnl GST_CHECK_CONFIGPROG(FEATURE-NAME, CONFIG-PROG-FILENAME, MODULES)
|
||||
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(GST_CHECK_CONFIGPROG,
|
||||
[
|
||||
AC_PATH_PROG([$1]_CONFIG, [$2], no)
|
||||
if test x$[$1]_CONFIG = xno; then
|
||||
[$1]_LIBS=
|
||||
[$1]_CFLAGS=
|
||||
HAVE_[$1]=no
|
||||
else
|
||||
[$1]_LIBS=`[$2] --libs [$3]`
|
||||
[$1]_CFLAGS=`[$2] --cflags [$3]`
|
||||
HAVE_[$1]=yes
|
||||
fi
|
||||
AC_SUBST([$1]_LIBS)
|
||||
AC_SUBST([$1]_CFLAGS)
|
||||
])
|
||||
|
||||
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 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(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
|
||||
AC_MSG_WARN([$1] not found)
|
||||
fi
|
||||
AC_SUBST(HAVE_[$1])
|
||||
]
|
||||
)
|
||||
|
||||
dnl
|
||||
dnl Add a subsystem --disable flag and all the necessary symbols and substitions
|
||||
dnl
|
||||
dnl GST_SUBSYSTEM_DISABLE(SYSNAME, [subsystem name])
|
||||
dnl
|
||||
AC_DEFUN(GST_SUBSYSTEM_DISABLE,
|
||||
[AC_ARG_ENABLE(translit([$1], A-Z, a-z),
|
||||
[ ]builtin(format, --disable-%-17s disable %s, translit([$1], A-Z, a-z), $2),
|
||||
[ case "${enableval}" in
|
||||
yes) GST_DISABLE_[$1]=no ;;
|
||||
no) GST_DISABLE_[$1]=yes ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-translit([$1], A-Z, a-z)) ;;
|
||||
esac],
|
||||
[GST_DISABLE_[$1]=no]) dnl Default value
|
||||
if test x$GST_DISABLE_[$1] = xyes; then
|
||||
AC_DEFINE(GST_DISABLE_[$1], 1, [Disable $2])
|
||||
GST_DISABLE_[$1]_DEFINE=-DGST_DISABLE_[$1]
|
||||
fi
|
||||
AM_CONDITIONAL(GST_DISABLE_[$1], test x$GST_DISABLE_[$1] = xyes)
|
||||
AC_SUBST(GST_DISABLE_[$1]_DEFINE)
|
||||
GST_SUBSYSTEM_DISABLE_DEFINES="$GST_SUBSYTEM_DISABLE_DEFINES $GST_DISABLE_[$1]_DEFINE"
|
||||
])
|
||||
dnl Check for LinuxThreads
|
||||
dnl COTHREADS_CHECK_LINUXTHREADS
|
||||
dnl no arguments
|
||||
AC_DEFUN([COTHREADS_CHECK_LINUXTHREADS], [
|
||||
AC_CACHE_CHECK([for LinuxThreads],
|
||||
[cothreads_cv_linuxthreads],
|
||||
[AC_EGREP_CPP(pthread_kill_other_threads_np,
|
||||
[#include <pthread.h>],
|
||||
[cothreads_cv_linuxthreads=yes],
|
||||
[cothreads_cv_linuxthreads=no])
|
||||
])
|
||||
if test $cothreads_cv_linuxthreads = yes; then
|
||||
AC_DEFINE(HAVE_LINUXTHREADS,1,[if you have LinuxThreads])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
|
||||
dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
|
||||
dnl also defines GSTUFF_PKG_ERRORS on error
|
||||
AC_DEFUN(PKG_CHECK_MODULES, [
|
||||
succeeded=no
|
||||
|
||||
if test -z "$PKG_CONFIG"; then
|
||||
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
||||
fi
|
||||
|
||||
if test "$PKG_CONFIG" = "no" ; then
|
||||
echo "*** The pkg-config script could not be found. Make sure it is"
|
||||
echo "*** in your path, or set the PKG_CONFIG environment variable"
|
||||
echo "*** to the full path to pkg-config."
|
||||
echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
|
||||
else
|
||||
if ! $PKG_CONFIG --atleast-pkgconfig-version 0.7.0; then
|
||||
echo "*** Your version of pkg-config is too old. You need version 0.7.0 or newer."
|
||||
echo "*** See http://www.freedesktop.org/software/pkgconfig"
|
||||
else
|
||||
AC_MSG_CHECKING(for $2)
|
||||
|
||||
if $PKG_CONFIG --exists "$2" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
succeeded=yes
|
||||
|
||||
AC_MSG_CHECKING($1_CFLAGS)
|
||||
$1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
|
||||
AC_MSG_RESULT($$1_CFLAGS)
|
||||
|
||||
AC_MSG_CHECKING($1_LIBS)
|
||||
$1_LIBS=`$PKG_CONFIG --libs "$2"`
|
||||
AC_MSG_RESULT($$1_LIBS)
|
||||
else
|
||||
$1_CFLAGS=""
|
||||
$1_LIBS=""
|
||||
## If we have a custom action on failure, don't print errors, but
|
||||
## do set a variable so people can do so.
|
||||
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
|
||||
ifelse([$4], ,echo $$1_PKG_ERRORS,)
|
||||
fi
|
||||
|
||||
AC_SUBST($1_CFLAGS)
|
||||
AC_SUBST($1_LIBS)
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $succeeded = yes; then
|
||||
ifelse([$3], , :, [$3])
|
||||
else
|
||||
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
dnl ##
|
||||
dnl ## NGPT - Next Generation POSIX Threading
|
||||
dnl ## Copyright (c) 2001 IBM Corporation <babt@us.ibm.com>
|
||||
|
@ -1763,19 +2212,3 @@ dnl # display results in detail
|
|||
AC_MSG_VERBOSE([$]$2)
|
||||
AC_MSG_VERBOSE([$]$3)
|
||||
])
|
||||
|
||||
dnl Check for LinuxThreads
|
||||
dnl COTHREADS_CHECK_LINUXTHREADS
|
||||
dnl no arguments
|
||||
AC_DEFUN([COTHREADS_CHECK_LINUXTHREADS], [
|
||||
AC_CACHE_CHECK([for LinuxThreads],
|
||||
[cothreads_cv_linuxthreads],
|
||||
[AC_EGREP_CPP(pthread_kill_other_threads_np,
|
||||
[#include <pthread.h>],
|
||||
[cothreads_cv_linuxthreads=yes],
|
||||
[cothreads_cv_linuxthreads=no])
|
||||
])
|
||||
if test $cothreads_cv_linuxthreads = yes; then
|
||||
AC_DEFINE(HAVE_LINUXTHREADS,1,[if you have LinuxThreads])
|
||||
fi
|
||||
])
|
||||
|
|
|
@ -137,6 +137,9 @@ if test -z "$*"; then
|
|||
echo "to pass any to it, please specify them on the $0 command line."
|
||||
fi
|
||||
|
||||
echo "+ creating acinclude.m4"
|
||||
cat m4/*.m4 > acinclude.m4
|
||||
|
||||
echo "+ running aclocal ..."
|
||||
aclocal $ACLOCAL_FLAGS || {
|
||||
echo
|
||||
|
|
|
@ -259,6 +259,34 @@ AC_MSG_VERBOSE([decided mctx method: $mctx_mth])
|
|||
AC_MSG_VERBOSE([decided mctx dispatching: $mctx_dsp])
|
||||
AC_MSG_VERBOSE([decided mctx stack setup: $mctx_stk])
|
||||
|
||||
AC_MSG_PART(Checking for GLib)
|
||||
|
||||
dnl Check for glib2
|
||||
translit(dnm, m, l) AM_CONDITIONAL(USE_GLIB2, true)
|
||||
GST_CHECK_FEATURE(GLIB2, [use of glib-2.0 and GObject], , [
|
||||
PKG_CHECK_MODULES(GLIB2, glib-2.0 gthread-2.0,
|
||||
HAVE_GLIB2=yes,HAVE_GLIB2=no)
|
||||
GLIB_LIBS=$GLIB2_LIBS
|
||||
GLIB_CFLAGS=$GLIB2_CFLAGS
|
||||
AC_SUBST(GLIB_LIBS)
|
||||
AC_SUBST(GLIB_CFLAGS)
|
||||
# if we've gotten this far, the user has specifically asked that glib2 be
|
||||
# used. if we have no glib2, that is an error.
|
||||
if test "x$HAVE_GLIB2" = "xno"; then
|
||||
AC_MSG_ERROR([no glib2 found, try --disable-glib2])
|
||||
fi
|
||||
], enabled, [
|
||||
dnl AC_DEFINE(USE_GLIB2)
|
||||
])
|
||||
dnl AC_SUBST(USE_GLIB2)
|
||||
|
||||
if test x$USE_GLIB2 = xno; then
|
||||
dnl Check for glib and gtk
|
||||
AM_PATH_GLIB(1.2.0,,
|
||||
AC_MSG_ERROR(Cannot find glib: Is glib-config in path?),
|
||||
glib gmodule gthread)
|
||||
fi
|
||||
|
||||
|
||||
dnl ## Additional support for some special platform/compiler options
|
||||
case "$PLATFORM:$CC" in
|
||||
|
|
|
@ -19,63 +19,83 @@
|
|||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* chunks can contain 1 or more blocks, each block contains one cothread stack */
|
||||
#include "cothreads-private.h"
|
||||
#include "linuxthreads.h"
|
||||
|
||||
enum cothread_attr_method
|
||||
{
|
||||
COTHREAD_ATTR_METHOD_MALLOC, /* cothread stacks on the heap, one block per chunk */
|
||||
COTHREAD_ATTR_METHOD_GTHREAD_STACK, /* cothread stacks within the current gthread's stack */
|
||||
COTHREAD_ATTR_METHOD_LINUXTHREADS, /* a hack that allows for linuxthreads compatibility */
|
||||
}
|
||||
typedef enum _cothread_block_state cothread_block_state;
|
||||
typedef struct _cothread_chunk cothread_chunk;
|
||||
|
||||
struct cothread_attr {
|
||||
enum cothread_attr_method method;
|
||||
int chunk_size;
|
||||
int blocks_per_chunk;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
static struct cothread_attr cothread_attr_default =
|
||||
{
|
||||
COTHREAD_ATTR_METHOD_LINUXTHREADS, /* use the linuxthreads hack */
|
||||
0x20000, /* 2 MB */
|
||||
8 /* for a stack size of 256 KB */
|
||||
}
|
||||
#else
|
||||
static struct cothread_attr cothread_attr_default =
|
||||
{
|
||||
COTHREAD_ATTR_METHOD_GTHREAD_STACK, /* this is what the old cothreads code does */
|
||||
0x10000, /* only 1 MB due the the FreeBSD defaults */
|
||||
8 /* for a stack size of 128 KB */
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct cothread_attr *_attr = NULL; /* set in cothread_init() */
|
||||
|
||||
enum cothread_block_state
|
||||
enum _cothread_block_state
|
||||
{
|
||||
COTHREAD_BLOCK_STATE_UNUSED=0,
|
||||
COTHREAD_BLOCK_STATE_IN_USE
|
||||
}
|
||||
};
|
||||
|
||||
struct cothread_chunk {
|
||||
struct cothread_chunk *next;
|
||||
enum cothread_block_state *block_states;
|
||||
struct _cothread_chunk {
|
||||
cothread_chunk *next;
|
||||
cothread_block_state *block_states;
|
||||
char *chunk;
|
||||
int size;
|
||||
int reserved_bottom;
|
||||
gboolean needs_free;
|
||||
int nblocks;
|
||||
};
|
||||
|
||||
|
||||
static cothread_chunk* cothread_chunk_new (unsigned long size, gboolean allocate);
|
||||
static void cothread_chunk_free (cothread_chunk *chunk);
|
||||
static gboolean cothread_stack_alloc_chunked (cothread_chunk *chunk, char **low, char **high,
|
||||
cothread_chunk *(*chunk_new)(cothread_chunk*));
|
||||
static cothread_chunk* cothread_chunk_new_linuxthreads (cothread_chunk* old);
|
||||
|
||||
|
||||
gboolean
|
||||
cothread_stack_alloc_on_heap (char **low, char **high)
|
||||
{
|
||||
*low = g_malloc (_cothread_attr_global->chunk_size / _cothread_attr_global->blocks_per_chunk);
|
||||
*high = *low + sizeof (*low) - 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
cothread_stack_alloc_on_gthread_stack (char **low, char **high)
|
||||
{
|
||||
cothread_chunk *chunk = NULL;
|
||||
static GStaticPrivate chunk_key = G_STATIC_PRIVATE_INIT;
|
||||
|
||||
if (!(chunk = g_static_private_get(&chunk_key))) {
|
||||
chunk = cothread_chunk_new (_cothread_attr_global->chunk_size, FALSE);
|
||||
g_static_private_set (&chunk_key, chunk, cothread_chunk_free);
|
||||
}
|
||||
|
||||
return cothread_stack_alloc_chunked (chunk, low, high, NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
cothread_stack_alloc_linuxthreads (char **low, char **high)
|
||||
{
|
||||
cothread_chunk *chunk = NULL;
|
||||
static GStaticPrivate chunk_key = G_STATIC_PRIVATE_INIT;
|
||||
|
||||
if (!(chunk = g_static_private_get(&chunk_key))) {
|
||||
chunk = cothread_chunk_new (_cothread_attr_global->chunk_size, FALSE);
|
||||
g_static_private_set (&chunk_key, chunk, cothread_chunk_free);
|
||||
}
|
||||
|
||||
return cothread_stack_alloc_chunked (chunk, low, high, cothread_chunk_new_linuxthreads);
|
||||
}
|
||||
|
||||
|
||||
/* size must be a power of two. */
|
||||
struct cothread_chunk*
|
||||
static cothread_chunk*
|
||||
cothread_chunk_new (unsigned long size, gboolean allocate)
|
||||
{
|
||||
struct cothread_chunk *ret;
|
||||
cothread_chunk *ret;
|
||||
char *sp = CURRENT_STACK_FRAME;
|
||||
|
||||
ret = g_new0 (struct cothread_chunk, 1);
|
||||
ret->block_states = g_new0 (enum cothread_block_state, _attr->blocks_per_chunk);
|
||||
ret = g_new0 (cothread_chunk, 1);
|
||||
ret->nblocks = _cothread_attr_global->blocks_per_chunk;
|
||||
ret->block_states = g_new0 (cothread_block_state, ret->nblocks);
|
||||
|
||||
if (allocate) {
|
||||
if (!posix_memalign(&ret->chunk, size, size))
|
||||
|
@ -83,7 +103,7 @@ cothread_chunk_new (unsigned long size, gboolean allocate)
|
|||
} else {
|
||||
/* if we don't allocate the chunk, we must already be in it. */
|
||||
|
||||
ret->chunk = (unsigned long) sp &~ (size - 1);
|
||||
ret->chunk = (char*) ((unsigned long) sp &~ (size - 1));
|
||||
#if PTH_STACK_GROWTH > 0
|
||||
ret->reserved_bottom = sp - ret->chunk;
|
||||
#else
|
||||
|
@ -97,51 +117,43 @@ cothread_chunk_new (unsigned long size, gboolean allocate)
|
|||
return ret;
|
||||
}
|
||||
|
||||
gboolean
|
||||
cothread_stack_alloc_on_heap (char **low, char **high)
|
||||
{
|
||||
*low = g_malloc (_attr->chunk_size / _attr->blocks_per_chunk);
|
||||
*high = *low + sizeof (*low);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* cothread_stack_alloc_chunked:
|
||||
* @chunk: the chunk for the
|
||||
* Make a new cothread stack out of a chunk. Chunks are assumed to be aligned on
|
||||
* boundaries of _attr->chunk_size.
|
||||
* boundaries of _cothread_attr_global->chunk_size.
|
||||
*
|
||||
* Returns: the new cothread context
|
||||
*/
|
||||
/* we assume that the stack is aligned on _attr->chunk_size boundaries */
|
||||
/* we assume that the stack is aligned on _cothread_attr_global->chunk_size boundaries */
|
||||
static gboolean
|
||||
cothread_stack_alloc_chunked (struct cothread_chunk *chunk, char **low, char **high,
|
||||
(struct cothread_chunk*)(*chunk_new)(struct cothread_chunk*))
|
||||
cothread_stack_alloc_chunked (cothread_chunk *chunk, char **low, char **high,
|
||||
cothread_chunk *(*chunk_new)(cothread_chunk*))
|
||||
{
|
||||
int block;
|
||||
struct cothread_chunk *walk, *last;
|
||||
cothread_chunk *walk, *last;
|
||||
|
||||
for (walk=chunk; walk; last=walk, walk=walk->next) {
|
||||
if (chunk->block_states[0] == COTHREAD_BLOCK_STATE_UNUSED) {
|
||||
chunk->block_states[0] = COTHREAD_BLOCK_STATE_IN_USE;
|
||||
if (walk->block_states[0] == COTHREAD_BLOCK_STATE_UNUSED) {
|
||||
walk->block_states[0] = COTHREAD_BLOCK_STATE_IN_USE;
|
||||
#if PTH_STACK_GROWTH > 0
|
||||
*low = chunk->chunk + chunk->reserved_bottom;
|
||||
*high = chunk->chunk + chunk->chunk_size / _attr->blocks_per_chunk;
|
||||
*low = walk->chunk + walk->reserved_bottom;
|
||||
*high = walk->chunk + walk->size / walk->nblocks;
|
||||
#else
|
||||
*low = chunk->chunk + chunk->size * (chunk->nblocks - 1) / chunk->nblocks;
|
||||
*high = chunk->chunk + chunk->size - chunk->reserved_bottom;
|
||||
*low = walk->chunk + walk->size * (walk->nblocks - 1) / walk->nblocks;
|
||||
*high = walk->chunk + walk->size - walk->reserved_bottom;
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (block = 1; block < _attr->blocks_per_chunk; block++) {
|
||||
if (chunk->block_states[block] == COTHREAD_BLOCK_STATE_UNUSED) {
|
||||
for (block = 1; block < walk->nblocks; block++) {
|
||||
if (walk->block_states[block] == COTHREAD_BLOCK_STATE_UNUSED) {
|
||||
#if PTH_STACK_GROWTH > 0
|
||||
*low = chunk->chunk + chunk->size * (chunk->nblocks - block - 1) / chunk->nblocks;
|
||||
*low = walk->chunk + walk->size * (walk->nblocks - block - 1) / walk->nblocks;
|
||||
#else
|
||||
*low = chunk->chunk + chunk->size * (block - 1) / chunk->nblocks;
|
||||
*low = walk->chunk + walk->size * (block - 1) / walk->nblocks;
|
||||
#endif
|
||||
*high = *low + chunk->size / chunk->nblocks;
|
||||
*high = *low + walk->size / walk->nblocks;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -153,41 +165,19 @@ cothread_stack_alloc_chunked (struct cothread_chunk *chunk, char **low, char **h
|
|||
return cothread_stack_alloc_chunked (chunk_new (last), low, high, NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
cothread_stack_alloc_on_gthread_stack (char **low, char **high)
|
||||
static void
|
||||
cothread_chunk_free (cothread_chunk *chunk)
|
||||
{
|
||||
struct cothread_chunk *chunk = NULL;
|
||||
static GStaticPrivate chunk_key = G_STATIC_PRIVATE_INIT;
|
||||
|
||||
if (!(chunk = g_static_private_get(&chunk_key))) {
|
||||
chunk = cothread_chunk_new (_attr->size, FALSE);
|
||||
g_static_private_set (&chunk_key, chunk, cothread_chunk_free);
|
||||
}
|
||||
|
||||
return cothread_stack_alloc_chunked (chunk, low, high, NULL);
|
||||
/* FIXME: implement me please */
|
||||
}
|
||||
|
||||
gboolean
|
||||
cothread_stack_alloc_linuxthreads (char **low, char **high)
|
||||
static cothread_chunk*
|
||||
cothread_chunk_new_linuxthreads (cothread_chunk* old)
|
||||
{
|
||||
struct cothread_chunk *chunk = NULL;
|
||||
static GStaticPrivate chunk_key = G_STATIC_PRIVATE_INIT;
|
||||
|
||||
if (!(chunk = g_static_private_get(&chunk_key))) {
|
||||
chunk = cothread_chunk_new (_attr->size, FALSE);
|
||||
g_static_private_set (&chunk_key, chunk, cothread_chunk_free);
|
||||
}
|
||||
|
||||
return cothread_stack_alloc_chunked (chunk, low, high, cothread_chunk_new_linuxthreads);
|
||||
}
|
||||
|
||||
struct cothread_chunk*
|
||||
cothread_chunk_new_linuxthreads (struct cothread_chunk* old)
|
||||
{
|
||||
struct cothread_chunk *new;
|
||||
cothread_chunk *new;
|
||||
void *pthread_descr;
|
||||
|
||||
new = cothread_chunk_new (_attr->chunk_size, TRUE);
|
||||
new = cothread_chunk_new (_cothread_attr_global->chunk_size, TRUE);
|
||||
pthread_descr = __linuxthreads_self();
|
||||
#if PTH_STACK_GROWTH > 0
|
||||
/* we don't really know pthread_descr's size in this case, but we can be
|
||||
|
@ -196,12 +186,10 @@ cothread_chunk_new_linuxthreads (struct cothread_chunk* old)
|
|||
new->reserved_bottom = 2048;
|
||||
memcpy(new->chunk, pthread_descr, 2048);
|
||||
#else
|
||||
new->reserved_bottom = ((unsigned long) pthread_descr | (_attr->chunk_size - 1)) - (unsigned long) pthread_descr;
|
||||
new->reserved_bottom = ((unsigned long) pthread_descr | (new->size - 1)) - (unsigned long) pthread_descr;
|
||||
memcpy(new->chunk + new->size - new->reserved_bottom - 1, pthread_descr, new->reserved_bottom);
|
||||
#endif
|
||||
|
||||
old->next = new;
|
||||
return new;
|
||||
}
|
||||
|
||||
|
||||
|
|
35
gst/cothreads/cothreads-private.h
Normal file
35
gst/cothreads/cothreads-private.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Pthread-friendly coroutines with pth
|
||||
* Copyright (C) 2002 Andy Wingo <wingo@pobox.com>
|
||||
*
|
||||
* cothread-private.h: private prototypes
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __COTHREAD_PRIVATE_H__
|
||||
#define __COTHREAD_PRIVATE_H__
|
||||
|
||||
#include <cothreads.h>
|
||||
|
||||
|
||||
extern cothread_attr *_cothread_attr_global;
|
||||
|
||||
gboolean cothread_stack_alloc_on_gthread_stack (char **low, char **high);
|
||||
gboolean cothread_stack_alloc_linuxthreads (char **low, char **high);
|
||||
gboolean cothread_stack_alloc_on_heap (char **low, char **high);
|
||||
|
||||
|
||||
#endif /* __COTHREAD_PRIVATE_H__ */
|
112
gst/cothreads/cothreads.c
Normal file
112
gst/cothreads/cothreads.c
Normal file
|
@ -0,0 +1,112 @@
|
|||
/* Pthread-friendly coroutines with pth
|
||||
* Copyright (C) 2002 Andy Wingo <wingo@pobox.com>
|
||||
*
|
||||
* cothread.c: public API implementation
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "cothreads-private.h"
|
||||
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
static cothread_attr cothread_attr_default =
|
||||
{
|
||||
COTHREAD_ATTR_METHOD_LINUXTHREADS, /* use the linuxthreads hack */
|
||||
0x200000, /* 2 MB */
|
||||
8, /* for a stack size of 256 KB */
|
||||
TRUE /* set up the first chunk */
|
||||
};
|
||||
#else
|
||||
static cothread_attr cothread_attr_default =
|
||||
{
|
||||
COTHREAD_ATTR_METHOD_GTHREAD_STACK, /* this is what the old cothreads code does */
|
||||
0x100000, /* only 1 MB due the the FreeBSD defaults */
|
||||
8, /* for a stack size of 128 KB */
|
||||
TRUE /* set up the first chunk */
|
||||
};
|
||||
#endif
|
||||
|
||||
cothread_attr *_cothread_attr_global = NULL;
|
||||
|
||||
static gboolean (*stack_alloc_func) (char**, char**);
|
||||
|
||||
cothread*
|
||||
cothread_init (cothread_attr *attr)
|
||||
{
|
||||
static cothread_attr _attr;
|
||||
|
||||
if (_cothread_attr_global) {
|
||||
g_warning ("cothread system has already been initialized");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!attr)
|
||||
_attr = cothread_attr_default;
|
||||
else
|
||||
_attr = *attr;
|
||||
|
||||
_cothread_attr_global = &_attr;
|
||||
|
||||
switch (_cothread_attr_global->method) {
|
||||
case COTHREAD_ATTR_METHOD_MALLOC:
|
||||
stack_alloc_func = cothread_stack_alloc_on_heap;
|
||||
break;
|
||||
case COTHREAD_ATTR_METHOD_GTHREAD_STACK:
|
||||
stack_alloc_func = cothread_stack_alloc_on_gthread_stack;
|
||||
break;
|
||||
case COTHREAD_ATTR_METHOD_LINUXTHREADS:
|
||||
stack_alloc_func = cothread_stack_alloc_linuxthreads;
|
||||
break;
|
||||
default:
|
||||
g_error ("unexpected value for attr method %d", _cothread_attr_global->method);
|
||||
}
|
||||
|
||||
return cothread_create (NULL);
|
||||
}
|
||||
|
||||
cothread*
|
||||
cothread_create (void (*func)(void))
|
||||
{
|
||||
char *low, *high;
|
||||
cothread *ret = g_new0 (cothread, 1);
|
||||
|
||||
if (!func) {
|
||||
/* we are being asked to save the current thread into a new cothread. this
|
||||
* only happens for the first cothread. */
|
||||
if (_cothread_attr_global->alloc_cothread_0)
|
||||
if (!stack_alloc_func (&low, &high))
|
||||
g_error ("couldn't create cothread 0");
|
||||
|
||||
pth_mctx_save (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!stack_alloc_func (&low, &high))
|
||||
g_error ("could not allocate a new cothread stack");
|
||||
|
||||
pth_mctx_set (ret, func, low, high);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
cothread_destroy (cothread *thread)
|
||||
{
|
||||
/* FIXME: have method-specific destroy functions. */
|
||||
|
||||
g_free (thread);
|
||||
}
|
55
gst/cothreads/cothreads.h
Normal file
55
gst/cothreads/cothreads.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
/* Pthread-friendly coroutines with pth
|
||||
* Copyright (C) 2002 Andy Wingo <wingo@pobox.com>
|
||||
*
|
||||
* cothread.h: public API
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __COTHREAD_H__
|
||||
#define __COTHREAD_H__
|
||||
|
||||
#include <glib.h>
|
||||
#include <pth_p.h>
|
||||
|
||||
|
||||
typedef pth_mctx_t cothread;
|
||||
typedef enum _cothread_attr_method cothread_attr_method;
|
||||
typedef struct _cothread_attr cothread_attr;
|
||||
|
||||
|
||||
enum _cothread_attr_method
|
||||
{
|
||||
COTHREAD_ATTR_METHOD_MALLOC, /* cothread stacks on the heap, one block per chunk */
|
||||
COTHREAD_ATTR_METHOD_GTHREAD_STACK, /* cothread stacks within the current gthread's stack */
|
||||
COTHREAD_ATTR_METHOD_LINUXTHREADS, /* a hack that allows for linuxthreads compatibility */
|
||||
};
|
||||
|
||||
struct _cothread_attr {
|
||||
cothread_attr_method method;
|
||||
int chunk_size;
|
||||
int blocks_per_chunk;
|
||||
gboolean alloc_cothread_0;
|
||||
};
|
||||
|
||||
|
||||
cothread* cothread_init (cothread_attr *attr);
|
||||
cothread* cothread_create (void (*func)(void));
|
||||
void cothread_destroy (cothread *thread);
|
||||
|
||||
#define cothread_switch(old,new) pth_mctx_switch(old,new)
|
||||
|
||||
#endif /* __COTHREAD_H__ */
|
196
gst/cothreads/m4/glib.m4
Normal file
196
gst/cothreads/m4/glib.m4
Normal file
|
@ -0,0 +1,196 @@
|
|||
# Configure paths for GLIB
|
||||
# Owen Taylor 97-11-3
|
||||
|
||||
dnl AM_PATH_GLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
|
||||
dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or
|
||||
dnl gthread is specified in MODULES, pass to glib-config
|
||||
dnl
|
||||
AC_DEFUN(AM_PATH_GLIB,
|
||||
[dnl
|
||||
dnl Get the cflags and libraries from the glib-config script
|
||||
dnl
|
||||
AC_ARG_WITH(glib-prefix,[ --with-glib-prefix=PFX Prefix where GLIB is installed (optional)],
|
||||
glib_config_prefix="$withval", glib_config_prefix="")
|
||||
AC_ARG_WITH(glib-exec-prefix,[ --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)],
|
||||
glib_config_exec_prefix="$withval", glib_config_exec_prefix="")
|
||||
AC_ARG_ENABLE(glibtest, [ --disable-glibtest Do not try to compile and run a test GLIB program],
|
||||
, enable_glibtest=yes)
|
||||
|
||||
if test x$glib_config_exec_prefix != x ; then
|
||||
glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix"
|
||||
if test x${GLIB_CONFIG+set} != xset ; then
|
||||
GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config
|
||||
fi
|
||||
fi
|
||||
if test x$glib_config_prefix != x ; then
|
||||
glib_config_args="$glib_config_args --prefix=$glib_config_prefix"
|
||||
if test x${GLIB_CONFIG+set} != xset ; then
|
||||
GLIB_CONFIG=$glib_config_prefix/bin/glib-config
|
||||
fi
|
||||
fi
|
||||
|
||||
for module in . $4
|
||||
do
|
||||
case "$module" in
|
||||
gmodule)
|
||||
glib_config_args="$glib_config_args gmodule"
|
||||
;;
|
||||
gthread)
|
||||
glib_config_args="$glib_config_args gthread"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
AC_PATH_PROG(GLIB_CONFIG, glib-config, no)
|
||||
min_glib_version=ifelse([$1], ,0.99.7,$1)
|
||||
AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
|
||||
no_glib=""
|
||||
if test "$GLIB_CONFIG" = "no" ; then
|
||||
no_glib=yes
|
||||
else
|
||||
GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags`
|
||||
GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs`
|
||||
glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test "x$enable_glibtest" = "xyes" ; then
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
||||
LIBS="$GLIB_LIBS $LIBS"
|
||||
dnl
|
||||
dnl Now check if the installed GLIB is sufficiently new. (Also sanity
|
||||
dnl checks the results of glib-config to some extent
|
||||
dnl
|
||||
rm -f conf.glibtest
|
||||
AC_TRY_RUN([
|
||||
#include <glib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int major, minor, micro;
|
||||
char *tmp_version;
|
||||
|
||||
system ("touch conf.glibtest");
|
||||
|
||||
/* HP/UX 9 (%@#!) writes to sscanf strings */
|
||||
tmp_version = g_strdup("$min_glib_version");
|
||||
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
||||
printf("%s, bad version string\n", "$min_glib_version");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((glib_major_version != $glib_config_major_version) ||
|
||||
(glib_minor_version != $glib_config_minor_version) ||
|
||||
(glib_micro_version != $glib_config_micro_version))
|
||||
{
|
||||
printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
|
||||
$glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
|
||||
glib_major_version, glib_minor_version, glib_micro_version);
|
||||
printf ("*** was found! If glib-config was correct, then it is best\n");
|
||||
printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n");
|
||||
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
|
||||
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
|
||||
printf("*** required on your system.\n");
|
||||
printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n");
|
||||
printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n");
|
||||
printf("*** before re-running configure\n");
|
||||
}
|
||||
else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
|
||||
(glib_minor_version != GLIB_MINOR_VERSION) ||
|
||||
(glib_micro_version != GLIB_MICRO_VERSION))
|
||||
{
|
||||
printf("*** GLIB header files (version %d.%d.%d) do not match\n",
|
||||
GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
|
||||
printf("*** library (version %d.%d.%d)\n",
|
||||
glib_major_version, glib_minor_version, glib_micro_version);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((glib_major_version > major) ||
|
||||
((glib_major_version == major) && (glib_minor_version > minor)) ||
|
||||
((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
|
||||
glib_major_version, glib_minor_version, glib_micro_version);
|
||||
printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
|
||||
major, minor, micro);
|
||||
printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
|
||||
printf("***\n");
|
||||
printf("*** If you have already installed a sufficiently new version, this error\n");
|
||||
printf("*** probably means that the wrong copy of the glib-config shell script is\n");
|
||||
printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
||||
printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n");
|
||||
printf("*** correct copy of glib-config. (In this case, you will have to\n");
|
||||
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
||||
printf("*** so that the correct libraries are found at run-time))\n");
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
if test "x$no_glib" = x ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test "$GLIB_CONFIG" = "no" ; then
|
||||
echo "*** The glib-config script installed by GLIB could not be found"
|
||||
echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in"
|
||||
echo "*** your path, or set the GLIB_CONFIG environment variable to the"
|
||||
echo "*** full path to glib-config."
|
||||
else
|
||||
if test -f conf.glibtest ; then
|
||||
:
|
||||
else
|
||||
echo "*** Could not run GLIB test program, checking why..."
|
||||
CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
||||
LIBS="$LIBS $GLIB_LIBS"
|
||||
AC_TRY_LINK([
|
||||
#include <glib.h>
|
||||
#include <stdio.h>
|
||||
], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
|
||||
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||
echo "*** that the run-time linker is not finding GLIB or finding the wrong"
|
||||
echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
|
||||
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||
echo "*** is required on your system"
|
||||
echo "***"
|
||||
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
|
||||
echo "***"
|
||||
echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
|
||||
echo "*** came with the system with the command"
|
||||
echo "***"
|
||||
echo "*** rpm --erase --nodeps gtk gtk-devel" ],
|
||||
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||
echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
|
||||
echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
|
||||
echo "*** may want to edit the glib-config script: $GLIB_CONFIG" ])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
GLIB_CFLAGS=""
|
||||
GLIB_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(GLIB_CFLAGS)
|
||||
AC_SUBST(GLIB_LIBS)
|
||||
rm -f conf.glibtest
|
||||
])
|
182
gst/cothreads/m4/gst-feature.m4
Normal file
182
gst/cothreads/m4/gst-feature.m4
Normal file
|
@ -0,0 +1,182 @@
|
|||
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 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 enable 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 plugins 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 GST_CHECK_FEATURE
|
||||
dnl GST_PLUGINS_NO will contain those that won't be built
|
||||
|
||||
AC_DEFUN(GST_CHECK_FEATURE,
|
||||
[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 *** If it's enabled
|
||||
|
||||
if test x$USE_[$1] = xyes; then
|
||||
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
|
||||
$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
|
||||
fi
|
||||
fi
|
||||
dnl *** Warn if it's disabled or not found
|
||||
if test x$USE_[$1] = xyes; then
|
||||
ifelse([$6], , :, [$6])
|
||||
GST_PLUGINS_YES="$GST_PLUGINS_YES \n\t[$3]"
|
||||
else
|
||||
ifelse([$3], , :, [AC_MSG_NOTICE(
|
||||
These plugins will not be built: [$3]
|
||||
)])
|
||||
GST_PLUGINS_NO="$GST_PLUGINS_NO \n\t[$3]"
|
||||
ifelse([$7], , :, [$7])
|
||||
fi
|
||||
dnl *** Define the conditional as appropriate
|
||||
AM_CONDITIONAL(USE_[$1], test x$USE_[$1] = xyes)
|
||||
])
|
||||
|
||||
dnl Use a -config program which accepts --cflags and --libs parameters
|
||||
dnl to set *_CFLAGS and *_LIBS and check existence of a feature.
|
||||
dnl Richard Boulton <richard-alsa@tartarus.org>
|
||||
dnl Last modification: 26/06/2001
|
||||
dnl GST_CHECK_CONFIGPROG(FEATURE-NAME, CONFIG-PROG-FILENAME, MODULES)
|
||||
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(GST_CHECK_CONFIGPROG,
|
||||
[
|
||||
AC_PATH_PROG([$1]_CONFIG, [$2], no)
|
||||
if test x$[$1]_CONFIG = xno; then
|
||||
[$1]_LIBS=
|
||||
[$1]_CFLAGS=
|
||||
HAVE_[$1]=no
|
||||
else
|
||||
[$1]_LIBS=`[$2] --libs [$3]`
|
||||
[$1]_CFLAGS=`[$2] --cflags [$3]`
|
||||
HAVE_[$1]=yes
|
||||
fi
|
||||
AC_SUBST([$1]_LIBS)
|
||||
AC_SUBST([$1]_CFLAGS)
|
||||
])
|
||||
|
||||
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 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(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
|
||||
AC_MSG_WARN([$1] not found)
|
||||
fi
|
||||
AC_SUBST(HAVE_[$1])
|
||||
]
|
||||
)
|
||||
|
||||
dnl
|
||||
dnl Add a subsystem --disable flag and all the necessary symbols and substitions
|
||||
dnl
|
||||
dnl GST_SUBSYSTEM_DISABLE(SYSNAME, [subsystem name])
|
||||
dnl
|
||||
AC_DEFUN(GST_SUBSYSTEM_DISABLE,
|
||||
[AC_ARG_ENABLE(translit([$1], A-Z, a-z),
|
||||
[ ]builtin(format, --disable-%-17s disable %s, translit([$1], A-Z, a-z), $2),
|
||||
[ case "${enableval}" in
|
||||
yes) GST_DISABLE_[$1]=no ;;
|
||||
no) GST_DISABLE_[$1]=yes ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-translit([$1], A-Z, a-z)) ;;
|
||||
esac],
|
||||
[GST_DISABLE_[$1]=no]) dnl Default value
|
||||
if test x$GST_DISABLE_[$1] = xyes; then
|
||||
AC_DEFINE(GST_DISABLE_[$1], 1, [Disable $2])
|
||||
GST_DISABLE_[$1]_DEFINE=-DGST_DISABLE_[$1]
|
||||
fi
|
||||
AM_CONDITIONAL(GST_DISABLE_[$1], test x$GST_DISABLE_[$1] = xyes)
|
||||
AC_SUBST(GST_DISABLE_[$1]_DEFINE)
|
||||
GST_SUBSYSTEM_DISABLE_DEFINES="$GST_SUBSYTEM_DISABLE_DEFINES $GST_DISABLE_[$1]_DEFINE"
|
||||
])
|
15
gst/cothreads/m4/linuxthreads.m4
Normal file
15
gst/cothreads/m4/linuxthreads.m4
Normal file
|
@ -0,0 +1,15 @@
|
|||
dnl Check for LinuxThreads
|
||||
dnl COTHREADS_CHECK_LINUXTHREADS
|
||||
dnl no arguments
|
||||
AC_DEFUN([COTHREADS_CHECK_LINUXTHREADS], [
|
||||
AC_CACHE_CHECK([for LinuxThreads],
|
||||
[cothreads_cv_linuxthreads],
|
||||
[AC_EGREP_CPP(pthread_kill_other_threads_np,
|
||||
[#include <pthread.h>],
|
||||
[cothreads_cv_linuxthreads=yes],
|
||||
[cothreads_cv_linuxthreads=no])
|
||||
])
|
||||
if test $cothreads_cv_linuxthreads = yes; then
|
||||
AC_DEFINE(HAVE_LINUXTHREADS,1,[if you have LinuxThreads])
|
||||
fi
|
||||
])
|
56
gst/cothreads/m4/pkg.m4
Normal file
56
gst/cothreads/m4/pkg.m4
Normal file
|
@ -0,0 +1,56 @@
|
|||
|
||||
dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
|
||||
dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
|
||||
dnl also defines GSTUFF_PKG_ERRORS on error
|
||||
AC_DEFUN(PKG_CHECK_MODULES, [
|
||||
succeeded=no
|
||||
|
||||
if test -z "$PKG_CONFIG"; then
|
||||
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
||||
fi
|
||||
|
||||
if test "$PKG_CONFIG" = "no" ; then
|
||||
echo "*** The pkg-config script could not be found. Make sure it is"
|
||||
echo "*** in your path, or set the PKG_CONFIG environment variable"
|
||||
echo "*** to the full path to pkg-config."
|
||||
echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
|
||||
else
|
||||
if ! $PKG_CONFIG --atleast-pkgconfig-version 0.7.0; then
|
||||
echo "*** Your version of pkg-config is too old. You need version 0.7.0 or newer."
|
||||
echo "*** See http://www.freedesktop.org/software/pkgconfig"
|
||||
else
|
||||
AC_MSG_CHECKING(for $2)
|
||||
|
||||
if $PKG_CONFIG --exists "$2" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
succeeded=yes
|
||||
|
||||
AC_MSG_CHECKING($1_CFLAGS)
|
||||
$1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
|
||||
AC_MSG_RESULT($$1_CFLAGS)
|
||||
|
||||
AC_MSG_CHECKING($1_LIBS)
|
||||
$1_LIBS=`$PKG_CONFIG --libs "$2"`
|
||||
AC_MSG_RESULT($$1_LIBS)
|
||||
else
|
||||
$1_CFLAGS=""
|
||||
$1_LIBS=""
|
||||
## If we have a custom action on failure, don't print errors, but
|
||||
## do set a variable so people can do so.
|
||||
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
|
||||
ifelse([$4], ,echo $$1_PKG_ERRORS,)
|
||||
fi
|
||||
|
||||
AC_SUBST($1_CFLAGS)
|
||||
AC_SUBST($1_LIBS)
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $succeeded = yes; then
|
||||
ifelse([$3], , :, [$3])
|
||||
else
|
||||
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
|
||||
fi
|
||||
])
|
||||
|
||||
|
1765
gst/cothreads/m4/pth-acinclude.m4
Normal file
1765
gst/cothreads/m4/pth-acinclude.m4
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue