cmake_minimum_required(VERSION 3.5.2)
set(CMAKE_CXX_STANDARD 11)
# Set the project name
project (concatenator)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")

###############################################################################
### Boost Settings
find_package(Boost 1.60.0 COMPONENTS program_options log log_setup thread date_time filesystem system REQUIRED) 
find_package(LibSndFile REQUIRED)

if (NOT FO_BOOST_STATIC_LINK)
add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_ALL_DYN_LINK -DBOOST_LOG_DYN_LINK)
endif()

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME OFF) 
###############################################################################

# Set build flags
set(CMAKE_CXX_FLAGS "-g -Wall")
# Set cmake to output executable to the bin directory
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)




set(CONCATENATOR_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)
set(CONCATENATOR_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(CONCATENATOR_TEST_DIR ${PROJECT_SOURCE_DIR}/test)

set(CONCATENATOR_SOURCE_FILES
    ${CONCATENATOR_SOURCE_DIR}/Concatenator.cpp
    ${CONCATENATOR_SOURCE_DIR}/AudioDatabase.cpp
    ${CONCATENATOR_SOURCE_DIR}/AudioFile.cpp
    ${CONCATENATOR_SOURCE_DIR}/Logger.cpp
    ${CONCATENATOR_SOURCE_DIR}/ArgumentParser.cpp
)
set(CONCATENATOR_HEADER_FILES
    ${CONCATENATOR_INCLUDE_DIR}/ArgumentParser.h
    ${CONCATENATOR_INCLUDE_DIR}/AudioDatabase.h
    ${CONCATENATOR_INCLUDE_DIR}/AudioFile.h
    ${CONCATENATOR_INCLUDE_DIR}/Logger.h
)
set(CONCATENATOR_TEST_SOURCES
    ${CONCATENATOR_TEST_DIR}/Concatenator_Test.cpp
    ${CONCATENATOR_TEST_DIR}/Basic_Tests.cpp
)

include_directories(${CONCATENATOR_INCLUDE_DIR})
include_directories(${Boost_INCLUDE_DIRS}) 
include_directories(${LIBSNDFILE_INCLUDE_DIR}) 
add_subdirectory(external)

add_executable(concatenator ${CONCATENATOR_SOURCE_FILES} ${CONCATENATOR_HEADER_FILES})

# Link to external libraries
target_link_libraries(concatenator ${Boost_LIBRARIES})
target_link_libraries(concatenator ${LIBSNDFILE_LIBRARIES})

# Test build options (this code adapted from: https://github.com/ComicSansMS/GhulbusBase/blob/master/CMakeLists.txt)
option(BUILD_TESTS "Determines whether to build tests." ON)
if(BUILD_TESTS)
    enable_testing()

    if(NOT TARGET Catch)
        include(ExternalProject)
        if(WIN32)
            set(FETCH_EXTERNAL_CATCH
                URL https://github.com/philsquared/Catch/archive/v1.2.1-develop.12.zip
                URL_HASH MD5=cda228922a1c9248364c99a3ff9cd9fa)
        else()
            set(FETCH_EXTERNAL_CATCH
                URL https://github.com/philsquared/Catch/archive/v1.2.1-develop.12.tar.gz
                URL_HASH MD5=a8dfb7be899a6e7fb30bd55d53426122)
        endif()
        ExternalProject_Add(Catch-External
            PREFIX ${CMAKE_BINARY_DIR}/external/Catch
            ${FETCH_EXTERNAL_CATCH}
            CONFIGURE_COMMAND ""
            BUILD_COMMAND ""
            INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/external/Catch/src/Catch-External/single_include/catch.hpp
                                                     ${CMAKE_BINARY_DIR}/external/Catch/include/catch.hpp
        )
        add_library(Catch INTERFACE)
        add_dependencies(Catch Catch-External)

        target_include_directories(Catch INTERFACE ${CMAKE_BINARY_DIR}/external/Catch/include)
    endif()


    add_executable(Concatenator_Test ${CONCATENATOR_TEST_SOURCES})
    target_link_libraries(Concatenator_Test Catch)
    add_test(NAME TestBase COMMAND Concatenator_Test)
endif()

