cmake_minimum_required (VERSION 3.9)
project(JavaExportImport)
if(NOT DEFINED CMake_TEST_NESTED_MAKE_PROGRAM AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
  set(CMake_TEST_NESTED_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
endif()

find_package(Java COMPONENTS Development)

# Wipe out the install tree to make sure the exporter works.
add_custom_command(
  OUTPUT ${JavaExportImport_BINARY_DIR}/CleanupProject
  COMMAND ${CMAKE_COMMAND} -E remove_directory ${JavaExportImport_BINARY_DIR}/Root
  )
add_custom_target(CleanupTarget ALL DEPENDS ${JavaExportImport_BINARY_DIR}/CleanupProject)
set_property(
  SOURCE ${JavaExportImport_BINARY_DIR}/CleanupProject
  PROPERTY SYMBOLIC 1
  )

get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_isMultiConfig)
  set(NESTED_CONFIG_TYPE -C "${CMAKE_CFG_INTDIR}")
else()
  if(CMAKE_BUILD_TYPE)
    set(NESTED_CONFIG_TYPE -C "${CMAKE_BUILD_TYPE}")
  else()
    set(NESTED_CONFIG_TYPE)
  endif()
endif()

configure_file(${JavaExportImport_SOURCE_DIR}/InitialCache.cmake.in
               ${JavaExportImport_BINARY_DIR}/InitialCache.cmake @ONLY)

# Build the build exporter.
add_custom_command(
  OUTPUT ${JavaExportImport_BINARY_DIR}/BuildExportProject
  COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
    --build-and-test
    ${JavaExportImport_SOURCE_DIR}/BuildExport
    ${JavaExportImport_BINARY_DIR}/BuildExport
    --build-noclean
    --build-project BuildExport
    --build-generator ${CMAKE_GENERATOR}
    --build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
    --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
    --build-options -C${JavaExportImport_BINARY_DIR}/InitialCache.cmake
  VERBATIM
  )
add_custom_target(BuildExportTarget ALL DEPENDS ${JavaExportImport_BINARY_DIR}/BuildExportProject)
add_dependencies(BuildExportTarget CleanupTarget)
set_property(
  SOURCE ${JavaExportImport_BINARY_DIR}/BuildExportProject
  PROPERTY SYMBOLIC 1
  )

# Build and install the install exporter.
add_custom_command(
  OUTPUT ${JavaExportImport_BINARY_DIR}/InstallExportProject
  COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
    --build-and-test
    ${JavaExportImport_SOURCE_DIR}/InstallExport
    ${JavaExportImport_BINARY_DIR}/InstallExport
    --build-noclean
    --build-project InstallExport
    --build-target install
    --build-generator ${CMAKE_GENERATOR}
    --build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
    --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
    --build-options -C${JavaExportImport_BINARY_DIR}/InitialCache.cmake
  VERBATIM
  )
add_custom_target(InstallExportTarget ALL DEPENDS ${JavaExportImport_BINARY_DIR}/InstallExportProject)
add_dependencies(InstallExportTarget CleanupTarget)
set_property(
  SOURCE ${JavaExportImport_BINARY_DIR}/InstallExportProject
  PROPERTY SYMBOLIC 1
  )

# Build and install the importer.
add_custom_command(
  OUTPUT ${JavaExportImport_BINARY_DIR}/ImportProject
  COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
    --build-and-test
    ${JavaExportImport_SOURCE_DIR}/Import
    ${JavaExportImport_BINARY_DIR}/Import
    --build-noclean
    --build-project Import
    --build-generator ${CMAKE_GENERATOR}
    --build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
    --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
    --build-options
      -C${JavaExportImport_BINARY_DIR}/InitialCache.cmake
      -DJavaBuildExportTest_DIR:PATH=${JavaExportImport_BINARY_DIR}/BuildExport
      -DJavaInstallExportTest_DIR:PATH=${JavaExportImport_BINARY_DIR}/Root/share/cmake
  VERBATIM
  )
add_custom_target(ImportTarget ALL DEPENDS ${JavaExportImport_BINARY_DIR}/ImportProject)
add_dependencies(ImportTarget BuildExportTarget InstallExportTarget)
set_property(
  SOURCE ${JavaExportImport_BINARY_DIR}/ImportProject
  PROPERTY SYMBOLIC 1
  )

add_executable(JavaExportImport main.c)
add_dependencies(JavaExportImport ImportTarget)
