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.
This commit is contained in:
Stephen Kelly 2014-01-29 16:57:09 +01:00
parent f7ae1d8ad6
commit 1fc9ecfae6
3 changed files with 27 additions and 2 deletions

View File

@ -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()

View File

@ -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()

View File

@ -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)