GNUInstallDirs: Add macro to expose internal logic publicly
This commit is contained in:
parent
8317ea01aa
commit
17a24dc3b9
|
@ -0,0 +1,5 @@
|
|||
GNUInstallDirs-function
|
||||
-----------------------
|
||||
|
||||
* The :module:`GNUInstallDirs` module gained a new
|
||||
:command:`GNUInstallDirs_get_absolute_install_dir` command.
|
|
@ -99,6 +99,23 @@
|
|||
# `Filesystem Hierarchy Standard`_.
|
||||
#
|
||||
# .. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
|
||||
#
|
||||
# Macros
|
||||
# ^^^^^^
|
||||
#
|
||||
# .. command:: GNUInstallDirs_get_absolute_install_dir
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# GNUInstallDirs_get_absolute_install_dir(absvar var)
|
||||
#
|
||||
# Set the given variable ``absvar`` to the absolute path contained
|
||||
# within the variable ``var``. This is to allow the computation of an
|
||||
# absolute path, accounting for all the special cases documented
|
||||
# above. While this macro is used to compute the various
|
||||
# ``CMAKE_INSTALL_FULL_<dir>`` variables, it is exposed publicly to
|
||||
# allow users who create additional path variables to also compute
|
||||
# absolute paths where necessary, using the same logic.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2015 Alex Turbov <i.zaufi@gmail.com>
|
||||
|
@ -300,6 +317,41 @@ mark_as_advanced(
|
|||
CMAKE_INSTALL_DOCDIR
|
||||
)
|
||||
|
||||
macro(GNUInstallDirs_get_absolute_install_dir absvar var)
|
||||
if(NOT IS_ABSOLUTE "${${var}}")
|
||||
# Handle special cases:
|
||||
# - CMAKE_INSTALL_PREFIX == /
|
||||
# - CMAKE_INSTALL_PREFIX == /usr
|
||||
# - CMAKE_INSTALL_PREFIX == /opt/...
|
||||
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(${absvar} "/${${var}}")
|
||||
else()
|
||||
if (NOT "${${var}}" MATCHES "^usr/")
|
||||
set(${var} "usr/${${var}}")
|
||||
endif()
|
||||
set(${absvar} "/${${var}}")
|
||||
endif()
|
||||
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(${absvar} "/${${var}}")
|
||||
else()
|
||||
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
endif()
|
||||
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/.*")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(${absvar} "/${${var}}${CMAKE_INSTALL_PREFIX}")
|
||||
else()
|
||||
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
endif()
|
||||
else()
|
||||
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
endif()
|
||||
else()
|
||||
set(${absvar} "${${var}}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Result directories
|
||||
#
|
||||
foreach(dir
|
||||
|
@ -319,36 +371,5 @@ foreach(dir
|
|||
MANDIR
|
||||
DOCDIR
|
||||
)
|
||||
if(NOT IS_ABSOLUTE "${CMAKE_INSTALL_${dir}}")
|
||||
# Handle special cases:
|
||||
# - CMAKE_INSTALL_PREFIX == /
|
||||
# - CMAKE_INSTALL_PREFIX == /usr
|
||||
# - CMAKE_INSTALL_PREFIX == /opt/...
|
||||
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(CMAKE_INSTALL_FULL_${dir} "/${CMAKE_INSTALL_${dir}}")
|
||||
else()
|
||||
if (NOT "${CMAKE_INSTALL_${dir}}" MATCHES "^usr/")
|
||||
set(CMAKE_INSTALL_${dir} "usr/${CMAKE_INSTALL_${dir}}")
|
||||
endif()
|
||||
set(CMAKE_INSTALL_FULL_${dir} "/${CMAKE_INSTALL_${dir}}")
|
||||
endif()
|
||||
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(CMAKE_INSTALL_FULL_${dir} "/${CMAKE_INSTALL_${dir}}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
|
||||
endif()
|
||||
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/.*")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(CMAKE_INSTALL_FULL_${dir} "/${CMAKE_INSTALL_${dir}}${CMAKE_INSTALL_PREFIX}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
|
||||
endif()
|
||||
else()
|
||||
set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
|
||||
endif()
|
||||
else()
|
||||
set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")
|
||||
endif()
|
||||
GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir})
|
||||
endforeach()
|
||||
|
|
Loading…
Reference in New Issue