dnl dnl portaudio V19 configure.in script dnl dnl Dominic Mazzoni, Arve Knudsen, Stelios Bounanos dnl dnl Require autoconf >= 2.13 AC_PREREQ(2.13) dnl Init autoconf and make sure configure is being called dnl from the right directory AC_INIT([include/portaudio.h]) dnl Define build, build_cpu, build_vendor, build_os AC_CANONICAL_BUILD dnl Define host, host_cpu, host_vendor, host_os AC_CANONICAL_HOST dnl Define target, target_cpu, target_vendor, target_os AC_CANONICAL_TARGET dnl Specify options AC_ARG_WITH(alsa, AS_HELP_STRING([--with-alsa], [Enable support for ALSA @<:@autodetect@:>@]), [with_alsa=$withval]) AC_ARG_WITH(jack, AS_HELP_STRING([--with-jack], [Enable support for JACK @<:@autodetect@:>@]), [with_jack=$withval]) AC_ARG_WITH(oss, AS_HELP_STRING([--with-oss], [Enable support for OSS @<:@autodetect@:>@]), [with_oss=$withval]) AC_ARG_WITH(asihpi, AS_HELP_STRING([--with-asihpi], [Enable support for ASIHPI @<:@autodetect@:>@]), [with_asihpi=$withval]) AC_ARG_WITH(winapi, AS_HELP_STRING([--with-winapi], [Select Windows API support (@<:@wmme|directx|asio|wasapi|wdmks@:>@@<:@,...@:>@) @<:@wmme@:>@]), [with_winapi=$withval], [with_winapi="wmme"]) case "$target_os" in *mingw* | *cygwin*) with_wmme=no with_directx=no with_asio=no with_wasapi=no with_wdmks=no for api in $(echo $with_winapi | sed 's/,/ /g'); do case "$api" in wmme|directx|asio|wasapi|wdmks) eval with_$api=yes ;; *) AC_MSG_ERROR([unknown Windows API \"$api\" (do you need --help?)]) ;; esac done ;; esac AC_ARG_WITH(asiodir, AS_HELP_STRING([--with-asiodir], [ASIO directory @<:@/usr/local/asiosdk2@:>@]), with_asiodir=$withval, with_asiodir="/usr/local/asiosdk2") AC_ARG_WITH(dxdir, AS_HELP_STRING([--with-dxdir], [DirectX directory @<:@/usr/local/dx7sdk@:>@]), with_dxdir=$withval, with_dxdir="/usr/local/dx7sdk") debug_output=no AC_ARG_ENABLE(debug-output, AS_HELP_STRING([--enable-debug-output], [Enable debug output @<:@no@:>@]), [if test "x$enableval" != "xno" ; then AC_DEFINE(PA_ENABLE_DEBUG_OUTPUT,,[Enable debugging messages]) debug_output=yes fi ]) AC_ARG_ENABLE(cxx, AS_HELP_STRING([--enable-cxx], [Enable C++ bindings @<:@no@:>@]), enable_cxx=$enableval, enable_cxx="no") AC_ARG_ENABLE(mac-debug, AS_HELP_STRING([--enable-mac-debug], [Enable Mac debug @<:@no@:>@]), enable_mac_debug=$enableval, enable_mac_debug="no") AC_ARG_ENABLE(mac-universal, AS_HELP_STRING([--enable-mac-universal], [Build Mac universal binaries @<:@yes@:>@]), enable_mac_universal=$enableval, enable_mac_universal="yes") dnl Continue to accept --host_os for compatibility but do not document dnl it (the correct way to change host_os is with --host=...). Moved dnl here because the empty help string generates a blank line which we dnl can use to separate PA options from libtool options. AC_ARG_WITH(host_os, [], host_os=$withval) dnl Checks for programs. AC_PROG_CC dnl ASIO and CXX bindings need a C++ compiler if [[ "$with_asio" = "yes" ] || [ "$enable_cxx" = "yes" ]] ; then AC_PROG_CXX fi AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AC_PROG_INSTALL AC_PROG_LN_S AC_PATH_PROG(AR, ar, no) if [[ $AR = "no" ]] ; then AC_MSG_ERROR("Could not find ar - needed to create a library") fi dnl This must be one of the first tests we do or it will fail... AC_C_BIGENDIAN dnl checks for various host APIs and arguments to configure that dnl turn them on or off have_alsa=no if test "x$with_alsa" != "xno"; then AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes, have_alsa=no) fi have_asihpi=no if test "x$with_asihpi" != "xno"; then AC_CHECK_LIB(hpi, HPI_SubSysCreate, have_asihpi=yes, have_asihpi=no, -lm) fi have_libossaudio=no have_oss=no if test "x$with_oss" != "xno"; then AC_CHECK_HEADERS([sys/soundcard.h linux/soundcard.h machine/soundcard.h], [have_oss=yes]) if test "x$have_oss" = "xyes"; then AC_CHECK_LIB(ossaudio, _oss_ioctl, have_libossaudio=yes, have_libossaudio=no) fi fi have_jack=no if test "x$with_jack" != "xno"; then PKG_CHECK_MODULES(JACK, jack, have_jack=yes, have_jack=no) fi dnl sizeof checks: we will need a 16-bit and a 32-bit type AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) save_LIBS="${LIBS}" AC_CHECK_LIB(rt, clock_gettime, [rt_libs=" -lrt"]) LIBS="${LIBS}${rt_libs}" DLL_LIBS="${DLL_LIBS}${rt_libs}" AC_CHECK_FUNCS([clock_gettime nanosleep]) LIBS="${save_LIBS}" dnl LT_RELEASE=19 LT_CURRENT=2 LT_REVISION=0 LT_AGE=0 AC_SUBST(LT_CURRENT) AC_SUBST(LT_REVISION) AC_SUBST(LT_AGE) dnl extra variables AC_SUBST(OTHER_OBJS) AC_SUBST(PADLL) AC_SUBST(SHARED_FLAGS) AC_SUBST(THREAD_CFLAGS) AC_SUBST(DLL_LIBS) AC_SUBST(CXXFLAGS) AC_SUBST(NASM) AC_SUBST(NASMOPT) AC_SUBST(INCLUDES) dnl -g is optional on darwin if ( echo "${host_os}" | grep ^darwin >> /dev/null ) && [[ "$enable_mac_universal" = "yes" ] && [ "$enable_mac_debug" != "yes" ]] ; then CFLAGS="-O2 -Wall -pedantic -pipe -fPIC -DNDEBUG" else CFLAGS=${CFLAGS:-"-g -O2 -Wall -pedantic -pipe -fPIC"} fi if [[ $ac_cv_c_bigendian = "yes" ]] ; then CFLAGS="$CFLAGS -DPA_BIG_ENDIAN" else CFLAGS="$CFLAGS -DPA_LITTLE_ENDIAN" fi add_objects() { for o in $@; do test "${OTHER_OBJS#*${o}*}" = "${OTHER_OBJS}" && OTHER_OBJS="$OTHER_OBJS $o" done } INCLUDES=portaudio.h dnl Include directories needed by all implementations CFLAGS="$CFLAGS -I\$(top_srcdir)/include -I\$(top_srcdir)/src/common" case "${host_os}" in darwin* ) dnl Mac OS X configuration AC_DEFINE(PA_USE_COREAUDIO,1) CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix -Werror" LIBS="-framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon" if test "x$enable_mac_universal" = "xyes" ; then if [[ -d /Developer/SDKs/MacOSX10.5.sdk ]] ; then mac_version_min="-mmacosx-version-min=10.3" mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk" elif [[ -d /Developer/SDKs/MacOSX10.6.sdk ]] ; then mac_version_min="-mmacosx-version-min=10.4" mac_arches="-arch i386 -arch x86_64" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.6.sdk" elif [[ -d /Developer/SDKs/MacOSX10.7.sdk ]] ; then mac_version_min="-mmacosx-version-min=10.4" mac_arches="-arch i386 -arch x86_64" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.7.sdk" else mac_version_min="-mmacosx-version-min=10.3" mac_arches="-arch i386 -arch ppc" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" fi else mac_arches="" mac_sysroot="" mac_version="" fi SHARED_FLAGS="$LIBS -dynamiclib $mac_arches $mac_sysroot $mac_version_min" CFLAGS="-std=c99 $CFLAGS $mac_arches $mac_sysroot $mac_version_min" OTHER_OBJS="src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o src/hostapi/coreaudio/pa_mac_core.o src/hostapi/coreaudio/pa_mac_core_utilities.o src/hostapi/coreaudio/pa_mac_core_blocking.o src/common/pa_ringbuffer.o" PADLL="libportaudio.dylib" ;; mingw* ) dnl MingW configuration PADLL="portaudio.dll" THREAD_CFLAGS="-mthreads" SHARED_FLAGS="-shared" CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/win -DPA_USE_WMME=0 -DPA_USE_ASIO=0 -DPA_USE_WDMKS=0 -DPA_USE_DS=0 -DPA_USE_WASAPI=0" if [[ "x$with_directx" = "xyes" ]]; then DXDIR="$with_dxdir" add_objects src/hostapi/dsound/pa_win_ds.o src/hostapi/dsound/pa_win_ds_dynlink.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o LIBS="-lwinmm -lm -ldsound -lole32" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -ldsound -lole32" #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" CFLAGS="$CFLAGS -I$DXDIR/include -UPA_USE_DS -DPA_USE_DS=1" fi if [[ "x$with_asio" = "xyes" ]]; then ASIODIR="$with_asiodir" add_objects src/hostapi/asio/pa_asio.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/common/asio.o $ASIODIR/host/asiodrivers.o $ASIODIR/host/pc/asiolist.o LIBS="-lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -lole32 -luuid" CFLAGS="$CFLAGS -ffast-math -fomit-frame-pointer -I\$(top_srcdir)/src/hostapi/asio -I$ASIODIR/host/pc -I$ASIODIR/common -I$ASIODIR/host -UPA_USE_ASIO -DPA_USE_ASIO=1 -DWINDOWS" dnl Setting the windows version flags below resolves a conflict between Interlocked* dnl definitions in mingw winbase.h and Interlocked* hacks in ASIO SDK combase.h dnl combase.h is included by asiodrvr.h dnl PortAudio does not actually require Win XP (winver 501) APIs CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0501 -DWINVER=0x0501" CXXFLAGS="$CFLAGS" fi if [[ "x$with_wdmks" = "xyes" ]]; then DXDIR="$with_dxdir" add_objects src/hostapi/wdmks/pa_win_wdmks.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o LIBS="-lwinmm -lm -luuid -lsetupapi -lole32" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -luuid -lsetupapi -lole32" #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" CFLAGS="$CFLAGS -I$DXDIR/include -UPA_USE_WDMKS -DPA_USE_WDMKS=1" fi if [[ "x$with_wmme" = "xyes" ]]; then add_objects src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o LIBS="-lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm" CFLAGS="$CFLAGS -UPA_USE_WMME -DPA_USE_WMME=1" fi if [[ "x$with_wasapi" = "xyes" ]]; then add_objects src/hostapi/wasapi/pa_win_wasapi.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o LIBS="-lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm -lole32" CFLAGS="$CFLAGS -I\$(top_srcdir)/src/hostapi/wasapi/mingw-include -UPA_USE_WASAPI -DPA_USE_WASAPI=1" fi ;; cygwin* ) dnl Cygwin configuration OTHER_OBJS="src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o" CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/win -DPA_USE_DS=0 -DPA_USE_WDMKS=0 -DPA_USE_ASIO=0 -DPA_USE_WASAPI=0 -DPA_USE_WMME=1" LIBS="-lwinmm -lm" PADLL="portaudio.dll" THREAD_CFLAGS="-mthreads" SHARED_FLAGS="-shared" DLL_LIBS="${DLL_LIBS} -lwinmm" ;; irix* ) dnl SGI IRIX audio library (AL) configuration (Pieter, oct 2-13, 2003). dnl The 'dmedia' library is needed to read the Unadjusted System Time (UST). dnl AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR([IRIX posix thread library not found!])) AC_CHECK_LIB(audio, alOpenPort, , AC_MSG_ERROR([IRIX audio library not found!])) AC_CHECK_LIB(dmedia, dmGetUST, , AC_MSG_ERROR([IRIX digital media library not found!])) dnl See the '#ifdef PA_USE_SGI' in file pa_unix/pa_unix_hostapis.c dnl which selects the appropriate PaXXX_Initialize() function. dnl AC_DEFINE(PA_USE_SGI,1) CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix" dnl The _REENTRANT option for pthread safety. Perhaps not necessary but it 'll do no harm. dnl THREAD_CFLAGS="-D_REENTRANT" OTHER_OBJS="pa_sgi/pa_sgi.o src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o" dnl SGI books say -lpthread should be the last of the libs mentioned. dnl LIBS="-lm -ldmedia -laudio -lpthread" PADLL="libportaudio.so" SHARED_FLAGS="" ;; *) dnl Unix configuration CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix" AC_CHECK_LIB(pthread, pthread_create,[have_pthread="yes"], AC_MSG_ERROR([libpthread not found!])) if [[ "$have_alsa" = "yes" ] && [ "$with_alsa" != "no" ]] ; then DLL_LIBS="$DLL_LIBS -lasound" LIBS="$LIBS -lasound" OTHER_OBJS="$OTHER_OBJS src/hostapi/alsa/pa_linux_alsa.o" INCLUDES="$INCLUDES pa_linux_alsa.h" AC_DEFINE(PA_USE_ALSA,1) fi if [[ "$have_jack" = "yes" ] && [ "$with_jack" != "no" ]] ; then DLL_LIBS="$DLL_LIBS $JACK_LIBS" CFLAGS="$CFLAGS $JACK_CFLAGS" OTHER_OBJS="$OTHER_OBJS src/hostapi/jack/pa_jack.o src/common/pa_ringbuffer.o" INCLUDES="$INCLUDES pa_jack.h" AC_DEFINE(PA_USE_JACK,1) fi if [[ "$with_oss" != "no" ]] ; then OTHER_OBJS="$OTHER_OBJS src/hostapi/oss/pa_unix_oss.o" if [[ "$have_libossaudio" = "yes" ]] ; then DLL_LIBS="$DLL_LIBS -lossaudio" LIBS="$LIBS -lossaudio" fi AC_DEFINE(PA_USE_OSS,1) fi if [[ "$have_asihpi" = "yes" ] && [ "$with_asihpi" != "no" ]] ; then LIBS="$LIBS -lhpi" DLL_LIBS="$DLL_LIBS -lhpi" OTHER_OBJS="$OTHER_OBJS src/hostapi/asihpi/pa_linux_asihpi.o" AC_DEFINE(PA_USE_ASIHPI,1) fi DLL_LIBS="$DLL_LIBS -lm -lpthread" LIBS="$LIBS -lm -lpthread" PADLL="libportaudio.so" ## support sun cc compiler flags case "${host_os}" in solaris*) SHARED_FLAGS="-G" THREAD_CFLAGS="-mt" ;; *) SHARED_FLAGS="-fPIC" THREAD_CFLAGS="-pthread" ;; esac OTHER_OBJS="$OTHER_OBJS src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o" esac CFLAGS="$CFLAGS $THREAD_CFLAGS" test "$enable_shared" != "yes" && SHARED_FLAGS="" if test "$enable_cxx" = "yes"; then AC_CONFIG_SUBDIRS([bindings/cpp]) ENABLE_CXX_TRUE="" ENABLE_CXX_FALSE="#" else ENABLE_CXX_TRUE="#" ENABLE_CXX_FALSE="" fi AC_SUBST(ENABLE_CXX_TRUE) AC_SUBST(ENABLE_CXX_FALSE) if test "x$with_asio" = "xyes"; then WITH_ASIO_TRUE="" WITH_ASIO_FALSE="@ #" else WITH_ASIO_TRUE="@ #" WITH_ASIO_FALSE="" fi AC_SUBST(WITH_ASIO_TRUE) AC_SUBST(WITH_ASIO_FALSE) AC_OUTPUT([Makefile portaudio-2.0.pc]) AC_MSG_RESULT([ Configuration summary: Target ...................... $target C++ bindings ................ $enable_cxx Debug output ................ $debug_output]) case "$target_os" in *linux*) AC_MSG_RESULT([ ALSA ........................ $have_alsa ASIHPI ...................... $have_asihpi]) ;; esac case "$target_os" in *mingw* | *cygwin*) test "x$with_directx" = "xyes" && with_directx="$with_directx (${with_dxdir})" test "x$with_wdmks" = "xyes" && with_wdmks="$with_wdmks (${with_dxdir})" test "x$with_asio" = "xyes" && with_asio="$with_asio (${with_asiodir})" test "x$with_wasapi" = "xyes" AC_MSG_RESULT([ WMME ........................ $with_wmme DSound ...................... $with_directx ASIO ........................ $with_asio WASAPI ...................... $with_wasapi WDMKS ....................... $with_wdmks ]) ;; *darwin*) AC_MSG_RESULT([ Mac debug flags ............. $enable_mac_debug ]) ;; *) AC_MSG_RESULT([ OSS ......................... $have_oss JACK ........................ $have_jack ]) ;; esac