Преглед на файлове

Merge branch 'backport-autogen-qt-version-from-dirprops' into release-3.13

Merge-request: !2883
Brad King преди 6 години
родител
ревизия
1faebf33f4

+ 12 - 0
Source/cmQtAutoGenInitializer.cxx

@@ -1281,6 +1281,12 @@ cmQtAutoGenInitializer::IntegerVersion cmQtAutoGenInitializer::GetQtVersion(
   if (qtMajor.empty()) {
     qtMajor = makefile->GetSafeDefinition("Qt5Core_VERSION_MAJOR");
   }
+  if (qtMajor.empty()) {
+    const char* dirprop = makefile->GetProperty("Qt5Core_VERSION_MAJOR");
+    if (dirprop) {
+      qtMajor = dirprop;
+    }
+  }
   {
     const char* targetQtVersion =
       target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", "");
@@ -1294,6 +1300,12 @@ cmQtAutoGenInitializer::IntegerVersion cmQtAutoGenInitializer::GetQtVersion(
   if (!qtMajor.empty()) {
     if (qtMajor == "5") {
       qtMinor = makefile->GetSafeDefinition("Qt5Core_VERSION_MINOR");
+      if (qtMinor.empty()) {
+        const char* dirprop = makefile->GetProperty("Qt5Core_VERSION_MINOR");
+        if (dirprop) {
+          qtMinor = dirprop;
+        }
+      }
     }
     if (qtMinor.empty()) {
       qtMinor = makefile->GetSafeDefinition("QT_VERSION_MINOR");

+ 13 - 0
Tests/RunCMake/Autogen/QtInFunction.cmake

@@ -0,0 +1,13 @@
+enable_language(CXX)
+
+function (use_autogen target)
+  find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
+  set(Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}" PARENT_SCOPE)
+  set(Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MINOR}" PARENT_SCOPE)
+  set_property(TARGET "${target}" PROPERTY AUTOMOC 1)
+  set_property(TARGET "${target}" PROPERTY AUTORCC 1)
+  set_property(TARGET "${target}" PROPERTY AUTOUIC 1)
+endfunction ()
+
+add_executable(main empty.cpp)
+use_autogen(main)

+ 8 - 0
Tests/RunCMake/Autogen/QtInFunctionNested-stderr.txt

@@ -0,0 +1,8 @@
+^CMake Warning \(dev\) in CMakeLists.txt:
+  AUTOGEN: No valid Qt version found for target main.  AUTOMOC, AUTOUIC,
+  AUTORCC disabled.  Consider adding:
+
+    find_package\(Qt5 COMPONENTS Widgets\)
+
+  to your CMakeLists.txt file.
+This warning is for project developers.  Use -Wno-dev to suppress it.

+ 17 - 0
Tests/RunCMake/Autogen/QtInFunctionNested.cmake

@@ -0,0 +1,17 @@
+enable_language(CXX)
+
+function (use_autogen target)
+  find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
+  set(Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}" PARENT_SCOPE)
+  set(Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MINOR}" PARENT_SCOPE)
+  set_property(TARGET "${target}" PROPERTY AUTOMOC 1)
+  set_property(TARGET "${target}" PROPERTY AUTORCC 1)
+  set_property(TARGET "${target}" PROPERTY AUTOUIC 1)
+endfunction ()
+
+function (wrap_autogen target)
+  use_autogen("${target}")
+endfunction ()
+
+add_executable(main empty.cpp)
+wrap_autogen(main)

+ 21 - 0
Tests/RunCMake/Autogen/QtInFunctionProperty.cmake

@@ -0,0 +1,21 @@
+enable_language(CXX)
+
+function (use_autogen target)
+  find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
+  set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+    PROPERTY
+      Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}")
+  set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+    PROPERTY
+      Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MINOR}")
+  set_property(TARGET "${target}" PROPERTY AUTOMOC 1)
+  set_property(TARGET "${target}" PROPERTY AUTORCC 1)
+  set_property(TARGET "${target}" PROPERTY AUTOUIC 1)
+endfunction ()
+
+function (wrap_autogen target)
+  use_autogen("${target}")
+endfunction ()
+
+add_executable(main empty.cpp)
+wrap_autogen(main)

+ 5 - 0
Tests/RunCMake/Autogen/RunCMakeTest.cmake

@@ -1,3 +1,8 @@
 include(RunCMake)
 
 run_cmake(NoQt)
+if (with_qt5)
+  run_cmake(QtInFunction)
+  run_cmake(QtInFunctionNested)
+  run_cmake(QtInFunctionProperty)
+endif ()

+ 8 - 1
Tests/RunCMake/CMakeLists.txt

@@ -142,7 +142,14 @@ if(NOT CMake_TEST_EXTERNAL_CMAKE)
 endif()
 
 add_RunCMake_test(AndroidTestUtilities)
-add_RunCMake_test(Autogen)
+set(autogen_with_qt5 FALSE)
+if(CMake_TEST_Qt5)
+  find_package(Qt5Widgets QUIET NO_MODULE)
+endif()
+if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
+  set(autogen_with_qt5 TRUE)
+endif ()
+add_RunCMake_test(Autogen -Dwith_qt5=${autogen_with_qt5})
 add_RunCMake_test(BuildDepends)
 if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
   add_RunCMake_test(Byproducts)