Merge topic 'GNUInstallDirs-dir'

a61007b3b0 Tests: Add RunCMake.GNUInstallDirs case for get_absolute_install_dir
229b5ee994 GNUInstallDirs: Add dir argument to GNUInstallDirs_get_absolute_install_dir

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5450
This commit is contained in:
Brad King
2020-11-05 12:56:20 +00:00
committed by Kitware Robot
4 changed files with 47 additions and 6 deletions

View File

@@ -113,7 +113,7 @@ Macros
::
GNUInstallDirs_get_absolute_install_dir(absvar var)
GNUInstallDirs_get_absolute_install_dir(absvar var dirname)
Set the given variable ``absvar`` to the absolute path contained
within the variable ``var``. This is to allow the computation of an
@@ -121,7 +121,8 @@ Macros
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.
absolute paths where necessary, using the same logic. ``dirname`` is
the directory name to get, e.g. ``BINDIR``.
#]=======================================================================]
cmake_policy(PUSH)
@@ -334,13 +335,25 @@ mark_as_advanced(
)
macro(GNUInstallDirs_get_absolute_install_dir absvar var)
set(GGAID_extra_args ${ARGN})
list(LENGTH GGAID_extra_args GGAID_extra_arg_count)
if(GGAID_extra_arg_count GREATER 0)
list(GET GGAID_extra_args 0 GGAID_dir)
else()
# Historical behaviour: use ${dir} from caller's scope
set(GGAID_dir "${dir}")
message(AUTHOR_WARNING
"GNUInstallDirs_get_absolute_install_dir called without third argument. "
"Using \${dir} from the caller's scope for compatibility with CMake 3.19 and below.")
endif()
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" OR "${dir}" STREQUAL "RUNSTATEDIR")
if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
set(${absvar} "/${${var}}")
else()
if (NOT "${${var}}" MATCHES "^usr/")
@@ -349,13 +362,13 @@ macro(GNUInstallDirs_get_absolute_install_dir absvar var)
set(${absvar} "/${${var}}")
endif()
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR" OR "${dir}" STREQUAL "RUNSTATEDIR")
if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
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" OR "${dir}" STREQUAL "RUNSTATEDIR")
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}}")
@@ -366,6 +379,10 @@ macro(GNUInstallDirs_get_absolute_install_dir absvar var)
else()
set(${absvar} "${${var}}")
endif()
unset(GGAID_dir)
unset(GGAID_extra_arg_count)
unset(GGAID_extra_args)
endmacro()
# Result directories
@@ -388,7 +405,7 @@ foreach(dir
MANDIR
DOCDIR
)
GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir})
GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir} ${dir})
endforeach()
cmake_policy(POP)

View File

@@ -0,0 +1,12 @@
^PROJ1_FULL_BINDIR='/usr/bin'
CMake Warning \(dev\) at [^
]*/Modules/GNUInstallDirs.cmake:[0-9]+ \(message\):
GNUInstallDirs_get_absolute_install_dir called without third argument.
Using \${dir} from the caller's scope for compatibility with CMake 3.19 and
below.
Call Stack \(most recent call first\):
GetAbs.cmake:10 \(GNUInstallDirs_get_absolute_install_dir\)
CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.
+
PROJ2_FULL_BINDIR='/usr/bin'$

View File

@@ -0,0 +1,11 @@
set(CMAKE_SIZEOF_VOID_P 8)
set(CMAKE_LIBRARY_ARCHITECTURE "arch")
set(CMAKE_INSTALL_PREFIX /usr)
include(GNUInstallDirs)
GNUInstallDirs_get_absolute_install_dir(PROJ1_FULL_BINDIR CMAKE_INSTALL_BINDIR BINDIR)
message("PROJ1_FULL_BINDIR='${PROJ1_FULL_BINDIR}'")
set(dir BINDIR)
GNUInstallDirs_get_absolute_install_dir(PROJ2_FULL_BINDIR CMAKE_INSTALL_BINDIR)
message("PROJ2_FULL_BINDIR='${PROJ2_FULL_BINDIR}'")

View File

@@ -21,4 +21,5 @@ foreach(case
unset(RunCMake-stderr-file)
endforeach()
run_cmake(GetAbs)
run_cmake(NoSystem)