Mercurial > audlegacy-plugins
diff m4/sidplay.m4 @ 0:13389e613d67 trunk
[svn] - initial import of audacious-plugins tree (lots to do)
author | nenolod |
---|---|
date | Mon, 18 Sep 2006 01:11:49 -0700 |
parents | |
children | f0c34c3b61c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m4/sidplay.m4 Mon Sep 18 01:11:49 2006 -0700 @@ -0,0 +1,552 @@ +# Configure paths for SID support + +dnl ------------------------------------------------------------------------- +dnl Try to find a file (or one of more files in a list of dirs). +dnl ------------------------------------------------------------------------- + +AC_DEFUN([SIDPLAY_FIND_FILE], +[ +$3="" +for i in $2; do +for j in $1; do +if test -r "$i/$j"; then + $3=$i + break 2 + fi +done +done +]) + +AC_DEFUN([SIDPLAY_TRY_LINK_SAVE], +[ + xs_cxx_save="$CXX" + xs_cxxflags_save="$CXXFLAGS" + xs_ldflags_save="$LDFLAGS" + xs_libs_save="$LIBS" +]) + + +AC_DEFUN([SIDPLAY_TRY_LINK_RESTORE], +[ + CXX="$xs_cxx_save" + CXXFLAGS="$xs_cxxflags_save" + LDFLAGS="$xs_ldflags_save" + LIBS="$xs_libs_save" +]) + + +dnl ------------------------------------------------------------------------- +dnl Try to find SIDPLAY library and header files. +dnl $xs_have_sidplay1 will be "yes" or "no" +dnl @SIDPLAY1_LDADD@ will be substituted with linker parameters +dnl @SIDPLAY1_INCLUDES@ will be substituted with compiler parameters +dnl ------------------------------------------------------------------------- + +AC_DEFUN([XS_PATH_LIBSIDPLAY1], +[ + AC_MSG_CHECKING([for working SIDPlay1 library and headers]) + + AC_LANG_PUSH([C++]) + + # Use include path given by user (if any). + if test -n "$xs_sidplay1_includes"; then + xs_sidplay1_cxxflags="-I$xs_sidplay1_includes" + else + xs_sidplay1_cxxflags="" + fi + + # Use library path given by user (if any). + if test -n "$xs_sidplay1_library"; then + xs_sidplay1_ldflags="-L$xs_sidplay1_library" + else + xs_sidplay1_ldflags="" + fi + + AC_CACHE_VAL(xs_cv_have_sidplay1, + [ + # Run test compilation with either standard search path + # or user-defined paths. + SIDPLAY_TRY_LIBSIDPLAY1 + if test "$xs_sidplay1_works" = yes; then + xs_cv_have_sidplay1="xs_have_sidplay1=yes \ + xs_sidplay1_cxxflags=\"$xs_sidplay1_cxxflags\" \ + xs_sidplay1_ldflags=\"$xs_sidplay1_ldflags\" " + else + SIDPLAY_FIND_LIBSIDPLAY1 + fi + ]) + + eval "$xs_cv_have_sidplay1" + + if test "$xs_have_sidplay1" = yes; then + if test -n "$xs_sidplay1_cxxflags" || test -n "$xs_sidplay1_ldflags"; then + AC_MSG_RESULT([$xs_sidplay1_cxxflags $xs_sidplay1_ldflags]) + else + AC_MSG_RESULT([yes]) + fi + + SIDPLAY1_LDADD="$xs_sidplay1_ldflags -lsidplay" + SIDPLAY1_INCLUDES="$xs_sidplay1_cxxflags" + AC_SUBST([SIDPLAY1_LDADD]) + AC_SUBST([SIDPLAY1_INCLUDES]) + else + AC_MSG_RESULT([no]) + fi + + AC_LANG_POP([C++]) +]) + +dnl Functions used by XS_PATH_LIBSIDPLAY1. + +AC_DEFUN([SIDPLAY_FIND_LIBSIDPLAY1], +[ + # Search common locations where header files might be stored. + xs_sidplay1_incdirs="$xs_sidplay1_includes /usr/include /usr/local/include /usr/lib/sidplay/include /usr/local/lib/sidplay/include /opt/sfw/include /opt/csw/include" + SIDPLAY_FIND_FILE(sidplay/sidtune.h, $xs_sidplay1_incdirs, xs_sidplay1_includes) + + # Search common locations where library might be stored. + xs_sidplay1_libdirs="$xs_sidplay1_library /usr/lib /usr/lib/sidplay /usr/local/lib/sidplay /opt/sfw/lib /opt/csw/lib" + SIDPLAY_FIND_FILE(libsidplay.a libsidplay.so libsidplay.so.1 libsidplay.so.1.36 libsidplay.so.1.37, + $xs_sidplay1_libdirs, xs_sidplay1_library) + + if test -z "$xs_sidplay1_includes" || test -z "$xs_sidplay1_library"; then + xs_cv_have_sidplay1="xs_have_sidplay1=no \ + xs_sidplay1_ldflags=\"\" xs_sidplay1_cxxflags=\"\" " + else + # Test compilation with found paths. + xs_sidplay1_ldflags="-L$xs_sidplay1_library" + xs_sidplay1_cxxflags="-I$xs_sidplay1_includes" + SIDPLAY_TRY_LIBSIDPLAY1 + xs_cv_have_sidplay1="xs_have_sidplay1=$xs_sidplay1_works \ + xs_sidplay1_ldflags=\"$xs_sidplay1_ldflags\" \ + xs_sidplay1_cxxflags=\"$xs_sidplay1_cxxflags\" " + fi +]) + +AC_DEFUN([SIDPLAY_TRY_LIBSIDPLAY1], +[ + SIDPLAY_TRY_LINK_SAVE + + CXXFLAGS="$CXXFLAGS $xs_sidplay1_cxxflags" + LDFLAGS="$LDFLAGS $xs_sidplay1_ldflags" + LIBS="$LIBS -lsidplay" + + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include <sidplay/sidtune.h>]], + [[sidTune* myTest = new sidTune(0);]])], + [xs_sidplay1_works=yes], + [xs_sidplay1_works=no] + ) + + SIDPLAY_TRY_LINK_RESTORE +]) + + + + + +dnl ------------------------------------------------------------------------- +dnl Try to find SIDPLAY2 library and header files. +dnl $xs_have_sidplay2 will be "yes" or "no" +dnl @SIDPLAY_LDADD@ will be substituted with linker parameters +dnl @SIDPLAY_INCLUDES@ will be substituted with compiler parameters +dnl ------------------------------------------------------------------------- +AC_DEFUN([XS_PATH_LIBSIDPLAY2], +[ + AC_MSG_CHECKING([for working SIDPlay2 library and headers]) + + AC_LANG_PUSH([C++]) + + AC_PATH_PROG([PKG_CONFIG], [pkg-config]) + if test -n "$PKG_CONFIG" && $PKG_CONFIG --atleast-version $LIBSIDPLAY2_REQUIRED_VERSION libsidplay2; then + xs_pkgcfg_knows=yes + else + xs_pkgcfg_knows=no + fi + + # Derive sidbuilders path from libsidplay2 root. + if test -n "$xs_sidplay2_library"; then + xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders" + elif test "$xs_pkgcfg_knows" = yes ; then + xs_sidplay2_builders=`$PKG_CONFIG --variable=builders libsidplay2` + fi + + AC_CACHE_VAL(xs_cv_have_sidplay2, + [ + # Run test compilation with either standard search path + # or user-defined paths. + xs_sidplay2_ldadd="-lsidplay2" + SIDPLAY_TRY_LIBSIDPLAY2 + if test "$xs_sidplay2_works" = yes; then + xs_cv_have_sidplay2="xs_have_sidplay2=yes \ + xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\" \ + xs_sidplay2_ldadd=\"$xs_sidplay2_ldadd\" \ + xs_sidplay2_builders=\"$xs_sidplay2_builders\" " + else + SIDPLAY_FIND_LIBSIDPLAY2 + fi + ]) + eval "$xs_cv_have_sidplay2" + if test "$xs_have_sidplay2" = yes; then + if test -n "$xs_sidplay2_cxxflags" || test -n "$xs_sidplay2_ldadd"; then + AC_MSG_RESULT([$xs_sidplay2_cxxflags $xs_sidplay2_ldadd]) + else + AC_MSG_RESULT([yes]) + fi + + SIDPLAY2_LDADD="$xs_sidplay2_ldadd" + SIDPLAY2_INCLUDES="$xs_sidplay2_cxxflags" + AC_SUBST([SIDPLAY2_LDADD]) + AC_SUBST([SIDPLAY2_INCLUDES]) + else + AC_MSG_RESULT([no]) + fi + + AC_LANG_POP([C++]) +]) + + +dnl Functions used by XS_PATH_LIBSIDPLAY2. +AC_DEFUN([SIDPLAY_FIND_LIBSIDPLAY2], +[ + # See whether user didn't provide paths. + if test -z "$xs_sidplay2_includes"; then + if test "$xs_pkgcfg_knows" = yes ; then + xs_sidplay2_includes=`$PKG_CONFIG --variable=includedir libsidplay2` + xs_sidplay2_cxxflags=`$PKG_CONFIG --cflags libsidplay2` + else + # Search common locations where header files might be stored. + xs_sidplay2_incdirs="$xs_sidplay2_includes $xs_sidplay2_includes/include /usr/include /usr/local/include /usr/lib/sidplay/include /usr/local/lib/sidplay/include /opt/sfw/include /opt/csw/include" + SIDPLAY_FIND_FILE(sidplay/sidplay2.h,$xs_sidplay2_incdirs,xs_sidplay2_includes) + xs_sidplay2_cxxflags="-I$xs_sidplay2_includes" + fi + else + xs_sidplay2_cxxflags="-I$xs_sidplay2_includes" + fi + if test -z "$xs_sidplay2_library"; then + if test "$xs_pkgcfg_knows" = yes ; then + xs_sidplay2_library=`$PKG_CONFIG --variable=libdir libsidplay2` + xs_sidplay2_ldadd=`$PKG_CONFIG --libs libsidplay2` + xs_sidplay2_builders=`$PKG_CONFIG --variable=builders libsidplay2` + else + # Search common locations where library might be stored. + xs_sidplay2_libdirs="$xs_sidplay2_library $xs_sidplay2_library/lib $xs_sidplay2_library/src /usr/lib /usr/lib/sidplay /usr/local/lib/sidplay /opt/sfw/lib /opt/csw/lib" + SIDPLAY_FIND_FILE(libsidplay2.la,$xs_sidplay2_libdirs,xs_sidplay2_library) + xs_sidplay2_ldadd="-L$xs_sidplay2_library -lsidplay2" + xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders" + fi + else + xs_sidplay2_ldadd="-L$xs_sidplay2_library -lsidplay2" + fi + if test -z "$xs_sidplay2_includes" || test -z "$xs_sidplay2_library"; then + xs_cv_have_sidplay2="xs_have_sidplay2=no \ + xs_sidplay2_ldadd=\"\" xs_sidplay2_cxxflags=\"\" \ + xs_sidplay2_builders=\"\" " + else + # Test compilation with found paths. + xs_sidplay2_ldadd="-L$xs_sidplay2_library -lsidplay2" + xs_sidplay2_cxxflags="-I$xs_sidplay2_includes" + SIDPLAY_TRY_LIBSIDPLAY2 + xs_cv_have_sidplay2="xs_have_sidplay2=$xs_sidplay2_works \ + xs_sidplay2_ldadd=\"$xs_sidplay2_ldadd\" \ + xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\" \ + xs_sidplay2_builders=\"$xs_sidplay2_builders\" " + fi +]) + + +AC_DEFUN([SIDPLAY_TRY_LIBSIDPLAY2], +[ + SIDPLAY_TRY_LINK_SAVE + + CXXFLAGS="$CXXFLAGS $xs_sidplay2_cxxflags -DHAVE_UNIX" + LDFLAGS="$LDFLAGS $xs_sidplay2_ldadd" + + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include <sidplay/sidplay2.h>]], + [[sidplay2 *myEngine;]])], + [xs_sidplay2_works=yes], + [xs_sidplay2_works=no] + ) + + SIDPLAY_TRY_LINK_RESTORE +]) + + +dnl ------------------------------------------------------------------------- +dnl Find libsidplay2 builders (sidbuilders) dir. +dnl @BUILDERS_INCLUDES@ +dnl @BUILDERS_LDFLAGS@ +dnl ------------------------------------------------------------------------- +AC_DEFUN([BUILDERS_FIND], +[ + AC_MSG_CHECKING([for SIDPlay2 builders directory]) + + AC_LANG_PUSH([C++]) + + AC_REQUIRE([XS_PATH_LIBSIDPLAY2]) + + dnl Be pessimistic. + builders_available=no + + dnl Sidbuilder headers are included with "builders" prefix. + builders_includedir=$xs_sidplay2_includes + builders_libdir=$xs_sidplay2_builders + + dnl If libsidplay2 is in standard library search path, we need + dnl to get an argument whether /usr, /usr/local, etc. Else we + dnl can only use ${libdir}/sidplay/builders, but then are + dnl unable to check whether files exist as long as ${exec_prefix} + dnl is not defined in the configure script. So, this is a bit + dnl ugly, but a satisfactory fallback default for those who + dnl define ${prefix} and ${exec_prefix}. + if test -z $builders_libdir; then + eval "builders_libdir=$libdir/sidplay/builders" + fi + + AC_ARG_WITH(sidbuilders, + [ --with-sidbuilders=DIR what the SIDPlay2 builders install PREFIX is], + [builders_includedir="$withval/include" + builders_libdir="$withval/lib/sidplay/builders"]) + + AC_ARG_WITH(builders-inc, + [ --with-builders-inc=DIR where the SIDPlay2 builders headers are located], + [builders_includedir="$withval"]) + + AC_ARG_WITH(builders-lib, + [ --with-builders-lib=DIR where the SIDPlay2 builders libraries are installed], + [builders_libdir="$withval"]) + + if test -n "$builders_includedir"; then + BUILDERS_INCLUDES="-I$builders_includedir" + fi + + if test -n "$builders_libdir"; then + BUILDERS_LDFLAGS="-L$builders_libdir" + fi + + if test -d $builders_libdir; then + xs_have_sidbuilders_dir=yes + AC_MSG_RESULT([$builders_libdir]) + else + xs_have_sidbuilders_dir=no + AC_MSG_RESULT([$xs_have_sidbuilders_dir]) + AC_MSG_ERROR([$builders_libdir not found! +Check --help on how to specify SIDPlay2 and/or builders library and +header path, or set --exec-prefix to the same prefix as your installation +of libsidplay2. + ]) + fi + + AC_SUBST([BUILDERS_INCLUDES]) + AC_SUBST([BUILDERS_LDFLAGS]) + + AC_LANG_POP([C++]) +]) + + +dnl ------------------------------------------------------------------------- +dnl Test for working reSID builder. +dnl sets $(RESID_LDADD), substitutes @RESID_LDADD@ +dnl ------------------------------------------------------------------------- +AC_DEFUN([BUILDERS_FIND_RESID], +[ + AC_MSG_CHECKING([for reSID builder module]) + AC_LANG_PUSH([C++]) + SIDPLAY_TRY_LINK_SAVE + + CXXFLAGS="$CXXFLAGS $BUILDERS_INCLUDES" + LDFLAGS="$LDFLAGS $BUILDERS_LDFLAGS" + LIBS="$LIBS -lresid-builder" + + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include <sidplay/builders/resid.h>]], + [[ReSIDBuilder *sid;]])], + [builders_work=yes], + [builders_work=no] + ) + + SIDPLAY_TRY_LINK_RESTORE + + if test "$builders_work" = yes; then + builders_available=yes + xs_builders="reSID $xs_builders" + AC_DEFINE([HAVE_RESID_BUILDER], [], [resid builder]) + RESID_LDADD="-lresid-builder" + fi + AC_MSG_RESULT($builders_work) + AC_SUBST([RESID_LDADD]) + AC_LANG_POP([C++]) +]) + + +dnl ------------------------------------------------------------------------- +dnl Test for working HardSID builder. +dnl sets $(HARDSID_LDADD), substitutes @HARDSID_LDADD@ +dnl ------------------------------------------------------------------------- +AC_DEFUN([BUILDERS_FIND_HARDSID], +[ + AC_MSG_CHECKING([for HardSID builder module]) + AC_LANG_PUSH([C++]) + SIDPLAY_TRY_LINK_SAVE + + CXXFLAGS="$CXXFLAGS $BUILDERS_INCLUDES" + LDFLAGS="$LDFLAGS $BUILDERS_LDFLAGS" + LIBS="$LIBS -lhardsid-builder" + + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include <sidplay/builders/hardsid.h>]], + [[HardSID *sid;]])], + [builders_work=yes], + [builders_work=no] + ) + + SIDPLAY_TRY_LINK_RESTORE + + if test "$builders_work" = yes; then + builders_available=yes + xs_builders="HardSID $xs_builders" + AC_DEFINE([HAVE_HARDSID_BUILDER], [], [harsid builder]) + HARDSID_LDADD="-lhardsid-builder" + fi + AC_MSG_RESULT($builders_work) + AC_SUBST([HARDSID_LDADD]) + AC_LANG_POP([C++]) +]) + + +dnl AM_PATH_SIDPLAY([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl Test for SID libraries, and define SIDPLAY_CFLAGS and SIDPLAY_LIBS +dnl +AC_DEFUN([AM_PATH_SIDPLAY], +[ +dnl +dnl Get the cflags and libraries +dnl + +dnl *** +dnl *** libSIDPlay 1 options +dnl *** +AC_ARG_WITH(sidplay1, +[ --with-sidplay1=PREFIX Enable SIDPlay1 with install-PREFIX], +[ +if test "x$withval" = xyes; then +xs_sidplay1=yes +xs_sidplay1_library="" +xs_sidplay1_includes="" +else +if test "x$withval" = xno; then + xs_sidplay1=no + else + xs_sidplay1=yes + xs_sidplay1_includes="$withval/include" + xs_sidplay1_library="$withval/lib" + fi +fi +],[ +xs_sidplay1=try +xs_sidplay1_library="" +xs_sidplay1_includes="" +]) + +AC_ARG_WITH(sidplay1-inc, +[ --with-sidplay1-inc=DIR Where the SIDPlay1 headers are located], +[xs_sidplay1_includes="$withval"],) + +AC_ARG_WITH(sidplay1-lib, +[ --with-sidplay1-lib=DIR Where the SIDPlay1 library is installed], +[xs_sidplay1_library="$withval"],) + +dnl *** +dnl *** libSIDPlay 2 options +dnl *** +AC_ARG_WITH(sidplay2, +[ --with-sidplay2=PREFIX Enable SIDPlay2 with install-PREFIX], +[ +if test "x$withval" = xyes; then +xs_sidplay2=yes +xs_sidplay2_library="" +xs_sidplay2_includes="" +else +if test "x$withval" = xno; then + xs_sidplay2=no + else + xs_sidplay2=yes + xs_sidplay2_includes="$withval/include" + xs_sidplay2_library="$withval/lib" + fi +fi +],[ +xs_sidplay2=try +xs_sidplay2_library="" +xs_sidplay2_includes="" +]) + +AC_ARG_WITH(sidplay2-inc, +[ --with-sidplay2-inc=DIR Where the SIDPlay2 headers are located], +[xs_sidplay2_includes="$withval"],) + + +AC_ARG_WITH(sidplay2-lib, +[ --with-sidplay2-lib=DIR Where the SIDPlay2 library is installed], +[xs_sidplay2_library="$withval"],) + +dnl *** +dnl *** Determine if libraries are wanted and available +dnl *** +OPT_SIDPLAY1="no" +if test "x$xs_sidplay1" = xtry; then + XS_PATH_LIBSIDPLAY1 + else + if test "x$xs_sidplay1" = xyes; then + XS_PATH_LIBSIDPLAY1 + if test "x$xs_have_sidplay1" = xno; then + AC_MSG_WARN([libSIDPlay1 library and/or headers were not found!]) + fi + fi +fi +if test "x$xs_have_sidplay1" = xyes; then + AC_DEFINE([HAVE_SIDPLAY1],[],[sidplay1 available]) + OPT_SIDPLAY1="yes" +fi + +OPT_SIDPLAY2="no" +LIBSIDPLAY2_REQUIRED_VERSION="2.1.0" +if test "x$xs_sidplay2" = xtry; then + XS_PATH_LIBSIDPLAY2 + else + if test "x$xs_sidplay2" = xyes; then + XS_PATH_LIBSIDPLAY2 + if test "x$xs_have_sidplay2" = xno; then + AC_MSG_WARN([libSIDPlay2 library and/or headers were not found!]) + fi + fi +fi +if test "x$xs_have_sidplay2" = xyes; then + AC_DEFINE([HAVE_SIDPLAY2],[],[sidplay2 available]) + OPT_SIDPLAY2="yes" + BUILDERS_FIND + BUILDERS_FIND_RESID + BUILDERS_FIND_HARDSID + if test "x$builders_available" = xno; then + AC_MSG_WARN([No builder modules were found in the sidbuilders directory!]); + fi +fi + + +dnl *** +dnl *** Check if we have some emulator library available? +dnl *** +if test "x$OPT_SIDPLAY1" = xno; then +if test "x$OPT_SIDPLAY2" = xno; then +SIDPLAY_HAVESOMETHING="no" +fi +fi + +if test "x$SIDPLAY_HAVESOMETHING" = xno; then + ifelse([$2], , :, [$2]) +else + ifelse([$1], , :, [$1]) +fi + +])