mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-19 21:01:05 -05:00
Older versions of pkg-config (e.g. 0.21 and 0.22) do not handle correctly spaces in paths specified in .pc files. It breaks RunCMake.FindPkgConfig test, if CMake is built inside path containing spaces. In this case, we check if we're inside such path, and if pkg-config is broken; and if both are true, test is to be skipped.
60 lines
2.1 KiB
CMake
60 lines
2.1 KiB
CMake
include(RunCMake)
|
|
|
|
# Isolate test cases from caller's environment.
|
|
set(ENV{CMAKE_PREFIX_PATH} "")
|
|
set(ENV{CMAKE_APPBUNDLE_PATH} "")
|
|
set(ENV{CMAKE_FRAMEWORK_PATH} "")
|
|
|
|
run_cmake(PkgConfigDoesNotExist)
|
|
|
|
run_cmake(FindPkgConfig_CMP0126_NEW)
|
|
run_cmake(FindPkgConfig_NO_PKGCONFIG_PATH)
|
|
run_cmake(FindPkgConfig_PKGCONFIG_PATH)
|
|
run_cmake(FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_PATH)
|
|
run_cmake(FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_ENVIRONMENT_PATH)
|
|
run_cmake(FindPkgConfig_extract_frameworks)
|
|
run_cmake(FindPkgConfig_GET_MATCHING_ARGN)
|
|
|
|
if(APPLE)
|
|
run_cmake(FindPkgConfig_extract_frameworks_target)
|
|
run_cmake(FindPkgConfig_CMAKE_FRAMEWORK_PATH)
|
|
run_cmake(FindPkgConfig_CMAKE_APPBUNDLE_PATH)
|
|
endif()
|
|
|
|
# We need a real pkg-config to run the test for get_variable.
|
|
find_package(PkgConfig)
|
|
if (PKG_CONFIG_FOUND)
|
|
string(FIND "${CMAKE_CURRENT_BINARY_DIR}" " " IS_SPACES_IN_PATH)
|
|
if(IS_SPACES_IN_PATH GREATER -1)
|
|
string(REPLACE " " "\\ " ESCAPED_ROOT "${CMAKE_CURRENT_BINARY_DIR}")
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_spaces.pc" "
|
|
libdir=${ESCAPED_ROOT}
|
|
Name: test_spaces.pc
|
|
Version: 0.0
|
|
Description: test spaces
|
|
Libs: -L\${libdir}
|
|
")
|
|
set(PKG_CONFIG_PATH_SAVED "$ENV{PKG_CONFIG_PATH}")
|
|
set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_BINARY_DIR}")
|
|
execute_process(COMMAND "${PKG_CONFIG_EXECUTABLE}" --libs test_spaces
|
|
ERROR_QUIET COMMAND_ERROR_IS_FATAL ANY
|
|
OUTPUT_VARIABLE test_spaces_LIBS)
|
|
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH_SAVED}")
|
|
string(STRIP "${test_spaces_LIBS}" test_spaces_LIBS_STRIPPED)
|
|
if(NOT "${test_spaces_LIBS_STRIPPED}" STREQUAL "-L${ESCAPED_ROOT}")
|
|
set(PKG_CONFIG_DONT_SUPPORT_SPACES_IN_PATH TRUE)
|
|
endif()
|
|
endif()
|
|
run_cmake(FindPkgConfig_GET_VARIABLE)
|
|
run_cmake(FindPkgConfig_GET_VARIABLE_PREFIX_PATH)
|
|
run_cmake(FindPkgConfig_GET_VARIABLE_PKGCONFIG_PATH)
|
|
run_cmake(FindPkgConfig_cache_variables)
|
|
run_cmake(FindPkgConfig_IMPORTED_TARGET)
|
|
run_cmake(FindPkgConfig_VERSION_OPERATORS)
|
|
run_cmake(FindPkgConfig_GET_MATCHING_MODULE_NAME)
|
|
run_cmake(FindPkgConfig_empty_target)
|
|
if(NOT PKG_CONFIG_DONT_SUPPORT_SPACES_IN_PATH)
|
|
run_cmake(FindPkgConfig_LIBRARY_PATH)
|
|
endif()
|
|
endif ()
|