Browse Source

Merge topic 'fix-automoc-no-qt'

a223a3b Automoc: Don't create automoc targets if Qt is not used (#13999)
65b5c1e Merge branch 'property-link-depends-no-crash' into fix-automoc-no-qt
Brad King 12 years ago
parent
commit
26bfece1af

+ 4 - 2
Source/cmGlobalGenerator.cxx

@@ -1086,8 +1086,10 @@ void cmGlobalGenerator::CreateAutomocTargets()
         if(target.GetPropertyAsBool("AUTOMOC") && !target.IsImported())
           {
           cmQtAutomoc automoc;
-          automoc.InitializeMocSourceFile(&target);
-          automocs.push_back(std::make_pair(automoc, &target));
+          if(automoc.InitializeMocSourceFile(&target))
+            {
+            automocs.push_back(std::make_pair(automoc, &target));
+            }
           }
         }
       }

+ 14 - 12
Source/cmQtAutomoc.cxx

@@ -119,10 +119,21 @@ cmQtAutomoc::cmQtAutomoc()
     }
 }
 
-void cmQtAutomoc::InitializeMocSourceFile(cmTarget* target)
+bool cmQtAutomoc::InitializeMocSourceFile(cmTarget* target)
 {
+  cmMakefile* makefile = target->GetMakefile();
+  // don't do anything if there is no Qt4 or Qt5Core (which contains moc):
+  std::string qtMajorVersion = makefile->GetSafeDefinition("QT_VERSION_MAJOR");
+  if (qtMajorVersion == "")
+    {
+    qtMajorVersion = makefile->GetSafeDefinition("Qt5Core_VERSION_MAJOR");
+    }
+  if (qtMajorVersion != "4" && qtMajorVersion != "5")
+    {
+    return false;
+    }
+
   std::string automocTargetName = target->GetName();
-  cmMakefile *makefile = target->GetMakefile();
   automocTargetName += "_automoc";
   std::string mocCppFile = makefile->GetCurrentOutputDirectory();
   mocCppFile += "/";
@@ -134,6 +145,7 @@ void cmQtAutomoc::InitializeMocSourceFile(cmTarget* target)
                            mocCppFile.c_str(), false);
 
   target->AddSourceFile(mocCppSource);
+  return true;
 }
 
 void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
@@ -141,16 +153,6 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
   cmMakefile* makefile = target->GetMakefile();
   cmLocalGenerator* localGen = makefile->GetLocalGenerator();
   const char* targetName = target->GetName();
-  // don't do anything if there is no Qt4 or Qt5Core (which contains moc):
-  std::string qtMajorVersion = makefile->GetSafeDefinition("QT_VERSION_MAJOR");
-  if (qtMajorVersion == "")
-    {
-    qtMajorVersion = makefile->GetSafeDefinition("Qt5Core_VERSION_MAJOR");
-    }
-  if (qtMajorVersion != "4" && qtMajorVersion != "5")
-    {
-    return;
-    }
 
   bool relaxedMode = makefile->IsOn("CMAKE_AUTOMOC_RELAXED_MODE");
 

+ 1 - 1
Source/cmQtAutomoc.h

@@ -23,7 +23,7 @@ public:
   cmQtAutomoc();
   bool Run(const char* targetDirectory);
 
-  void InitializeMocSourceFile(cmTarget* target);
+  bool InitializeMocSourceFile(cmTarget* target);
   void SetupAutomocTarget(cmTarget* target);
 
 private:

+ 10 - 0
Tests/CMakeLists.txt

@@ -993,6 +993,16 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Environment")
 
+  add_test(QtAutomocNoQt  ${CMAKE_CTEST_COMMAND}
+    --build-and-test
+    "${CMake_SOURCE_DIR}/Tests/QtAutomocNoQt"
+    "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt"
+    ${build_generator_args}
+    --build-project QtAutomocNoQt
+    --build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
+    )
+  list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt")
+
   if(QT4_WORKS AND QT_QTGUI_FOUND)
     add_test(QtAutomoc ${CMAKE_CTEST_COMMAND}
       --build-and-test

+ 7 - 0
Tests/QtAutomocNoQt/CMakeLists.txt

@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(QtAutomocNoQt)
+
+set(CMAKE_AUTOMOC ON)
+
+add_executable(hello main.c)

+ 4 - 0
Tests/QtAutomocNoQt/main.c

@@ -0,0 +1,4 @@
+int main(void)
+{
+  return 0;
+}