dnl Process this file with autoconf to produce a configure script.
AC_INIT(d_arithmetic.c)

AC_SUBST(alsa, yes)
AC_SUBST(jack, no)
AC_SUBST(portaudio, no)
AC_SUBST(portmidi, no)
AC_SUBST(binarymode, -m755)
AC_SUBST(fftw, no)
AC_SUBST(PDLIB)
AC_SUBST(CPPFLAGS)
AC_SUBST(MORECFLAGS)
AC_SUBST(EXT)
AC_SUBST(USE_DEBUG_CFLAGS, no)
AC_SUBST(SYSSRC)
AC_SUBST(TCLTK_FRAMEWORKS_PATH)
AC_SUBST(TCLTK_FRAMEWORKS_PATH)
AC_SUBST(STRIPFLAG)
AC_SUBST(GUINAME)
AC_SUBST(GUIFLAGS)
AC_SUBST(OSNUMBER)
AC_SUBST(EXTERNTARGET)

dnl other defaults

dnl check for features

AC_ARG_ENABLE(alsa,     [  --enable-alsa           alsa audio driver], 
    alsa=$enableval)
AC_ARG_ENABLE(jack,     [  --enable-jack           jack audio server],
    jack=$enableval)
AC_ARG_ENABLE(portaudio,[  --enable-portaudio      portaudio],
    portaudio=$enableval)
AC_ARG_ENABLE(portmidi, [  --enable-portmidi       portmidi],
    portmidi=$enableval)
AC_ARG_ENABLE(debug,    [  --enable-debug          debugging support],
    USE_DEBUG_CFLAGS=$enableval)
AC_ARG_ENABLE(static,   [  --enable-static         link statically],
    static=$enableval)
AC_ARG_ENABLE(setuid,   [  --enable-setuid         install as setuid (linux)],
    setuid=$enableval)
AC_ARG_ENABLE(fftw,   [  --enable-fftw           use FFTW package],
    fftw=$enableval)

dnl Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_CPP

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

dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/ioctl.h sys/time.h unistd.h bstring.h)

dnl Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(gettimeofday select socket strerror)
AC_FUNC_ALLOCA

dnl Checks for libraries.
dnl Checking for `dlopen' function in -ldl:
AC_CHECK_LIB(dl, dlopen,PDLIB="$PDLIB -ldl",
                 echo "dynamic link support required" || exit 1)

dnl Checking for `sin' function in -lffm:
dnl ffm is the fast math library on the alpha
AC_CHECK_LIB(ffm, sin,PDLIB="$PDLIB -lffm")

dnl Checking for `sin' function in -lm:
AC_CHECK_LIB(m, sin,PDLIB="$PDLIB -lm",
	         echo "math library required" || exit 1)

dnl Checking for `pthread_create' function in -pthread
AC_CHECK_LIB(pthread, pthread_create,PDLIB="$PDLIB -lpthread",
         echo "pthreads required" || exit 1)

dnl Check for fftw package
if test x$fftw == "xyes";
then
AC_CHECK_LIB(fftw, fftw_one,PDLIB="$PDLIB -lfftw",
    echo "fftw package not found - using built-in FFT"; fftw=no)
fi

dnl look for tcl 8.x... do I really have to go through all this!?

foundit=no
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl.h,foundit=yes,)
fi
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl8.7/tcl.h,
    	GUIFLAGS="$GUIFLAGS -I/usr/include/tcl8.7";foundit=yes,)
fi
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl8.6/tcl.h,
    	GUIFLAGS="$GUIFLAGS -I/usr/include/tcl8.6";foundit=yes,)
fi
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl8.5/tcl.h,
    	GUIFLAGS="$GUIFLAGS -I/usr/include/tcl8.5";foundit=yes,)
fi
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl8.4/tcl.h,
    	GUIFLAGS="$GUIFLAGS -I/usr/include/tcl8.4";foundit=yes,)
fi
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl8.3/tcl.h,
    	GUIFLAGS="$GUIFLAGS -I/usr/include/tcl8.3";foundit=yes,)
fi
if test $foundit == "no";
then
    AC_CHECK_HEADER(tcl8.2/tcl.h,
    	GUIFLAGS="$GUIFLAGS -I/usr/include/tcl8.2";foundit=yes,)
fi
if test $foundit == "no";
then
    echo no tcl header found
    exit -1
fi

AC_CHECK_LIB(tcl8.7, main,,
    AC_CHECK_LIB(tcl8.6, main,,
	AC_CHECK_LIB(tcl8.5, main,,
	    AC_CHECK_LIB(tcl8.4, main,,
		AC_CHECK_LIB(tcl8.3, main,,
		    AC_CHECK_LIB(tcl8.2, main,,
        		AC_CHECK_LIB(tcl8.0, main,,echo no tcl library found || exit 1)))))))

AC_CHECK_LIB(tk8.7, main,,
    AC_CHECK_LIB(tk8.6, main,,
	AC_CHECK_LIB(tk8.5, main,,
	    AC_CHECK_LIB(tk8.4, main,,
		AC_CHECK_LIB(tk8.3, main,,
		    AC_CHECK_LIB(tk8.2, main,,
        		AC_CHECK_LIB(tk8.0, main,,echo no tk library found || exit 1)))))))


