[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2027-g47298ae

Stephen Kelly steveire at gmail.com
Fri Feb 8 06:55:03 EST 2013


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  47298ae6bc41935bc431e161ea64184e09f49495 (commit)
       via  4de71786e89ba35190e23ae9e1c05f902c5350ff (commit)
      from  a48aed9f06e0c99f393f37e1d929e69853fc95ce (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=47298ae6bc41935bc431e161ea64184e09f49495
commit 47298ae6bc41935bc431e161ea64184e09f49495
Merge: a48aed9 4de7178
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Fri Feb 8 06:54:56 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri Feb 8 06:54:56 2013 -0500

    Merge topic 'minor-fixes' into next
    
    4de7178 Ensure that the build interface includes have been added.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4de71786e89ba35190e23ae9e1c05f902c5350ff
commit 4de71786e89ba35190e23ae9e1c05f902c5350ff
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Feb 7 19:35:00 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Fri Feb 8 12:54:27 2013 +0100

    Ensure that the build interface includes have been added.
    
    This is needed in the case that Automoc is used, as that calls
    GetIncludeDirectories, which may cache the resulting include dirs
    too early in the generate step.
    
    Also, because the automoc step is so early, we can't cache the
    include directories at that point. At that point the build interface
    of all dependencies are not populated yet, so we'd be caching the
    includes before appending the build interface. Only start caching
    when we're definitely generating the buildsystem. At that point, the
    includes should be stable.
    
    We still need to invoke AppendBuildInterfaceIncludes
    in the GlobalGenerator because the build interface includes affect
    mostly the dependencies of targets (such as the automoc targets),
    rather than the targets themselves, so the build interface needs
    to be appended for all targets before generation is done.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 2945173..59afcb6 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2767,6 +2767,7 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
                                               this->GetName(),
                                               "INCLUDE_DIRECTORIES", 0, 0);
 
+  this->AppendBuildInterfaceIncludes();
 
   std::vector<std::string> debugProperties;
   const char *debugProp =
@@ -2808,7 +2809,8 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
                                                 this,
                                                 &dagChecker),
                                       entryIncludes);
-      if (!(*it)->ge->GetHadContextSensitiveCondition())
+      if (this->Makefile->IsGeneratingBuildSystem()
+          && !(*it)->ge->GetHadContextSensitiveCondition())
         {
         cacheIncludes = true;
         }
