enable_language(C)

include(CTest)

find_package(Python3 REQUIRED COMPONENTS Interpreter Development.SABIModule)
if (NOT Python3_FOUND)
  message (FATAL_ERROR "Failed to find Python 3")
endif()
if (Python3_Development_FOUND)
  message (FATAL_ERROR "Python 3, COMPONENT 'Development' unexpectedly found")
endif()
if (Python3_Development.Embed_FOUND)
  message (FATAL_ERROR "Python 3, COMPONENT 'Development.Embed' unexpectedly found")
endif()
if (Python3_Development.Module_FOUND)
  message (FATAL_ERROR "Python 3, COMPONENT 'Development.Module' unexpectedly found")
endif()
if (NOT Python3_Development.SABIModule_FOUND)
  message (FATAL_ERROR "Python 3, COMPONENT 'Development.SABIModule' not found")
endif()

if(NOT TARGET Python3::Interpreter)
  message(SEND_ERROR "Python3::Interpreter not found")
endif()

if(TARGET Python3::Python)
  message(SEND_ERROR "Python3::Python unexpectedly found")
endif()
if(TARGET Python3::Module)
  message(SEND_ERROR "Python3::Module unexpectedly found")
endif()
if(NOT TARGET Python3::SABIModule)
  message(SEND_ERROR "Python3::SABIModule not found")
endif()

if (Python3_VERSION VERSION_GREATER_EQUAL "3.2" AND NOT DEFINED Python3_SOSABI)
  message(FATAL_ERROR "Python3_SOSABI unexpectedly not defined")
endif()

Python3_add_library (spam3 MODULE USE_SABI 3 WITH_SOABI spam.c)
target_compile_definitions (spam3 PRIVATE PYTHON3)

if (Python3_SOSABI)
  get_property (suffix TARGET spam3 PROPERTY SUFFIX)
  if (NOT suffix MATCHES "^\\.${Python3_SOSABI}")
    message(FATAL_ERROR "Module suffix do not include Python3_SOSABI")
  endif()
endif()

Python3_add_library (spam3_2 MODULE USE_SABI 3 WITH_SOABI PLATFORM spam.c)
target_compile_definitions (spam3_2 PRIVATE PYTHON3)

if (Python3_SOSABI_PLATFORM)
  get_property (suffix TARGET spam3_2 PROPERTY SUFFIX)
  if (NOT suffix MATCHES "^\\.${Python3_SOSABI_PLATFORM}")
    message(FATAL_ERROR "Module suffix do not include Python3_SOSABI_PLATFORM")
  endif()
elseif(Python3_SOSABI)
  get_property (suffix TARGET spam3_2 PROPERTY SUFFIX)
  if (NOT suffix MATCHES "^\\.${Python3_SOSABI}")
    message(FATAL_ERROR "Module suffix do not include Python3_SOSABI")
  endif()
endif()


add_test (NAME python3_spam3
          COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=$<TARGET_FILE_DIR:spam3>"
          "${Python3_INTERPRETER}" -c "import spam3; spam3.system(\"cd\")")
