diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake
index d626688c5f..bf849b3919 100644
--- a/Modules/GNUInstallDirs.cmake
+++ b/Modules/GNUInstallDirs.cmake
@@ -90,6 +90,10 @@ where ``
`` is one of:
:variable:`CMAKE_INSTALL_PREFIX` is ``/usr``.
When cross-compiling, the default is ``lib``.
+ In projects that enable no languages, e.g.,
+ ``project(... LANGUAGES NONE)``, no target architecture information
+ is available, so the default is ``lib``.
+
.. note::
When an alternative installation prefix is specified with the
@@ -444,10 +448,13 @@ set(_GNUInstallDirs_DATAROOTDIR_DEFAULT "share")
function(_GNUInstallDirs_LIBDIR_get_default out_var install_prefix)
set(${out_var} "${_GNUInstallDirs_LIBDIR_DEFAULT}")
- if (NOT DEFINED CMAKE_SYSTEM_NAME OR NOT DEFINED CMAKE_SIZEOF_VOID_P)
- message(AUTHOR_WARNING
- "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
- "Please enable at least one language before including GNUInstallDirs.")
+ if(NOT DEFINED CMAKE_SYSTEM_NAME)
+ message(AUTHOR_WARNING "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target platform is known.")
+ elseif(NOT DEFINED CMAKE_SIZEOF_VOID_P)
+ get_property(_enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+ if(NOT _enabled_languages STREQUAL "NONE")
+ message(AUTHOR_WARNING "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known.")
+ endif()
endif()
# When not cross-compiling, detect the host distro's arch-specific 'lib'.
diff --git a/Tests/RunCMake/GNUInstallDirs/NoArch-stderr.txt b/Tests/RunCMake/GNUInstallDirs/NoArch-stderr.txt
new file mode 100644
index 0000000000..723630d7f1
--- /dev/null
+++ b/Tests/RunCMake/GNUInstallDirs/NoArch-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Warning \(author\) at .*/Modules/GNUInstallDirs\.cmake:[0-9]+ \(message\):
+ Unable to determine default CMAKE_INSTALL_LIBDIR directory because no
+ target architecture is known\.
+Call Stack \(most recent call first\):
+ .*GNUInstallDirs\.cmake:[0-9]+ \(_GNUInstallDirs_LIBDIR_get_default\)
+ .*GNUInstallDirs\.cmake:[0-9]+ \(cmake_language\)
+ .*GNUInstallDirs\.cmake:[0-9]+ \(_GNUInstallDirs_cache_path\)
+ NoArch\.cmake:[0-9]+ \(include\)
+ CMakeLists\.txt:[0-9]+ \(include\)
+This warning is for project developers\. Use -Wno-author to suppress it\.$
diff --git a/Tests/RunCMake/GNUInstallDirs/NoArch.cmake b/Tests/RunCMake/GNUInstallDirs/NoArch.cmake
new file mode 100644
index 0000000000..a360f54fcd
--- /dev/null
+++ b/Tests/RunCMake/GNUInstallDirs/NoArch.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+unset(CMAKE_SIZEOF_VOID_P)
+include(GNUInstallDirs)
diff --git a/Tests/RunCMake/GNUInstallDirs/NoLanguages.cmake b/Tests/RunCMake/GNUInstallDirs/NoLanguages.cmake
new file mode 100644
index 0000000000..133ca8f605
--- /dev/null
+++ b/Tests/RunCMake/GNUInstallDirs/NoLanguages.cmake
@@ -0,0 +1 @@
+include(GNUInstallDirs)
diff --git a/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt b/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt
index a0039c62a0..5c5b7234b8 100644
--- a/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt
+++ b/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt
@@ -1,7 +1,6 @@
^CMake Warning \(author\) at .*/Modules/GNUInstallDirs\.cmake:[0-9]+ \(message\):
Unable to determine default CMAKE_INSTALL_LIBDIR directory because no
- target architecture is known\. Please enable at least one language before
- including GNUInstallDirs\.
+ target platform is known\.
Call Stack \(most recent call first\):
.*GNUInstallDirs\.cmake:[0-9]+ \(_GNUInstallDirs_LIBDIR_get_default\)
.*GNUInstallDirs\.cmake:[0-9]+ \(cmake_language\)
diff --git a/Tests/RunCMake/GNUInstallDirs/RunCMakeTest.cmake b/Tests/RunCMake/GNUInstallDirs/RunCMakeTest.cmake
index 7c087f221f..ebd7130492 100644
--- a/Tests/RunCMake/GNUInstallDirs/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GNUInstallDirs/RunCMakeTest.cmake
@@ -38,6 +38,8 @@ block()
endblock()
run_cmake(GetAbs)
+run_cmake(NoArch)
+run_cmake(NoLanguages)
run_cmake(NoSystem)
foreach(case