# Manyo Library MLF module
set(MODULENAME MLF)

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

# Find OpenSSL
find_package(OpenSSL REQUIRED)

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

add_library(${MODULENAME} SHARED)
target_sources(${MODULENAME} PRIVATE
    AcquireNeutronSourceImageInformation.cc
    AcquireNeutronSourceInformationBase.cc
    AcquireNeutronSourceInformationControlBase.cc
    AcquireNeutronSourceTextInformation.cc
    AdvScatAbsoBodyManagerMLF.cc
    ArrayOperation.cc
    AverageElementContainerMatrix.cc
    BinDataFileSectionReader.cc
    BoostXmlParser.cc
    ContainerViewer.cc
    EventDataMonitorBase.cc
    EventDataToHistogramBase.cc
    GnuplotInterface.cc
    MlfArraySlicer.cc
    MlfDetectorEfficiencyCorrection.cc
    MlfHeader.cc
    MlfMatrixSlicer.cc
    MlfPhysicalConstants.cc
    MlfScatAbsoBodyManager.cc
    OnLineGnuPlot.cc
    T0TreatToolsBase.cc
)

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

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

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

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

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

target_include_directories(${MODULENAME}
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}/../core
        ${MANYO_NEXUS_PATH}/include
)

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

target_link_libraries(${MODULENAME}
    PRIVATE
        Manyo
        Python::Python
        OpenMP::OpenMP_CXX
        OpenSSL::SSL
        GSL::gsl
        Boost::serialization
        Boost::filesystem
)

target_link_directories(${MODULENAME}
    PRIVATE
        ${MANYO_ROOT_PATH}/lib
        ${MANYO_NEXUS_PATH}/lib
)

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

set_property(SOURCE ${MODULENAME}.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE ${MODULENAME}.i
    PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/../core
) # Error on "Swig compile MLF.i for python". This maybe set include path for MLF.i not CXX.

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

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

# Include paths
target_include_directories(Manyo${MODULENAME}
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}/../core
        ${MANYO_NEXUS_PATH}/include
)

# Linking
target_link_libraries(Manyo${MODULENAME}
    PRIVATE
        Manyo
        ${MODULENAME}
        Python::Python
        OpenMP::OpenMP_CXX
        OpenSSL::SSL
        GSL::gsl
        Boost::serialization
        Boost::filesystem
)
target_link_directories(Manyo${MODULENAME}
    PRIVATE
        ${MANYO_ROOT_PATH}/lib
        ${MANYO_NEXUS_PATH}/lib
)


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

install(TARGETS ${MODULENAME}
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION ${MANYO_LIB_PATH}
)

install(FILES
    AcquireNeutronSourceImageInformation.hh
    AcquireNeutronSourceInformationBase.hh
    AcquireNeutronSourceInformationControlBase.hh
    AcquireNeutronSourceTextInformation.hh
    AdvScatAbsoBodyManagerMLF.hh
    ArrayOperation.hh
    AverageElementContainerMatrix.hh
    BinDataFileSectionReader.hh
    BoostXmlParser.hh
    ContainerViewer.hh
    EventDataMonitorBase.hh
    EventDataToHistogramBase.hh
    GnuplotInterface.hh
    MlfArraySlicer.hh
    MlfDetectorEfficiencyCorrection.hh
    MlfHeader.hh
    MlfMatrixSlicer.hh
    MlfPhysicalConstants.hh
    MlfScatAbsoBodyManager.hh
    OnLineGnuPlot.hh
    T0TreatToolsBase.hh
    DESTINATION ${MANYO_ROOT_PATH}/include/manyo/${MODULENAME}
)

# Install Manyo folder for Python
install(TARGETS Manyo${MODULENAME}
    LIBRARY DESTINATION ${MANYO_PATH}/Manyo/${MODULENAME}
)

install(FILES
    ${PROJECT_BINARY_DIR}/${MODULENAME}.py
    __init__.py
    DESTINATION ${MANYO_PATH}/Manyo/${MODULENAME}
)

install(FILES
    sample/ContainerViewer.py
    sample/GnuPlotFormat.py
    sample/ImageInformation.py
    sample/ManyoLibTest.py
    sample/TextInformation2.py
    sample/ValueInformation2.py
    DESTINATION ${MANYO_ROOT_PATH}/share/Manyo/sample/${MODULENAME}
)

install(FILES
    database/all_nist_data.dat
    database/NistXsectData.xml
    DESTINATION ${MANYO_ROOT_PATH}/share/Manyo/${MODULENAME}/database
)
