[Cmake-commits] CMake branch, next, updated. v3.0.0-rc1-482-g74c433c

Stephen Kelly steveire at gmail.com
Tue Mar 4 12:25:05 EST 2014


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  74c433c03a1dfd2f4033afefc29430a7d7ef24e2 (commit)
       via  db8382d819f93eceae53a092df5fa05a665c6934 (commit)
       via  599c059a611feacb208d6b20020b3b70e05fa116 (commit)
      from  a66a83cd811701e47f6a378897cee3012f1bfbf8 (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=74c433c03a1dfd2f4033afefc29430a7d7ef24e2
commit 74c433c03a1dfd2f4033afefc29430a7d7ef24e2
Merge: a66a83c db8382d
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Mar 4 12:25:04 2014 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Mar 4 12:25:04 2014 -0500

    Merge topic 'fix-Qt4-moc-command-depends' into next
    
    db8382d8 Qt4: Fix moc command dependencies for incremental build.
    599c059a add_custom_command: Support generator expressions for DEPENDS


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=db8382d819f93eceae53a092df5fa05a665c6934
commit db8382d819f93eceae53a092df5fa05a665c6934
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Mar 4 11:03:37 2014 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Mar 4 18:23:49 2014 +0100

    Qt4: Fix moc command dependencies for incremental build.
    
    Since commit v2.8.12~327^2 (Qt4Macros: Allow specifying a TARGET
    in invokations of macros., 2013-02-26), a parameters file is
    populated with moc arguments at generate-time.
    
    When the compile definitions or include directories change, the
    parameters file is updated but moc is not re-run in response.
    
    Fix that by making the moc invocation depend on the parameters file.
    
    Reported-At: https://bugreports.qt-project.org/browse/QTBUG-36970

diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake
index df2318b..2caa2bf 100644
--- a/Modules/Qt4Macros.cmake
+++ b/Modules/Qt4Macros.cmake
@@ -141,7 +141,7 @@ macro (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target)
   set(_moc_extra_parameters_file @${_moc_parameters_file})
   add_custom_command(OUTPUT ${outfile}
                       COMMAND Qt4::moc ${_moc_extra_parameters_file}
-                      DEPENDS ${infile}
+                      DEPENDS ${infile} ${_moc_parameters_file}
                       ${_moc_working_dir}
                       VERBATIM)
 endmacro ()
diff --git a/Tests/Qt4Targets/CMakeLists.txt b/Tests/Qt4Targets/CMakeLists.txt
index af9fc3f..0128118 100644
--- a/Tests/Qt4Targets/CMakeLists.txt
+++ b/Tests/Qt4Targets/CMakeLists.txt
@@ -36,3 +36,24 @@ add_executable(Qt4WrapMacroTest WIN32 main_wrap_test.cpp ${moc_file})
 set_property(TARGET Qt4WrapMacroTest PROPERTY AUTOMOC OFF)
 target_include_directories(Qt4WrapMacroTest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/interface")
 target_link_libraries(Qt4WrapMacroTest Qt4::QtGui)
+
+set(timeformat "%Y%j%H%M%S")
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild")
+execute_process(COMMAND "${CMAKE_COMMAND}" -DADD_DEF=0 "-H${CMAKE_CURRENT_SOURCE_DIR}/IncrementalMoc" "-B${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild")
+execute_process(COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild")
+file(TIMESTAMP "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild/moc_foo.cpp" tsvar_before "${timeformat}")
+if (NOT tsvar_before)
+  message(SEND_ERROR "Unable to read timestamp from moc file from first build!")
+endif()
+
+execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1) # Ensure that at least a second passes.
+execute_process(COMMAND "${CMAKE_COMMAND}" -DADD_DEF=1 "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild")
+execute_process(COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild")
+file(TIMESTAMP "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild/moc_foo.cpp" tsvar_after "${timeformat}")
+if (NOT tsvar_after)
+  message(SEND_ERROR "Unable to read timestamp from moc file from first build!")
+endif()
+
+if (NOT tsvar_after GREATER tsvar_before)
+  message(SEND_ERROR "Rebuild did not re-create moc file. Before: ${tsvar_before}. After: ${tsvar_after}")
+endif()
diff --git a/Tests/Qt4Targets/IncrementalMoc/CMakeLists.txt b/Tests/Qt4Targets/IncrementalMoc/CMakeLists.txt
new file mode 100644
index 0000000..4ba0ced
--- /dev/null
+++ b/Tests/Qt4Targets/IncrementalMoc/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+cmake_minimum_required(VERSION 2.8.12)
+project(IncrementalMoc)
+
+find_package(Qt4 REQUIRED)
+
+qt4_generate_moc(foo.h moc_foo.cpp)
+
+add_library(testlib foo.cpp moc_foo.cpp)
+target_link_libraries(testlib Qt4::QtCore)
+if (ADD_DEF)
+  target_compile_definitions(testlib PRIVATE NEW_DEF)
+endif()
diff --git a/Tests/Qt4Targets/IncrementalMoc/foo.cpp b/Tests/Qt4Targets/IncrementalMoc/foo.cpp
new file mode 100644
index 0000000..e924f7e
--- /dev/null
+++ b/Tests/Qt4Targets/IncrementalMoc/foo.cpp
@@ -0,0 +1,8 @@
+
+#include "foo.h"
+
+Foo::Foo()
+  : QObject(0)
+{
+
+}
diff --git a/Tests/Qt4Targets/IncrementalMoc/foo.h b/Tests/Qt4Targets/IncrementalMoc/foo.h
new file mode 100644
index 0000000..38d899f
--- /dev/null
+++ b/Tests/Qt4Targets/IncrementalMoc/foo.h
@@ -0,0 +1,9 @@
+
+#include <QObject>
+
+class Foo : QObject
+{
+  Q_OBJECT
+public:
+  Foo();
+};

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=599c059a611feacb208d6b20020b3b70e05fa116
commit 599c059a611feacb208d6b20020b3b70e05fa116
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Mar 4 17:32:01 2014 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Mar 4 18:23:43 2014 +0100

    add_custom_command: Support generator expressions for DEPENDS
    
    Evaluate the depends for all configurations and depend on the union
    of resulting files.

diff --git a/Source/cmCustomCommand.cxx b/Source/cmCustomCommand.cxx
index b672148..a048dd9 100644
--- a/Source/cmCustomCommand.cxx
+++ b/Source/cmCustomCommand.cxx
@@ -15,12 +15,16 @@
 
 #include <cmsys/auto_ptr.hxx>
 
+#include <assert.h>
+#include <cmGeneratorExpression.h>
+
 //----------------------------------------------------------------------------
 cmCustomCommand::cmCustomCommand()
 {
   this->HaveComment = false;
   this->EscapeOldStyle = true;
   this->EscapeAllowMakeVars = false;
+  this->Makefile = 0;
 }
 
 //----------------------------------------------------------------------------
@@ -33,7 +37,8 @@ cmCustomCommand::cmCustomCommand(const cmCustomCommand& r):
   WorkingDirectory(r.WorkingDirectory),
   EscapeAllowMakeVars(r.EscapeAllowMakeVars),
   EscapeOldStyle(r.EscapeOldStyle),
-  Backtrace(new cmListFileBacktrace(*r.Backtrace))
+  Backtrace(new cmListFileBacktrace(*r.Backtrace)),
+  Makefile(r.Makefile)
 {
 }
 
@@ -59,6 +64,7 @@ cmCustomCommand& cmCustomCommand::operator=(cmCustomCommand const& r)
     newBacktrace(new cmListFileBacktrace(*r.Backtrace));
   delete this->Backtrace;
   this->Backtrace = newBacktrace.release();
+  this->Makefile = r.Makefile;
 
   return *this;
 }
@@ -78,7 +84,8 @@ cmCustomCommand::cmCustomCommand(cmMakefile const* mf,
   WorkingDirectory(workingDirectory?workingDirectory:""),
   EscapeAllowMakeVars(false),
   EscapeOldStyle(true),
-  Backtrace(new cmListFileBacktrace)
+  Backtrace(new cmListFileBacktrace),
+  Makefile(mf)
 {
   this->EscapeOldStyle = true;
   this->EscapeAllowMakeVars = false;
@@ -111,9 +118,53 @@ const char* cmCustomCommand::GetWorkingDirectory() const
 }
 
 //----------------------------------------------------------------------------
+void cmCustomCommand::GetConfigDepends(const char* config,
+                        std::set<std::string>& emitted) const
+{
+  for(std::vector<std::string>::const_iterator di = this->Depends.begin();
+      di != this->Depends.end(); ++di)
+    {
+    cmGeneratorExpression ge(*this->Backtrace);
+    std::vector<std::string> results;
+    cmSystemTools::ExpandListArgument(
+        ge.Parse(*di)->Evaluate(const_cast<cmMakefile*>(this->Makefile),
+                                config), results);
+    for(std::vector<std::string>::const_iterator ri = results.begin();
+        ri != results.end(); ++ri)
+      {
+      if (emitted.insert(*ri).second)
+        {
+        this->DependsResult.push_back(*ri);
+        }
+      }
+    }
+}
+
+//----------------------------------------------------------------------------
 const std::vector<std::string>& cmCustomCommand::GetDepends() const
 {
-  return this->Depends;
+  if (this->DependsResult.empty())
+    {
+    if(!this->Makefile)
+      {
+      return this->DependsResult;
+      }
+    std::set<std::string> emitted;
+    std::vector<std::string> configs;
+    this->Makefile->GetConfigurations(configs);
+
+    if (confis.empty())
+      {
+      this->GetConfigDepends(0, emitted);
+      }
+
+    for(std::vector<std::string>::const_iterator ci = configs.begin();
+        ci != configs.end(); ++ci)
+      {
+      this->GetConfigDepends(ci->c_str(), emitted);
+      }
+    }
+  return this->DependsResult;
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmCustomCommand.h b/Source/cmCustomCommand.h
index 6851105..85fb888 100644
--- a/Source/cmCustomCommand.h
+++ b/Source/cmCustomCommand.h
@@ -79,8 +79,12 @@ public:
   ImplicitDependsList const& GetImplicitDepends() const;
 
 private:
+  void GetConfigDepends(const char* config,
+                        std::set<std::string>& emitted) const;
+
   std::vector<std::string> Outputs;
   std::vector<std::string> Depends;
+  mutable std::vector<std::string> DependsResult;
   cmCustomCommandLines CommandLines;
   bool HaveComment;
   std::string Comment;
@@ -89,6 +93,7 @@ private:
   bool EscapeOldStyle;
   cmListFileBacktrace* Backtrace;
   ImplicitDependsList ImplicitDepends;
+  cmMakefile const* Makefile;
 };
 
 #endif

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

Summary of changes:
 Modules/Qt4Macros.cmake                        |    2 +-
 Source/cmCustomCommand.cxx                     |   57 ++++++++++++++++++++++--
 Source/cmCustomCommand.h                       |    5 +++
 Tests/Qt4Targets/CMakeLists.txt                |   21 +++++++++
 Tests/Qt4Targets/IncrementalMoc/CMakeLists.txt |   13 ++++++
 Tests/Qt4Targets/IncrementalMoc/foo.cpp        |    8 ++++
 Tests/Qt4Targets/IncrementalMoc/foo.h          |    9 ++++
 7 files changed, 111 insertions(+), 4 deletions(-)
 create mode 100644 Tests/Qt4Targets/IncrementalMoc/CMakeLists.txt
 create mode 100644 Tests/Qt4Targets/IncrementalMoc/foo.cpp
 create mode 100644 Tests/Qt4Targets/IncrementalMoc/foo.h


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list