Reapply [libcxx] [modules] Fix relative paths with absolute LIBCXX_INSTALL_MODULES_DIR (#86020)
This reapplies 272d1b44efdedb68c194970a610f0ca1b7b769c5 (from #85756), which was reverted in 407937036fa7640f61f225474b1ea6623a40dbdd. In the previous attempt, empty CMAKE_INSTALL_PREFIX was handled by quoting them, in d209d1340b99d4fbd325dffb5e13b757ab8264ea. That made the calls to cmake_path(ABSOLUTE_PATH) succeed, but the output paths of that weren't actually absolute, which was required by file(RELATIVE_PATH). Avoid this issue by constructing a non-empty base directory variable to use for calculating the relative path. (cherry picked from commit 50801f1095d33e712c3a51fdeef82569bd09007f)
This commit is contained in:
parent
cfaeee6a89
commit
0cd4babe03
@ -206,9 +206,20 @@ add_custom_target(generate-cxx-modules
|
||||
# Configure the modules manifest.
|
||||
# Use the relative path between the installation and the module in the json
|
||||
# file. This allows moving the entire installation to a different location.
|
||||
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "")
|
||||
set(BASE_DIRECTORY "/")
|
||||
else()
|
||||
set(BASE_DIRECTORY ${CMAKE_INSTALL_PREFIX})
|
||||
endif()
|
||||
cmake_path(ABSOLUTE_PATH LIBCXX_INSTALL_LIBRARY_DIR
|
||||
BASE_DIRECTORY ${BASE_DIRECTORY}
|
||||
OUTPUT_VARIABLE ABS_LIBRARY_DIR)
|
||||
cmake_path(ABSOLUTE_PATH LIBCXX_INSTALL_MODULES_DIR
|
||||
BASE_DIRECTORY ${BASE_DIRECTORY}
|
||||
OUTPUT_VARIABLE ABS_MODULES_DIR)
|
||||
file(RELATIVE_PATH LIBCXX_MODULE_RELATIVE_PATH
|
||||
${CMAKE_INSTALL_PREFIX}/${LIBCXX_INSTALL_LIBRARY_DIR}
|
||||
${CMAKE_INSTALL_PREFIX}/${LIBCXX_INSTALL_MODULES_DIR})
|
||||
${ABS_LIBRARY_DIR}
|
||||
${ABS_MODULES_DIR})
|
||||
configure_file(
|
||||
"modules.json.in"
|
||||
"${LIBCXX_LIBRARY_DIR}/libc++.modules.json"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user