mirror of
https://github.com/reactos/CMake.git
synced 2024-12-18 17:16:58 +00:00
262da91e26
Some Windows machines actually define HOME in their environment. And some of them actually put a directory with a space in the name as the value. Make sure the HOME value (CMake variable) in this CMakeLists file does not contain a space.
82 lines
2.7 KiB
CMake
82 lines
2.7 KiB
CMake
# 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 2.8)
|
|
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 remove_directory "${source_dir}"
|
|
BUILD_COMMAND ${CMAKE_COMMAND} -E remove_directory "${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}
|
|
)
|