[Cmake-commits] CMake branch, next, updated. v2.8.10.1-943-g76f8ec8

Brad King brad.king at kitware.com
Tue Nov 20 11:46:48 EST 2012


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  76f8ec8733b98de540b2f07dbfb4064a9bc9d583 (commit)
       via  d2536579d51e77827b8e55f39123316324314781 (commit)
      from  700f7b9a9288280855dd1acf652c11c1408b2f39 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=76f8ec8733b98de540b2f07dbfb4064a9bc9d583
commit 76f8ec8733b98de540b2f07dbfb4064a9bc9d583
Merge: 700f7b9 d253657
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 20 11:46:46 2012 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Nov 20 11:46:46 2012 -0500

    Merge topic 'FixAutomocRegression3' into next
    
    d253657 Automoc: fix regression #13667, broken build in phonon


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d2536579d51e77827b8e55f39123316324314781
commit d2536579d51e77827b8e55f39123316324314781
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Nov 19 21:47:20 2012 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Nov 20 11:46:28 2012 -0500

    Automoc: fix regression #13667, broken build in phonon
    
    On some systems, ${QT_INCLUDE_DIR} is reported by gcc as a builtin
    include search dir. Some projects use this information to extend
    CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES.
    In cmake 2.8.10 now the targets are queried for the include directories
    they use. When they return the result, the include dirs contained in
    CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES have been removed.
    In cmake 2.8.9 and below the INCLUDE_DIRECTORIES directory property
    was queried, where this had not been stripped.
    So, in those projects which modify the implicit include dirs variable,
    on systems where ${QT_INCLUDE_DIR} is reported by gcc, this directory,
    e.g. /usr/lib/include/qt/, was not given anymore to moc. This made moc
    not find required headers, so the build broke.
    Simply giving the full CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES to moc
    is no solution either, since moc can't handle some of the headers it
    finds then (https://bugreports.qt-project.org/browse/QTBUG-28045).
    So now cmake checks CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES, and if this
    contains ${QT_INCLUDE_DIR}, and the target reports that it uses
    ${QT_QTCORE_INCLUDE_DIR} but not ${QT_INCLUDE_DIR}, ${QT_INCLUDE_DIR}
    is added to the include dirs given to moc.
    
    Alex

diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx
index 942c7ab..25614b8 100644
--- a/Source/cmQtAutomoc.cxx
+++ b/Source/cmQtAutomoc.cxx
@@ -195,6 +195,34 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
       }
     }
 
+
+  const char* qtIncDir = 0;
+  const char* qtCoreIncDir = 0;
+
+  // check whether ${QT_INCLUDE_DIR} is part of the implicit include dirs,
+  // see http://public.kitware.com/Bug/view.php?id=13667
+  bool qtIncludeDirMayHaveBeenRemoved = false;
+  if (makefile->IsSet("QT_INCLUDE_DIR"))
+    {
+    qtIncDir = makefile->GetDefinition("QT_INCLUDE_DIR");
+    std::string s =
+         makefile->GetSafeDefinition("CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES");
+    std::vector<std::string> implIncDirs;
+    cmSystemTools::ExpandListArgument(s, implIncDirs);
+    if (std::find(implIncDirs.begin(), implIncDirs.end(),std::string(qtIncDir))
+                                                          != implIncDirs.end())
+      {
+      qtIncludeDirMayHaveBeenRemoved = true;
+      if (makefile->IsSet("QT_QTCORE_INCLUDE_DIR"))
+        {
+        qtCoreIncDir = makefile->GetDefinition("QT_QTCORE_INCLUDE_DIR");
+        }
+      }
+    }
+
+  bool haveQtCoreIncDir = false;
+  bool haveQtIncDir = false;
+
   std::vector<std::string> includeDirs;
   cmGeneratorTarget gtgt(target);
   localGen->GetIncludeDirectories(includeDirs, &gtgt, "CXX");
@@ -207,6 +235,37 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
     _moc_incs += sep;
     sep = ";";
     _moc_incs += *incDirIt;
+
+    if (qtIncludeDirMayHaveBeenRemoved && qtCoreIncDir && qtIncDir) // #13667
+      {
+      if (*incDirIt == qtIncDir)
+        {
+        haveQtIncDir = true;
+        qtIncludeDirMayHaveBeenRemoved = false; // it's here, i.e. not removed
+        }
+      if (*incDirIt == qtCoreIncDir)
+        {
+        haveQtCoreIncDir = true;
+        }
+      }
+    }
+
+  // Some projects (kdelibs, phonon) query the compiler for its default
+  // include search dirs, and add those to
+  // CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES.
+  // These may include e.g./usr/lib/qt/include . This is typically also part
+  // of ${QT_INCLUDES}. If this directory is then contained in the implicit
+  // include dirs, it is removed from the include dirs returned from the
+  // target above. So we add ${QT_INCLUDE_DIR} manually for moc if we detected
+  // that ${QT_QTCORE_INCLUDE_DIR} is among the include dirs (there shouldn't
+  // be a way to use Qt4 without using ${QT_QTCORE_INCLUDE_DIR} I think.
+  // See #13646 and #13667.
+  if (qtIncludeDirMayHaveBeenRemoved && qtCoreIncDir && qtIncDir
+      && (haveQtCoreIncDir == true) && (haveQtIncDir == false))
+    {
+    _moc_incs += sep;
+    sep = ";";
+    _moc_incs += qtIncDir;
     }
 
   const char* tmp = target->GetProperty("COMPILE_DEFINITIONS");

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list