|
|
|
cmake_minimum_required(VERSION 3.5)
|
|
|
|
project(ExternalProjectUpdateTest NONE)
|
|
|
|
if(CMAKE_XCODE_BUILD_SYSTEM VERSION_GREATER_EQUAL 12)
|
|
|
|
cmake_policy(SET CMP0114 NEW)
|
|
|
|
else()
|
|
|
|
# This test is very noisy with warnings about this policy if we don't
|
|
|
|
# explicitly set it. Projects shouldn't do this, but for test code this
|
|
|
|
# is reasonable.
|
|
|
|
cmake_policy(SET CMP0114 OLD)
|
|
|
|
endif()
|
|
|
|
cmake_policy(GET CMP0114 cmp0114)
|
|
|
|
|
|
|
|
include(ExternalProject)
|
|
|
|
|
|
|
|
find_package(Git)
|
|
|
|
|
|
|
|
option(ExternalProjectUpdateTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
|
|
|
|
if(ExternalProjectUpdateTest_USE_FOLDERS)
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
else()
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
|
|
|
|
"CMakePredefinedTargets-in-ExternalProjectUpdateTest")
|
|
|
|
|
|
|
|
set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
|
|
|
|
set(binary_base "${base}/Build")
|
|
|
|
set_property(DIRECTORY PROPERTY EP_BASE ${base})
|
|
|
|
if(cmp0114 STREQUAL "NEW")
|
|
|
|
set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test update)
|
|
|
|
set(TestUpdateCommand_STEP_TARGETS STEP_TARGETS update)
|
|
|
|
set(TestUpdateCommand_INDEPENDENT_STEP_TARGETS)
|
|
|
|
else()
|
|
|
|
set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
|
|
|
|
set_property(DIRECTORY PROPERTY EP_INDEPENDENT_STEP_TARGETS update)
|
|
|
|
set(TestUpdateCommand_STEP_TARGETS)
|
|
|
|
set(TestUpdateCommand_INDEPENDENT_STEP_TARGETS INDEPENDENT_STEP_TARGETS update)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
ExternalProject_Add(TestUpdateCommand
|
|
|
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
|
UPDATE_COMMAND ${CMAKE_COMMAND} -E echo update
|
|
|
|
UPDATE_DISCONNECTED 1
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
BUILD_COMMAND ""
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
${TestUpdateCommand_STEP_TARGETS}
|
|
|
|
${TestUpdateCommand_INDEPENDENT_STEP_TARGETS}
|
|
|
|
)
|
|
|
|
add_custom_target(TestUpdateCommandDriver ALL)
|
|
|
|
add_dependencies(TestUpdateCommandDriver TestUpdateCommand-update)
|
|
|
|
|
|
|
|
set(do_git_tests 0)
|
|
|
|
|
|
|
|
if(GIT_EXECUTABLE)
|
|
|
|
set(do_git_tests 1)
|
|
|
|
|
|
|
|
message(STATUS "GIT_VERSION_STRING='${GIT_VERSION_STRING}'")
|
|
|
|
|
|
|
|
if("${GIT_VERSION_STRING}" VERSION_LESS 1.6.5)
|
|
|
|
message(STATUS "No ExternalProject git tests with git client less than version 1.6.5")
|
|
|
|
set(do_git_tests 0)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# This should be specified from the command line.
|
|
|
|
if(NOT TEST_GIT_TAG)
|
|
|
|
set(TEST_GIT_TAG origin/master)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(do_git_tests)
|
|
|
|
cmake_path(SET local_git_repo NORMALIZE
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT"
|
|
|
|
)
|
|
|
|
|
|
|
|
# Unzip/untar the git repository in our source folder so that other
|
|
|
|
# projects below may use it to test git args of ExternalProject_Add
|
|
|
|
#
|
|
|
|
set(proj SetupLocalGITRepository)
|
|
|
|
ExternalProject_Add(${proj}
|
|
|
|
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT
|
|
|
|
URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
|
|
|
|
DOWNLOAD_EXTRACT_TIMESTAMP NO
|
|
|
|
BUILD_COMMAND ""
|
|
|
|
CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
)
|
|
|
|
set_property(TARGET ${proj}
|
|
|
|
PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
|
|
|
|
|
|
|
|
set(proj TutorialStep1-GIT)
|
|
|
|
ExternalProject_Add(${proj}
|
|
|
|
GIT_REPOSITORY "${local_git_repo}"
|
|
|
|
GIT_TAG ${TEST_GIT_TAG}
|
|
|
|
GIT_CONFIG "user.email=testauthor@cmake.org"
|
|
|
|
"user.name=testauthor"
|
|
|
|
CMAKE_GENERATOR "${CMAKE_GENERATOR}"
|
|
|
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
)
|
|
|
|
ExternalProject_Add_StepDependencies(${proj} download SetupLocalGITRepository)
|
|
|
|
set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
|
|
|
|
|
|
|
|
set(proj TutorialStep2-GIT)
|
|
|
|
ExternalProject_Add(${proj}
|
|
|
|
GIT_REPOSITORY "${local_git_repo}"
|
|
|
|
GIT_TAG ${TEST_GIT_TAG}
|
|
|
|
CMAKE_GENERATOR "${CMAKE_GENERATOR}"
|
|
|
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
UPDATE_DISCONNECTED 1
|
|
|
|
)
|
|
|
|
ExternalProject_Add_StepDependencies(${proj} download SetupLocalGITRepository)
|
|
|
|
set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# Test the testable built/installed products:
|
|
|
|
#
|
|
|
|
enable_testing()
|
|
|
|
|
|
|
|
|
|
|
|
# Do at least a smoke test of a built executable from each
|
|
|
|
# project's build directory...
|
|
|
|
#
|
|
|
|
# BuildTree tests:
|
|
|
|
#
|
|
|
|
|
|
|
|
if(do_git_tests)
|
|
|
|
add_test(TutorialStep1-GIT
|
|
|
|
"${binary_base}/TutorialStep1-GIT/Tutorial" 81)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
message(STATUS "do_git_tests='${do_git_tests}'")
|
|
|
|
message(STATUS "GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
|