#
# Use "autoreconf --force --install" to update depedent files after changing 
# this configure.ac or any of the Makefile.am files.
#

AC_COPYRIGHT([Copyright (C) 2019-2023 Kevin Larke])
AC_INIT([cwtest],[1.0],[cwtest@larke.org])
AC_CONFIG_SRCDIR([src/cwtest/main.cpp])
AC_CONFIG_AUX_DIR([build-aux])                    # put aux files in build-aux
AM_INIT_AUTOMAKE([1.9 -Wall foreign subdir-objects]) # subdir-objects needed for non-recursive make
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIRS([m4])

AM_PROG_AR

LT_INIT

# Check for programs
AC_PROG_CC
AC_PROG_CXX
# AC_PROG_RANLIB  # required for static librarires

AM_PROG_CC_C_O


# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h limits.h mach/mach.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h termios.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_OFF_T
AC_TYPE_SSIZE_T
AC_TYPE_UINT64_T

# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_FSEEKO
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_FUNC_STRTOD
AC_CHECK_FUNCS([clock_gettime floor memmove memset mkdir pow rint select socket sqrt strcasecmp strchr strcspn strerror strspn strstr strtol])

# Checks for libraries.
fftw=false
AC_CHECK_LIB([fftw3],[fftw_malloc],[fftw=true],[])
AM_CONDITIONAL([cwFFTW],[test x"${fftw}" = xtrue])

if test x"$fftw" = xtrue; then
AC_DEFINE([cwFFTW], 1,[Use libfftw3.])
fi

echo "fftw='${fftw}'"

# The following is a custom macro in ./m4/os_type.m4
# be sure to also set "ACLOCAL_AMFLAGS = -I m4" in ./Makefile.am
# Defines the config.h variable OS_LINUX or OS_OSX
AX_FUNC_OS_TYPE

AX_FUNC_OS_64

# ac_cv_os_type is set by AX_FUNC_OS_TYPE
AM_CONDITIONAL([OS_LINUX],[test x"${ax_cv_os_type}" == xLinux])
AM_CONDITIONAL([OS_OSX],[test x"${ax_cv_os_type}" == xDarwin])
echo "OS='${ax_cv_os_type}'"

AM_CONDITIONAL([OS_64],[test x"${ax_cv_os_64}" == xx86_64])
echo "ptr width='${ax_cv_os_64}'"

#
# Enable Debug
#

AC_ARG_ENABLE([debug],
     [  --enable-debug    Turn on debugging],
     [case "${enableval}" in
       yes) debug=true ;;
       no)  debug=false ;;
       *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
     esac],[debug=false])
     
echo "debug=${debug}"
     
AM_CONDITIONAL([DEBUG], [test x$debug == xtrue])

if test x$debug = xfalse; then
AC_DEFINE([NDEBUG], 1,[Debugging off.])
fi

#
# Enable libwebsock
#
AC_ARG_ENABLE([websock],
     [  --enable-websock    Include websock dependencies],
     [case "${enableval}" in
       yes) websock=true ;;
       no)  websock=false ;;
       *) AC_MSG_ERROR([bad value ${enableval} for --enable-websock]) ;;
     esac],[websock=false])

if test x"$websock" = xtrue; then
  AC_CHECK_LIB([websockets],[lws_get_library_version],[AC_MSG_RESULT([The 'websockets' library was found.])],[AC_MSG_ERROR([The 'websockets' library was not found.])])
  AC_DEFINE([cwWEBSOCK], 1,[Use libwebsock.])
fi
AM_CONDITIONAL([cwWEBSOCK], [test x$websock == xtrue])
echo "websock=${websock}"


#
# Enable ALSA
#
AC_ARG_ENABLE([alsa],
     [  --enable-alsa    Include ALSA dependencies],
     [case "${enableval}" in
       yes) alsa=true ;;
       no)  alsa=false ;;
       *) AC_MSG_ERROR([bad value ${enableval} for --enable-alsa]) ;;
     esac],[alsa=false])

	
if test x"$alsa" = xtrue; then
AC_CHECK_LIB([asound],[snd_asoundlib_version],[AC_MSG_RESULT([The 'ALSA' library was found.])],[AC_MSG_ERROR([The 'ALSA' library was not found.])])
AC_DEFINE([cwALSA], 1,[Use libalsa.])
fi

AM_CONDITIONAL([cwALSA], [test x$alsa == xtrue])

echo "alsa=${alsa}"
     


# check for C++17
# hasCpp17=true
# AX_CHECK_COMPILE_FLAG(-std=c++17, [CXXFLAGS="$CXXFLAGS -std=c++17"],[hasCpp17=false])
# if test x"$hasCpp17" = xtrue; then
# AC_DEFINE([cwCPP17], 1,[C++ 17 is available.])
# else

# C++17 is not available check for C++11
# hasCpp11=true
# AX_CHECK_COMPILE_FLAG([-std=c++11], [CXXFLAGS="$CXXFLAGS -std=c++11"], [hasCpp11=false])
# if test x"$hasCpp11" = xtrue; then
# AC_DEFINE([cwCPP11], 1,[C++ 11 is available.])
# fi
# echo "c++11=${hasCpp11}"

#fi
#echo "c++17=${hasCpp17}"

#
# Enable Web
#

AC_ARG_ENABLE([web],
     [  --enable-web    Include WEB dependencies],
     [case "${enableval}" in
       yes) web=true ;;
       no)  web=false ;;
       *) AC_MSG_ERROR([bad value ${enableval} for --enable-web]) ;;
     esac],[web=false])

	
if test x"$web" = xtrue; then
AC_DEFINE([cwWEB], 1,[Use libweb.])
fi

AM_CONDITIONAL([cwWEB], [test x$web == xtrue])

echo "web=${web}"


# AC_ARG_ENABLE([add_lib],
#     [  --enable-add_lib    Append some additional libs to the end of the library link list.],
#     [add_lib="${enableval}"],
#     [add_lib=""])
#     
# echo "add_lib=${add_lib}"
#     
# AC_SUBST([ADD_LIB], [$add_lib])

#ldir = src/libcw
#AC_SUBST([ldir])

AC_CONFIG_FILES([ Makefile ])
AC_OUTPUT