diff --git a/Tests/QtAutomoc/Adir/CMakeLists.txt b/Tests/QtAutomoc/Adir/CMakeLists.txt
new file mode 100644
index 0000000..abd328e
--- /dev/null
+++ b/Tests/QtAutomoc/Adir/CMakeLists.txt
@@ -0,0 +1,8 @@
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_BUILD_INTERFACE_INCLUDES ON)
+
+add_library(libA SHARED libA.cpp)
+target_link_libraries(libA LINK_PUBLIC Qt4::QtCore)
+generate_export_header(libA)
diff --git a/Tests/QtAutomoc/Adir/libA.cpp b/Tests/QtAutomoc/Adir/libA.cpp
new file mode 100644
index 0000000..3968c44
--- /dev/null
+++ b/Tests/QtAutomoc/Adir/libA.cpp
@@ -0,0 +1,13 @@
+
+#include "libA.h"
+
+LibA::LibA(QObject *parent)
+  : QObject(parent)
+{
+
+}
+
+int LibA::foo()
+{
+  return 0;
+}
diff --git a/Tests/QtAutomoc/Adir/libA.h b/Tests/QtAutomoc/Adir/libA.h
new file mode 100644
index 0000000..03ad1e0
--- /dev/null
+++ b/Tests/QtAutomoc/Adir/libA.h
@@ -0,0 +1,18 @@
+
+#ifndef LIBA_H
+#define LIBA_H
+
+#include "liba_export.h"
+
+#include <QObject>
+
+class LIBA_EXPORT LibA : public QObject
+{
+  Q_OBJECT
+public:
+  explicit LibA(QObject *parent = 0);
+
+  int foo();
+};
+
+#endif
diff --git a/Tests/QtAutomoc/Bdir/CMakeLists.txt b/Tests/QtAutomoc/Bdir/CMakeLists.txt
new file mode 100644
index 0000000..5497105
--- /dev/null
+++ b/Tests/QtAutomoc/Bdir/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_BUILD_INTERFACE_INCLUDES ON)
+
+add_library(libB SHARED libB.cpp)
+generate_export_header(libB)
+
+# set_property(TARGET libB APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
+target_link_libraries(libB LINK_PUBLIC libA)
diff --git a/Tests/QtAutomoc/Bdir/libB.cpp b/Tests/QtAutomoc/Bdir/libB.cpp
new file mode 100644
index 0000000..72f2cfa
--- /dev/null
+++ b/Tests/QtAutomoc/Bdir/libB.cpp
@@ -0,0 +1,13 @@
+
+#include "libB.h"
+
+LibB::LibB(QObject *parent)
+  : QObject(parent)
+{
+
+}
+
+int LibB::foo()
+{
+  return a.foo();
+}
diff --git a/Tests/QtAutomoc/Bdir/libB.h b/Tests/QtAutomoc/Bdir/libB.h
new file mode 100644
index 0000000..510c17f
--- /dev/null
+++ b/Tests/QtAutomoc/Bdir/libB.h
@@ -0,0 +1,21 @@
+
+#ifndef LIBB_H
+#define LIBB_H
+
+#include "libb_export.h"
+
+#include <QObject>
+#include "libA.h"
+
+class LIBB_EXPORT LibB : public QObject
+{
+  Q_OBJECT
+public:
+  explicit LibB(QObject *parent = 0);
+
+  int foo();
+private:
+  LibA a;
+};
+
+#endif
diff --git a/Tests/QtAutomoc/CMakeLists.txt b/Tests/QtAutomoc/CMakeLists.txt
index 855fcf0..530818e 100644
--- a/Tests/QtAutomoc/CMakeLists.txt
+++ b/Tests/QtAutomoc/CMakeLists.txt
@@ -23,4 +23,18 @@ add_executable(foo main.cpp calwidget.cpp foo.cpp blub.cpp bar.cpp abc.cpp
 
 set_target_properties(foo codeeditorLib privateSlot PROPERTIES AUTOMOC TRUE)
 
-target_link_libraries(foo codeeditorLib ${QT_LIBRARIES} )
+include(GenerateExportHeader)
+# The order is relevant here. B depends on A, and B headers depend on A
+# headers both subdirectories use CMAKE_BUILD_INTERFACE_INCLUDES and we
+# test that CMAKE_AUTOMOC successfully reads the include directories
+# for the build interface from those targets. There has previously been
+# a bug where caching of the include directories happened before
+# extracting the includes to pass to moc.
+add_subdirectory(Bdir)
+add_subdirectory(Adir)
+add_library(libC SHARED libC.cpp)
+set_target_properties(libC PROPERTIES AUTOMOC TRUE)
+generate_export_header(libC)
+target_link_libraries(libC LINK_PUBLIC libB)
+
+target_link_libraries(foo codeeditorLib ${QT_LIBRARIES} libC)
diff --git a/Tests/QtAutomoc/libC.cpp b/Tests/QtAutomoc/libC.cpp
new file mode 100644
index 0000000..8d61cb1
--- /dev/null
+++ b/Tests/QtAutomoc/libC.cpp
@@ -0,0 +1,13 @@
+
+#include "libC.h"
+
+LibC::LibC(QObject *parent)
+  : QObject(parent)
+{
+
+}
+
+int LibC::foo()
+{
+  return b.foo();
+}
diff --git a/Tests/QtAutomoc/libC.h b/Tests/QtAutomoc/libC.h
new file mode 100644
index 0000000..4fb4a2c
--- /dev/null
+++ b/Tests/QtAutomoc/libC.h
@@ -0,0 +1,22 @@
+
+#ifndef LIBC_H
+#define LIBC_H
+
+#include "libc_export.h"
+
+#include <QObject>
+#include "libB.h"
+
+class LIBC_EXPORT LibC : public QObject
+{
+  Q_OBJECT
+public:
+  explicit LibC(QObject *parent = 0);
+
+
+  int foo();
+private:
+  LibB b;
+};
+
+#endif
diff --git a/Tests/QtAutomoc/main.cpp b/Tests/QtAutomoc/main.cpp
index 738f677..d952171 100644
--- a/Tests/QtAutomoc/main.cpp
+++ b/Tests/QtAutomoc/main.cpp
@@ -48,6 +48,7 @@
 #include "abc.h"
 #include "xyz.h"
 #include "yaf.h"
+#include "libC.h"
 
 int main(int argv, char **args)
 {
@@ -78,5 +79,8 @@ int main(int argv, char **args)
   Yaf yaf;
   yaf.doYaf();
 
+  LibC lc;
+  lc.foo();
+
   return app.exec();
 }

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list