# Fake out that we have dyndep; we only need to generate, not actually build
# here.
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE "")

enable_language(CXX)

if (NOT CMAKE_GENERATOR MATCHES "Ninja")
  message(FATAL_ERROR
    "This test requires a 'Ninja' generator to be used.")
endif ()

add_library(ninja-exports-public)
target_sources(ninja-exports-public
  PRIVATE
    sources/module-impl.cxx
    sources/module-internal-part-impl.cxx
    sources/module-part-impl.cxx
    sources/module-use.cxx
  PUBLIC
    FILE_SET modules TYPE CXX_MODULES
    BASE_DIRS
      "${CMAKE_CURRENT_SOURCE_DIR}/sources"
    FILES
      sources/module.cxx
      sources/module-part.cxx
    FILE_SET internal_partitions TYPE CXX_MODULES FILES
      sources/module-internal-part.cxx)
target_compile_features(ninja-exports-public
  PRIVATE
    cxx_std_20)
set_property(TARGET ninja-exports-public
  PROPERTY EXPORT_NAME "with-public")

install(TARGETS ninja-exports-public
  EXPORT exp
  FILE_SET modules
    DESTINATION "lib/cxx"
    COMPONENT "modules"
  FILE_SET internal_partitions
    DESTINATION "lib/cxx/internals"
    COMPONENT "modules-internal")

add_library(ninja-exports-private)
target_sources(ninja-exports-private
  PRIVATE
    sources/module-impl.cxx
    sources/module-internal-part-impl.cxx
    sources/module-part-impl.cxx
    sources/module-use.cxx
  PRIVATE
    FILE_SET modules TYPE CXX_MODULES
    BASE_DIRS
      "${CMAKE_CURRENT_SOURCE_DIR}/sources"
    FILES
      sources/module.cxx
      sources/module-part.cxx
    FILE_SET internal_partitions TYPE CXX_MODULES FILES
      sources/module-internal-part.cxx)
target_compile_features(ninja-exports-private
  PRIVATE
    cxx_std_20)
set_property(TARGET ninja-exports-private
  PROPERTY EXPORT_NAME "with-private")

install(TARGETS ninja-exports-private
  EXPORT exp)

# Test multiple build exports.
export(EXPORT exp
  FILE "${CMAKE_BINARY_DIR}/lib/cmake/export1/export1-targets.cmake"
  NAMESPACE export1::
  CXX_MODULES_DIRECTORY "cxx-modules")
export(EXPORT exp
  FILE "${CMAKE_BINARY_DIR}/lib/cmake/export2/export2-targets.cmake"
  CXX_MODULES_DIRECTORY "cxx-modules")

# Test multiple install exports.
install(EXPORT exp
  DESTINATION "lib/cmake/export1"
  NAMESPACE export1::
  CXX_MODULES_DIRECTORY "cxx-modules")
install(EXPORT exp
  DESTINATION "lib/cmake/export2"
  CXX_MODULES_DIRECTORY "cxx-modules")
