cmake_minimum_required(VERSION 3.17...4.4)

project(${SKBUILD_PROJECT_NAME}
 VERSION 1.0.2
 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.16
    CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_PTSCOTCH=${BUILD_PTSCOTCH})
  FetchContent_MakeAvailable(scotch)
  install(TARGETS scotch
          COMPONENT libscotch
          DESTINATION scotchpy)
  if(BUILD_PTSCOTCH)
    install(TARGETS ptscotch
            COMPONENT libptscotch
            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
        COMPONENT 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
          COMPONENT libptscotch_mpi4py
          DESTINATION scotchpy)
endif(BUILD_PTSCOTCH)
