Ver código fonte

FindQt4: Make AUTOMOC work regardless which order Qt 4/5 is found.

Commit 321e348e (QtAutogen: Use Qt 4 IMPORTED targets to find
executable locations., 2014-01-24) attempted to fix this problem,
but only solved it for a particular ordering of find_package for
Qt 4 and Qt 5.

Add a test to ensure that it works with both orderings.
Stephen Kelly 12 anos atrás
pai
commit
1fc9ecfae6
3 arquivos alterados com 27 adições e 2 exclusões
  1. 8 0
      Modules/FindQt4.cmake
  2. 12 0
      Tests/CMakeLists.txt
  3. 7 2
      Tests/Qt4And5Automoc/CMakeLists.txt

+ 8 - 0
Modules/FindQt4.cmake

@@ -589,6 +589,14 @@ _qt4_find_qmake("${_QT4_QMAKE_NAMES}" QT_QMAKE_EXECUTABLE QTVERSION)
 
 if (QT_QMAKE_EXECUTABLE AND QTVERSION)
 
+  if (Qt5Core_FOUND)
+    # Qt5CoreConfig sets QT_MOC_EXECUTABLE as a non-cache variable to the Qt 5
+    # path to moc.  Unset that variable when Qt 4 and 5 are used together, so
+    # that when find_program looks for moc, it is not set to the Qt 5 version.
+    # If FindQt4 has already put the Qt 4 path in the cache, the unset()
+    # command 'unhides' the (correct) cache variable.
+    unset(QT_MOC_EXECUTABLE)
+  endif()
   if (QT_QMAKE_EXECUTABLE_LAST)
     string(COMPARE NOTEQUAL "${QT_QMAKE_EXECUTABLE_LAST}" "${QT_QMAKE_EXECUTABLE}" QT_QMAKE_CHANGED)
   endif()

+ 12 - 0
Tests/CMakeLists.txt

@@ -1168,6 +1168,18 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         --test-command ${CMAKE_CTEST_COMMAND} -V
         )
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4And5Automoc")
+      add_test(Qt4And5AutomocReverse ${CMAKE_CTEST_COMMAND}
+        --build-and-test
+        "${CMake_SOURCE_DIR}/Tests/Qt4And5Automoc"
+        "${CMake_BINARY_DIR}/Tests/Qt4And5AutomocReverse"
+        ${build_generator_args}
+        --build-project Qt4And5Automoc
+        --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4And5AutomocReverse"
+        --force-new-ctest-process
+        --build-options ${build_options} -DQT_REVERSE_FIND_ORDER=1
+        --test-command ${CMAKE_CTEST_COMMAND} -V
+        )
+      list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4And5AutomocReverse")
     endif()
   endif()
 

+ 7 - 2
Tests/Qt4And5Automoc/CMakeLists.txt

@@ -2,8 +2,13 @@ cmake_minimum_required(VERSION 2.8.12)
 
 project(Qt4And5Automoc)
 
-find_package(Qt4 REQUIRED)
-find_package(Qt5Core REQUIRED)
+if (QT_REVERSE_FIND_ORDER)
+  find_package(Qt5Core REQUIRED)
+  find_package(Qt4 REQUIRED)
+else()
+  find_package(Qt4 REQUIRED)
+  find_package(Qt5Core REQUIRED)
+endif()
 
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)