CMake/Tests/VSMidl/CMakeLists.txt
David Cole 262da91e26 Prohibit space in HOME value for VSMidl test.
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.
2011-01-05 11:30:12 -05:00

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}
)