cmake_minimum_required(VERSION 3.17)

project(${SKBUILD_PROJECT_NAME}
 VERSION 0.1
 DESCRIPTION "Python interface to the Scotch/Pt-Scotch partitioning library"
 LANGUAGES C
)

# Add path of the custom module
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(getLocalConfig)

if(PIP_BUILD_SCOTCH)
  include(FetchContent)
  FetchContent_Declare(
    scotch
    GIT_REPOSITORY https://gitlab.inria.fr/scotch/scotch.git
    GIT_TAG        v7.0.9
    CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_PTSCOTCH=${BUILD_PTSCOTCH}
    PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/fixFetchAndSupressExec.patch)
  FetchContent_MakeAvailable(scotch)
  install(TARGETS scotch DESTINATION scotchpy)
  if(BUILD_PTSCOTCH)
    install(TARGETS ptscotch DESTINATION scotchpy)
  endif(BUILD_PTSCOTCH)
endif(PIP_BUILD_SCOTCH)

# Build the extension
find_package(Python REQUIRED COMPONENTS Interpreter Development.Module)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

python_add_library(scotchpy_err MODULE
  "${CMAKE_CURRENT_SOURCE_DIR}/src/scotchpy_err.c" WITH_SOABI)

install(TARGETS scotchpy_err DESTINATION scotchpy)

if (BUILD_PTSCOTCH)
  find_package(MPI COMPONENTS C REQUIRED)
  # build the ptscotch extension
  python_add_library(libptscotch_mpi4py MODULE
  "${CMAKE_CURRENT_SOURCE_DIR}/src/libptscotch_mpi4py.c" WITH_SOABI)

  if(PIP_BUILD_PTSCOTCH)
    get_target_property(_INCLUDES ptscotch INTERFACE_INCLUDE_DIRECTORIES)
    add_dependencies(libptscotch_mpi4py ptscotch)
  else()
    add_library(ptscotch UNKNOWN IMPORTED)
    set_target_properties(ptscotch PROPERTIES IMPORTED_LOCATION ${PTSCOTCH_LIB})
  endif()
  
  if(DEFINED ENV{SCOTCHPY_SCOTCH})
    set(_INCLUDES "$ENV{SCOTCHPY_SCOTCH}/../include" ${_INCLUDES})
  endif()

  if(PIP_BUILD_SCOTCH)
    add_dependencies(libptscotch_mpi4py scotch)
  endif()
  target_include_directories(libptscotch_mpi4py PRIVATE ${_INCLUDES})
  target_link_libraries(libptscotch_mpi4py PRIVATE ptscotch MPI::MPI_C)
  install(TARGETS libptscotch_mpi4py DESTINATION scotchpy)
endif(BUILD_PTSCOTCH)
