# Copyright (C) 2009-2014 David Sugar, Tycho Softworks.
# Copyright (C) 2015 Cherokees of Idaho.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#

cmake_minimum_required(VERSION 2.6)
PROJECT(ccaudio2)
set (VERSION 2.1.7)
set (USES_UCOMMON_REQUIRED 6.4.4)

INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
INCLUDE(GNUInstallDirs)

set(INSTALL_PHRASES ${CMAKE_INSTALL_DATADIR}/ccaudio2)

option(BUILD_RUNTIME "Set to OFF to build static runtime" ON)

MESSAGE( STATUS "Configuring GNU ccaudio2 ${VERSION}...")

if (USES_UCOMMON_INCLUDE_DIRS)
    message(STATUS "  Using local ucommon dependency")
else()
    find_package(PkgConfig)
    pkg_check_modules(USES_UCOMMON REQUIRED ucommon>=6.2.0)
endif()

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc ${WITH_INCLUDES} ${USES_UCOMMON_INCLUDE_DIRS})
add_definitions(${USES_UCOMMON_CFLAGS} ${WITH_CFLAGS})
link_libraries(${WITH_LIBS})
link_directories(${USES_UCOMMON_LIBRARY_DIRS})

if(USES_UCOMMON_CMAKE_MACROS)
	set(CMAKE_MODULE_PATH "${USES_UCOMMON_CMAKE_MACROS}")
elseif(EXISTS "${USES_UCOMMON_PREFIX}/share/ucommon/cmake")
	set(CMAKE_MODULE_PATH "${USES_UCOMMON_PREFIX}/share/ucommon/cmake")
else()
	set(CMAKE_MODULE_PATH "${CMAKE_INSTALL_FULL_DATADIR}/ucommon/cmake")
endif()

include(CapeConfig)
include(CapeMakeTargets)

if(BUILD_RUNTIME)
    set(BUILD_RUNTIME_TYPE SHARED)
else()
    set(BUILD_RUNTIME_TYPE STATIC)
endif()

check_include_files(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
check_include_files(speex/speex.h HAVE_SPEEX_SPEEX_H)
check_include_files(gsm.h HAVE_GSM_H)
check_include_files(gsm/gsm.h HAVE_GSM_GSM_H)
check_include_files(endian.h HAVE_ENDIAN_H)

check_library_exists(ossaudio _oss_ioctl "" OSSAUDIO_LIB)
if(OSSAUDIO_LIB)
    set(AUDIO_LIBS ossaudio)
endif()

check_include_files(CoreAudio/CoreAudio.h OSX_AUDIO)
if(OSX_AUDIO)
    set(AUDIO_LIBS "-framework CoreAudio")
endif()

if(WIN32)
    set(AUDIO_LIBS winmm msacm32)
endif()

check_library_exists(m sqrt "" MATH_LIB)
if(MATH_LIB)
    set(MATH_LIB m)
endif()

if(NOT HAVE_SPEEX_SPEEX_H AND EXISTS ${CMAKE_BINARY_DIR}/Frameworks/Speex)
    include_directories(${CMAKE_BINARY_DIR}/Frameworks/Speex/include)
    link_directories(${CMAKE_BINARY_DIR}/Frameworks/Speex/lib)
    set(HAVE_SPEEX_SPEEX_H 1)
endif()

if(HAVE_SPEEX_SPEEX_H)
    set(AUDIO_LIBS ${AUDIO_LIBS} speex)
endif()

if(HAVE_GSM_H OR HAVE_GSM_GSM_H)
    set(AUDIO_LIBS ${AUDIO_LIBS} gsm)
endif()

file(GLOB ccaudio_src src/*.cpp)
file(GLOB ccaudio_man1 utils/*.1)
file(GLOB ccaudio_conf utils/*.conf)

pc_libs(PKG_CCAUDIO2_LIBS ${AUDIO_LIBS} ${MATH_LIB})

create_headers()
create_specfile()
create_pcfiles(pc_files ccaudio2)
create_scripts(noinst_scr PKGBUILD)

set(ccaudio_inc inc/ccaudio2.h)
add_library(ccaudio2 ${BUILD_RUNTIME_TYPE} ${ccaudio_src} ${ccaudio_inc})
set_library_version(ccaudio2 ${LIB_VERSION})
set_source_dependencies(ccaudio2 ucommon)
target_link_libraries(ccaudio2 ${USES_UCOMMON_LIBRARIES} ${AUDIO_LIBS} ${WITH_MATH_LIB} ${MATH_LIB})

add_executable(ccaudio-tonetool utils/tonetool.cpp)
add_dependencies(ccaudio-tonetool ccaudio2 ucommon)
set_target_properties(ccaudio-tonetool PROPERTIES OUTPUT_NAME tonetool)
target_link_libraries(ccaudio-tonetool ccaudio2 ucommon ${USES_UCOMMON_LIBRARIES})

add_executable(ccaudio-audiotool utils/audiotool.cpp)
add_dependencies(ccaudio-audiotool ccaudio2 ucommon)
set_target_properties(ccaudio-audiotool PROPERTIES OUTPUT_NAME audiotool)
target_link_libraries(ccaudio-audiotool ccaudio2 ucommon ${USES_UCOMMON_LIBRARIES})

install(FILES ${ccaudio_conf} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR})
install(FILES ${ccaudio_man1} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
install(FILES inc/ccaudio2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS ccaudio2 DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(TARGETS ccaudio-tonetool ccaudio-audiotool DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${pc_files} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)

# we are doing these from automake...
#add_cape_make_targets(ccaudio2 ${VERSION})
add_make_lint_target()
add_make_uninstall_target()
