# Manyo Library Utsusemi-ENG (Emaki) module
# Set the instrument code for Utsusemi
set(UTS_MODULE Emaki)

if ((DEFINED MANYO_INSTTYPE) AND (${MANYO_INSTTYPE} MATCHES "N"))
    set(UTSUSEMI_INC_FILE_PATH include/manyo/Utsusemi/${UTS_MODULE})
    set(MANYO_UTSUSEMI_INST_PATH ${MANYO_PATH}/Manyo/Utsusemi/${UTS_MODULE})
    set(MANYO_UTSUSEMI_SMP_PATH ${MANYO_ROOT_PATH}/share/Manyo/sample/Utsusemi/${UTS_MODULE})
else()
    set(UTSUSEMI_INC_FILE_PATH include/manyo/${UTS_MODULE})
    set(MANYO_UTSUSEMI_INST_PATH ${MANYO_PATH}/Manyo/${UTS_MODULE})
    set(MANYO_UTSUSEMI_SMP_PATH ${MANYO_ROOT_PATH}/share/Manyo/sample/${UTS_MODULE})
endif()

#
# ========= Dependencies =========
#

# Find OpenMP, Boost::filesystem(required by macOS)
find_package(OpenMP)
find_package(GSL REQUIRED)

if (POLICY CMP0167)
    cmake_policy (SET CMP0167 NEW)
endif ()
find_package(Boost 1.66.0 REQUIRED
    COMPONENTS
        filesystem
)

#
# ========= SWIG =========
#

CMAKE_POLICY(SET CMP0086 NEW)
find_package(SWIG REQUIRED)
include(UseSWIG)

#
# ========= Library =========
#

add_library(${UTS_MODULE} SHARED)
target_sources(${UTS_MODULE} PRIVATE
    EfficiencyCorrectionTakumi.cc
    EfficiencyCorrectionTakumi.hh
    EmakiDetectorInfoEditorReadout.cc
    EmakiDetectorInfoEditorReadout.hh
    EmakiEventDataConverterReadout1d.cc
    EmakiEventDataConverterReadout1d.hh
    EmakiReadout1dEventDecoder.cc
    EmakiReadout1dEventDecoder.hh
)

#
# ========= Compile Settings =========
#

target_compile_features(${UTS_MODULE} PRIVATE cxx_std_11)
target_compile_options(${UTS_MODULE} PRIVATE
    -O3
    -Werror=return-type
)

#
# ========= Compile Definitions =========
#

if (OpenMP_FOUND)
    target_compile_definitions(${UTS_MODULE} PRIVATE MULTH=${MANYO_MULTH})
endif()

#
# ========= Include Paths =========
#

target_include_directories(${UTS_MODULE}
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}
    PRIVATE
        ${MANYO_ROOT_PATH}/include/manyo
        ${MANYO_ROOT_PATH}/include/manyo/MLF
        ${MANYO_ROOT_PATH}/include/manyo/Utsusemi
        ${MANYO_NEXUS_PATH}/include
)

#
# ========= Linking =========
#

target_link_libraries(${UTS_MODULE}
    PRIVATE
        Manyo
        MLF
        Utsusemi
        Python::Python
        OpenMP::OpenMP_CXX
        GSL::gsl
        Boost::filesystem
        util
        dl
)

target_link_directories(${UTS_MODULE}
    PRIVATE
        ${MANYO_ROOT_PATH}/${MANYO_LIB_PATH}
)

#
# ========= SWIG Module =========
#

set_property(SOURCE ${UTS_MODULE}.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE ${UTS_MODULE}.i
    PROPERTY INCLUDE_DIRECTORIES
        ${MANYO_ROOT_PATH}/include/manyo
        ${MANYO_ROOT_PATH}/include/manyo/MLF
        ${MANYO_ROOT_PATH}/include/manyo/Utsusemi
        ${MANYO_NEXUS_PATH}/include
)

swig_add_library(Manyo${UTS_MODULE}
    TYPE MODULE
    LANGUAGE python
    OUTPUT_DIR ${PROJECT_BINARY_DIR}/
    SOURCES ${UTS_MODULE}.i
)

# Compile definitions
if (OpenMP_FOUND)
    target_compile_definitions(Manyo${UTS_MODULE} PRIVATE MULTH=${MANYO_MULTH})
endif()

# Include paths
target_include_directories(Manyo${UTS_MODULE}
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}
    PRIVATE
        ${MANYO_ROOT_PATH}/include/manyo
        ${MANYO_ROOT_PATH}/include/manyo/MLF
        ${MANYO_ROOT_PATH}/include/manyo/Utsusemi
        ${MANYO_NEXUS_PATH}/include
)

# Linking
target_link_libraries(Manyo${UTS_MODULE}
    PRIVATE
        ${UTS_MODULE}
        Manyo
        MLF
        Utsusemi
        Python::Python
        OpenMP::OpenMP_CXX
        GSL::gsl
        Boost::filesystem
        util
        dl
)

target_link_directories(Manyo${UTS_MODULE}
    PRIVATE
        ${MANYO_ROOT_PATH}/${MANYO_LIB_PATH}
)


#
# ========= Install =========
#

# Install library
install(TARGETS ${UTS_MODULE}
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION ${MANYO_ROOT_PATH}/${MANYO_LIB_PATH}
)

install(FILES
    EfficiencyCorrectionTakumi.hh
    EmakiDetectorInfoEditorReadout.hh
    EmakiEventDataConverterReadout1d.hh
    EmakiReadout1dEventDecoder.hh
    DESTINATION ${MANYO_ROOT_PATH}/${UTSUSEMI_INC_FILE_PATH}
)

# Install Manyo folder for Python
install(TARGETS Manyo${UTS_MODULE}
    LIBRARY DESTINATION ${MANYO_UTSUSEMI_INST_PATH}
)

install(FILES
    ${PROJECT_BINARY_DIR}/${UTS_MODULE}.py
    __init__.py
    DESTINATION ${MANYO_UTSUSEMI_INST_PATH}
)

install(FILES
    sample/sample.py
    sample/CaseInfo.xml
    sample/DetectorInfoTakumi.xml
    sample/hc_trg.py
    sample/histogram_creation.py
    sample/sample.py
    sample/WiringInfoTakumi.xml
    sample/writing_histogram_to_text.py
    DESTINATION ${MANYO_UTSUSEMI_SMP_PATH}
)
