changeset 676:60782f6c2bc8

Cleaned up the libSIDPlay-related Autoconf test m4 macros.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 10 May 2008 01:19:49 +0300
parents d1b32e981e73
children 0e879fb48b48
files acinclude.m4
diffstat 1 files changed, 191 insertions(+), 287 deletions(-) [+]
line wrap: on
line diff
--- a/acinclude.m4	Fri May 09 20:09:08 2008 +0300
+++ b/acinclude.m4	Sat May 10 01:19:49 2008 +0300
@@ -1,107 +1,123 @@
 dnl *** These m4-macros are ripped from XSIDPLAY v1.6.5's acinclude.m4
 dnl *** (C) Copyright 2002 Michael Schwendt, licensed under GNU GPL v2.
-dnl *** Updated for new automake/autoconf plus namespace and other
-dnl *** minor fixes and changes by Matti 'ccr' Hämäläinen (C) 2003-2006 TNSP
+dnl ***
+dnl *** Updated for new automake/autoconf plus namespace, added portability
+dnl *** fixes and other minor changes by Matti 'ccr' Hamalainen
 
-dnl -------------------------------------------------------------------------
-dnl Try to find a file (or one of more files in a list of dirs).
-dnl -------------------------------------------------------------------------
-
-AC_DEFUN([MY_FIND_FILE],
+AC_DEFUN([XS_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
-])
-
-dnl -------------------------------------------------------------------------
-
-AC_DEFUN([MY_SUBST],
-dnl Substitute an instance of @$1@ with value "$2".
-dnl Example: MY_SUBST(FOO,BAR) <-> @FOO@ => BAR
-[
-    eval "$1=$2"
-    AC_SUBST($1)
+    $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([MY_SUBST_DEF],
-dnl Substitute an instance of @$1@ with value "#define $1".
-dnl Example: MY_SUBST_DEF(FOO) <-> @FOO@ => #define FOO
-[
-    eval "$1=\"#define $1\""
-    AC_SUBST($1)
-])
 
-AC_DEFUN([MY_SUBST_UNDEF],
-dnl Substitute an instance of @$1@ with value "#undef $1".
-dnl Example: MY_SUBST_UNDEF(FOO) <-> @FOO@ => #undef FOO
+AC_DEFUN([XS_TRY_LIBRARY],
 [
-    eval "$1=\"#undef $1\""
-    AC_SUBST($1)
-])
-
-dnl -------------------------------------------------------------------------
-dnl Pass C++ compiler options to libtool which supports C only.
-dnl -------------------------------------------------------------------------
-
-AC_DEFUN([MY_PROG_LIBTOOL],
-[
-    xs_save_cc="$CC"
-    xs_save_cflags="$CFLAGS"
-    CC="$CXX"
-    CFLAGS="$CXXFLAGS"
-    AM_PROG_LIBTOOL
-    CC="$xs_save_cc"
-    CFLAGS="$xs_save_cflags"
-])
-
-dnl -------------------------------------------------------------------------
-
-AC_DEFUN([MY_TRY_LINK_SAVE],
-[
-    xs_cxx_save="$CXX"
-    xs_cxxflags_save="$CXXFLAGS"
-    xs_ldflags_save="$LDFLAGS"
-    xs_libs_save="$LIBS"
+# xs_try_library ( $1:$2:$3:$4:$5:$6 )
+    AC_LANG_ASSERT([C++])
+    m4_ifvaln([$2], [xs_cxxflags_save="$CXXFLAGS"
+    CXXFLAGS="$CXXFLAGS $2"])dnl
+    m4_ifvaln([$3], [xs_ldflags_save="$LDFLAGS"
+    LDFLAGS="$LDFLAGS $3"])dnl
+    m4_ifvaln([$4], [xs_libs_save="$LIBS"
+    LIBS="$LIBS -l$4"])dnl
+    AC_LINK_IFELSE(
+        [
+        AC_LANG_PROGRAM(
+            [#include <$5>],
+            [$6]
+        )],
+        [xs_$1_works="yes"],
+        [xs_$1_works="no"]
+    )
+    m4_ifvaln([$2], [CXXFLAGS="$xs_cxxflags_save"])dnl
+    m4_ifvaln([$3], [LDFLAGS="$xs_ldflags_save"])dnl
+    m4_ifvaln([$4], [LIBS="$xs_libs_save"])dnl
 ])
 
 
-AC_DEFUN([MY_TRY_LINK_RESTORE],
+AC_DEFUN([XS_LIB_RESULT],
 [
-    CXX="$xs_cxx_save"
-    CXXFLAGS="$xs_cxxflags_save"
-    LDFLAGS="$xs_ldflags_save"
-    LIBS="$xs_libs_save"
+# xs_lib_result ( $1:$2:$3 )
+    define([Name], [translit([$1], [a-z], [A-Z])])dnl
+    if test "x$xs_have_$1" = "xyes"; then
+        if test "x$xs_$1_cxxflags" != "x" || test "x$xs_$1_ldflags" != "x"; then
+            AC_MSG_RESULT([$xs_$1_cxxflags $2 $xs_$1_ldflags $3])
+        else
+            AC_MSG_RESULT([yes])
+        fi
+
+        Name[]_LIBS="$xs_$1_ldflags $2"
+        Name[]_CFLAGS="$xs_$1_cxxflags $3"
+        AC_SUBST(Name[]_LIBS)dnl
+        AC_SUBST(Name[]_CFLAGS)dnl
+    else
+        AC_MSG_RESULT([no])
+    fi
+])
+
+
+AC_DEFUN([XS_PROG_PKGCONFIG],
+[
+    AC_PATH_PROG([PKG_CONFIG], [pkg-config])dnl
 ])
 
 
-AC_DEFUN([MY_PROG_PKGCONFIG],
-[
-    AC_PATH_PROG([PKG_CONFIG], [pkg-config])
+AC_DEFUN([XS_ARG_WITH], [dnl
+# xs_arg_with ( $1:$2:$3 )
+    define([Name], [translit([$1], [a-z], [A-Z])])dnl
+    AH_TEMPLATE(HAVE_[]Name, [Define if you have and want to use $2])dnl
+    AC_ARG_WITH([$1],
+        [  --with-$1=PREFIX   Enable $2 with install-PREFIX], [dnl
+        if test "x$withval" = "xyes"; then
+            xs_use_$1="yes"
+            xs_$1_library=""
+            xs_$1_includes=""
+        else
+            if test "x$withval" = "xno"; then
+                xs_use_$1="no"
+            else
+                xs_use_$1="yes"
+                xs_$1_includes="$withval/include"
+                xs_$1_library="$withval/lib"
+            fi
+        fi
+    ],[dnl
+        xs_use_$1="try"
+        xs_$1_library=""
+        xs_$1_includes=""
+    ])dnl
+    AC_ARG_WITH([$1-inc],
+    [  --with-$1-inc=DIR    Where the $2 headers are located],
+    [xs_$1_includes="$withval"])dnl
+    AC_ARG_WITH([$1-lib],
+    [  --with-$1-lib=DIR    Where the $2 library is installed],
+    [xs_$1_library="$withval"])dnl
+
+    dnl Okay, handle this
+    xs_have_$1="no"
+    if test "x$xs_use_$1" = "xtry"; then
+        $3
+    elif test "x$xs_use_$1" = "xyes"; then
+        $3
+        if test "x$xs_have_$1" = "xno"; then
+            AC_MSG_ERROR([$2 library and/or headers were not found!])
+        fi
+    fi
 ])
 
 
-AC_DEFUN([MY_NEED_PKGCONFIG],
-[
-    AC_REQUIRE([MY_PROG_PKGCONFIG])
-    if test -z "$PKG_CONFIG"; then
-        AC_MSG_ERROR([[pkg-config not found. See http://pkgconfig.sourceforge.net]])
-    fi
-    if ! $PKG_CONFIG --atleast-pkgconfig-version 0.5 ; then
-        AC_MSG_ERROR([[pkg-config too old; version 0.5 or better required.]])
-    fi
-])
-
 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_LIBS@ will be substituted with linker parameters
 dnl @SIDPLAY1_INCLUDES@ will be substituted with compiler parameters
 dnl -------------------------------------------------------------------------
 
@@ -111,104 +127,75 @@
 
     AC_LANG_PUSH([C++])
     
-    # Use include path given by user (if any).
-    if test -n "$xs_sidplay1_includes"; then
+    dnl Use include path given by user (if any).
+    if test "x$xs_sidplay1_includes" != "x"; 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
+    dnl Use library path given by user (if any).
+    if test "x$xs_sidplay1_library" != "x"; then
         xs_sidplay1_ldflags="-L$xs_sidplay1_library"
     else
         xs_sidplay1_ldflags=""
     fi
 
-    AC_CACHE_VAL(xs_cv_have_sidplay1,
+    AC_CACHE_VAL([xs_cv_have_sidplay1],
     [
-        # Run test compilation with either standard search path
-        # or user-defined paths.
-        MY_TRY_LIBSIDPLAY1
+        dnl Run test compilation with either standard search path
+        dnl or user-defined paths.
+        XS_TRY_LIBSIDPLAY1
         if test "x$xs_sidplay1_works" = "xyes"; then
           xs_cv_have_sidplay1="xs_have_sidplay1=yes  \
             xs_sidplay1_cxxflags=\"$xs_sidplay1_cxxflags\"  \
             xs_sidplay1_ldflags=\"$xs_sidplay1_ldflags\"  "
         else
-            MY_FIND_LIBSIDPLAY1        
+            XS_FIND_LIBSIDPLAY1        
         fi
     ])
-
     eval "$xs_cv_have_sidplay1"
-
-    if test "x$xs_have_sidplay1" = "xyes"; 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
-
+    XS_LIB_RESULT([sidplay1], [-lsidplay], [])
     AC_LANG_POP([C++])
 ])
 
 dnl Functions used by XS_PATH_LIBSIDPLAY1.
 
-AC_DEFUN([MY_FIND_LIBSIDPLAY1],
+AC_DEFUN([XS_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"
-    MY_FIND_FILE(sidplay/sidtune.h, $xs_sidplay1_incdirs, xs_sidplay1_includes)
+    dnl Search common locations where header files might be stored.
+    XS_FIND_FILE([xs_sidplay1_includes], [sidplay/sidtune.h],
+    [$xs_sidplay1_includes /usr/include /usr/local/include /usr/lib/sidplay/include /usr/local/lib/sidplay/include /opt/sfw/include /opt/csw/include])
 
-    # 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"
-    MY_FIND_FILE(libsidplay.a libsidplay.so libsidplay.so.1 libsidplay.so.1.36 libsidplay.so.1.37,
-                 $xs_sidplay1_libdirs, xs_sidplay1_library)
+    dnl Search common locations where library might be stored.
+    XS_FIND_FILE([xs_sidplay1_library],
+    [libsidplay.a libsidplay.so libsidplay.so.1 libsidplay.so.1.36 libsidplay.so.1.37],
+    [$xs_sidplay1_library /usr/lib /usr/lib/sidplay /usr/local/lib/sidplay /opt/sfw/lib /opt/csw/lib])
 
-    if test -z "$xs_sidplay1_includes" || test -z "$xs_sidplay1_library"; then
+    if test "x$xs_sidplay1_includes" = "x" || test "x$xs_sidplay1_library" = "x"; then
         xs_cv_have_sidplay1="xs_have_sidplay1=no  \
           xs_sidplay1_ldflags=\"\" xs_sidplay1_cxxflags=\"\"  "
     else
-        # Test compilation with found paths.
+        dnl Test compilation with found paths.
         xs_sidplay1_ldflags="-L$xs_sidplay1_library"
         xs_sidplay1_cxxflags="-I$xs_sidplay1_includes"
-        MY_TRY_LIBSIDPLAY1
+        XS_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([MY_TRY_LIBSIDPLAY1],
-[
-    MY_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]
-    )
-
-    MY_TRY_LINK_RESTORE
+AC_DEFUN([XS_TRY_LIBSIDPLAY1],[
+    XS_TRY_LIBRARY([sidplay1], [$xs_sidplay1_cxxflags], [$xs_sidplay1_ldflags],
+    [sidplay], [sidplay/sidtune.h], [sidTune* myTest = new sidTune(0);])
 ])
 
 
 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_LIBS@ will be substituted with linker parameters
 dnl @SIDPLAY_INCLUDES@ will be substituted with compiler parameters
 dnl -------------------------------------------------------------------------
 AC_DEFUN([XS_PATH_LIBSIDPLAY2],
@@ -217,142 +204,115 @@
 
     AC_LANG_PUSH([C++])
     
-    AC_REQUIRE([MY_PROG_PKGCONFIG])
-    if test -n "$PKG_CONFIG" && $PKG_CONFIG --atleast-version $LIBSIDPLAY2_REQUIRED_VERSION libsidplay2; then
-        xs_pkgcfg_knows=yes
+    AC_REQUIRE([XS_PROG_PKGCONFIG])
+    if test "x$PKG_CONFIG" != "x" && $PKG_CONFIG --atleast-version m4_ifval([$1], [$1], [2.1.0]) libsidplay2; then
+        xs_pkgcfg_knows="yes"
     else
-        xs_pkgcfg_knows=no
+        xs_pkgcfg_knows="no"
     fi
 
-    # Derive sidbuilders path from libsidplay2 root.
-    if test -n "$xs_sidplay2_library"; then
+    dnl Derive sidbuilders path from libsidplay2 root.
+    if test "x$xs_sidplay2_library" != "x"; then
         xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders"
     elif test "x$xs_pkgcfg_knows" = "xyes" ; then
         xs_sidplay2_builders=`$PKG_CONFIG --variable=builders libsidplay2`
     fi
 
-    AC_CACHE_VAL(xs_cv_have_sidplay2,
+    AC_CACHE_VAL([xs_cv_have_sidplay2],
     [
-        # Run test compilation with either standard search path
-        # or user-defined paths.
-        xs_sidplay2_ldadd="-lsidplay2"
-        MY_TRY_LIBSIDPLAY2
+        dnl Run test compilation with either standard search path
+        dnl or user-defined paths.
+        xs_sidplay2_ldflags="-lsidplay2"
+        XS_TRY_LIBSIDPLAY2
         if test "x$xs_sidplay2_works" = "xyes"; then
           xs_cv_have_sidplay2="xs_have_sidplay2=yes  \
             xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\"  \
-            xs_sidplay2_ldadd=\"$xs_sidplay2_ldadd\"  \
+            xs_sidplay2_ldflags=\"$xs_sidplay2_ldflags\"  \
             xs_sidplay2_builders=\"$xs_sidplay2_builders\"  "
         else
-            MY_FIND_LIBSIDPLAY2
+            XS_FIND_LIBSIDPLAY2
         fi
     ])
     eval "$xs_cv_have_sidplay2"
-    if test "x$xs_have_sidplay2" = "xyes"; 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
-
+    XS_LIB_RESULT([sidplay2], [], [])
     AC_LANG_POP([C++])
 ])
 
 
 dnl Functions used by XS_PATH_LIBSIDPLAY2.
-AC_DEFUN([MY_FIND_LIBSIDPLAY2],
+AC_DEFUN([XS_FIND_LIBSIDPLAY2],
 [
-    # See whether user didn't provide paths.
-    if test -z "$xs_sidplay2_includes"; then
+    dnl See whether user didn't provide paths.
+    if test "x$xs_sidplay2_includes" = "x"; then
         if test "x$xs_pkgcfg_knows" = "xyes" ; 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"
-            MY_FIND_FILE(sidplay/sidplay2.h,$xs_sidplay2_incdirs,xs_sidplay2_includes)
+            dnl Search common locations where header files might be stored.
+            XS_FIND_FILE([xs_sidplay2_includes], [sidplay/sidplay2.h],
+            [$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])
             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 "x$xs_sidplay2_library" = "x"; then
         if test "x$xs_pkgcfg_knows" = "xyes" ; then
             xs_sidplay2_library=`$PKG_CONFIG --variable=libdir libsidplay2`
-            xs_sidplay2_ldadd=`$PKG_CONFIG --libs libsidplay2`
+            xs_sidplay2_ldflags=`$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"
-            MY_FIND_FILE(libsidplay2.la,$xs_sidplay2_libdirs,xs_sidplay2_library)
-            xs_sidplay2_ldadd="-L$xs_sidplay2_library -lsidplay2"
+            dnl Search common locations where library might be stored.
+            XS_FIND_FILE([xs_sidplay2_library], [libsidplay2.la],
+            [$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])
+            xs_sidplay2_ldflags="-L$xs_sidplay2_library -lsidplay2"
             xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders"
         fi
     else
-        xs_sidplay2_ldadd="-L$xs_sidplay2_library -lsidplay2"
+        xs_sidplay2_ldflags="-L$xs_sidplay2_library -lsidplay2"
     fi
-    if test -z "$xs_sidplay2_includes" || test -z "$xs_sidplay2_library"; then
+    if test "x$xs_sidplay2_includes" = "x" || test "x$xs_sidplay2_library" = "x"; then
         xs_cv_have_sidplay2="xs_have_sidplay2=no \
-          xs_sidplay2_ldadd=\"\" xs_sidplay2_cxxflags=\"\" \
+          xs_sidplay2_ldflags=\"\" xs_sidplay2_cxxflags=\"\" \
           xs_sidplay2_builders=\"\" "
     else
-        # Test compilation with found paths.
-        xs_sidplay2_ldadd="-L$xs_sidplay2_library -lsidplay2"
+        dnl Test compilation with found paths.
+        xs_sidplay2_ldflags="-L$xs_sidplay2_library -lsidplay2"
         xs_sidplay2_cxxflags="-I$xs_sidplay2_includes"
-        MY_TRY_LIBSIDPLAY2
+        XS_TRY_LIBSIDPLAY2
         xs_cv_have_sidplay2="xs_have_sidplay2=$xs_sidplay2_works \
-          xs_sidplay2_ldadd=\"$xs_sidplay2_ldadd\" \
+          xs_sidplay2_ldflags=\"$xs_sidplay2_ldflags\" \
           xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\" \
           xs_sidplay2_builders=\"$xs_sidplay2_builders\" "
     fi
 ])
 
 
-AC_DEFUN([MY_TRY_LIBSIDPLAY2],
+AC_DEFUN([XS_TRY_LIBSIDPLAY2],
 [
-    MY_TRY_LINK_SAVE
-
-    CXX="${SHELL-/bin/sh} ${srcdir}/libtool $CXX"
-    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]
-    )
-
-    MY_TRY_LINK_RESTORE
+    XS_TRY_LIBRARY([sidplay2],
+        [$xs_sidplay2_cxxflags -DHAVE_UNIX], [$xs_sidplay2_ldflags],
+        [sidplay2], [sidplay/sidplay2.h], [sidplay2 *myEngine;])
 ])
 
 
 dnl -------------------------------------------------------------------------
 dnl Find libsidplay2 builders (sidbuilders) dir.
-dnl @BUILDERS_INCLUDES@
+dnl @BUILDERS_CFLAGS@
 dnl @BUILDERS_LDFLAGS@
 dnl -------------------------------------------------------------------------
-AC_DEFUN([BUILDERS_FIND],
+AC_DEFUN([XS_BUILDERS_CHECK],
 [
     AC_MSG_CHECKING([for SIDPlay2 builders directory])
-
-    AC_LANG_PUSH([C++])
-
+    AC_LANG_ASSERT([C++])
     AC_REQUIRE([XS_PATH_LIBSIDPLAY2])
 
     dnl Be pessimistic.
-    builders_available=no
+    builders_available="no"
 
     dnl Sidbuilder headers are included with "builders" prefix.
-    builders_includedir=$xs_sidplay2_includes
-    builders_libdir=$xs_sidplay2_builders
+    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
@@ -361,36 +321,36 @@
     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
+    if test "x$builders_libdir" = "x"; then
         eval "builders_libdir=$libdir/sidplay/builders"
     fi
 
-    AC_ARG_WITH(sidbuilders,
+    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,
+    AC_ARG_WITH([builders-inc],
         [  --with-builders-inc=DIR where the SIDPlay2 builders headers are located],
         [builders_includedir="$withval"])
 
-    AC_ARG_WITH(builders-lib,
+    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"
+    if test "x$builders_includedir" != "x"; then
+        BUILDERS_CFLAGS="-I$builders_includedir"
     fi
 
-    if test -n "$builders_libdir"; then
+    if test "x$builders_libdir" != "x"; then
         BUILDERS_LDFLAGS="-L$builders_libdir"
     fi
 
     if test -d "$builders_libdir"; then
-        xs_have_sidbuilders_dir=yes
+        xs_have_sidbuilders_dir="yes"
         AC_MSG_RESULT([$builders_libdir])
     else
-        xs_have_sidbuilders_dir=no
+        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
@@ -399,82 +359,26 @@
         ])
     fi
 
-    AC_SUBST([BUILDERS_INCLUDES])
+    AC_SUBST([BUILDERS_CFLAGS])
     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++])
-    MY_TRY_LINK_SAVE
-    
-    CXX="${SHELL-/bin/sh} ${srcdir}/libtool $CXX"
-    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]
-    )
-
-    MY_TRY_LINK_RESTORE
-
-    if test "x$builders_work" = "xyes"; then
-        builders_available=yes
-        xs_builders="reSID $xs_builders"
-        AC_DEFINE(HAVE_RESID_BUILDER)
-        RESID_LDADD="-lresid-builder"
-    fi
-    AC_MSG_RESULT($builders_work)
-    AC_SUBST([RESID_LDADD])
-    AC_LANG_POP([C++])
-])
-
-
+dnl Test for working builders
 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++])
-    MY_TRY_LINK_SAVE
-
-    CXX="${SHELL-/bin/sh} ${srcdir}/libtool $CXX"
-    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]
-    )
-
-    MY_TRY_LINK_RESTORE
-
-    if test "x$builders_work" = "xyes"; then
-        builders_available=yes
-        xs_builders="HardSID $xs_builders"
-        AC_DEFINE(HAVE_HARDSID_BUILDER)
-        HARDSID_LDADD="-lhardsid-builder"
+AC_DEFUN([XS_BUILDERS_FIND], [dnl
+    define([Name], [translit([$1], [a-z], [A-Z])])dnl
+    AH_TEMPLATE(HAVE_[]Name[]_BUILDER, [Define if you have $1 for libSIDPlay 2])
+    AC_MSG_CHECKING([for $1 builder module])
+    XS_TRY_LIBRARY([builders], [$BUILDERS_CFLAGS], [$BUILDERS_LDFLAGS],
+    [$2], [sidplay/builders/$3], [$4 *sid;])
+    if test "x$xs_builders_works" = "xyes"; then
+        xs_builders_available="yes"
+        xs_builders="$1 $xs_builders"
+        AC_DEFINE(HAVE_[]Name[]_BUILDER)
+        BUILDERS_LIBS="$BUILDERS_LIBS -l$2"
     fi
-    AC_MSG_RESULT($builders_work)
-    AC_SUBST([HARDSID_LDADD])
-    AC_LANG_POP([C++])
+    AC_MSG_RESULT([$xs_builders_works])
+    AC_SUBST([BUILDERS_LIBS])
 ])
-
-