# Manyo Library Utsusemi-SAS module

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

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

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

# 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(SAS SHARED)
target_sources(SAS PRIVATE
               CalcAzimuthProfile.cc
               CalcScanTrajectory.cc
               ConvertToPoint.cc
               ConvertToQspace.cc
               CorrectEventRPMT.cc
               CreateLambVector.cc
               DetectorEffiCorrection.cc
               DetectorEffiCorrectionRPMT.cc
               EcmSubtraction.cc
               I0LambdaCorrection.cc
               IncohCalcFor3HeSpinFilter.cc
               LambdaDependCorrection.cc
               P0LambdaCorrection.cc
               QzProjection.cc
               RPMTDataConverter.cc
               RPMTSetMaskBy2theta.cc
               SASCalcDetectorEffi.cc
               SASDetectorEfficiencyCorrection.cc
               SASDetectorInfoEditorRPMT.cc
               SectorAverageByAngle.cc
               TransmittanceCorrection.cc
               TreatQhklWithUB.cc
    )

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

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

target_link_directories(SAS PUBLIC ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH})
if (MACOS AND OpenMP_FOUND)
  target_link_libraries(SAS Manyo MLF Utsusemi GSL::gsl Python::Python util dl omp)
else()
  target_link_libraries(SAS Manyo MLF Utsusemi GSL::gsl Python::Python util dl)
endif()
target_link_options(SAS PRIVATE ${CMAKE_CXX_FLAGS} ${UTSUSEMI_CXX_FLAGS})

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

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

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

# Install library
install(TARGETS SAS
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION ${MANYO_LIB_PATH})
install(FILES
        CalcAzimuthProfile.hh
        CalcScanTrajectory.hh
        ConvertToPoint.hh
        ConvertToQspace.hh
        CorrectEventRPMT.hh
        CreateLambVector.hh
        DetectorEffiCorrection.hh
        DetectorEffiCorrectionRPMT.hh
        EcmSubtraction.hh
        I0LambdaCorrection.hh
        IncohCalcFor3HeSpinFilter.hh
        LambdaDependCorrection.hh
        P0LambdaCorrection.hh
        QzProjection.hh
        RPMTDataConverter.hh
        RPMTSetMaskBy2theta.hh
        SASCalcDetectorEffi.hh
        SASDetectorEfficiencyCorrection.hh
        SASDetectorInfoEditorRPMT.hh
        SectorAverageByAngle.hh
        TransmittanceCorrection.hh
        TreatQhklWithUB.hh
        DESTINATION ${UTSUSEMI_INC_FILE_PATH})

# Install Manyo folder for Python
if ((DEFINED MANYO_INSTTYPE) AND (${MANYO_INSTTYPE} MATCHES "N"))
  install(TARGETS ManyoSAS LIBRARY DESTINATION ${MANYO_PATH}/Manyo/Utsusemi/SAS)
  install(FILES ${PROJECT_BINARY_DIR}/SAS.py DESTINATION ${MANYO_PATH}/Manyo/Utsusemi/SAS)
  install(FILES __init__.py DESTINATION ${MANYO_PATH}/Manyo/Utsusemi/SAS)
  install(FILES sample/sas_sample.py DESTINATION share/Manyo/sample/Utsusemi/SAS)
else()
  install(TARGETS ManyoSAS LIBRARY DESTINATION ${MANYO_PATH}/Manyo/SAS)
  install(FILES ${PROJECT_BINARY_DIR}/SAS.py DESTINATION ${MANYO_PATH}/Manyo/SAS)
  install(FILES __init__.py DESTINATION ${MANYO_PATH}/Manyo/SAS)
  install(FILES sample/sas_sample.py DESTINATION share/Manyo/sample/SAS)
endif()