Bladeren bron

Merge topic 'GNUInstallDirs-cached-default' into release-4.1

2e88a3efc2 GNUInstallDirs: Fix regression on -DCMAKE_INSTALL_<dir>=<default> in /usr

Acked-by: Kitware Robot <[email protected]>
Merge-request: !11167
Brad King 4 maanden geleden
bovenliggende
commit
31fd368e80

+ 5 - 3
Modules/GNUInstallDirs.cmake

@@ -257,15 +257,16 @@ function(_GNUInstallDirs_cache_path var description)
   if(COMMAND _GNUInstallDirs_${var}_get_default)
     # Check if the current CMAKE_INSTALL_PREFIX is the same as before
     set(install_prefix_is_same TRUE)
-    set(last_default "${default}")
-    if(NOT DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
-        OR NOT _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX STREQUAL CMAKE_INSTALL_PREFIX)
+    unset(last_default)
+    if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
+        AND NOT _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX STREQUAL CMAKE_INSTALL_PREFIX)
       set(install_prefix_is_same FALSE)
       # Recalculate what the last default would have been
       cmake_language(CALL _GNUInstallDirs_${var}_get_default
         last_default
         "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}")
     endif()
+
     if(DEFINED CACHE{${cmake_install_var}} AND install_prefix_is_same)
       # If the cache variable was already set from a previous run and the
       # install prefix has not changed, we don't need to do anything
@@ -278,6 +279,7 @@ function(_GNUInstallDirs_cache_path var description)
       # if the current value is the same as the cache value and the same as
       # the old default, reset the value to the new default
       if(${cmake_install_var} STREQUAL "$CACHE{${cmake_install_var}}"
+          AND DEFINED last_default
           AND ${cmake_install_var} STREQUAL last_default)
         set(full_description "${description} (${default})")
         set_property(CACHE ${cmake_install_var} PROPERTY TYPE PATH)

+ 0 - 1
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults.cmake → Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Common.cmake

@@ -1,6 +1,5 @@
 set(CMAKE_SIZEOF_VOID_P 8)
 set(CMAKE_LIBRARY_ARCHITECTURE "arch")
-set(CMAKE_INSTALL_PREFIX "/usr/local")
 include(GNUInstallDirs)
 set(dirs
   BINDIR

+ 6 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Opt-stdout.txt

@@ -0,0 +1,6 @@
+-- CMAKE_INSTALL_BINDIR='bin'
+-- CMAKE_INSTALL_INCLUDEDIR='include'
+-- CMAKE_INSTALL_LIBDIR='lib'
+-- CMAKE_INSTALL_FULL_BINDIR='/opt/bin'
+-- CMAKE_INSTALL_FULL_INCLUDEDIR='/opt/include'
+-- CMAKE_INSTALL_FULL_LIBDIR='/opt/lib'

+ 2 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Opt.cmake

@@ -0,0 +1,2 @@
+set(CMAKE_INSTALL_PREFIX "/opt")
+include(ExplicitDefaults-Common.cmake)

+ 6 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Root-stdout.txt

@@ -0,0 +1,6 @@
+-- CMAKE_INSTALL_BINDIR='bin'
+-- CMAKE_INSTALL_INCLUDEDIR='include'
+-- CMAKE_INSTALL_LIBDIR='lib'
+-- CMAKE_INSTALL_FULL_BINDIR='/usr/bin'
+-- CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/include'
+-- CMAKE_INSTALL_FULL_LIBDIR='/usr/lib'

+ 2 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Root.cmake

@@ -0,0 +1,2 @@
+set(CMAKE_INSTALL_PREFIX "/")
+include(ExplicitDefaults-Common.cmake)

+ 6 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Usr-stdout.txt

@@ -0,0 +1,6 @@
+-- CMAKE_INSTALL_BINDIR='bin'
+-- CMAKE_INSTALL_INCLUDEDIR='include'
+-- CMAKE_INSTALL_LIBDIR='lib'
+-- CMAKE_INSTALL_FULL_BINDIR='/usr/bin'
+-- CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/include'
+-- CMAKE_INSTALL_FULL_LIBDIR='/usr/lib'

+ 2 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-Usr.cmake

@@ -0,0 +1,2 @@
+set(CMAKE_INSTALL_PREFIX "/usr")
+include(ExplicitDefaults-Common.cmake)

+ 0 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-stdout.txt → Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-UsrLocal-stdout.txt


+ 2 - 0
Tests/RunCMake/GNUInstallDirs/ExplicitDefaults-UsrLocal.cmake

@@ -0,0 +1,2 @@
+set(CMAKE_INSTALL_PREFIX "/usr/local")
+include(ExplicitDefaults-Common.cmake)

+ 12 - 5
Tests/RunCMake/GNUInstallDirs/RunCMakeTest.cmake

@@ -40,8 +40,15 @@ endblock()
 run_cmake(GetAbs)
 run_cmake(NoSystem)
 
-run_cmake_with_options(ExplicitDefaults
-  -DCMAKE_INSTALL_BINDIR=bin
-  -DCMAKE_INSTALL_INCLUDEDIR=include
-  -DCMAKE_INSTALL_LIBDIR=lib
-)
+foreach(case
+    Opt
+    Root
+    Usr
+    UsrLocal
+    )
+  run_cmake_with_options(ExplicitDefaults-${case}
+    -DCMAKE_INSTALL_BINDIR=bin
+    -DCMAKE_INSTALL_INCLUDEDIR=include
+    -DCMAKE_INSTALL_LIBDIR=lib
+  )
+endforeach()