if test `uname -s` = Linux;
then
    dnl Ckecking for ALSA
    echo .................... alsa= $alsa
dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
    if test x$alsa == xyes; then
	AC_CHECK_LIB(asound,snd_pcm_info,PDLIB="$PDLIB -lasound" ; alsa="yes",alsa="no")
    fi

    dnl Checking for JACK

    if test x$jack == xyes; then
        AC_CHECK_LIB(rt,shm_open,LIBS="$LIBS -lrt")
        AC_CHECK_LIB(jack,jack_set_xrun_callback,LIBS="$LIBS -ljack";jack=xrun,jack=no)
        AC_CHECK_LIB(jack,jack_set_error_function,LIBS="$LIBS -ljack";jack=yes,jack=no)
    fi

    LDFLAGS="-Wl,-export-dynamic"
    if test "$static" = "yes"; then 
      LDFLAGS="$LDFLAGS -static"
    fi 
    EXT=pd_linux
    CPPFLAGS="-DDL_OPEN -DPA_USE_OSS -DUNIX -DUNISTD\
    	-DUSEAPI_OSS \
        -I../portaudio/pa_common -I../portaudio/pablio \
        -I../portmidi/pm_common \
        -I../portmidi/pm_linux \
	-fno-strict-aliasing"
    SYSSRC="s_midi_oss.c s_audio_oss.c"
    if test x$alsa == "xyes";
    then
    	SYSSRC=$SYSSRC" s_audio_alsa.c s_audio_alsamm.c s_midi_alsa.c"
	CPPFLAGS=$CPPFLAGS" -DPA_USE_ALSA -DUSEAPI_ALSA"
	LDFLAGS=$LDFLAGS" -lasound"
    fi


    if test x$portaudio == "xyes";


    then
    	CPPFLAGS=$CPPFLAGS" -DUSEAPI_PORTAUDIO -DPA19"
	SYSSRC="s_audio_pa.c \
    	s_audio_pablio.c     \
	s_audio_paring.c     \
	../portaudio/pa_common/pa_allocation.c  \
	../portaudio/pa_common/pa_converters.c  \
	../portaudio/pa_common/pa_cpuload.c     \
	../portaudio/pa_common/pa_dither.c      \
	../portaudio/pa_common/pa_front.c       \
	../portaudio/pa_common/pa_process.c     \
	../portaudio/pa_common/pa_skeleton.c    \
	../portaudio/pa_common/pa_stream.c      \
	../portaudio/pa_common/pa_trace.c       \
	../portaudio/pa_unix/pa_unix_hostapis.c \
	../portaudio/pa_unix/pa_unix_util.c     \
	../portaudio/pa_unix_oss/pa_unix_oss.c "$SYSSRC
	if test x$alsa == "xyes";
	then
	    SYSSRC=$SYSSRC" ../portaudio/pa_linux_alsa/pa_linux_alsa.c"
	    CPPFLAGS=$CPPFLAGS" -Wno-error"
    	fi
    fi
    if test x$setuid == "xyes";
    then
    	binarymode="-m4755"
    fi
    STRIPFLAG=-s
    GUINAME="pd-gui"
    if test x$USE_DEBUG_CFLAGS == "xyes";
    then
	MORECFLAGS=$MORECFLAGS" -g"
    else
	MORECFLAGS=$MORECFLAGS" -O6 -funroll-loops -fomit-frame-pointer"
    fi
    if test x$jack == "xyes";
    then
        LDFLAGS=$LDFLAGS" -lrt -ljack"
    fi
    if test x$jack == "xrun";
    then
        LDFLAGS=$LDFLAGS" -lrt -ljack"
    fi

    echo MORECFLAGS --------------- $MORECFLAGS
    OSNUMBER=0

fi

