1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 14:08:35 +08:00

GNUInstallDirs: Factor out helper for special absolute path logic

Factor out part of `GNUInstallDirs_get_absolute_install_dir`
into a dedicated `_GNUInstallDirs_special_absolute` helper.

Signed-off-by: Cristian Le <git@lecris.dev>
This commit is contained in:
Cristian Le
2025-03-27 19:57:42 +01:00
committed by Brad King
parent 42dfcbf1a5
commit 7566a477f7

View File

@@ -263,6 +263,20 @@ function(_GNUInstallDirs_get_system_type_for_install out_var)
return(PROPAGATE ${out_var}) return(PROPAGATE ${out_var})
endfunction() endfunction()
# Special handler for `/`, `/usr`, `/opt/...` install prefixes
# Used for SYSCONFDIR, LOCALSTATEDIR and RUNSTATEDIR paths
function(_GNUInstallDirs_special_absolute out_var original_path install_prefix)
set(${out_var} "${original_path}")
if(install_prefix MATCHES "^/usr/?$")
set(${out_var} "/${original_path}")
elseif(install_prefix MATCHES "^/opt/" AND NOT install_prefix MATCHES "^/opt/homebrew/")
set(${out_var} "/${original_path}/${install_prefix}")
endif()
return(PROPAGATE ${out_var})
endfunction()
# Installation directories # Installation directories
# #
@@ -449,27 +463,23 @@ macro(GNUInstallDirs_get_absolute_install_dir absvar var)
# - CMAKE_INSTALL_PREFIX == / # - CMAKE_INSTALL_PREFIX == /
# - CMAKE_INSTALL_PREFIX == /usr # - CMAKE_INSTALL_PREFIX == /usr
# - CMAKE_INSTALL_PREFIX == /opt/... # - CMAKE_INSTALL_PREFIX == /opt/...
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/") if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR") _GNUInstallDirs_special_absolute(${absvar} "${${var}}" "${CMAKE_INSTALL_PREFIX}")
set(${absvar} "/${${var}}") # If the CMAKE_INSTALL_PREFIX was not special, the output
else() # is still not absolute, so use the default logic.
if (NOT "${${var}}" MATCHES "^usr/") if(NOT IS_ABSOLUTE "${${absvar}}")
set(${var} "usr/${${var}}") # Make sure we account for any trailing `/`
if(CMAKE_INSTALL_PREFIX MATCHES "/$")
set(${absvar} "${CMAKE_INSTALL_PREFIX}${${var}}")
else()
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif() endif()
set(${absvar} "/${${var}}")
endif() endif()
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$") elseif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR") if (NOT "${${var}}" MATCHES "^usr/")
set(${absvar} "/${${var}}") set(${var} "usr/${${var}}")
else()
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif()
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/" AND NOT "${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/homebrew/")
if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
set(${absvar} "/${${var}}${CMAKE_INSTALL_PREFIX}")
else()
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif() endif()
set(${absvar} "/${${var}}")
else() else()
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}") set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif() endif()