dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(alsa-lib, 1.0.29)

AC_CONFIG_SRCDIR([src/control/control.c])
AC_CONFIG_MACRO_DIR([m4])

dnl *************************************************
dnl current:revision:age
dnl change (without API) = c:r+1:a
dnl change API = c+1:0:a
dnl add API = c+1:0:a+1
dnl remove API = c+1:0:0
dnl *************************************************
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE
eval LIBTOOL_VERSION_INFO="2:0:0"
dnl *************************************************
AM_CONDITIONAL([INSTALL_M4], [test -n "${ACLOCAL}"])

AM_MAINTAINER_MODE([enable])

# Test for new silent rules and enable only if they are available
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

AC_PREFIX_DEFAULT(/usr)

dnl Checks for programs.

dnl try to gues cross-compiler if not set
if test "x$host" != "x$build" -a -z "`echo $CC | grep -e '-gcc'`";
then
  AC_MSG_CHECKING(for cross-compiler)

  which ${program_prefix}gcc >/dev/null 2>&1 && CC=${program_prefix}gcc
  which ${host_cpu}-${host_os}-gcc >/dev/null 2>&1 \
  && CC=${host_cpu}-${host_os}-gcc
  which ${host_cpu}-${host_vendor}-${host_os}-gcc >/dev/null 2>&1 \
  && CC=${host_cpu}-${host_vendor}-${host_os}-gcc

  AC_MSG_RESULT($CC)
fi
	    
CFLAGS="$CFLAGS -D_GNU_SOURCE"


AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S 
AC_DISABLE_STATIC
AC_LIBTOOL_DLOPEN
AM_PROG_LIBTOOL

CC_NOUNDEFINED

