# Refference : https://github.com/danielunderwood/swig-example/blob/master/CMakeLists.txt

# $ cd manyo
# $ mkdir build; cd build
# $ rm -rf *; cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/Manyo [-DMULTH=<n>[, -DNEXUS_PATH=/path/to/nexul, -DMANYO_INSTTYPE=(N/O)]]
# $ VERBOSE=1 make -j install

cmake_minimum_required(VERSION 3.13)
project(Manyo CXX)

# Find Python
find_package(Python COMPONENTS Interpreter Development)

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

# Find OpenMP
find_package(OpenMP)

# Find pthread
#set(THREADS_PREFER_PTHREAD_FLAG ON)
#find_package(Threads REQUIRED)

# Find GSL
find_package(GSL REQUIRED)

# Find LibBoost
if (POLICY CMP0167)
  cmake_policy (SET CMP0167 NEW)
endif ()
find_package(Boost 1.49.0 REQUIRED
             COMPONENTS serialization filesystem system program_options)

# Check macOS
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(MACOS TRUE)
endif()

# Set MANYO_MULTH : If MULTH is given by cmake argument,
if (DEFINED MULTH)
  set(MANYO_MULTH ${MULTH})
else (DEFINED MULTH)
  set(MANYO_MULTH 8)
endif (DEFINED MULTH)

# Set MANYO_NEXUS_PATH
if (DEFINED NEXUS_PATH)
  set(MANYO_NEXUS_PATH ${NEXUS_PATH})
else ()
  set(MANYO_NEXUS_PATH ${CMAKE_INSTALL_PREFIX})
endif ()
message("MANYO_NEXUS_PATH=" ${MANYO_NEXUS_PATH})

# Installation type
# MANYO_LIB_PATH is the relative path to libManyo and other manyo libraries from CMAKE_INSTALL_PREFIX
# as "lib/python3.11/dist-packages"
# Therefor MANYO_PATH is ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH}
if ((DEFINED MANYO_INSTTYPE) AND (${MANYO_INSTTYPE} MATCHES "O"))
  message("MANYO_INSTTYPE = Old")
  set(MANYO_LIB_PATH lib)
  set(MANYO_PATH ${CMAKE_INSTALL_PREFIX})
else()
  message("MANYO_INSTTYPE = Default 0.4")
  set(MANYO_LIB_PATH lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/dist-packages)
  set(MANYO_PATH ${CMAKE_INSTALL_PREFIX}/${MANYO_LIB_PATH})
endif()
message("MANYO_PATH = " ${MANYO_PATH})

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

# Add subdirectories for Manyo core and MLF
add_subdirectory(core)
add_subdirectory(MLF)

message("Boost_VERSION_STRING = " ${Boost_VERSION_STRING})
if (${Boost_VERSION_STRING} STRLESS "1.87.0")
  add_subdirectory(SerialPySrv)
endif()
