Browse Source

CMake: Use `CMAKE_FIND_PACKAGE_PREFER_CONFIG` to control `find_package` override

Sam Edwards 6 years ago
parent
commit
b00d7b23bc
2 changed files with 23 additions and 18 deletions
  1. 22 18
      cmake/macros/PackageConfig.cmake
  2. 1 0
      dtool/CompilerFlags.cmake

+ 22 - 18
cmake/macros/PackageConfig.cmake

@@ -483,24 +483,28 @@ endfunction(export_targets)
 #
 # find_package
 #
-# This override is necessary because CMake's default behavior is to run
-# find_package in MODULE mode, *then* in CONFIG mode.  This is silly!  CONFIG
-# mode makes more sense to be done first, since any system config file will
-# know vastly more about the package's configuration than a module can hope to
-# guess.
-#
-macro(find_package name)
-  if(";${ARGN};" MATCHES ";(CONFIG|MODULE|NO_MODULE);")
-    # Caller explicitly asking for a certain mode; so be it.
-    _find_package(${ARGV})
+# This override implements CMAKE_FIND_PACKAGE_PREFER_CONFIG on versions of
+# CMake too old to include it.
+#
+if(CMAKE_VERSION VERSION_LESS "3.15")
+  macro(find_package name)
+    if(";${ARGN};" MATCHES ";(CONFIG|MODULE|NO_MODULE);")
+      # Caller explicitly asking for a certain mode; so be it.
+      _find_package(${ARGV})
+
+    elseif(CMAKE_FIND_PACKAGE_PREFER_CONFIG)
+      # Try CONFIG
+      _find_package("${name}" CONFIG ${ARGN})
+
+      if(NOT ${name}_FOUND)
+        # CONFIG didn't work, fall back to MODULE
+        _find_package("${name}" MODULE ${ARGN})
+      endif()
 
-  else()
-    # Try CONFIG
-    _find_package("${name}" CONFIG ${ARGN})
+    else()
+      # Default behavior
+      _find_package(${ARGV})
 
-    if(NOT ${name}_FOUND)
-      # CONFIG didn't work, fall back to MODULE
-      _find_package("${name}" MODULE ${ARGN})
     endif()
-  endif()
-endmacro(find_package)
+  endmacro(find_package)
+endif()

+ 1 - 0
dtool/CompilerFlags.cmake

@@ -67,6 +67,7 @@ endif()
 # Set certain CMake flags we expect
 set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
 
 # Set up the output directory structure, mimicking that of makepanda
 set(CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}/cmake")