# This CMakeLists.txt file exists solely to drive the one found in the "src" # subdir as an ExternalProject build. The project in "src" cannot build when # there is a space in the directory name, so we copy that directory to a place # guaranteed not to have a space in the name, build it there, and then copy the # resulting output directory back up here into this CMake test's build tree. # if(NOT DEFINED CMAKE_BUILDNAME) string(REGEX REPLACE "^.*/([^/]+)/[^/]+/([^/]+)$" "\\1" CMAKE_BUILDNAME "${CMAKE_CURRENT_BINARY_DIR}") string(REGEX REPLACE "^.*/([^/]+)/[^/]+/([^/]+)$" "\\2" THIS_TESTNAME "${CMAKE_CURRENT_BINARY_DIR}") string(REPLACE " " "_" CMAKE_BUILDNAME "${CMAKE_BUILDNAME}") endif() message(STATUS "CMAKE_BUILDNAME='${CMAKE_BUILDNAME}'") message(STATUS "THIS_TESTNAME='${THIS_TESTNAME}'") cmake_minimum_required(VERSION 3.5) project(${THIS_TESTNAME}) include(ExternalProject) if(NOT DEFINED HOME) if(DEFINED ENV{CTEST_REAL_HOME}) set(HOME "$ENV{CTEST_REAL_HOME}") else() set(HOME "$ENV{HOME}") endif() if(NOT HOME AND WIN32) # Try for USERPROFILE as HOME equivalent: string(REPLACE "\\" "/" HOME "$ENV{USERPROFILE}") endif() # But just use root of SystemDrive if HOME contains any spaces: # (Default on XP and earlier...) if(HOME MATCHES " " AND WIN32) string(REPLACE "\\" "/" HOME "$ENV{SystemDrive}") endif() if(HOME MATCHES " ") set(HOME "") endif() endif() message(STATUS "HOME='${HOME}'") if(NOT DEFINED url) set(url "${CMAKE_CURRENT_SOURCE_DIR}/src") endif() message(STATUS "url='${url}'") set(base_dir "${HOME}/.cmake/Dashboards/${CMAKE_BUILDNAME}/${THIS_TESTNAME}") set(binary_dir "${base_dir}/build") set(source_dir "${base_dir}/src") # Source dir for this project exists in the CMake source tree, but we cannot # use it in-place since there might be a space in its directory name. # Source dir is therefore copied under a '.cmake/Dashboards' # dir in your HOME directory to give it a name with no spaces. # ExternalProject_Add(clean-${PROJECT_NAME} DOWNLOAD_COMMAND "" CONFIGURE_COMMAND ${CMAKE_COMMAND} -E rm -rf "${source_dir}" BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf "${binary_dir}" INSTALL_COMMAND "" ) ExternalProject_Add(download-${PROJECT_NAME} URL "${url}" SOURCE_DIR "${source_dir}" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" DEPENDS clean-${PROJECT_NAME} ) ExternalProject_Add(build-${PROJECT_NAME} DOWNLOAD_COMMAND "" SOURCE_DIR "${source_dir}" BINARY_DIR "${binary_dir}" INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory "${binary_dir}/${CMAKE_CFG_INTDIR}" "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" DEPENDS download-${PROJECT_NAME} )