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

AC_SUBST(alsa, no)
AC_SUBST(jack, yes)
AC_SUBST(portaudio, no)
AC_SUBST(portmidi, no)
AC_SUBST(binarymode, -m755)
AC_SUBST(fftw, no)
AC_SUBST(tk, yes)
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)
AC_SUBST(ASIOSRC)
AC_SUBST(GUISRC)

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)
AC_ARG_ENABLE(fat,      [  --disable-fat           build fat binary on Mac OS X], 
    fat=$enableval, fat="yes")
AC_ARG_ENABLE(tk,       [  --disable-tk            build without tcl/tk-GUI],
    tk=$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",
    AC_CHECK_LIB(pthreadGC2, pthread_create, PDLIB="$PDLIB -lpthreadGC2",
        AC_CHECK_LIB(pthreadGC1, pthread_create, PDLIB="$PDLIB -lpthreadGC1",
            AC_CHECK_LIB(pthreadGC, pthread_create, PDLIB="$PDLIB -lpthreadGC",
         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.4/tcl.h,
        GUIFLAGS="$GUIFLAGS -I/usr/local/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
         echo bolding trying without...
#    exit -1
fi

AC_CHECK_LIB(tcl85, main,,
        AC_CHECK_LIB(tcl8.5, main,,
        AC_CHECK_LIB(tcl84, 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(tk85, main,,
        AC_CHECK_LIB(tk8.5, main,,
       AC_CHECK_LIB(tk84, 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 x$tk != "xno"; then
GUISRC="t_main.c t_tkcmd.c"
else
GUISRC=
fi

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 \
        -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 -DHAVE_SYS_SOUNDCARD_H \
        -Wno-error \
        -I../portaudio/include -I../portaudio/src/common \
        -I../portaudio/src/os/unix/ \
        -I../portmidi/pm_common \
        -I../portmidi/pm_linux"
        SYSSRC="s_audio_pa.c \
        s_audio_pablio.c     \
        s_audio_paring.c     \
        ../portaudio/src/common/pa_allocation.c  \
        ../portaudio/src/common/pa_converters.c  \
        ../portaudio/src/common/pa_cpuload.c     \
        ../portaudio/src/common/pa_dither.c      \
        ../portaudio/src/common/pa_front.c       \
        ../portaudio/src/common/pa_process.c     \
        ../portaudio/src/common/pa_skeleton.c    \
        ../portaudio/src/common/pa_stream.c      \
        ../portaudio/src/common/pa_trace.c       \
        ../portaudio/src/common/pa_debugprint.c  \
        ../portaudio/src/common/pa_ringbuffer.c  \
        ../portaudio/src/os/unix/pa_unix_hostapis.c \
        ../portaudio/src/os/unix/pa_unix_util.c     \
        ../portaudio/src/hostapi/oss/pa_unix_oss.c "$SYSSRC
        if test x$alsa = "xyes";
        then
            SYSSRC="../portaudio/src/hostapi/alsa/pa_linux_alsa.c "$SYSSRC
            CPPFLAGS=$CPPFLAGS" -DPA_USE_ALSA"
        fi
        if test x$jack = "xyes";
        then
            SYSSRC="../portaudio/src/hostapi/jack/pa_jack.c "$SYSSRC
            CPPFLAGS=$CPPFLAGS" -DPA_USE_JACK"
        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

    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../portmidi/pm_common -I../portmidi/pm_mac \
        -I../portmidi/porttime \
	-I../portaudio/include \
       -DNEWBUFFER"
    dnl for Mac OS X 10.3 (i.e. < 10.4)
    if test `uname -r` = 7.9.0;
    then
        fat="no"
    fi
    if test "x$fat" == "xyes";
    then
        MORECFLAGS="-arch i386 -Wno-error"
        EXTERNTARGET=d_fat
        LDFLAGS=$LDFLAGS" -arch i386"
    else
        MORECFLAGS="-DMACOSX3 -DPA_BIG_ENDIAN -Wno-error"
        EXTERNTARGET=d_ppc
    fi
    SYSSRC="s_midi_pm.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
# Panther has Tcl here; Tiger has Tcl and Tk here
    TCLTK_FRAMEWORKS_PATH="/System/Library/Frameworks"
               
    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 Jackmp"
    fi
    if test x$jack = "xrun";
    then
        LDFLAGS=$LDFLAGS" -weak_framework Jackmp"
    fi
fi

# only Windows uses ASIO, for the rest, set to blank
ASIOSRC=

if test `uname -s` = MINGW32_NT-5.0;
then
    EXT=dll
    MORECFLAGS="-DUSEAPI_PORTAUDIO -DPA19 -DMSW -DPA_NO_DS -DPD_INTERNAL \
        -I../portaudio/include -I../portaudio/src/common \
        -I../portaudio/src/os/win/ \
        -mwindows -mms-bitfields "$MORECFLAGS
    PDLIB=$PDLIB" -lwsock32 -lwinmm -lole32 -lstdc++"

    SYSSRC="s_audio_pa.c s_audio_pablio.c s_audio_paring.c \
        s_audio_mmio.c s_midi_mmio.c \
        ../portaudio/src/common/pa_allocation.c  \
        ../portaudio/src/common/pa_converters.c  \
        ../portaudio/src/common/pa_cpuload.c     \
        ../portaudio/src/common/pa_dither.c      \
        ../portaudio/src/common/pa_front.c       \
        ../portaudio/src/common/pa_process.c     \
        ../portaudio/src/common/pa_skeleton.c    \
        ../portaudio/src/common/pa_stream.c      \
        ../portaudio/src/common/pa_trace.c       \
        ../portaudio/src/common/pa_debugprint.c       \
        ../portaudio/src/common/pa_ringbuffer.c  \
        ../portaudio/src/os/win/pa_win_util.c       \
        ../portaudio/src/os/win/pa_win_hostapis.c   \
        ../portaudio/src/os/win/pa_x86_plain_converters.c   \
        ../portaudio/src/hostapi/wmme/pa_win_wmme.c"
         ASIOSRC="../portaudio/src/hostapi/asio/iasiothiscallresolver.cpp \
         ../portaudio/src/hostapi/pa_asio/asio.cpp ../asio/asio.cpp \
         ../asio/asiodrivers.cpp ../asio/asiolist.cpp"
    STRIPFLAG="--strip-unneeded"
    GUINAME="pdtcl.dll"
    GUIFLAGS=
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

## 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

if test -d ../obj
then echo -n
else mkdir ../obj
fi

if test -d ../bin
then echo -n
else mkdir ../bin
fi

AC_OUTPUT(makefile)

