# Filename: configure.in

AC_INIT(src/drumgizmo.cc)
AM_INIT_AUTOMAKE( drumgizmo, 0.1.0 )

AC_PROG_CXX

AC_PROG_LIBTOOL
AM_PROG_LIBTOOL

AM_CONFIG_HEADER(config.h)
AC_STDC_HEADERS

dnl ======================
dnl Init pkg-config
dnl ======================
PKG_PROG_PKG_CONFIG(0.23)

AC_ARG_WITH(debug,  [  --with-debug            Build with debug support])
if test x$with_debug == xyes; then
    AC_MSG_WARN([*** Building with debug support!])
    CXXFLAGS="$CXXFLAGS -Wall -Werror -g"
fi 

dnl ======================
dnl Compile LV2 plugin
dnl ======================
AC_ARG_ENABLE([lv2],
[  --with-lv2   Compile the LV2 plugin [default=yes]],,
        [with_lv2="yes"])
if test "x$with_lv2" = "xyes"; then
	 with_lv2=yes 
   dnl ======================
   dnl Check for lv2core
   dnl ======================
   PKG_CHECK_MODULES(LV2, lv2core >= 4.1)
else
	 AC_MSG_RESULT([*** LV2 plugin will not be compiled ***])
   with_lv2=no
fi
AM_CONDITIONAL([WITH_LV2], [test "x$with_lv2" = "xyes"])

dnl ***
dnl *** Input plugins
dnl ***

dnl *** Dummy
AC_ARG_ENABLE([input_dummy],
[  --disable-input-dummy   Disable input dummy plugin [default=enabled]],,
        [enable_input_dummy="yes"])
if test "x$enable_input_dummy" = "xyes"; then
	 have_input_dummy=yes 
else
	 AC_MSG_RESULT([*** input dummy plugin disabled per user request ***])
   have_input_dummy=no
fi
AM_CONDITIONAL([HAVE_INPUT_DUMMY], [test "x$have_input_dummy" = "xyes"])

dnl *** Test
AC_ARG_ENABLE([input_test],
[  --disable-input-test   Disable input test plugin [default=enabled]],,
        [enable_input_test="yes"])
if test "x$enable_input_test" = "xyes"; then
	 have_input_test=yes 
else
	 AC_MSG_RESULT([*** input test plugin disabled per user request ***])
   have_input_test=no
fi
AM_CONDITIONAL([HAVE_INPUT_TEST], [test "x$have_input_test" = "xyes"])

dnl *** Jackmidi
AC_ARG_ENABLE([input_jackmidi],
[  --disable-input-jackmidi   Disable input jackmidi plugin [default=enabled]],,
        [enable_input_jackmidi="yes"])
if test "x$enable_input_jackmidi" = "xyes"; then
	 have_input_jackmidi=yes 
else
	 AC_MSG_RESULT([*** input jackmidi plugin disabled per user request ***])
   have_input_jackmidi=no
fi
AM_CONDITIONAL([HAVE_INPUT_JACKMIDI], [test "x$have_input_jackmidi" = "xyes"])

dnl *** Midifile
AC_ARG_ENABLE([input_midifile],
[  --disable-input-midifile   Disable input midifile plugin [default=enabled]],,
        [enable_input_midifile="yes"])
if test "x$enable_input_midifile" = "xyes"; then
	 have_input_midifile=yes 
else
	 AC_MSG_RESULT([*** input midifile plugin disabled per user request ***])
   have_input_midifile=no
fi
AM_CONDITIONAL([HAVE_INPUT_MIDIFILE], [test "x$have_input_midifile" = "xyes"])


INPUT_PLUGINS="midifile jackmidi dummy test"
AC_SUBST(INPUT_PLUGINS)


dnl ***
dnl *** Output plugins
dnl ***

dnl *** dummy
AC_ARG_ENABLE([output_dummy],
[  --disable-output-dummy   Disable output dummy plugin [default=enabled]],,
        [enable_output_dummy="yes"])
if test "x$enable_output_dummy" = "xyes"; then
	 have_output_dummy=yes 
else
	 AC_MSG_RESULT([*** output dummy plugin disabled per user request ***])
   have_output_dummy=no
fi
AM_CONDITIONAL([HAVE_OUTPUT_DUMMY], [test "x$have_output_dummy" = "xyes"])

dnl *** alsa
AC_ARG_ENABLE([output_alsa],
[  --disable-output-alsa   Disable output alsa plugin [default=enabled]],,
        [enable_output_alsa="yes"])
if test "x$enable_output_alsa" = "xyes"; then
	 have_output_alsa=yes 
else
	 AC_MSG_RESULT([*** output alsa plugin disabled per user request ***])
   have_output_alsa=no
fi
AM_CONDITIONAL([HAVE_OUTPUT_ALSA], [test "x$have_output_alsa" = "xyes"])

dnl *** wavfile
AC_ARG_ENABLE([output_wavfile],
[  --disable-output-wavfile   Disable output wavfile plugin [default=enabled]],,
        [enable_output_wavfile="yes"])
if test "x$enable_output_wavfile" = "xyes"; then
	 have_output_wavfile=yes 
else
	 AC_MSG_RESULT([*** output wavfile plugin disabled per user request ***])
   have_output_wavfile=no
fi
AM_CONDITIONAL([HAVE_OUTPUT_WAVFILE], [test "x$have_output_wavfile" = "xyes"])

OUTPUT_PLUGINS="dummy alsa wavfile"
AC_SUBST(OUTPUT_PLUGINS)

