# Manyo Library Utsusemi-DNA module

# Find and include swig
CMAKE_POLICY(SET CMP0086 NEW)
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
#include(FindSWIG)
#include(UseSWIG)

# Find OpenMP, Boost
find_package(OpenMP)

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

# Set compile options for Utsusemi
if (MACOS AND OpenMP_FOUND)
  set(DNA_CXX_FLAGS ${CMAKE_CXX_FLAGS} -O3 -Xpreprocessor -Werror=return-type -Xclang -fopenmp)
elseif(MACOS)
  set(DNA_CXX_FLAGS ${CMAKE_CXX_FLAGS} -O3 -Xpreprocessor -Werror=return-type)
elseif(UNIX)
  set(DNA_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -O3 -shared)
endif()

# Add LibMany
add_library(DNA SHARED)
target_sources(DNA PRIVATE
               AdvCorrectionAbsorptionDNA.cc
               AdvDetectorManagerDNA.cc
               AdvEquipmentManagerDNA.cc
               AdvILambdaCorrectionDNA.cc
               AdvMultiScatteringDNA.cc
               AdvNeutronManagerDNA.cc
               AdvNeutronMonitorDNA.cc
               AdvQECalculation.cc
               AdvSliceQE.cc
               AdvSolidAngleCorrectionDNA.cc
               UtsusemiChopCondInfoReaderTrignet.cc
               UtsusemiEventDataConverterDNA.cc
               UtsusemiEventDataConverterDNAWithHSC.cc
               UtsusemiFilterHSChopperDNA.cc
               UtsusemiFilterTrignetConditionDNA.cc
               UtsusemiFilterTrignetDNA.cc
               UtsusemiNeunetEventDecoderDNA.cc
               UtsusemiSetMaskDNA.cc
               UtsusemiDNAILambdaCorrectionUseMonAtSample.cc
    )

target_compile_options(DNA PUBLIC ${DNA_CXX_FLAGS})
if (OpenMP_FOUND)
  target_compile_definitions(DNA PUBLIC MULTH=${MANYO_MULTH})
endif()
#target_compile_features(DNA PUBLIC cxx_std_11)

target_include_directories(DNA PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${MANYO_NEXUS_PATH}/include ${Python_INCLUDE_DIRS} ${CMAKE_INSTALL_PREFIX}/include/manyo ${CMAKE_INSTALL_PREFIX}/include/manyo/MLF ${CMAKE_INSTALL_PREFIX}/include/manyo/Utsusemi)

target_link_directories(DNA PUBLIC ${MANYO_NEXUS_PATH}/lib ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH})
if (MACOS AND OpenMP_FOUND)
  target_link_libraries(DNA Manyo MLF Utsusemi Boost::filesystem Boost::system Python::Python util dl omp)
else()
  target_link_libraries(DNA Manyo MLF Utsusemi Boost::filesystem Boost::system Python::Python util dl)
endif()
target_link_options(DNA PRIVATE ${CMAKE_CXX_FLAGS} ${DNA_CXX_FLAGS})

# message("MULTH = " ${MANYO_MULTH})
# message("Library = " ${CMAKE_INSTALL_PREFIX}/lib)

# Set up swig
set_property(SOURCE DNA.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE DNA.i PROPERTY INCLUDE_DIRECTORIES ${CMAKE_INSTALL_PREFIX}/include/manyo ${CMAKE_INSTALL_PREFIX}/include/manyo/MLF ${CMAKE_INSTALL_PREFIX}/include/manyo/Utsusemi)

swig_add_library(ManyoDNA
  TYPE MODULE
  LANGUAGE python
  OUTPUT_DIR ${PROJECT_BINARY_DIR}/
  SOURCES DNA.i)
swig_link_libraries(ManyoDNA DNA)

# Install library
install(TARGETS DNA
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION ${MANYO_LIB_PATH})
install(FILES AdvCorrectionAbsorptionDNA.hh
              AdvDetectorManagerDNA.hh
              AdvEquipmentManagerDNA.hh
              AdvILambdaCorrectionDNA.hh
              AdvMultiScatteringDNA.hh
              AdvNeutronManagerDNA.hh
              AdvNeutronMonitorDNA.hh
              AdvQECalculation.hh
              AdvSliceQE.hh
              AdvSolidAngleCorrectionDNA.hh
              UtsusemiChopCondInfoReaderTrignet.hh
              UtsusemiEventDataConverterDNA.hh
              UtsusemiEventDataConverterDNAWithHSC.hh
              UtsusemiFilterHSChopperDNA.hh
              UtsusemiFilterTrignetConditionDNA.hh
              UtsusemiFilterTrignetDNA.hh
              UtsusemiNeunetEventDecoderDNA.hh
              UtsusemiSetMaskDNA.hh
              UtsusemiDNAILambdaCorrectionUseMonAtSample.hh
        DESTINATION include/manyo/DNA)

# Install Manyo folder for Python
install(TARGETS ManyoDNA LIBRARY DESTINATION ${MANYO_PATH}/Manyo/DNA)
install(FILES ${PROJECT_BINARY_DIR}/DNA.py DESTINATION ${MANYO_PATH}/Manyo/DNA)
install(FILES __init__.py DESTINATION ${MANYO_PATH}/Manyo/DNA)
install(FILES sample/sample.py DESTINATION share/Manyo/sample/DNA)
