Browse Source

Use the qt5::moc imported target instead of a variable.

The variable is provided in the Qt5 config files only for compatibility
with this automoc feature, so use the more-future-proof method instead.
Stephen Kelly 12 years ago
parent
commit
f776316721
2 changed files with 18 additions and 1 deletions
  1. 1 1
      Modules/AutomocInfo.cmake.in
  2. 17 0
      Source/cmQtAutomoc.cxx

+ 1 - 1
Modules/AutomocInfo.cmake.in

@@ -6,7 +6,7 @@ set(AM_MOC_OPTIONS @_moc_options@)
 set(AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE "@CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE@")
 set(AM_CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@/")
 set(AM_CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@/")
-set(AM_QT_MOC_EXECUTABLE "@QT_MOC_EXECUTABLE@")
+set(AM_QT_MOC_EXECUTABLE "@_qt_moc_executable@")
 set(AM_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@/")
 set(AM_CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/")
 set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" )

+ 17 - 0
Source/cmQtAutomoc.cxx

@@ -309,6 +309,23 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
           cmLocalGenerator::EscapeForCMake(_moc_headers.c_str()).c_str());
   makefile->AddDefinition("_moc_relaxed_mode", relaxedMode ? "TRUE" : "FALSE");
 
+  if (makefile->GetDefinition("Qt5Core_VERSION_MAJOR"))
+    {
+    cmTarget *qt5Moc = makefile->FindTargetToUse("Qt5::moc");
+    if (!qt5Moc)
+      {
+      cmSystemTools::Error("Qt5::moc target not found ",
+                          automocTargetName.c_str());
+      return;
+      }
+    makefile->AddDefinition("_qt_moc_executable", qt5Moc->GetLocation(0));
+    }
+  else
+    {
+    const char *qtMoc = makefile->GetSafeDefinition("QT_MOC_EXECUTABLE");
+    makefile->AddDefinition("_qt_moc_executable", qtMoc);
+    }
+
   const char* cmakeRoot = makefile->GetSafeDefinition("CMAKE_ROOT");
   std::string inputFile = cmakeRoot;
   inputFile += "/Modules/AutomocInfo.cmake.in";