dnl
dnl Setup plugin paths
dnl
plugindir=${libdir}/drumgizmo
AC_SUBST([plugindir])

INPUT_PLUGIN_DIR=${plugindir}/input
OUTPUT_PLUGIN_DIR=${plugindir}/output
LV2_PLUGIN_DIR=${plugindir}/lv2
AC_SUBST([INPUT_PLUGIN_DIR])
AC_SUBST([OUTPUT_PLUGIN_DIR])
AC_SUBST([LV2_PLUGIN_DIR])

AC_DEFINE_UNQUOTED(INPUT_PLUGIN_DIR, "${prefix}/lib/drumgizmo/input",
  [Input plugin dir])
AC_DEFINE_UNQUOTED(OUTPUT_PLUGIN_DIR, "${prefix}/lib/drumgizmo/output",
  [Output plugin dir])
AC_DEFINE_UNQUOTED(LV2_PLUGIN_DIR, "${prefix}/lib/drumgizmo/lv2",
  [LV2 plugin dir])

dnl ======================
dnl Check for libsmf
dnl ======================
PKG_CHECK_MODULES(SMF, smf >= 1.2)

dnl ======================
dnl Check for jack
dnl ======================
PKG_CHECK_MODULES(JACK, jack >= 0.120.1)

dnl ======================
dnl Check for alsa library
dnl ======================
PKG_CHECK_MODULES(ALSA, alsa >= 1.0.18)

dnl ======================
dnl Check for sndfile
dnl ======================
PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.21)

dnl ======================
dnl Check for the pthread library
dnl ======================
tmp_CXXFLAGS="$CXXFLAGS"
tmp_CPPFLAGS="$CPPFLAGS"
tmp_CFLAGS="$CFLAGS"
tmp_LDFLAGS="$LDFLAGS"
tmp_LIBS="$LIBS"
CXXFLAGS=""
CPPFLAGS=""
CFLAGS=""
LDFLAGS=""
LIBS=""
AC_CHECK_HEADER(pthread.h, , AC_MSG_ERROR([*** pthread header file not found!]))
AC_CHECK_LIB(pthread,  pthread_mutex_init, , AC_MSG_ERROR([*** pthread library not found!]))
PTHREAD_CFLAGS="$CXXFLAGS $CPPFLAGS $CFLAGS"
PTHREAD_LIBS="$LDFLAGS $LIBS"
CXXFLAGS="$tmp_CXXFLAGS"
CPPFLAGS="$tmp_CPPFLAGS"
CFLAGS="$tmp_CFLAGS"
LDFLAGS="$tmp_LDFLAGS"
LIBS="$tmp_LIBS"
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_LIBS)

dnl ======================
dnl Check for eXpat library
dnl ======================
tmp_CXXFLAGS="$CXXFLAGS"
tmp_CPPFLAGS="$CPPFLAGS"
tmp_CFLAGS="$CFLAGS"
tmp_LDFLAGS="$LDFLAGS"
tmp_LIBS="$LIBS"
CXXFLAGS=""
CPPFLAGS=""
CFLAGS=""
LDFLAGS=""
LIBS=""
AC_CHECK_HEADER(expat.h, , AC_MSG_ERROR([*** eXpat header file not found!]))
AC_CHECK_LIB(expat, XML_ParserCreate, , AC_MSG_ERROR([*** eXpat library not found!]))
EXPAT_CFLAGS="$CXXFLAGS $CPPFLAGS $CFLAGS"
EXPAT_LIBS="$LDFLAGS $LIBS"
CXXFLAGS="$tmp_CXXFLAGS"
CPPFLAGS="$tmp_CPPFLAGS"
CFLAGS="$tmp_CFLAGS"
LDFLAGS="$tmp_LDFLAGS"
LIBS="$tmp_LIBS"
AC_SUBST(EXPAT_CFLAGS)
AC_SUBST(EXPAT_LIBS)

dnl ======================
dnl Check for Qt
dnl ======================
PKG_CHECK_MODULES(QT, QtCore QtGui QtXml >= 4.5)
AC_CHECK_PROGS(QT_MOC, [moc4 moc-qt4 moc], [])
AC_CHECK_PROGS(QT_RCC, [rcc4 rcc-qt4 rcc], [])
AC_CHECK_PROGS(QT_UIC, [uic4 uic-qt4 uic], [])
if (test "$QT_MOC" = ""); then
  AC_MSG_ERROR([QT4 moc is required.])
fi
if (test "$QT_RCC" = ""); then
  AC_MSG_ERROR([QT4 rcc is required.])
fi
if (test "$QT_UIC" = ""); then
  AC_MSG_ERROR([QT4 uic is required.])
fi

dnl ======================
dnl Check for getopt
dnl ======================
AC_HAVE_HEADERS(getopt.h)

AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(CXXFLAGS)
AC_SUBST(LDFLAGS)

AC_OUTPUT(
	Makefile
	src/Makefile
	lv2/Makefile
	drumgizmo/Makefile
	drumgizmo/input/Makefile
	drumgizmo/input/dummy/Makefile
	drumgizmo/input/test/Makefile
	drumgizmo/input/jackmidi/Makefile
	drumgizmo/input/midifile/Makefile
	drumgizmo/output/Makefile
	drumgizmo/output/dummy/Makefile
	drumgizmo/output/alsa/Makefile
	drumgizmo/output/wavfile/Makefile
  dgedit/Makefile)