if test `uname -s` = Darwin;
then
    LDFLAGS="-Wl -framework CoreAudio \
        -framework AudioUnit -framework AudioToolbox \
        -framework Carbon -framework CoreMIDI"
    EXT=pd_darwin
    CPPFLAGS="-DDL_OPEN -DMACOSX -DUNISTD -I/usr/X11R6/include \
	-I../portaudio/pa_common -I../portaudio/pablio \
	-I../portmidi/pm_common -I../portmidi/pm_mac \
	-I../portmidi/porttime \
	-DUSEAPI_PORTAUDIO -DPA19 -DPA_USE_COREAUDIO"
    if test `uname -r` = 7.9.0;
    then
        MORECFLAGS="-DMACOSX3 -DPA_BIG_ENDIAN -Wno-error"
    	EXTERNTARGET=d_ppc
    else
        MORECFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
            -arch i386 -arch ppc -Wno-error"
    	EXTERNTARGET=d_fat
        LDFLAGS=$LDFLAGS" -arch i386 -arch ppc"
    fi
    SYSSRC="s_midi_pm.c s_audio_pa.c \
    	s_audio_pablio.c     \
	s_audio_paring.c     \
	../portaudio/pa_common/pa_allocation.c  \
	../portaudio/pa_common/pa_converters.c  \
	../portaudio/pa_common/pa_cpuload.c     \
	../portaudio/pa_common/pa_dither.c      \
	../portaudio/pa_common/pa_front.c       \
	../portaudio/pa_common/pa_process.c     \
	../portaudio/pa_common/pa_skeleton.c    \
	../portaudio/pa_common/pa_stream.c      \
	../portaudio/pa_common/pa_trace.c       \
	../portaudio/pa_unix/pa_unix_util.c     \
	../portaudio/pa_mac_core/pa_mac_core.c  \
	../portaudio/pa_mac/pa_mac_hostapis.c   \
        ../portmidi/pm_mac/pmmac.c \
        ../portmidi/pm_mac/pmmacosxcm.c \
        ../portmidi/pm_common/pmutil.c \
        ../portmidi/pm_common/portmidi.c \
        ../portmidi/porttime/ptmacosx_cf.c "
    STRIPFLAG=""
    GUINAME="libPdTcl.dylib"

# find the Tcl/Tk Frameworks
 	 if test -d "../../Frameworks";
    then
        # Miller's location
        TCLTK_FRAMEWORKS_PATH="../../Frameworks"
 	 elif test -d "/Library/Frameworks";
	 then
        # get it from the default install location
        TCLTK_FRAMEWORKS_PATH="/Library/Frameworks"
    else
        # Panther has Tcl here; Tiger has Tcl and Tk here
        TCLTK_FRAMEWORKS_PATH="/System/Library/Frameworks"
    fi		 
    GUIFLAGS="-F$TCLTK_FRAMEWORKS_PATH -framework Tcl -framework Tk \
        -I$TCLTK_FRAMEWORKS_PATH/Tk.framework/Versions/Current/Headers \
        -I$TCLTK_FRAMEWORKS_PATH/Tcl.framework/Versions/Current/Headers \
        -I$TCLTK_FRAMEWORKS_PATH/Tcl.framework/Versions/8.4/PrivateHeaders"
    if test x$USE_DEBUG_CFLAGS == "xyes";
    then
	MORECFLAGS=$MORECFLAGS" -g"
    else
	MORECFLAGS=$MORECFLAGS" -O2"
    fi
    OSNUMBER=2
    if test x$jack == "xyes";
    then
    	LDFLAGS=$LDFLAGS" -weak_framework Jack"
    fi
    if test x$jack == "xrun";
    then
        LDFLAGS=$LDFLAGS" -weak_framework Jack"
    fi
fi

# support for jack, on either linux or darwin:

if test x$jack == "xyes";
then
    MORECFLAGS=$MORECFLAGS" -DUSEAPI_JACK"
    SYSSRC=$SYSSRC" s_audio_jack.c"
fi
if test x$jack == "xrun";
then
    MORECFLAGS=$MORECFLAGS" -DUSEAPI_JACK -DJACK_XRUN"
    SYSSRC=$SYSSRC" s_audio_jack.c"
fi

if test x$fftw == "xyes";
then
    SYSSRC=$SYSSRC" d_fft_fftw.c d_fftroutine.c"
    LDFLAGS=$LDFLAGS" -lfftw"
else
    SYSSRC=$SYSSRC" d_fft_mayer.c d_fftroutine.c"
fi

# extra flags for alpha machines
if test `uname -m | awk '{print $1}'` = alpha;
then
    MORECFLAGS=$MORECFLAGS" -mieee -mcpu=ev56"
fi

# test for compaq compiler---not sure what this does or how to test it.
if test x$CC == xccc;
then
    MORECFLAGS=$MORECFLAGS"  -g3 -D__COMPAQC__ -arch host"
fi

## JMZ{
##  this does not do very much, but i guess it is a good idea to use it...
AC_SYS_LARGEFILE
## test, whether we can use _LARGEFILE64_SOURCE to 
## enable large-file reading via "open64" (and lseek64");
if test "x$enable_largefile" != "xno"; then
## the following should run on autoconf>2.54 (which pd is not using)
dnl  AC_LINK_IFELSE ( [AC_LANG_PROGRAM([[
dnl                          #define _LARGEFILE64_SOURCE
dnl                          #include <sys/types.h>
dnl                          #include <sys/stat.h>
dnl                          #include <fcntl.h>
dnl                      ]],[[ open64(0,0); ]])], 
dnl                   [ MORECFLAGS=$MORECFLAGS" -D_LARGEFILE64_SOURCE" ], )
## and this is for autoconf<2.50
AC_TRY_LINK( [
                                        #define _LARGEFILE64_SOURCE
                                        #include <sys/types.h>
                                        #include <sys/stat.h>
                                        #include <fcntl.h>
                                       ],[ open64(0,0); ],
                [ MORECFLAGS=$MORECFLAGS" -D_LARGEFILE64_SOURCE" ], )
fi
## }JMZ: end of large-file support section

AC_OUTPUT(makefile)