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 rm -rf ${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)
