cmake_minimum_required(VERSION 3.2)
project(coordgen)

# Options & Project configuration
set(CMAKE_CXX_STANDARD 11)
option(COORDGEN_BUILD_TESTS "Whether test executables should be built" ON)
option(COORDGEN_BUILD_EXAMPLE "Whether to build the sample executable" ON)

# Dependencies
find_package(Boost COMPONENTS iostreams REQUIRED)
find_package(maeparser REQUIRED)

# Source files & headers
file(GLOB SOURCES "*.cpp")
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${maeparser_INCLUDE_DIRS})

# Build Targets & Configuration -- coordgen library
add_library(coordgen SHARED ${SOURCES})
target_compile_definitions(coordgen PRIVATE IN_COORDGEN)
set_property(TARGET coordgen PROPERTY CXX_VISIBILITY_PRESET "hidden")
target_link_libraries(coordgen maeparser)

set_target_properties(coordgen
    PROPERTIES
        VERSION 1.3
        SOVERSION 1
)

# Install configuration
install(TARGETS coordgen
    EXPORT coordgen-targets
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib)

install(FILES
    CoordgenConfig.hpp
    CoordgenFragmentBuilder.h
    CoordgenFragmenter.h
    CoordgenMacrocycleBuilder.h
    CoordgenMinimizer.h
    sketcherMinimizerAtom.h
    sketcherMinimizerBendInteraction.h
    sketcherMinimizerBond.h
    sketcherMinimizerClashInteraction.h
    sketcherMinimizerEZConstrainInteraction.h
    sketcherMinimizerFragment.h
    sketcherMinimizer.h
    sketcherMinimizerInteraction.h
    sketcherMinimizerMarchingSquares.h
    sketcherMinimizerMaths.h
    sketcherMinimizerMolecule.h
    sketcherMinimizerResidue.h
    sketcherMinimizerResidueInteraction.h
    sketcherMinimizerRing.h
    sketcherMinimizerStretchInteraction.h
    DESTINATION include/coordgen)

install(FILES
    templates.mae
    DESTINATION share/coordgen)

install(EXPORT coordgen-targets
    FILE ${PROJECT_NAME}-config.cmake
    DESTINATION lib/cmake)

# Example
if(COORDGEN_BUILD_EXAMPLE)
    add_subdirectory(example_dir)
endif(COORDGEN_BUILD_EXAMPLE)

# Tests
if(COORDGEN_BUILD_TESTS)
    set(MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --time-stamp=yes \
        --num-callers=20 --gen-suppressions=all --leak-check=full \
        --show-reachable=no --trace-children=yes --error-exitcode=29")
    include(CTest)
    add_subdirectory(test)
endif(COORDGEN_BUILD_TESTS)
