# Manyo Library Utsusemi-ENG (Emaki) module

# Find HDF5 library (HDF5_INCLUDE_DIRS can be used)
find_package(HDF5 REQUIRED COMPONENTS CXX)

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

# Find OpenMP, GSL, Boost, zlib
find_package(OpenMP)
find_package(GSL REQUIRED)

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

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

# Add LibMany
add_library(Emaki SHARED)
target_sources(Emaki PRIVATE
               EfficiencyCorrectionTakumi.cc
               EfficiencyCorrectionTakumi.hh
               EmakiDetectorInfoEditorReadout.cc
               EmakiDetectorInfoEditorReadout.hh
               EmakiEventDataConverterReadout1d.cc
               EmakiEventDataConverterReadout1d.hh
               EmakiReadout1dEventDecoder.cc
               EmakiReadout1dEventDecoder.hh
    )

target_compile_options(Emaki PUBLIC ${UTSUSEMI_CXX_FLAGS})
target_compile_definitions(Emaki PUBLIC MULTH=${MANYO_MULTH})
#target_compile_features(Emaki PUBLIC cxx_std_11)

target_include_directories(Emaki PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${HDF5_INCLUDE_DIRS} ${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(Emaki PUBLIC ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH})
if (MACOS AND OpenMP_FOUND)
  #target_link_directories(Emaki PUBLIC ${MANYO_NEXUS_PATH}/lib ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH} ${ZLIB_INCLUDE_DIRS})
  target_link_libraries(Emaki Manyo MLF Utsusemi NeXus GSL::gsl Boost::system Python::Python util dl omp)
else()
  #target_link_directories(Emaki PUBLIC ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH})
  #target_link_libraries(Emaki Manyo MLF Utsusemi NeXus GSL::gsl Boost::serialization Boost::filesystem Boost::system Python::Python util dl)
  target_link_libraries(Emaki Manyo MLF Utsusemi Boost::system Python::Python util dl)
endif()
target_link_options(Emaki PRIVATE ${CMAKE_CXX_FLAGS} ${UTSUSEMI_CXX_FLAGS})

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

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

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

# Install library
install(TARGETS Emaki
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION ${MANYO_LIB_PATH})
install(FILES
        EfficiencyCorrectionTakumi.hh
        EmakiDetectorInfoEditorReadout.hh
        EmakiEventDataConverterReadout1d.hh
        EmakiReadout1dEventDecoder.hh
        DESTINATION include/manyo/Emaki)

# Install Manyo folder for Python
install(TARGETS ManyoEmaki LIBRARY DESTINATION ${MANYO_PATH}/Manyo/Emaki)
install(FILES ${PROJECT_BINARY_DIR}/Emaki.py DESTINATION ${MANYO_PATH}/Manyo/Emaki)
install(FILES __init__.py DESTINATION ${MANYO_PATH}/Manyo/Emaki)
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 share/Manyo/sample/Emaki)