dnl Checks for header files.
AC_HEADER_STDC
AC_CONFIG_HEADERS(include/config.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_HEADER_TIME

dnl Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_CHECK_FUNCS([uselocale])

SAVE_LIBRARY_VERSION
AC_SUBST(LIBTOOL_VERSION_INFO)

test "x$prefix" = xNONE && prefix=$ac_default_prefix

dnl Do not build static and shared libraries together
if test "$enable_static" = "$enable_shared" -a "$enable_static" = "yes"; then
cat <<EOF
  Please, do not try to compile static and shared libraries together.
  See INSTALL file for more details (do not use --enable-shared=yes with
  --enable-static=yes).
EOF
  exit 1
fi

dnl ALSA configuration directory
AC_ARG_WITH(configdir,
    AS_HELP_STRING([--with-configdir=dir],
	[path where ALSA config files are stored]),
    confdir="$withval", confdir="")
if test -z "$confdir"; then
    eval dir="$datadir"
    case "$dir" in
    /*) ;;
    *) dir="$prefix/share"
    esac
    confdir="$dir/alsa"
fi
ALSA_CONFIG_DIR="$confdir"
AC_DEFINE_UNQUOTED(ALSA_CONFIG_DIR, "$confdir", [directory containing ALSA configuration database])
AC_SUBST(ALSA_CONFIG_DIR)

dnl ALSA plugin directory
test "x$exec_prefix" = xNONE && exec_prefix=$prefix

AC_ARG_WITH(plugindir,
    AS_HELP_STRING([--with-plugindir=dir],
	[path where ALSA plugin files are stored]),
    plugindir="$withval", plugindir="")
if test -z "$plugindir"; then
    eval dir="$libdir"
    case "$dir" in
    /*) ;;
    *) dir="$dir"
    esac
    plugindir="$dir/$PACKAGE"
fi
AC_DEFINE_UNQUOTED(ALSA_PLUGIN_DIR, "$plugindir", [directory containing ALSA add-on modules])
ALSA_PLUGIN_DIR="$plugindir"
AC_SUBST(ALSA_PLUGIN_DIR)

AC_ARG_WITH(pkgconfdir,
    AS_HELP_STRING([--with-pkgconfdir=dir],
	[path where pkgconfig files are stored]),
    pkgconfdir="$withval", pkgconfdir="")
if test -z "$pkgconfdir"; then
    eval dir="$libdir"
    case "$dir" in
    /*) ;;
    *) dir="$dir"
    esac
    pkgconfdir="$dir/pkgconfig"
fi
AC_DEFINE_UNQUOTED(ALSA_PKGCONF_DIR, "$pkgconfdir", [directory containing pkgconfig files])
ALSA_PKGCONF_DIR="$pkgconfdir"
AC_SUBST(ALSA_PKGCONF_DIR)

dnl Check for versioned symbols
AC_MSG_CHECKING(for versioned symbols)
AC_ARG_WITH(versioned,
  AS_HELP_STRING([--with-versioned],
    [shared library will be compiled with versioned symbols (default = yes)]),
  versioned="$withval", versioned="yes")
if test "$versioned" = "yes"; then
  # it seems that GNU ld versions since 2.10 are not broken
  xres=`grep '^VERSION=' ${srcdir}/ltmain.sh | cut -d = -f 2 | cut -d \" -f 2`
  major=`echo $xres | cut -d . -f 1`
  minor=`echo $xres | cut -d . -f 2`
  pass=0
  if test $major -eq 1 && test $minor -gt 3; then
    pass=1
  else
    if test $major -gt 1; then
      pass=1
    fi
  fi
  if test $pass -eq 1; then
    AC_DEFINE(VERSIONED_SYMBOLS,,[compiled with versioned symbols])
    AC_MSG_RESULT(yes)
  else
    AC_MSG_RESULT(broken libtool - use libtool v1.4+; no versions)
  fi
else
  AC_MSG_RESULT(no)
fi
AM_CONDITIONAL([VERSIONED_SYMBOLS], [test x$versioned = xyes])

dnl Check for symbolic-functions
AC_MSG_CHECKING(for symbolic-functions)
AC_ARG_ENABLE(symbolic-functions,
  AS_HELP_STRING([--enable-symbolic-functions],
    [use -Bsymbolic-functions option if available (optmization for size and speed)]),
  symfuncs="$enableval", symfuncs="no")
if test "$symfuncs" = "yes"; then
  if ld --help | grep -q -- '-Bsymbolic-functions'; then
    AC_MSG_RESULT(yes)
  else
    AC_MSG_RESULT(not supported by ld)
    symfuncs="no"
  fi
else
  AC_MSG_RESULT(no)
fi
AM_CONDITIONAL([SYMBOLIC_FUNCTIONS], [test x"$symfuncs" = xyes])

dnl See if toolchain has a custom prefix for symbols ...
AC_MSG_CHECKING(for custom symbol prefixes)
SYMBOL_PREFIX=` \
	echo "PREFIX=__USER_LABEL_PREFIX__" \
		| ${CPP-${CC-gcc} -E} - 2>&1 \
		| ${EGREP-grep} "^PREFIX=" \
		| ${SED-sed} "s:^PREFIX=::"`
AC_DEFINE_UNQUOTED([__SYMBOL_PREFIX], "$SYMBOL_PREFIX", [Toolchain Symbol Prefix])
AC_SUBST(SYMBOL_PREFIX)
AC_MSG_RESULT($SYMBOL_PREFIX)

dnl Check for debug...
AC_MSG_CHECKING(for debug)
AC_ARG_WITH(debug,
  AS_HELP_STRING([--with-debug],
    [library will be compiled with asserts (default = yes)]),
  debug="$withval", debug="yes")
if test "$debug" = "yes"; then
  AC_MSG_RESULT(yes)
else
  AC_DEFINE(NDEBUG,,[No assert debug])
  AC_MSG_RESULT(no)
fi

if test "$debug" = "yes"; then
  AC_MSG_CHECKING(for debug assert)
  AC_ARG_ENABLE(debug-assert,
    AS_HELP_STRING([--enable-debug],
      [enable assert call at the default error message handler]),
    debug_assert="$enableval", debug_assert="no")
  if test "$debug_assert" = "yes"; then
    AC_MSG_RESULT(yes)
    AC_DEFINE(ALSA_DEBUG_ASSERT,,[Enable assert at error message handler])
  else
    AC_MSG_RESULT(no)
  fi
fi

dnl Temporary directory
AC_MSG_CHECKING(for tmpdir)
AC_ARG_WITH(tmpdir,
  AS_HELP_STRING([--with-tmpdir=directory],
    [directory to put tmp socket files (/tmp)]),
  tmpdir="$withval", tmpdir="/tmp")
AC_MSG_RESULT($tmpdir)
AC_DEFINE_UNQUOTED(TMPDIR, "$tmpdir", [directory to put tmp socket files])

dnl Check for softfloat...
AC_MSG_CHECKING(for softfloat)
AC_ARG_WITH(softfloat,
  AS_HELP_STRING([--with-softfloat],
    [do you have floating point unit on this machine? (optional)]),
  [case "$withval" in
	y|yes) softfloat=yes ;;
	*) softfloat=no ;;
   esac],)
if test "$softfloat" = "yes" ; then
  AC_DEFINE(HAVE_SOFT_FLOAT, "1", [Avoid calculation in float])
  AC_MSG_RESULT(yes)
else
  AC_MSG_RESULT(no)
fi

ALSA_DEPLIBS=""
if test "$softfloat" != "yes"; then
  ALSA_DEPLIBS="-lm"
fi

dnl Check for libdl
AC_MSG_CHECKING(for libdl)
AC_ARG_WITH(libdl,
  AS_HELP_STRING([--with-libdl], [Use libdl for plugins (default = yes)]),
  [ have_libdl="$withval" ], [ have_libdl="yes" ])
HAVE_LIBDL=
if test "$have_libdl" = "yes"; then
  AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
  if test "$HAVE_LIBDL" = "yes" ; then
    ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
    AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
  fi
else
  AC_MSG_RESULT(no)
fi
AM_CONDITIONAL([BUILD_MODULES], [test "$HAVE_LIBDL" = "yes"])

dnl Check for pthread
AC_MSG_CHECKING(for pthread)
AC_ARG_WITH(pthread,
  AS_HELP_STRING([--with-pthread], [Use pthread (default = yes)]),
  [ have_pthread="$withval" ], [ have_pthread="yes" ])
if test "$have_pthread" = "yes"; then
  AC_CHECK_LIB([pthread], [pthread_join], [HAVE_LIBPTHREAD="yes"])
  if test "$HAVE_LIBPTHREAD" = "yes"; then
    ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
    AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have libpthread])
  fi
else
  AC_MSG_RESULT(no)
fi

dnl Check for __thread
AC_MSG_CHECKING([for __thread])
AC_LINK_IFELSE([AC_LANG_PROGRAM([#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) || (__GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ < 2))
#error gcc has this bug: http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html
#endif], [static __thread int p = 0])],
[AC_DEFINE(HAVE___THREAD, 1,
Define to 1 if compiler supports __thread)
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])

dnl Check for librt
AC_MSG_CHECKING(for librt)
AC_ARG_WITH(librt,
  AS_HELP_STRING([--with-librt], [Use librt for monotonic clock (default = yes)]),
  [ have_librt="$withval" ], [ have_librt="yes" ])
if test "$have_librt" = "yes"; then
  AC_CHECK_LIB([rt], [clock_gettime], [HAVE_LIBRT="yes"])
  if test "$HAVE_LIBRT" = "yes" ; then
    ALSA_DEPLIBS="$ALSA_DEPLIBS -lrt"
    AC_DEFINE([HAVE_LIBRT], 1, [Have librt])
    AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [Have clock gettime])
  fi
else
  AC_MSG_RESULT(no)
fi

AC_SUBST(ALSA_DEPLIBS)

dnl Check for headers
AC_CHECK_HEADERS([wordexp.h endian.h sys/endian.h])

dnl Check for resmgr support...
AC_MSG_CHECKING(for resmgr support)
AC_ARG_ENABLE(resmgr,
  AS_HELP_STRING([--enable-resmgr], [support resmgr (optional)]),
  resmgr="$enableval", resmgr="no")
AC_MSG_RESULT($resmgr)
if test "$resmgr" = "yes"; then
  AC_CHECK_LIB(resmgr, rsm_open_device,,
    AC_ERROR([Cannot find libresmgr]))
  AC_DEFINE(SUPPORT_RESMGR, "1", [Support resmgr with alsa-lib])
fi

dnl Check for aload* support...
AC_MSG_CHECKING(for aload* support)
AC_ARG_ENABLE(aload,
  AS_HELP_STRING([--disable-aload], [disable reading /dev/aload*]),
  aload="$enableval", aload="yes")
AC_MSG_RESULT($aload)
if test "$aload" = "yes"; then
  AC_DEFINE(SUPPORT_ALOAD, "1", [Support /dev/aload* access for auto-loading])
fi

dnl Check for non-standard /dev directory
AC_MSG_CHECKING([for ALSA device file directory])
AC_ARG_WITH(alsa-devdir,
  AS_HELP_STRING([--with-alsa-devdir=dir],
    [directory with ALSA device files (default /dev/snd)]),
  [alsa_dev_dir="$withval"],
  [alsa_dev_dir="/dev/snd"])
dnl make sure it has a trailing slash
if echo "$alsa_dev_dir" | grep -v '/$' > /dev/null; then
  alsa_dev_dir="$alsa_dev_dir/"
fi
AC_DEFINE_UNQUOTED(ALSA_DEVICE_DIRECTORY, "$alsa_dev_dir", [Directory with ALSA device files])
AC_MSG_RESULT([$alsa_dev_dir])

AC_MSG_CHECKING([for aload* device file directory])
AC_ARG_WITH(aload-devdir,
  AS_HELP_STRING([--with-aload-devdir=dir],
    [directory with aload* device files (default /dev)]),
  [aload_dev_dir="$withval"],
  [aload_dev_dir="/dev"])
if echo "$aload_dev_dir" | grep -v '/$' > /dev/null; then
  aload_dev_dir="$aload_dev_dir/"
fi
AC_DEFINE_UNQUOTED(ALOAD_DEVICE_DIRECTORY, "$aload_dev_dir", [Directory with aload* device files])
AC_MSG_RESULT([$aload_dev_dir])

dnl Build conditions
AC_ARG_ENABLE(mixer,
  AS_HELP_STRING([--disable-mixer], [disable the mixer component]),
  [build_mixer="$enableval"], [build_mixer="yes"])
AC_ARG_ENABLE(pcm,
  AS_HELP_STRING([--disable-pcm], [disable the PCM component]),
  [build_pcm="$enableval"], [build_pcm="yes"])
AC_ARG_ENABLE(rawmidi,
  AS_HELP_STRING([--disable-rawmidi], [disable the raw MIDI component]),
  [build_rawmidi="$enableval"], [build_rawmidi="yes"])
AC_ARG_ENABLE(hwdep,
  AS_HELP_STRING([--disable-hwdep], [disable the hwdep component]),
  [build_hwdep="$enableval"], [build_hwdep="yes"])
AC_ARG_ENABLE(seq,
  AS_HELP_STRING([--disable-seq], [disable the sequencer component]),
  [build_seq="$enableval"], [build_seq="yes"])
AC_ARG_ENABLE(ucm,
  AS_HELP_STRING([--disable-ucm], [disable the use-case-manager component]),
  [build_ucm="$enableval"], [build_ucm="yes"])
AC_ARG_ENABLE(alisp,
  AS_HELP_STRING([--disable-alisp], [disable the alisp component]),
  [build_alisp="$enableval"], [build_alisp="yes"])
test "$softfloat" = "yes" && build_alisp="no"
AC_ARG_ENABLE(old-symbols,
  AS_HELP_STRING([--disable-old-symbols], [disable old obsoleted symbols]),
  [keep_old_symbols="$enableval"], [keep_old_symbols="yes"])
AM_CONDITIONAL([KEEP_OLD_SYMBOLS], [test x$keep_old_symbols = xyes])

AC_ARG_ENABLE(python,
  AS_HELP_STRING([--disable-python], [disable the python components]),
  [build_python="$enableval"], [build_python="yes"])
PYTHON_LIBS=""
PYTHON_INCLUDES=""
if test "$build_python" = "yes"; then
  AC_ARG_WITH(pythonlibs,
    AS_HELP_STRING([--with-pythonlibs=ldflags],
      [specify python libraries (-lpthread -lm -ldl -lpython2.4)]),
    pythonlibs="$withval", pythonlibs=`python-config --libs`)
  AC_ARG_WITH(pythonincludes,
    AS_HELP_STRING([--with-pythonincludes=Cflags],
      [specify python C header files (-I/usr/include/python)]),
    pythonincludes="$withval", pythonincludes=`python-config --includes`)
  if test -z "$pythonlibs"; then
    echo "Unable to determine python libraries! Probably python-config is not"
    echo "available on this system. Please, use --with-pythonlibs and"
    echo "--with-pythonincludes options. Python components are disabled in this build."
    build_python="no"
  else
    PYTHON_LIBS="$pythonlibs"
    PYTHON_INCLUDES="$pythonincludes"
  fi
fi
AC_SUBST(PYTHON_LIBS)
AC_SUBST(PYTHON_INCLUDES)

AM_CONDITIONAL([BUILD_MIXER], [test x$build_mixer = xyes])
AM_CONDITIONAL([BUILD_PCM], [test x$build_pcm = xyes])
AM_CONDITIONAL([BUILD_RAWMIDI], [test x$build_rawmidi = xyes])
AM_CONDITIONAL([BUILD_HWDEP], [test x$build_hwdep = xyes])
AM_CONDITIONAL([BUILD_SEQ], [test x$build_seq = xyes])
AM_CONDITIONAL([BUILD_UCM], [test x$build_ucm = xyes])
AM_CONDITIONAL([BUILD_ALISP], [test x$build_alisp = xyes])
AM_CONDITIONAL([BUILD_PYTHON], [test x$build_python = xyes])

if test "$build_mixer" = "yes"; then
  AC_DEFINE([BUILD_MIXER], "1", [Build mixer component])
fi
if test "$build_pcm" = "yes"; then
  AC_DEFINE([BUILD_PCM], "1", [Build PCM component])
fi
if test "$build_rawmidi" = "yes"; then
  AC_DEFINE([BUILD_RAWMIDI], "1", [Build raw MIDI component])
fi
if test "$build_hwdep" = "yes"; then
  AC_DEFINE([BUILD_HWDEP], "1", [Build hwdep component])
fi
if test "$build_seq" = "yes"; then
  AC_DEFINE([BUILD_SEQ], "1", [Build sequencer component])
fi
if test "$build_ucm" = "yes"; then
  AC_DEFINE([BUILD_UCM], "1", [Build UCM component])
fi

dnl PCM Plugins

if test "$build_pcm" = "yes"; then
AC_ARG_WITH(pcm-plugins,
  AS_HELP_STRING([--with-pcm-plugins=<list>],
    [build PCM plugins (default = all)]),
  [pcm_plugins="$withval"], [pcm_plugins="all"])
else
pcm_plugins=""
fi

dnl check atomics for pcm_meter

AC_MSG_CHECKING([whether GCC supports builtin atomic intrinsics])
if test -z "$gcc_have_atomics"; then
  gcc_have_atomics=no
  AC_TRY_LINK([],
    [int i;
     __atomic_load_n(&i, __ATOMIC_SEQ_CST);
     __atomic_add_fetch(&i, 0, __ATOMIC_SEQ_CST);
    ],
    [gcc_have_atomics=yes],
    [gcc_have_atomics=no])
fi
AC_MSG_RESULT($gcc_have_atomics)

PCM_PLUGIN_LIST="copy linear route mulaw alaw adpcm rate plug multi shm file null empty share meter hooks lfloat ladspa dmix dshare dsnoop asym iec958 softvol extplug ioplug mmap_emul"

build_pcm_plugin="no"
for t in $PCM_PLUGIN_LIST; do
  eval build_pcm_$t="no"
done

pcm_plugins=`echo $pcm_plugins | sed 's/,/ /g'`
for p in $pcm_plugins; do
  for t in $PCM_PLUGIN_LIST; do
    if test "$p" = "$t" -o "$p" = "all"; then
      eval build_pcm_$t="yes"
      build_pcm_plugin="yes"
    fi
  done
done

dnl special dependencies
if test "$build_pcm_plug" = "yes"; then
  build_pcm_linear="yes"
  build_pcm_copy="yes"
fi

if test "$build_pcm_ioplug" = "yes"; then
  build_pcm_extplug="yes"
fi

if test "$HAVE_LIBDL" != "yes"; then
  build_pcm_meter="no"
  build_pcm_ladspa="no"
  build_pcm_pcm_ioplug="no"
  build_pcm_pcm_extplug="no"
fi

if test "$HAVE_LIBPTHREAD" != "yes"; then
  build_pcm_share="no"
fi

if test "$softfloat" = "yes"; then
  build_pcm_lfloat="no"
  build_pcm_ladspa="no"
fi

if test "$gcc_have_atomics" != "yes"; then
  build_pcm_meter="no"
fi

AM_CONDITIONAL([BUILD_PCM_PLUGIN], [test x$build_pcm_plugin = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_COPY], [test x$build_pcm_copy = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_LINEAR], [test x$build_pcm_linear = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_ROUTE], [test x$build_pcm_route = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_MULAW], [test x$build_pcm_mulaw = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_ALAW], [test x$build_pcm_alaw = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_ADPCM], [test x$build_pcm_adpcm = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_RATE], [test x$build_pcm_rate = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_PLUG], [test x$build_pcm_plug = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_MULTI], [test x$build_pcm_multi = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_SHM], [test x$build_pcm_shm = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_FILE], [test x$build_pcm_file = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_NULL], [test x$build_pcm_null = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_EMPTY], [test x$build_pcm_empty = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_SHARE], [test x$build_pcm_share = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_METER], [test x$build_pcm_meter = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_HOOKS], [test x$build_pcm_hooks = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_LFLOAT], [test x$build_pcm_lfloat = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_LADSPA], [test x$build_pcm_ladspa = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_DMIX], [test x$build_pcm_dmix = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_DSHARE], [test x$build_pcm_dshare = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_DSNOOP], [test x$build_pcm_dsnoop = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_ASYM], [test x$build_pcm_asym = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_IEC958], [test x$build_pcm_iec958 = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_SOFTVOL], [test x$build_pcm_softvol = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_EXTPLUG], [test x$build_pcm_extplug = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_IOPLUG], [test x$build_pcm_ioplug = xyes])
AM_CONDITIONAL([BUILD_PCM_PLUGIN_MMAP_EMUL], [test x$build_pcm_mmap_emul = xyes])

dnl Defines for plug plugin
if test "$build_pcm_rate" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_RATE], "1", [Build PCM rate plugin])
fi
if test "$build_pcm_route" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_ROUTE], "1", [Build PCM route plugin])
fi
if test "$build_pcm_lfloat" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_LFLOAT], "1", [Build PCM lfloat plugin])
fi
if test "$build_pcm_adpcm" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_ADPCM], "1", [Build PCM adpcm plugin])
fi
if test "$build_pcm_mulaw" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_MULAW], "1", [Build PCM mulaw plugin])
fi
if test "$build_pcm_alaw" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_ALAW], "1", [Build PCM alaw plugin])
fi
if test "$build_pcm_mmap_emul" = "yes"; then
  AC_DEFINE([BUILD_PCM_PLUGIN_MMAP_EMUL], "1", [Build PCM mmap-emul plugin])
fi


dnl Create PCM plugin symbol list for static library
rm -f "$srcdir"/src/pcm/pcm_symbols_list.c
touch "$srcdir"/src/pcm/pcm_symbols_list.c
for t in $PCM_PLUGIN_LIST; do
  if eval test \$build_pcm_$t = yes; then
    echo \&_snd_module_pcm_$t, >> "$srcdir"/src/pcm/pcm_symbols_list.c
  fi
done

dnl Control Plugins

AC_ARG_WITH(ctl-plugins,
  AS_HELP_STRING([--with-ctl-plugins=<list>],
    [build control plugins (default = all)]),
  [ctl_plugins="$withval"], [ctl_plugins="all"])

CTL_PLUGIN_LIST="shm ext"

build_ctl_plugin="no"
for t in $CTL_PLUGIN_LIST; do
  eval build_ctl_$t="no"
done

ctl_plugins=`echo $ctl_plugins | sed 's/,/ /g'`
for p in $ctl_plugins; do
  for t in $CTL_PLUGIN_LIST; do
    if test "$p" = "$t" -o "$p" = "all"; then
      eval build_ctl_$t="yes"
      build_ctl_plugin="yes"
    fi
  done
done

AM_CONDITIONAL([BUILD_CTL_PLUGIN], [test x$build_ctl_plugin = xyes])
AM_CONDITIONAL([BUILD_CTL_PLUGIN_SHM], [test x$build_ctl_shm = xyes])
AM_CONDITIONAL([BUILD_CTL_PLUGIN_EXT], [test x$build_ctl_ext = xyes])

dnl Create ctl plugin symbol list for static library
rm -f "$srcdir"/src/control/ctl_symbols_list.c
touch "$srcdir"/src/control/ctl_symbols_list.c
for t in $CTL_PLUGIN_LIST; do
  if eval test \$build_ctl_$t = yes; then
    echo \&_snd_module_control_$t, >> "$srcdir"/src/control/ctl_symbols_list.c
  fi
done

dnl Max number of cards
AC_MSG_CHECKING(for max number of cards)
AC_ARG_WITH(max-cards,
  AS_HELP_STRING([--with-max-cards], [Specify the max number of cards (default = 32)]),
  [ max_cards="$withval" ], [ max_cards="32" ])
AC_MSG_RESULT([$max_cards])

if test "$max_cards" -lt 1; then
   AC_ERROR([Invalid max cards $max_cards])
elif test "$max_cards" -gt 256; then
   AC_ERROR([Invalid max cards $max_cards])
fi
AC_DEFINE_UNQUOTED(SND_MAX_CARDS, $max_cards, [Max number of cards])

dnl Make a symlink for inclusion of alsa/xxx.h
if test ! -L "$srcdir"/include/alsa ; then
  echo "Making a symlink include/alsa"
  rm -f "$srcdir"/include/alsa
  ln -sf . "$srcdir"/include/alsa
fi

AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
	  include/Makefile include/sound/Makefile src/Versions src/Makefile \
          src/control/Makefile src/mixer/Makefile \
	  src/pcm/Makefile src/pcm/scopes/Makefile \
	  src/rawmidi/Makefile src/timer/Makefile \
          src/hwdep/Makefile src/seq/Makefile src/ucm/Makefile \
          src/alisp/Makefile \
	  src/conf/Makefile src/conf/alsa.conf.d/Makefile \
	  src/conf/cards/Makefile \
	  src/conf/pcm/Makefile \
	  src/conf/ucm/Makefile \
	  src/conf/ucm/DAISY-I2S/Makefile \
	  src/conf/ucm/PandaBoard/Makefile \
	  src/conf/ucm/PandaBoardES/Makefile \
	  src/conf/ucm/SDP4430/Makefile \
	  src/conf/ucm/tegraalc5632/Makefile \
	  src/conf/ucm/PAZ00/Makefile \
	  src/conf/ucm/GoogleNyan/Makefile \
	  modules/Makefile modules/mixer/Makefile modules/mixer/simple/Makefile \
	  alsalisp/Makefile aserver/Makefile \
	  test/Makefile test/lsb/Makefile \
	  utils/Makefile utils/alsa-lib.spec utils/alsa.pc)

dnl Create asoundlib.h dynamically according to configure options
echo "Creating asoundlib.h..."
cp "$srcdir"/include/asoundlib-head.h include/asoundlib.h
test "$ac_cv_header_endian_h" = "yes" && echo "#include <endian.h>" >> include/asoundlib.h
if test "$ac_cv_header_sys_endian_h" = "yes"; then
cat >> include/asoundlib.h <<EOF
#include <sys/endian.h>
#ifndef __BYTE_ORDER
#define __BYTE_ORDER BYTE_ORDER
#endif
#ifndef __LITTLE_ENDIAN
#define __LITTLE_ENDIAN LITTLE_ENDIAN
#endif
#ifndef __BIG_ENDIAN
#define __BIG_ENDIAN BIG_ENDIAN
#endif
EOF
fi
cat >> include/asoundlib.h <<EOF

#ifndef __GNUC__
#define __inline__ inline
#endif

#include <alsa/asoundef.h>
#include <alsa/version.h>
#include <alsa/global.h>
#include <alsa/input.h>
#include <alsa/output.h>
#include <alsa/error.h>
#include <alsa/conf.h>
EOF
test "$build_pcm" = "yes" && echo "#include <alsa/pcm.h>" >> include/asoundlib.h
test "$build_rawmidi" = "yes" && echo "#include <alsa/rawmidi.h>" >> include/asoundlib.h
test "$build_pcm" = "yes" && echo "#include <alsa/timer.h>" >> include/asoundlib.h
test "$build_hwdep" = "yes" && echo "#include <alsa/hwdep.h>" >> include/asoundlib.h
echo "#include <alsa/control.h>" >> include/asoundlib.h
test "$build_mixer" = "yes" && echo "#include <alsa/mixer.h>" >> include/asoundlib.h
test "$build_seq" = "yes" && echo "#include <alsa/seq_event.h>" >> include/asoundlib.h
test "$build_seq" = "yes" && echo "#include <alsa/seq.h>" >> include/asoundlib.h
test "$build_seq" = "yes" && echo "#include <alsa/seqmid.h>" >> include/asoundlib.h
test "$build_seq" = "yes" && echo "#include <alsa/seq_midi_event.h>" >> include/asoundlib.h
cat "$srcdir"/include/asoundlib-tail.h >> include/asoundlib.h

