Mercurial > pidgin.yaz
changeset 2179:64d8ef561763
[gaim-migrate @ 2189]
Tom Dyas' patch for Arts ability in Gaim.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Mon, 27 Aug 2001 22:39:17 +0000 |
parents | a22f18ae43c1 |
children | e8faca8a2d69 |
files | acconfig.h configure.ac m4/artsc.m4 src/sound.c |
diffstat | 4 files changed, 268 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/acconfig.h Mon Aug 27 21:56:29 2001 +0000 +++ b/acconfig.h Mon Aug 27 22:39:17 2001 +0000 @@ -14,6 +14,7 @@ #undef USE_PERL #undef NAS_SOUND #undef ESD_SOUND +#undef ARTSC_SOUND #undef _REENTRANT #undef NEED_GNOMESUPPORT_H #undef NEED_SOCKLEN_T
--- a/configure.ac Mon Aug 27 21:56:29 2001 +0000 +++ b/configure.ac Mon Aug 27 22:39:17 2001 +0000 @@ -81,6 +81,7 @@ AM_CONDITIONAL(GNOMEAPPLET, test "x$enable_panel" = "xyes") AC_ARG_ENABLE(esd, [ --disable-esd Turn off ESD (default=auto)],,enable_esd=yes) AC_ARG_ENABLE(nas, [ --enable-nas Enable NAS (Network Audio System) support],,enable_nas=no) +AC_ARG_ENABLE(artsc, [ --disable-artsc Turn off ArtsC (default=auto)],,enable_artsc=yes) AC_ARG_ENABLE(plugins, [ --disable-plugins compile without plugin support],,enable_plugins=yes) AC_ARG_ENABLE(perl, [ --disable-perl compile without perl scripting],,enable_perl=yes) @@ -221,13 +222,37 @@ if test "$enable_esd" = yes ; then AM_PATH_GESD if test "$no_esd" != yes ; then + old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $ESD_CFLAGS" - AC_DEFINE(ESD_SOUND) - SOUND_LIBS="$SOUND_LIBS $ESD_LIBS" + AC_CHECK_HEADER(esd.h, + [ + AC_DEFINE(ESD_SOUND) + SOUND_LIBS="$SOUND_LIBS $ESD_LIBS" + ],[ + enable_esd=no + CFLAGS="$old_CFLAGS" + ]) else enable_esd=no fi fi +if test "x$enable_artsc" = "xyes"; then + AM_PATH_ARTSC + if test "x$no_artsc" != "xyes" ; then + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $ARTSC_CFLAGS" + AC_CHECK_HEADER(artsc.h, + [ + AC_DEFINE(ARTSC_SOUND) + SOUND_LIBS="$SOUND_LIBS $ARTSC_LIBS" + ],[ + enable_artsc=no + CFLAGS="$old_CFLAGS" + ]) + else + enable_artsc=no + fi +fi AC_SUBST(SOUND_LIBS) if test "$ac_cv_cygwin" = yes ; then @@ -352,6 +377,7 @@ echo echo Build with ESD.............. : $enable_esd echo Build with NAS.............. : $enable_nas +echo Build with ArtsC............ : $enable_artsc echo echo Print debugging messages.... : $enable_debug echo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m4/artsc.m4 Mon Aug 27 22:39:17 2001 +0000 @@ -0,0 +1,142 @@ +dnl Test for the ArtsC interface. + +AC_DEFUN([AM_PATH_ARTSC], +[ +AC_ARG_ENABLE(artsc-test, +[ --disable-artsc-test Do not compile and run a test ArtsC program.], +[artsc_test="yes"], +[artsc_test="no"]) + +dnl Search for the arts-config program. +AC_PATH_PROG(ARTSC_CONFIG, artsc-config, no) +min_artsc_version=ifelse([$1],,0.9.5,$1) +AC_MSG_CHECKING(for ArtsC - version >= $min_artsc_version) + +no_artsc="" +if test "x$ARTSC_CONFIG" != "xno"; then + ARTSC_CFLAGS=`$ARTSC_CONFIG --cflags` + ARTSC_LIBS=`$ARTSC_CONFIG --libs` + + artsc_major_version=`$ARTSC_CONFIG $artsc_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + artsc_minor_version=`$ARTSC_CONFIG $artsc_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + artsc_micro_version=`$ARTSC_CONFIG $artsc_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + + # Test if a simple ArtsC program can be created. + if test "x$artsc_test" = "xyes"; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $ARTSC_CFLAGS" + LIBS="$LIBS $ARTSC_LIBS" + + rm -f conf.artsc + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <artsc.h> + +char* +my_strdup(char *str) +{ + char *new_str; + + if (str) { + new_str = malloc((strlen(str) + 1) * sizeof(char)); + strcpy(new_str, str); + } else { + new_str = NULL; + } + + return new_str; +} + +int main() +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.artsc"); + + /* HP/UX 9 writes to sscanf strings */ + tmp_version = my_strdup("$min_artsc_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_artsc_version"); + exit(1); + } + + if (($artsc_major_version > major) || + (($artsc_major_version == major) && ($artsc_minor_version > minor)) || + (($artsc_major_version == major) && ($artsc_minor_version == minor) + && ($artsc_micro_version >= micro))) { + return 0; + } else { + printf("\n*** 'artsc-config --version' returned %d.%d.%d, but the minimum version\n", $artsc_major_version, $artsc_minor_version, $artsc_micro_version); + printf("*** of ARTSC required is %d.%d.%d. If artsc-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If artsc-config was wrong, set the environment variable ARTSC_CONFIG\n"); + printf("*** to point to the correct copy of artsc-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} +],, no_artsc=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi +else + no_artsc=yes +fi + +if test "x$no_artsc" != "xyes"; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) +else + AC_MSG_RESULT(no) + + if test "x$ARTSC_CONFIG" = "xno" ; then + echo "*** The artsc-config script installed by ArtsC could not be found" + echo "*** If ArtsC was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the ARTSC_CONFIG environment variable to the" + echo "*** full path to artsc-config." + else + if test -f conf.artsc ; then + : + else + echo "*** Could not run ArtsC test program, checking why..." + CFLAGS="$CFLAGS $ARTSC_CFLAGS" + LIBS="$LIBS $ARTSC_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <artsc.h> +],[return 0;], +[ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding ArtsC or finding the wrong" + echo "*** version of ArtsC. If it is not finding ArtsC, 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 "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means ArtsC was incorrectly installed" + echo "*** or that you have moved ArtsC since it was installed. In the latter case, you" + echo "*** may want to edit the artsc-config script: $ARTSC_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + ARTSC_CFLAGS="" + ARTSC_LIBS="" + ifelse([$3], , :, [$3]) +fi + +AC_SUBST(ARTSC_CFLAGS) +AC_SUBST(ARTSC_LIBS) +rm -f conf.artsc + +])
--- a/src/sound.c Mon Aug 27 21:56:29 2001 +0000 +++ b/src/sound.c Mon Aug 27 22:39:17 2001 +0000 @@ -39,6 +39,10 @@ #include <esd.h> #endif +#ifdef ARTSC_SOUND +#include <artsc.h> +#endif + #ifdef NAS_SOUND #include <audio/audiolib.h> #endif @@ -120,7 +124,8 @@ } -#ifdef ESD_SOUND +#if defined(ESD_SOUND) || defined(ARTSC_SOUND) + /* ** This routine converts from ulaw to 16 bit linear. ** @@ -154,6 +159,9 @@ return (sample); } +#endif + +#ifdef ESD_SOUND int esd_fd; @@ -191,6 +199,86 @@ #endif +#ifdef ARTSC_SOUND + +static int play_artsc(unsigned char *data, int size) +{ + arts_stream_t stream; + guint16* lineardata; + int result = 1; + int error; + int i; + + lineardata = g_malloc(size * 2); + + for (i = 0; i < size; i++) { + lineardata[i] = _af_ulaw2linear(data[i]); + } + + stream = arts_play_stream(8012, 16, 1, "gaim"); + + error = arts_write(stream, lineardata, size); + if (error < 0) { + result = 0; + } + + arts_close_stream(stream); + + g_free(lineardata); + + arts_free(); + + return result; +} + +static int can_play_artsc() +{ + int error; + + error = artsc_init(); + if (error < 0) + return 0; + + return 1; +} + +static int play_artsc_file(char *file) +{ + struct stat stat_buf; + unsigned char* buf = NULL; + int result = 0; + int fd = -1; + + fd = open(file, O_RDONLY); + if (fd < 0) + goto out; + + if (!can_play_artsc()) + goto out; + + if (fstat(fd, &stat_buf)) + goto out; + + if (!stat_buf.st_size) + goto out; + + buf = g_malloc(stat_buf.st_size); + if (!buf) + goto out; + + if (read(fd, buf, stat_buf.st_size) < 0) + goto out; + + result = play_artsc(buf, stat_buf.st_size); + + out: + if (buf) g_free(buf); + if (fd != -1) close(fd); + return result; +} + +#endif /* ARTSC_SOUND */ + #ifdef NAS_SOUND char nas_server[] = "localhost"; @@ -365,6 +453,14 @@ } #endif +#ifdef ARTSC_SOUND + /* ArtsC is the new second choice. */ + if (can_play_artsc()) { + if (play_artsc(data, size)) + _exit(0); + } +#endif + #ifdef NAS_SOUND /* NAS is our second choice setup. */ if (can_play_nas()) {