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  25b5e76e15b3b5fe6e0aacd5345ecd1f3d360e5b (commit)
       via  b393e63bc9b98b429dc1bbaf21a4e2d481dfec4b (commit)
       via  331eb74b795cae914ec88e58f2c0bec69c17a853 (commit)
       via  cbc07d331d1d5429dc1e0b7c6c7949ff8d9efdf1 (commit)
       via  c17e0a3ad58f06fcb0827910af520405670b3d51 (commit)
       via  53787bf8de2d3981f650e9036bb89cb6ed884a75 (commit)
       via  8dbdd3e726ead25c179e6eb4ffab212a1db3aba8 (commit)
       via  0699760d5c8b644242ddd4ac6d07d8c4c68f2b94 (commit)
       via  a84f0bb726ebcc8e9bf3db0b99e5b6fd8a720045 (commit)
       via  7b766b83952ec4c431a55d2f6e589a5f806834c9 (commit)
       via  2964b8cca4155fa318722f6ef17f0d4d56ee2f29 (commit)
       via  d58b6bf31c18cfedd4a2f15e009b8e5cbdc21b6e (commit)
       via  94c319f93309ff4cddd0280cdcbd48b50492db36 (commit)
       via  966be439e07131c3ff84175c1a9e3b6336908d8e (commit)
       via  de531432887487943dbe4ae5a1bde762d5582e06 (commit)
       via  d8e45536fb3637454cf17a638dcd9fc236e94660 (commit)
       via  d9313a82906ced0ff3c76828e86d9d7a248a5e49 (commit)
       via  32d3540e090c4a24d55b99c49c094a9cb574c9b3 (commit)
       via  e7280a7f1743d73cdab41ed709a9e1d0f99b6342 (commit)
       via  63d3ca4c1cab0c7b9c71d6c051c3b4c053eb7627 (commit)
       via  6ae19bf32e232beb59a0c427d82c0761e8248ab8 (commit)
       via  9986da4f0f2f49c0d7d260f9d21deaa906708376 (commit)
       via  d51cc88e844c78c01c1616e6a2fb102c0682dd00 (commit)
       via  cf1d5a9cdba49a2e9f08879d756ae118b22bfc6a (commit)
       via  f962275987e17cf94da663a919f52b6d0c8f44f4 (commit)
       via  c736c41ad192c89e1c74751a8f401c75955f5f3b (commit)
       via  cbd650c2642e40369eaa53d20dafee6cdccae4af (commit)
       via  0b1527ff3d1781380756ee72a9641b7c5c7c87cc (commit)
       via  2b9d795e63acf723a6abd79f3195ec70476442a5 (commit)
       via  2cfcdf757d032cdea8b980792007a6f9d749e6fb (commit)
       via  2f67aef23d4192fadb222dc79311fb5ffbbc36ce (commit)
       via  794fdf40a1bc85dded519d7c737f73690e3a6e42 (commit)
       via  a1e49bb155132606ed9f590c0b62e68f2e288d0b (commit)
      from  b526e70725cc58b1bc51c0d5c4f3f9c00a908387 (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=25b5e76e15b3b5fe6e0aacd5345ecd1f3d360e5b
commit 25b5e76e15b3b5fe6e0aacd5345ecd1f3d360e5b
Merge: b526e70 b393e63
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Jan 10 14:32:45 2017 -0500
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Tue Jan 10 14:32:45 2017 -0500

    Merge topic 'Autogen_Simplify' into next
    
    b393e63b AUTOGEN: Release notes for SKIP_AUTOX
    331eb74b AUTOGEN: Documentation update: cmake-qt, AUTOMOC, AUTOUIC, AUTORCC
    cbc07d33 AUTOGEN: Documentation for SKIP_AUTOX source file properties
    c17e0a3a AUTOGEN: Tests: AUTORCC SKIP_AUTORCC and SKIP_AUTOGEN test
    53787bf8 AUTOGEN: Tests: AUTOUIC SKIP_AUTOUIC and SKIP_AUTOGEN test
    8dbdd3e7 AUTOGEN: Tests: AUTOMOC SKIP_AUTOMOC and SKIP_AUTOGEN test
    0699760d AUTOGEN: Generators: Do moc/uic skip test during file list 
generation
    a84f0bb7 AUTOGEN: Generators: Message upper/lower case unification
    7b766b83 AUTOGEN: Generators: Use single moc/uic skip test method only
    2964b8cc AUTOGEN: Generators: Use AUTOMOC/UIC/RCC instead of AUTOGEN in 
messages
    d58b6bf3 AUTOGEN: Generators: Moc/UicSkipTest methods
    94c319f9 AUTOGEN: Generators: Use separate header lists for MOC and UIC
    966be439 AUTOGEN: Generators: Be verbose about skipping files
    de531432 AUTOGEN: Generators: Remove unused variable
    d8e45536 AUTOGEN: Initializer: Always remember skipped files
    d9313a82 AUTOGEN: Initializer: Enable SKIP_AUTOGEN on all AUTOGEN generated 
sources
    ...


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b393e63bc9b98b429dc1bbaf21a4e2d481dfec4b
commit b393e63bc9b98b429dc1bbaf21a4e2d481dfec4b
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Mon Jan 2 18:02:53 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:17 2017 +0100

    AUTOGEN: Release notes for SKIP_AUTOX

diff --git a/Help/release/dev/QtAutogen_Skip.rst 
b/Help/release/dev/QtAutogen_Skip.rst
new file mode 100644
index 0000000..37f795c
--- /dev/null
+++ b/Help/release/dev/QtAutogen_Skip.rst
@@ -0,0 +1,12 @@
+QtAutogen_Skip
+--------------
+
+* The source file properties
+  :prop_sf:`SKIP_AUTOMOC`,
+  :prop_sf:`SKIP_AUTOUIC`,
+  :prop_sf:`SKIP_AUTORCC` and
+  :prop_sf:`SKIP_AUTOGEN`
+  allow to exclude files from
+  :prop_tgt:`AUTOMOC`,
+  :prop_tgt:`AUTOUIC` and
+  :prop_tgt:`AUTORCC` processing.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=331eb74b795cae914ec88e58f2c0bec69c17a853
commit 331eb74b795cae914ec88e58f2c0bec69c17a853
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Mon Jan 2 17:45:17 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:17 2017 +0100

    AUTOGEN: Documentation update: cmake-qt, AUTOMOC, AUTOUIC, AUTORCC

diff --git a/Help/manual/cmake-qt.7.rst b/Help/manual/cmake-qt.7.rst
index 80b0f49..c348f3f 100644
--- a/Help/manual/cmake-qt.7.rst
+++ b/Help/manual/cmake-qt.7.rst
@@ -83,6 +83,9 @@ following targets by setting the :variable:`CMAKE_AUTOMOC` 
variable.  The
 options to pass to ``moc``. The :variable:`CMAKE_AUTOMOC_MOC_OPTIONS`
 variable may be populated to pre-set the options for all following targets.
 
+Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
+enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
 .. _`Qt AUTOUIC`:
 
 AUTOUIC
@@ -151,6 +154,9 @@ result of linking with the :prop_tgt:`IMPORTED` target:
 
 .. _`Qt AUTORCC`:
 
+Source files can be excluded from :prop_tgt:`AUTOUIC` processing by
+enabling :prop_sf:`SKIP_AUTOUIC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
 AUTORCC
 ^^^^^^^
 
@@ -171,6 +177,9 @@ populated to pre-set the options for all following targets. 
 The
 ``<name>.qrc`` file to set particular options for the file.  This
 overrides options from the :prop_tgt:`AUTORCC_OPTIONS` target property.
 
+Source files can be excluded from :prop_tgt:`AUTORCC` processing by
+enabling :prop_sf:`SKIP_AUTORCC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
 qtmain.lib on Windows
 =====================
 
diff --git a/Help/prop_tgt/AUTOMOC.rst b/Help/prop_tgt/AUTOMOC.rst
index 30a39b1..b42643f 100644
--- a/Help/prop_tgt/AUTOMOC.rst
+++ b/Help/prop_tgt/AUTOMOC.rst
@@ -47,5 +47,8 @@ See the documentation for this variable for more details.
 The global property :prop_gbl:`AUTOGEN_TARGETS_FOLDER` can be used to group the
 automoc targets together in an IDE, e.g.  in MSVS.
 
+Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
+enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
 See the :manual:`cmake-qt(7)` manual for more information on using CMake
 with Qt.
diff --git a/Help/prop_tgt/AUTORCC.rst b/Help/prop_tgt/AUTORCC.rst
index 158fdf8..1ad0895 100644
--- a/Help/prop_tgt/AUTORCC.rst
+++ b/Help/prop_tgt/AUTORCC.rst
@@ -24,5 +24,8 @@ generate unspecified unique names for ``rcc``.  Therefore if
 ``Q_INIT_RESOURCE()`` or ``Q_CLEANUP_RESOURCE()`` need to be used the
 ``.qrc`` file name must be unique.
 
+Source files can be excluded from :prop_tgt:`AUTORCC` processing by
+enabling :prop_sf:`SKIP_AUTORCC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
 See the :manual:`cmake-qt(7)` manual for more information on using CMake
 with Qt.
diff --git a/Help/prop_tgt/AUTOUIC.rst b/Help/prop_tgt/AUTOUIC.rst
index 4e60ec3..fbf24c3 100644
--- a/Help/prop_tgt/AUTOUIC.rst
+++ b/Help/prop_tgt/AUTOUIC.rst
@@ -20,5 +20,8 @@ Additional command line options for ``uic`` can be set via the
 The global property :prop_gbl:`AUTOGEN_TARGETS_FOLDER` can be used to group the
 autouic targets together in an IDE, e.g. in MSVS.
 
+Source files can be excluded from :prop_tgt:`AUTOUIC` processing by
+enabling :prop_sf:`SKIP_AUTOUIC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
 See the :manual:`cmake-qt(7)` manual for more information on using CMake
 with Qt.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cbc07d331d1d5429dc1e0b7c6c7949ff8d9efdf1
commit cbc07d331d1d5429dc1e0b7c6c7949ff8d9efdf1
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Mon Jan 2 17:28:36 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:17 2017 +0100

    AUTOGEN: Documentation for SKIP_AUTOX source file properties

diff --git a/Help/manual/cmake-properties.7.rst 
b/Help/manual/cmake-properties.7.rst
index 971834e..c93ace1 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -357,6 +357,10 @@ Properties on Source Files
    /prop_sf/MACOSX_PACKAGE_LOCATION
    /prop_sf/OBJECT_DEPENDS
    /prop_sf/OBJECT_OUTPUTS
+   /prop_sf/SKIP_AUTOGEN
+   /prop_sf/SKIP_AUTOMOC
+   /prop_sf/SKIP_AUTORCC
+   /prop_sf/SKIP_AUTOUIC
    /prop_sf/SYMBOLIC
    /prop_sf/VS_DEPLOYMENT_CONTENT
    /prop_sf/VS_DEPLOYMENT_LOCATION
diff --git a/Help/prop_sf/SKIP_AUTOGEN.rst b/Help/prop_sf/SKIP_AUTOGEN.rst
new file mode 100644
index 0000000..6bf2409
--- /dev/null
+++ b/Help/prop_sf/SKIP_AUTOGEN.rst
@@ -0,0 +1,8 @@
+SKIP_AUTOGEN
+------------
+
+Exclude the source file from :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and
+:prop_tgt:`AUTORCC` processing (for Qt projects).
+
+For finer control see :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC` and
+:prop_sf:`SKIP_AUTORCC`.
diff --git a/Help/prop_sf/SKIP_AUTOMOC.rst b/Help/prop_sf/SKIP_AUTOMOC.rst
new file mode 100644
index 0000000..2245ca6
--- /dev/null
+++ b/Help/prop_sf/SKIP_AUTOMOC.rst
@@ -0,0 +1,6 @@
+SKIP_AUTOMOC
+------------
+
+Exclude the source file from :prop_tgt:`AUTOMOC` processing (for Qt projects).
+
+For broader control see :prop_sf:`SKIP_AUTOGEN`
diff --git a/Help/prop_sf/SKIP_AUTORCC.rst b/Help/prop_sf/SKIP_AUTORCC.rst
new file mode 100644
index 0000000..394d8f8
--- /dev/null
+++ b/Help/prop_sf/SKIP_AUTORCC.rst
@@ -0,0 +1,6 @@
+SKIP_AUTORCC
+------------
+
+Exclude the source file from :prop_tgt:`AUTORCC` processing (for Qt projects).
+
+For broader control see :prop_sf:`SKIP_AUTOGEN`
diff --git a/Help/prop_sf/SKIP_AUTOUIC.rst b/Help/prop_sf/SKIP_AUTOUIC.rst
new file mode 100644
index 0000000..50f78ef
--- /dev/null
+++ b/Help/prop_sf/SKIP_AUTOUIC.rst
@@ -0,0 +1,6 @@
+SKIP_AUTOUIC
+------------
+
+Exclude the source file from :prop_tgt:`AUTOUIC` processing (for Qt projects).
+
+For broader control see :prop_sf:`SKIP_AUTOGEN`

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c17e0a3ad58f06fcb0827910af520405670b3d51
commit c17e0a3ad58f06fcb0827910af520405670b3d51
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sun Jan 1 16:45:40 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:17 2017 +0100

    AUTOGEN: Tests: AUTORCC SKIP_AUTORCC and SKIP_AUTOGEN test

diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt
index 045f5b9..4b90ad8 100644
--- a/Tests/QtAutogen/CMakeLists.txt
+++ b/Tests/QtAutogen/CMakeLists.txt
@@ -181,6 +181,27 @@ set_property(TARGET skipUicB PROPERTY AUTOUIC ON)
 set_property(TARGET skipUicB PROPERTY AUTOMOC ON)
 target_link_libraries(skipUicB ${QT_LIBRARIES})
 
+# -- Test: AUTORCC, SKIP_AUTORCC
+# Test for SKIP_AUTORCC and SKIP_AUTOGEN on an AUTORCC enabled target
+set(skipRccSources
+  skipRcc.cpp
+  skipSource/skipRccBad1.qrc
+  skipSource/skipRccBad2.qrc
+  skipSource/skipRccGood.qrc
+)
+set_property(SOURCE skipSource/skipRccBad1.qrc PROPERTY SKIP_AUTORCC ON)
+set_property(SOURCE skipSource/skipRccBad2.qrc PROPERTY SKIP_AUTOGEN ON)
+# AUTORCC enabled
+add_executable(skipRccA ${skipRccSources})
+set_property(TARGET skipRccA PROPERTY AUTORCC ON)
+target_link_libraries(skipRccA ${QT_LIBRARIES})
+# AUTORCC, AUTOUIC and AUTOMOC enabled
+add_executable(skipRccB ${skipRccSources})
+set_property(TARGET skipRccB PROPERTY AUTORCC ON)
+set_property(TARGET skipRccB PROPERTY AUTOUIC ON)
+set_property(TARGET skipRccB PROPERTY AUTOMOC ON)
+target_link_libraries(skipRccB ${QT_LIBRARIES})
+
 # -- Test: AUTOMOC AUTORCC
 # Source files with the same basename in different subdirectories
 add_subdirectory(sameName)
diff --git a/Tests/QtAutogen/skipRcc.cpp b/Tests/QtAutogen/skipRcc.cpp
new file mode 100644
index 0000000..ec57110
--- /dev/null
+++ b/Tests/QtAutogen/skipRcc.cpp
@@ -0,0 +1,9 @@
+
+extern int qInitResources_skipRccGood();
+
+int main(int, char**)
+{
+  // Fails to link if the symbol is not present.
+  qInitResources_skipRccGood();
+  return 0;
+}
diff --git a/Tests/QtAutogen/skipSource/skipRccBad1.qrc 
b/Tests/QtAutogen/skipSource/skipRccBad1.qrc
new file mode 100644
index 0000000..6cbd9ed
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipRccBad1.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>skipRccGood.cpp</file>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+</qresource>
+</RCC>
diff --git a/Tests/QtAutogen/skipSource/skipRccBad2.qrc 
b/Tests/QtAutogen/skipSource/skipRccBad2.qrc
new file mode 100644
index 0000000..b32c589
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipRccBad2.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><
+<qresource>
+    <file>skipRccGood.cpp</file>
+</qresource>
+</RCC>
diff --git a/Tests/QtAutogen/skipSource/skipRccGood.qrc 
b/Tests/QtAutogen/skipSource/skipRccGood.qrc
new file mode 100644
index 0000000..21a94b0
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipRccGood.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>skipRccBad1.qrc</file>
+    <file>skipRccBad2.qrc</file>
+</qresource>
+</RCC>

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=53787bf8de2d3981f650e9036bb89cb6ed884a75
commit 53787bf8de2d3981f650e9036bb89cb6ed884a75
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sun Jan 1 15:42:32 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Tests: AUTOUIC SKIP_AUTOUIC and SKIP_AUTOGEN test

diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt
index 068b037..045f5b9 100644
--- a/Tests/QtAutogen/CMakeLists.txt
+++ b/Tests/QtAutogen/CMakeLists.txt
@@ -161,6 +161,26 @@ set_property(TARGET skipMocB PROPERTY AUTOMOC ON)
 set_property(TARGET skipMocB PROPERTY AUTOUIC ON)
 target_link_libraries(skipMocB ${QT_LIBRARIES})
 
+# -- Test: AUTOUIC, SKIP_AUTOUIC
+# Test for SKIP_AUTOUIC and SKIP_AUTOGEN on an AUTOUIC enabled target
+set(skipUicSources
+  skipUic.cpp
+  skipSource/skipUicGen.cpp
+  skipSource/skipUicNoGen1.cpp
+  skipSource/skipUicNoGen2.cpp
+)
+set_property(SOURCE skipSource/skipUicNoGen1.cpp PROPERTY SKIP_AUTOUIC ON)
+set_property(SOURCE skipSource/skipUicNoGen2.cpp PROPERTY SKIP_AUTOGEN ON)
+# AUTOUIC enabled
+add_executable(skipUicA ${skipUicSources})
+set_property(TARGET skipUicA PROPERTY AUTOUIC ON)
+target_link_libraries(skipUicA ${QT_LIBRARIES})
+# AUTOUIC and AUTOMOC enabled
+add_executable(skipUicB ${skipUicSources})
+set_property(TARGET skipUicB PROPERTY AUTOUIC ON)
+set_property(TARGET skipUicB PROPERTY AUTOMOC ON)
+target_link_libraries(skipUicB ${QT_LIBRARIES})
+
 # -- Test: AUTOMOC AUTORCC
 # Source files with the same basename in different subdirectories
 add_subdirectory(sameName)
diff --git a/Tests/QtAutogen/skipSource/skipUicGen.cpp 
b/Tests/QtAutogen/skipSource/skipUicGen.cpp
new file mode 100644
index 0000000..d2a55a6
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipUicGen.cpp
@@ -0,0 +1,7 @@
+
+#include "skipUicGen.hpp"
+#include "ui_uigen2.h"
+
+void skipGen()
+{
+}
diff --git a/Tests/QtAutogen/skipSource/skipUicGen.hpp 
b/Tests/QtAutogen/skipSource/skipUicGen.hpp
new file mode 100644
index 0000000..3669f0e
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipUicGen.hpp
@@ -0,0 +1,8 @@
+#ifndef SKIPUICGEN_HPP
+#define SKIPUICGEN_HPP
+
+#include "ui_uigen1.h"
+
+void skipGen();
+
+#endif
diff --git a/Tests/QtAutogen/skipSource/skipUicNoGen1.cpp 
b/Tests/QtAutogen/skipSource/skipUicNoGen1.cpp
new file mode 100644
index 0000000..f591a42
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipUicNoGen1.cpp
@@ -0,0 +1,7 @@
+
+#include "skipUicNoGen1.hpp"
+#include "ui_nogen2.h"
+
+void skipNoGen1()
+{
+}
diff --git a/Tests/QtAutogen/skipSource/skipUicNoGen1.hpp 
b/Tests/QtAutogen/skipSource/skipUicNoGen1.hpp
new file mode 100644
index 0000000..2864695
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipUicNoGen1.hpp
@@ -0,0 +1,8 @@
+#ifndef SKIPUICNOGEN1_H
+#define SKIPUICNOGEN1_H
+
+#include "ui_nogen1.h"
+
+void skipNoGen1();
+
+#endif
diff --git a/Tests/QtAutogen/skipSource/skipUicNoGen2.cpp 
b/Tests/QtAutogen/skipSource/skipUicNoGen2.cpp
new file mode 100644
index 0000000..8c1c324
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipUicNoGen2.cpp
@@ -0,0 +1,7 @@
+
+#include "skipUicNoGen2.hpp"
+#include "ui_nogen2.h"
+
+void skipNoGen2()
+{
+}
diff --git a/Tests/QtAutogen/skipSource/skipUicNoGen2.hpp 
b/Tests/QtAutogen/skipSource/skipUicNoGen2.hpp
new file mode 100644
index 0000000..7c38193
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/skipUicNoGen2.hpp
@@ -0,0 +1,8 @@
+#ifndef SKIPUICNOGEN2_H
+#define SKIPUICNOGEN2_H
+
+#include "ui_nogen1.h"
+
+void skipNoGen2();
+
+#endif
diff --git a/Tests/QtAutogen/skipSource/ui_nogen1.h 
b/Tests/QtAutogen/skipSource/ui_nogen1.h
new file mode 100644
index 0000000..a7be52b
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/ui_nogen1.h
@@ -0,0 +1,6 @@
+#ifndef UI_NOGEN1_H
+#define UI_NOGEN1_H
+
+void ui_nogen1();
+
+#endif
diff --git a/Tests/QtAutogen/skipSource/ui_nogen2.h 
b/Tests/QtAutogen/skipSource/ui_nogen2.h
new file mode 100644
index 0000000..5d547d4
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/ui_nogen2.h
@@ -0,0 +1,6 @@
+#ifndef UI_NOGEN2_H
+#define UI_NOGEN2_H
+
+void ui_nogen2();
+
+#endif
\ No newline at end of file
diff --git a/Tests/QtAutogen/skipSource/uigen1.ui 
b/Tests/QtAutogen/skipSource/uigen1.ui
new file mode 100644
index 0000000..fc7cb82
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/uigen1.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UiGen1</class>
+ <widget class="QWidget" name="UiGen1">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <item>
+    <widget class="QTreeView" name="treeView"/>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Tests/QtAutogen/skipSource/uigen2.ui 
b/Tests/QtAutogen/skipSource/uigen2.ui
new file mode 100644
index 0000000..01f08d2
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/uigen2.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UiGen2</class>
+ <widget class="QWidget" name="UiGen2">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <item>
+    <widget class="QTreeView" name="treeView"/>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Tests/QtAutogen/skipUic.cpp b/Tests/QtAutogen/skipUic.cpp
new file mode 100644
index 0000000..0adf011
--- /dev/null
+++ b/Tests/QtAutogen/skipUic.cpp
@@ -0,0 +1,22 @@
+
+#include "skipSource/skipUicGen.hpp"
+#include "skipSource/skipUicNoGen1.hpp"
+#include "skipSource/skipUicNoGen2.hpp"
+
+int main(int, char**)
+{
+  skipGen();
+  skipNoGen1();
+  skipNoGen2();
+
+  return 0;
+}
+
+// -- Function definitions
+void ui_nogen1()
+{
+}
+
+void ui_nogen2()
+{
+}

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8dbdd3e726ead25c179e6eb4ffab212a1db3aba8
commit 8dbdd3e726ead25c179e6eb4ffab212a1db3aba8
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 31 10:25:38 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Tests: AUTOMOC SKIP_AUTOMOC and SKIP_AUTOGEN test

diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt
index 6d4e2c4..068b037 100644
--- a/Tests/QtAutogen/CMakeLists.txt
+++ b/Tests/QtAutogen/CMakeLists.txt
@@ -139,6 +139,28 @@ if (automoc_rerun_result)
   message(SEND_ERROR "Second build of automoc_rerun failed.")
 endif()
 
+# -- Test: AUTOMOC, SKIP_AUTOMOC
+# Test for SKIP_AUTOMOC and SKIP_AUTOGEN on an AUTOMOC enabled target
+qtx_wrap_cpp(skipMocWrapMoc
+  skipSource/qItemA.hpp
+  skipSource/qItemB.hpp)
+set(skipMocSources
+  skipMoc.cpp
+  skipSource/qItemA.cpp
+  skipSource/qItemB.cpp
+  skipSource/qItemC.cpp)
+set_property(SOURCE skipSource/qItemA.cpp PROPERTY SKIP_AUTOMOC ON)
+set_property(SOURCE skipSource/qItemB.cpp PROPERTY SKIP_AUTOGEN ON)
+# AUTOMOC enabled only
+add_executable(skipMocA ${skipMocSources} ${skipMocWrapMoc})
+set_property(TARGET skipMocA PROPERTY AUTOMOC ON)
+target_link_libraries(skipMocA ${QT_LIBRARIES})
+# AUTOMOC and AUTOUIC enabled
+add_executable(skipMocB ${skipMocSources} ${skipMocWrapMoc})
+set_property(TARGET skipMocB PROPERTY AUTOMOC ON)
+set_property(TARGET skipMocB PROPERTY AUTOUIC ON)
+target_link_libraries(skipMocB ${QT_LIBRARIES})
+
 # -- Test: AUTOMOC AUTORCC
 # Source files with the same basename in different subdirectories
 add_subdirectory(sameName)
diff --git a/Tests/QtAutogen/skipMoc.cpp b/Tests/QtAutogen/skipMoc.cpp
new file mode 100644
index 0000000..85305f5
--- /dev/null
+++ b/Tests/QtAutogen/skipMoc.cpp
@@ -0,0 +1,14 @@
+
+#include "skipSource/qItemA.hpp"
+#include "skipSource/qItemB.hpp"
+#include "skipSource/qItemC.hpp"
+
+int main(int, char**)
+{
+  QItemA itemA;
+  QItemA itemB;
+  QItemA itemC;
+
+  // Fails to link if the symbol is not present.
+  return 0;
+}
diff --git a/Tests/QtAutogen/skipSource/qItemA.cpp 
b/Tests/QtAutogen/skipSource/qItemA.cpp
new file mode 100644
index 0000000..522c2c7
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/qItemA.cpp
@@ -0,0 +1,5 @@
+#include "qItemA.hpp"
+
+void QItemA::go()
+{
+}
diff --git a/Tests/QtAutogen/skipSource/qItemA.hpp 
b/Tests/QtAutogen/skipSource/qItemA.hpp
new file mode 100644
index 0000000..d295faf
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/qItemA.hpp
@@ -0,0 +1,13 @@
+#ifndef QITEMA_HPP
+#define QITEMA_HPP
+
+#include <QObject>
+
+class QItemA : public QObject
+{
+  Q_OBJECT
+  Q_SLOT
+  void go();
+};
+
+#endif
diff --git a/Tests/QtAutogen/skipSource/qItemB.cpp 
b/Tests/QtAutogen/skipSource/qItemB.cpp
new file mode 100644
index 0000000..636e15d
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/qItemB.cpp
@@ -0,0 +1,5 @@
+#include "qItemB.hpp"
+
+void QItemB::go()
+{
+}
diff --git a/Tests/QtAutogen/skipSource/qItemB.hpp 
b/Tests/QtAutogen/skipSource/qItemB.hpp
new file mode 100644
index 0000000..1775915
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/qItemB.hpp
@@ -0,0 +1,13 @@
+#ifndef QITEMB_HPP
+#define QITEMB_HPP
+
+#include <QObject>
+
+class QItemB : public QObject
+{
+  Q_OBJECT
+  Q_SLOT
+  void go();
+};
+
+#endif
diff --git a/Tests/QtAutogen/skipSource/qItemC.cpp 
b/Tests/QtAutogen/skipSource/qItemC.cpp
new file mode 100644
index 0000000..700abd6
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/qItemC.cpp
@@ -0,0 +1,5 @@
+#include "qItemC.hpp"
+
+void QItemC::go()
+{
+}
diff --git a/Tests/QtAutogen/skipSource/qItemC.hpp 
b/Tests/QtAutogen/skipSource/qItemC.hpp
new file mode 100644
index 0000000..f06bda2
--- /dev/null
+++ b/Tests/QtAutogen/skipSource/qItemC.hpp
@@ -0,0 +1,13 @@
+#ifndef QITEMC_HPP
+#define QITEMC_HPP
+
+#include <QObject>
+
+class QItemC : public QObject
+{
+  Q_OBJECT
+  Q_SLOT
+  void go();
+};
+
+#endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0699760d5c8b644242ddd4ac6d07d8c4c68f2b94
commit 0699760d5c8b644242ddd4ac6d07d8c4c68f2b94
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Jan 4 13:32:11 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Generators: Do moc/uic skip test during file list generation

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 0a8c459..f5c33fe 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -534,8 +534,16 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
   }
 
   // Parse headers
-  headerFilesMoc.insert(this->Headers.begin(), this->Headers.end());
-  headerFilesUic.insert(this->Headers.begin(), this->Headers.end());
+  for (std::vector<std::string>::const_iterator it = this->Headers.begin();
+       it != this->Headers.end(); ++it) {
+    const std::string& headerName = *it;
+    if (!this->MocSkipTest(headerName)) {
+      headerFilesMoc.insert(this->Headers.begin(), this->Headers.end());
+    }
+    if (!this->UicSkipTest(headerName)) {
+      headerFilesUic.insert(this->Headers.begin(), this->Headers.end());
+    }
+  }
   this->ParseHeaders(headerFilesMoc, headerFilesUic, includedMocs,
                      notIncludedMocs, includedUis);
 
@@ -577,10 +585,12 @@ bool cmQtAutoGenerators::ParseSourceFile(
     this->LogWarning(err.str());
   } else {
     // Parse source contents for MOC
-    success = this->ParseContentForMoc(
-      absFilename, contentsString, headerExtensions, includedMocs, relaxed);
+    if (success && !this->MocSkipTest(absFilename)) {
+      success = this->ParseContentForMoc(
+        absFilename, contentsString, headerExtensions, includedMocs, relaxed);
+    }
     // Parse source contents for UIC
-    if (success) {
+    if (success && !this->UicSkipTest(absFilename)) {
       this->ParseContentForUic(absFilename, contentsString, includedUis);
     }
   }
@@ -610,10 +620,6 @@ void cmQtAutoGenerators::ParseContentForUic(
   const std::string& absFilename, const std::string& contentsString,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
-  if (this->UicSkipTest(absFilename)) {
-    return;
-  }
-
   // Process
   if (this->Verbose) {
     std::ostringstream err;
@@ -644,10 +650,6 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   const std::vector<std::string>& headerExtensions,
   std::map<std::string, std::string>& includedMocs, bool relaxed)
 {
-  if (this->MocSkipTest(absFilename)) {
-    return true;
-  }
-
   // Process
   if (this->Verbose) {
     std::ostringstream err;
@@ -895,8 +897,7 @@ void cmQtAutoGenerators::ParseHeaders(
     const std::string contents = ReadAll(headerName);
 
     // Parse header content for MOC
-    if (!this->MocSkipTest(headerName) &&
-        (absHeadersMoc.find(headerName) != absHeadersMoc.end()) &&
+    if ((absHeadersMoc.find(headerName) != absHeadersMoc.end()) &&
         (includedMocs.find(headerName) == includedMocs.end())) {
       // Process
       if (this->Verbose) {

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a84f0bb726ebcc8e9bf3db0b99e5b6fd8a720045
commit a84f0bb726ebcc8e9bf3db0b99e5b6fd8a720045
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Jan 4 13:18:23 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Generators: Message upper/lower case unification

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 8fea817..0a8c459 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -198,7 +198,7 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
 
   if (!makefile->ReadListFile(filename.c_str())) {
     std::ostringstream err;
-    err << "AUTOGEN: error processing file: " << filename << std::endl;
+    err << "AutoGen: error processing file: " << filename << std::endl;
     this->LogError(err.str());
     return false;
   }
@@ -328,7 +328,7 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
     }
     if (this->RccSources.size() != rccInputLists.size()) {
       std::ostringstream err;
-      err << "AUTOGEN: RCC sources lists size missmatch in: " << filename;
+      err << "AutoGen: RCC sources lists size missmatch in: " << filename;
       err << std::endl;
       this->LogError(err.str());
       return false;
@@ -572,7 +572,7 @@ bool cmQtAutoGenerators::ParseSourceFile(
   const std::string contentsString = ReadAll(absFilename);
   if (contentsString.empty()) {
     std::ostringstream err;
-    err << "AUTOGEN: warning: " << absFilename << "\n"
+    err << "AutoGen: Warning: " << absFilename << "\n"
         << "The file is empty\n";
     this->LogWarning(err.str());
   } else {
@@ -617,7 +617,7 @@ void cmQtAutoGenerators::ParseContentForUic(
   // Process
   if (this->Verbose) {
     std::ostringstream err;
-    err << "AUTOUIC: Checking " << absFilename << "\n";
+    err << "AutoUic: Checking " << absFilename << "\n";
     this->LogInfo(err.str());
   }
 
@@ -651,7 +651,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   // Process
   if (this->Verbose) {
     std::ostringstream err;
-    err << "AUTOMOC: Checking " << absFilename << "\n";
+    err << "AutoMoc: Checking " << absFilename << "\n";
     this->LogInfo(err.str());
   }
 
@@ -705,7 +705,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
           }
         } else {
           std::ostringstream err;
-          err << "AUTOMOC: error: " << absFilename << "\n"
+          err << "AutoMoc: Error: " << absFilename << "\n"
               << "The file includes the moc file \"" << currentMoc
               << "\", but could not find header \"" << basename << '{'
               << this->JoinExts(headerExtensions) << "}\" ";
@@ -733,7 +733,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
               fileToMoc = headerToMoc;
               if (!requiresMoc && basename == scannedFileBasename) {
                 std::ostringstream err;
-                err << "AUTOMOC: warning: " << absFilename << "\n"
+                err << "AutoMoc: Warning: " << absFilename << "\n"
                     << "The file includes the moc file \"" << currentMoc
                     << "\", but does not contain a " << macroName
                     << " macro. Running moc on "
@@ -743,7 +743,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
                 this->LogWarning(err.str());
               } else {
                 std::ostringstream err;
-                err << "AUTOMOC: warning: " << absFilename << "\n"
+                err << "AutoMoc: Warning: " << absFilename << "\n"
                     << "The file includes the moc file \"" << currentMoc
                     << "\" instead of \"moc_" << basename
                     << ".cpp\". Running moc on "
@@ -754,7 +754,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
               }
             } else {
               std::ostringstream err;
-              err << "AUTOMOC: error: " << absFilename << "\n"
+              err << "AutoMoc: Error: " << absFilename << "\n"
                   << "The file includes the moc file \"" << currentMoc
                   << "\", which seems to be the moc file from a different "
                      "source file. CMake also could not find a matching "
@@ -772,7 +772,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
           if (basename != scannedFileBasename) {
             // Don't allow FOO.moc include other than self in strict mode
             std::ostringstream err;
-            err << "AUTOMOC: error: " << absFilename << "\n"
+            err << "AutoMoc: Error: " << absFilename << "\n"
                 << "The file includes the moc file \"" << currentMoc
                 << "\", which seems to be the moc file from a different "
                    "source file. This is not supported. Include \""
@@ -803,7 +803,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
     if (relaxed && ownMocUnderscoreIncluded) {
       // This is for KDE4 compatibility:
       std::ostringstream err;
-      err << "AUTOMOC: warning: " << absFilename << "\n"
+      err << "AutoMoc: Warning: " << absFilename << "\n"
           << "The file contains a " << macroName
           << " macro, but does not include "
           << "\"" << scannedFileBasename << ".moc\", but instead includes "
@@ -820,7 +820,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
     } else {
       // Otherwise always error out since it will not compile:
       std::ostringstream err;
-      err << "AUTOMOC: error: " << absFilename << "\n"
+      err << "AutoMoc: Error: " << absFilename << "\n"
           << "The file contains a " << macroName
           << " macro, but does not include "
           << "\"" << scannedFileBasename << ".moc\" !\n";
@@ -901,7 +901,7 @@ void cmQtAutoGenerators::ParseHeaders(
       // Process
       if (this->Verbose) {
         std::ostringstream err;
-        err << "AUTOMOC: Checking " << headerName << "\n";
+        err << "AutoMoc: Checking " << headerName << "\n";
         this->LogInfo(err.str());
       }
       std::string macroName;
@@ -932,7 +932,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
     mergedMocs.insert(notIncludedMocs.begin(), notIncludedMocs.end());
     if (this->NameCollisionTest(mergedMocs, collisions)) {
       std::ostringstream err;
-      err << "AUTOMOC: error: "
+      err << "AutoMoc: Error: "
              "The same moc file will be generated "
              "from different sources."
           << std::endl
@@ -1003,7 +1003,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
       // nothing changed: don't touch the moc_compilation.cpp file
       if (this->Verbose) {
         std::ostringstream err;
-        err << "AUTOMOC: " << this->OutMocCppFilenameRel << " still up to date"
+        err << "AutoMoc: " << this->OutMocCppFilenameRel << " still up to date"
             << std::endl;
         this->LogInfo(err.str());
       }
@@ -1025,7 +1025,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
     if (!outfile) {
       success = false;
       std::ostringstream err;
-      err << "AUTOMOC: error opening " << this->OutMocCppFilenameAbs << "\n";
+      err << "AutoMoc: error opening " << this->OutMocCppFilenameAbs << "\n";
       this->LogError(err.str());
     } else {
       outfile << automocSource;
@@ -1033,7 +1033,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
       if (!outfile.good()) {
         success = false;
         std::ostringstream err;
-        err << "AUTOMOC: error writing " << this->OutMocCppFilenameAbs << "\n";
+        err << "AutoMoc: error writing " << this->OutMocCppFilenameAbs << "\n";
         this->LogError(err.str());
       }
     }
@@ -1090,7 +1090,7 @@ bool cmQtAutoGenerators::GenerateMoc(const std::string& 
sourceFile,
     if (!result || retVal) {
       {
         std::ostringstream err;
-        err << "AUTOMOC: error: moc process for " << mocFileRel << " failed:\n"
+        err << "AutoMoc: Error: moc process for " << mocFileRel << " failed:\n"
             << output << std::endl;
         this->LogError(err.str());
       }
@@ -1133,7 +1133,7 @@ bool cmQtAutoGenerators::GenerateUiFiles(
     std::multimap<std::string, std::string> collisions;
     if (this->NameCollisionTest(testMap, collisions)) {
       std::ostringstream err;
-      err << "AUTOUIC: error: The same ui_NAME.h file will be generated "
+      err << "AutoUic: Error: The same ui_NAME.h file will be generated "
              "from different sources."
           << std::endl
           << "To avoid this error rename the source files." << std::endl;
@@ -1214,7 +1214,7 @@ bool cmQtAutoGenerators::GenerateUi(const std::string& 
realName,
     if (!result || retVal) {
       {
         std::ostringstream err;
-        err << "AUTOUIC: error: uic process for " << uicFileRel
+        err << "AutoUic: Error: uic process for " << uicFileRel
             << " needed by\n \"" << realName << "\"\nfailed:\n"
             << output << std::endl;
         this->LogError(err.str());
@@ -1263,7 +1263,7 @@ bool cmQtAutoGenerators::GenerateQrcFiles()
     std::multimap<std::string, std::string> collisions;
     if (this->NameCollisionTest(qrcGenMap, collisions)) {
       std::ostringstream err;
-      err << "AUTORCC: error: The same qrc_NAME.cpp file"
+      err << "AutoRcc: Error: The same qrc_NAME.cpp file"
              " will be generated from different sources."
           << std::endl
           << "To avoid this error rename the source .qrc files." << std::endl;
@@ -1350,7 +1350,7 @@ bool cmQtAutoGenerators::GenerateQrc(const std::string& 
qrcInputFile,
     if (!result || retVal) {
       {
         std::ostringstream err;
-        err << "AUTORCC: error: rcc process for " << qrcOutputFile
+        err << "AutoRcc: Error: rcc process for " << qrcOutputFile
             << " failed:\n"
             << output << std::endl;
         this->LogError(err.str());
@@ -1495,7 +1495,7 @@ bool cmQtAutoGenerators::MakeParentDirectory(const 
std::string& filename)
     success = cmsys::SystemTools::MakeDirectory(dirName);
     if (!success) {
       std::ostringstream err;
-      err << "AUTOGEN: Directory creation failed: " << dirName << std::endl;
+      err << "AutoGen: Directory creation failed: " << dirName << std::endl;
       this->LogError(err.str());
     }
   }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7b766b83952ec4c431a55d2f6e589a5f806834c9
commit 7b766b83952ec4c431a55d2f6e589a5f806834c9
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Jan 4 13:08:25 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Generators: Use single moc/uic skip test method only

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 24d2dd7..8fea817 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -610,7 +610,7 @@ void cmQtAutoGenerators::ParseContentForUic(
   const std::string& absFilename, const std::string& contentsString,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
-  if (this->UicExecutable.empty() || this->UicSkipTest(absFilename)) {
+  if (this->UicSkipTest(absFilename)) {
     return;
   }
 
@@ -644,7 +644,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   const std::vector<std::string>& headerExtensions,
   std::map<std::string, std::string>& includedMocs, bool relaxed)
 {
-  if (this->MocExecutable.empty() || this->MocSkipTest(absFilename)) {
+  if (this->MocSkipTest(absFilename)) {
     return true;
   }
 
@@ -838,25 +838,22 @@ void cmQtAutoGenerators::SearchHeadersForSourceFile(
   std::set<std::string>& absHeadersMoc, std::set<std::string>& absHeadersUic)
 {
   // search for header files and private header files we may need to moc:
-  const std::string basename =
-    cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
-  const std::string absPath = cmsys::SystemTools::GetFilenamePath(
-                                cmsys::SystemTools::GetRealPath(absFilename)) +
-    '/';
+  std::string basepath = cmsys::SystemTools::GetFilenamePath(
+    cmsys::SystemTools::GetRealPath(absFilename));
+  basepath += '/';
+  basepath += cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
 
   // Search for regular header
   for (std::vector<std::string>::const_iterator ext = headerExtensions.begin();
        ext != headerExtensions.end(); ++ext) {
-    const std::string headerName = absPath + basename + "." + (*ext);
+    const std::string headerName = basepath + "." + (*ext);
     if (cmsys::SystemTools::FileExists(headerName.c_str())) {
       // Moc headers
-      if (!this->MocExecutable.empty() &&
-          !ListContains(this->SkipMoc, absFilename)) {
+      if (!this->MocSkipTest(absFilename) && !this->MocSkipTest(headerName)) {
         absHeadersMoc.insert(headerName);
       }
       // Uic headers
-      if (!this->UicExecutable.empty() &&
-          !ListContains(this->SkipUic, absFilename)) {
+      if (!this->UicSkipTest(absFilename) && !this->UicSkipTest(headerName)) {
         absHeadersUic.insert(headerName);
       }
       break;
@@ -865,17 +862,15 @@ void cmQtAutoGenerators::SearchHeadersForSourceFile(
   // Search for private header
   for (std::vector<std::string>::const_iterator ext = headerExtensions.begin();
        ext != headerExtensions.end(); ++ext) {
-    const std::string privateHeaderName = absPath + basename + "_p." + (*ext);
-    if (cmsys::SystemTools::FileExists(privateHeaderName.c_str())) {
+    const std::string headerName = basepath + "_p." + (*ext);
+    if (cmsys::SystemTools::FileExists(headerName.c_str())) {
       // Moc headers
-      if (!this->MocExecutable.empty() &&
-          !ListContains(this->SkipMoc, absFilename)) {
-        absHeadersMoc.insert(privateHeaderName);
+      if (!this->MocSkipTest(absFilename) && !this->MocSkipTest(headerName)) {
+        absHeadersMoc.insert(headerName);
       }
       // Uic headers
-      if (!this->UicExecutable.empty() &&
-          !ListContains(this->SkipUic, absFilename)) {
-        absHeadersUic.insert(privateHeaderName);
+      if (!this->UicSkipTest(absFilename) && !this->UicSkipTest(headerName)) {
+        absHeadersUic.insert(headerName);
       }
       break;
     }
@@ -900,23 +895,21 @@ void cmQtAutoGenerators::ParseHeaders(
     const std::string contents = ReadAll(headerName);
 
     // Parse header content for MOC
-    if (!this->MocExecutable.empty() &&
+    if (!this->MocSkipTest(headerName) &&
         (absHeadersMoc.find(headerName) != absHeadersMoc.end()) &&
         (includedMocs.find(headerName) == includedMocs.end())) {
-      if (!this->MocSkipTest(headerName)) {
-        // Process
-        if (this->Verbose) {
-          std::ostringstream err;
-          err << "AUTOMOC: Checking " << headerName << "\n";
-          this->LogInfo(err.str());
-        }
-        std::string macroName;
-        if (this->requiresMocing(contents, macroName)) {
-          notIncludedMocs[headerName] = fpathCheckSum.getPart(headerName) +
-            "/moc_" +
-            cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName) +
-            ".cpp";
-        }
+      // Process
+      if (this->Verbose) {
+        std::ostringstream err;
+        err << "AUTOMOC: Checking " << headerName << "\n";
+        this->LogInfo(err.str());
+      }
+      std::string macroName;
+      if (this->requiresMocing(contents, macroName)) {
+        notIncludedMocs[headerName] = fpathCheckSum.getPart(headerName) +
+          "/moc_" +
+          cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName) +
+          ".cpp";
       }
     }
 
@@ -1372,19 +1365,19 @@ bool cmQtAutoGenerators::GenerateQrc(const std::string& 
qrcInputFile,
 }
 
 /**
- * @brief Tests if the file name is in the skip list
+ * @brief Tests if the file should be ignored for moc scanning
+ * @return True if the file should be ignored
  */
 bool cmQtAutoGenerators::MocSkipTest(const std::string& absFilename)
 {
-  if (ListContains(this->SkipMoc, absFilename)) {
-    if (this->Verbose) {
-      std::ostringstream msg;
-      msg << "AUTOMOC: Skipping " << absFilename << "\n";
-      this->LogInfo(msg.str());
+  // Test if moc scanning is enabled
+  if (!this->MocExecutable.empty()) {
+    // Test if the file name is on the skip list
+    if (!ListContains(this->SkipMoc, absFilename)) {
+      return false;
     }
-    return true;
   }
-  return false;
+  return true;
 }
 
 /**
@@ -1392,15 +1385,14 @@ bool cmQtAutoGenerators::MocSkipTest(const std::string& 
absFilename)
  */
 bool cmQtAutoGenerators::UicSkipTest(const std::string& absFilename)
 {
-  if (ListContains(this->SkipUic, absFilename)) {
-    if (this->Verbose) {
-      std::ostringstream msg;
-      msg << "AUTOUIC: Skipping " << absFilename << "\n";
-      this->LogInfo(msg.str());
+  // Test if uic scanning is enabled
+  if (!this->UicExecutable.empty()) {
+    // Test if the file name is on the skip list
+    if (!ListContains(this->SkipUic, absFilename)) {
+      return false;
     }
-    return true;
   }
-  return false;
+  return true;
 }
 
 /**

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2964b8cca4155fa318722f6ef17f0d4d56ee2f29
commit 2964b8cca4155fa318722f6ef17f0d4d56ee2f29
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sun Jan 1 16:10:49 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Generators: Use AUTOMOC/UIC/RCC instead of AUTOGEN in messages

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 9c8594b..24d2dd7 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -705,7 +705,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
           }
         } else {
           std::ostringstream err;
-          err << "AUTOGEN: error: " << absFilename << "\n"
+          err << "AUTOMOC: error: " << absFilename << "\n"
               << "The file includes the moc file \"" << currentMoc
               << "\", but could not find header \"" << basename << '{'
               << this->JoinExts(headerExtensions) << "}\" ";
@@ -939,7 +939,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
     mergedMocs.insert(notIncludedMocs.begin(), notIncludedMocs.end());
     if (this->NameCollisionTest(mergedMocs, collisions)) {
       std::ostringstream err;
-      err << "AUTOGEN: error: "
+      err << "AUTOMOC: error: "
              "The same moc file will be generated "
              "from different sources."
           << std::endl
@@ -1010,7 +1010,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
       // nothing changed: don't touch the moc_compilation.cpp file
       if (this->Verbose) {
         std::ostringstream err;
-        err << "AUTOGEN: " << this->OutMocCppFilenameRel << " still up to date"
+        err << "AUTOMOC: " << this->OutMocCppFilenameRel << " still up to date"
             << std::endl;
         this->LogInfo(err.str());
       }
@@ -1032,7 +1032,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
     if (!outfile) {
       success = false;
       std::ostringstream err;
-      err << "AUTOGEN: error opening " << this->OutMocCppFilenameAbs << "\n";
+      err << "AUTOMOC: error opening " << this->OutMocCppFilenameAbs << "\n";
       this->LogError(err.str());
     } else {
       outfile << automocSource;
@@ -1040,7 +1040,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
       if (!outfile.good()) {
         success = false;
         std::ostringstream err;
-        err << "AUTOGEN: error writing " << this->OutMocCppFilenameAbs << "\n";
+        err << "AUTOMOC: error writing " << this->OutMocCppFilenameAbs << "\n";
         this->LogError(err.str());
       }
     }
@@ -1097,7 +1097,7 @@ bool cmQtAutoGenerators::GenerateMoc(const std::string& 
sourceFile,
     if (!result || retVal) {
       {
         std::ostringstream err;
-        err << "AUTOGEN: error: moc process for " << mocFileRel << " failed:\n"
+        err << "AUTOMOC: error: moc process for " << mocFileRel << " failed:\n"
             << output << std::endl;
         this->LogError(err.str());
       }
@@ -1140,7 +1140,7 @@ bool cmQtAutoGenerators::GenerateUiFiles(
     std::multimap<std::string, std::string> collisions;
     if (this->NameCollisionTest(testMap, collisions)) {
       std::ostringstream err;
-      err << "AUTOGEN: error: The same ui_NAME.h file will be generated "
+      err << "AUTOUIC: error: The same ui_NAME.h file will be generated "
              "from different sources."
           << std::endl
           << "To avoid this error rename the source files." << std::endl;
@@ -1270,7 +1270,7 @@ bool cmQtAutoGenerators::GenerateQrcFiles()
     std::multimap<std::string, std::string> collisions;
     if (this->NameCollisionTest(qrcGenMap, collisions)) {
       std::ostringstream err;
-      err << "AUTOGEN: error: The same qrc_NAME.cpp file"
+      err << "AUTORCC: error: The same qrc_NAME.cpp file"
              " will be generated from different sources."
           << std::endl
           << "To avoid this error rename the source .qrc files." << std::endl;

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d58b6bf31c18cfedd4a2f15e009b8e5cbdc21b6e
commit d58b6bf31c18cfedd4a2f15e009b8e5cbdc21b6e
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sun Jan 1 15:58:34 2017 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Generators: Moc/UicSkipTest methods

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index fac9d54..9c8594b 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -610,16 +610,7 @@ void cmQtAutoGenerators::ParseContentForUic(
   const std::string& absFilename, const std::string& contentsString,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
-  if (this->UicExecutable.empty()) {
-    return;
-  }
-  // Check skip list
-  if (ListContains(this->SkipUic, absFilename)) {
-    if (this->Verbose) {
-      std::ostringstream err;
-      err << "AUTOUIC: Skipping " << absFilename << "\n";
-      this->LogInfo(err.str());
-    }
+  if (this->UicExecutable.empty() || this->UicSkipTest(absFilename)) {
     return;
   }
 
@@ -653,16 +644,7 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   const std::vector<std::string>& headerExtensions,
   std::map<std::string, std::string>& includedMocs, bool relaxed)
 {
-  if (this->MocExecutable.empty()) {
-    return true;
-  }
-  // Check skip list
-  if (ListContains(this->SkipMoc, absFilename)) {
-    if (this->Verbose) {
-      std::ostringstream err;
-      err << "AUTOMOC: Skipping " << absFilename << "\n";
-      this->LogInfo(err.str());
-    }
+  if (this->MocExecutable.empty() || this->MocSkipTest(absFilename)) {
     return true;
   }
 
@@ -921,14 +903,7 @@ void cmQtAutoGenerators::ParseHeaders(
     if (!this->MocExecutable.empty() &&
         (absHeadersMoc.find(headerName) != absHeadersMoc.end()) &&
         (includedMocs.find(headerName) == includedMocs.end())) {
-      if (ListContains(this->SkipMoc, headerName)) {
-        // Skip
-        if (this->Verbose) {
-          std::ostringstream err;
-          err << "AUTOMOC: Skipping " << headerName << "\n";
-          this->LogInfo(err.str());
-        }
-      } else {
+      if (!this->MocSkipTest(headerName)) {
         // Process
         if (this->Verbose) {
           std::ostringstream err;
@@ -1397,6 +1372,38 @@ bool cmQtAutoGenerators::GenerateQrc(const std::string& 
qrcInputFile,
 }
 
 /**
+ * @brief Tests if the file name is in the skip list
+ */
+bool cmQtAutoGenerators::MocSkipTest(const std::string& absFilename)
+{
+  if (ListContains(this->SkipMoc, absFilename)) {
+    if (this->Verbose) {
+      std::ostringstream msg;
+      msg << "AUTOMOC: Skipping " << absFilename << "\n";
+      this->LogInfo(msg.str());
+    }
+    return true;
+  }
+  return false;
+}
+
+/**
+ * @brief Tests if the file name is in the skip list
+ */
+bool cmQtAutoGenerators::UicSkipTest(const std::string& absFilename)
+{
+  if (ListContains(this->SkipUic, absFilename)) {
+    if (this->Verbose) {
+      std::ostringstream msg;
+      msg << "AUTOUIC: Skipping " << absFilename << "\n";
+      this->LogInfo(msg.str());
+    }
+    return true;
+  }
+  return false;
+}
+
+/**
  * @brief Collects name collisions as output/input pairs
  * @return True if there were collisions
  */
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index 1036cb7..d0c7066 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -86,6 +86,9 @@ private:
 
   void Init();
 
+  bool MocSkipTest(const std::string& absFilename);
+  bool UicSkipTest(const std::string& absFilename);
+
   bool NameCollisionTest(const std::map<std::string, std::string>& genFiles,
                          std::multimap<std::string, std::string>& collisions);
 

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=94c319f93309ff4cddd0280cdcbd48b50492db36
commit 94c319f93309ff4cddd0280cdcbd48b50492db36
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 31 13:04:38 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:16 2017 +0100

    AUTOGEN: Generators: Use separate header lists for MOC and UIC
    
    This is necessary for the skipMoc and skipUic lists to work properly.

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index b323609..fac9d54 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -511,7 +511,8 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
   std::map<std::string, std::string> notIncludedMocs;
   std::map<std::string, std::vector<std::string> > includedUis;
   // collects all headers which may need to be mocced
-  std::set<std::string> headerFiles;
+  std::set<std::string> headerFilesMoc;
+  std::set<std::string> headerFilesUic;
 
   // Parse sources
   {
@@ -527,14 +528,16 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
         return false;
       }
       // Find additional headers
-      this->SearchHeadersForCppFile(absFilename, headerExtensions,
-                                    headerFiles);
+      this->SearchHeadersForSourceFile(absFilename, headerExtensions,
+                                       headerFilesMoc, headerFilesUic);
     }
   }
 
   // Parse headers
-  headerFiles.insert(this->Headers.begin(), this->Headers.end());
-  this->ParseHeaders(headerFiles, includedMocs, notIncludedMocs, includedUis);
+  headerFilesMoc.insert(this->Headers.begin(), this->Headers.end());
+  headerFilesUic.insert(this->Headers.begin(), this->Headers.end());
+  this->ParseHeaders(headerFilesMoc, headerFilesUic, includedMocs,
+                     notIncludedMocs, includedUis);
 
   // Generate files
   if (!this->MocExecutable.empty()) {
@@ -847,10 +850,10 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   return true;
 }
 
-void cmQtAutoGenerators::SearchHeadersForCppFile(
+void cmQtAutoGenerators::SearchHeadersForSourceFile(
   const std::string& absFilename,
   const std::vector<std::string>& headerExtensions,
-  std::set<std::string>& absHeaders)
+  std::set<std::string>& absHeadersMoc, std::set<std::string>& absHeadersUic)
 {
   // search for header files and private header files we may need to moc:
   const std::string basename =
@@ -859,37 +862,64 @@ void cmQtAutoGenerators::SearchHeadersForCppFile(
                                 cmsys::SystemTools::GetRealPath(absFilename)) +
     '/';
 
+  // Search for regular header
   for (std::vector<std::string>::const_iterator ext = headerExtensions.begin();
        ext != headerExtensions.end(); ++ext) {
     const std::string headerName = absPath + basename + "." + (*ext);
     if (cmsys::SystemTools::FileExists(headerName.c_str())) {
-      absHeaders.insert(headerName);
+      // Moc headers
+      if (!this->MocExecutable.empty() &&
+          !ListContains(this->SkipMoc, absFilename)) {
+        absHeadersMoc.insert(headerName);
+      }
+      // Uic headers
+      if (!this->UicExecutable.empty() &&
+          !ListContains(this->SkipUic, absFilename)) {
+        absHeadersUic.insert(headerName);
+      }
       break;
     }
   }
+  // Search for private header
   for (std::vector<std::string>::const_iterator ext = headerExtensions.begin();
        ext != headerExtensions.end(); ++ext) {
     const std::string privateHeaderName = absPath + basename + "_p." + (*ext);
     if (cmsys::SystemTools::FileExists(privateHeaderName.c_str())) {
-      absHeaders.insert(privateHeaderName);
+      // Moc headers
+      if (!this->MocExecutable.empty() &&
+          !ListContains(this->SkipMoc, absFilename)) {
+        absHeadersMoc.insert(privateHeaderName);
+      }
+      // Uic headers
+      if (!this->UicExecutable.empty() &&
+          !ListContains(this->SkipUic, absFilename)) {
+        absHeadersUic.insert(privateHeaderName);
+      }
       break;
     }
   }
 }
 
 void cmQtAutoGenerators::ParseHeaders(
-  const std::set<std::string>& absHeaders,
+  const std::set<std::string>& absHeadersMoc,
+  const std::set<std::string>& absHeadersUic,
   const std::map<std::string, std::string>& includedMocs,
   std::map<std::string, std::string>& notIncludedMocs,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
-  for (std::set<std::string>::const_iterator hIt = absHeaders.begin();
-       hIt != absHeaders.end(); ++hIt) {
+  // Merged header files list to read files only once
+  std::set<std::string> headerFiles;
+  headerFiles.insert(absHeadersMoc.begin(), absHeadersMoc.end());
+  headerFiles.insert(absHeadersUic.begin(), absHeadersUic.end());
+
+  for (std::set<std::string>::const_iterator hIt = headerFiles.begin();
+       hIt != headerFiles.end(); ++hIt) {
     const std::string& headerName = *hIt;
     const std::string contents = ReadAll(headerName);
 
     // Parse header content for MOC
     if (!this->MocExecutable.empty() &&
+        (absHeadersMoc.find(headerName) != absHeadersMoc.end()) &&
         (includedMocs.find(headerName) == includedMocs.end())) {
       if (ListContains(this->SkipMoc, headerName)) {
         // Skip
@@ -916,7 +946,9 @@ void cmQtAutoGenerators::ParseHeaders(
     }
 
     // Parse header content for UIC
-    this->ParseContentForUic(headerName, contents, includedUis);
+    if (absHeadersUic.find(headerName) != absHeadersUic.end()) {
+      this->ParseContentForUic(headerName, contents, includedUis);
+    }
   }
 }
 
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index dac23d9..1036cb7 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -55,13 +55,15 @@ private:
     std::map<std::string, std::string>& includedMocs,
     std::map<std::string, std::vector<std::string> >& includedUis,
     bool relaxed);
-  void SearchHeadersForCppFile(
+  void SearchHeadersForSourceFile(
     const std::string& absFilename,
     const std::vector<std::string>& headerExtensions,
-    std::set<std::string>& absHeaders);
+    std::set<std::string>& absHeadersMoc,
+    std::set<std::string>& absHeadersUic);
 
   void ParseHeaders(
-    const std::set<std::string>& absHeaders,
+    const std::set<std::string>& absHeadersMoc,
+    const std::set<std::string>& absHeadersUic,
     const std::map<std::string, std::string>& includedMocs,
     std::map<std::string, std::string>& notIncludedMocs,
     std::map<std::string, std::vector<std::string> >& includedUis);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=966be439e07131c3ff84175c1a9e3b6336908d8e
commit 966be439e07131c3ff84175c1a9e3b6336908d8e
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 31 11:51:39 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Generators: Be verbose about skipping files

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index c162c87..b323609 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -607,11 +607,20 @@ void cmQtAutoGenerators::ParseContentForUic(
   const std::string& absFilename, const std::string& contentsString,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
-  if (this->UicExecutable.empty() ||
-      ListContains(this->SkipUic, absFilename)) {
+  if (this->UicExecutable.empty()) {
+    return;
+  }
+  // Check skip list
+  if (ListContains(this->SkipUic, absFilename)) {
+    if (this->Verbose) {
+      std::ostringstream err;
+      err << "AUTOUIC: Skipping " << absFilename << "\n";
+      this->LogInfo(err.str());
+    }
     return;
   }
 
+  // Process
   if (this->Verbose) {
     std::ostringstream err;
     err << "AUTOUIC: Checking " << absFilename << "\n";
@@ -641,11 +650,20 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   const std::vector<std::string>& headerExtensions,
   std::map<std::string, std::string>& includedMocs, bool relaxed)
 {
-  if (this->MocExecutable.empty() ||
-      ListContains(this->SkipMoc, absFilename)) {
+  if (this->MocExecutable.empty()) {
+    return true;
+  }
+  // Check skip list
+  if (ListContains(this->SkipMoc, absFilename)) {
+    if (this->Verbose) {
+      std::ostringstream err;
+      err << "AUTOMOC: Skipping " << absFilename << "\n";
+      this->LogInfo(err.str());
+    }
     return true;
   }
 
+  // Process
   if (this->Verbose) {
     std::ostringstream err;
     err << "AUTOMOC: Checking " << absFilename << "\n";
@@ -872,21 +890,28 @@ void cmQtAutoGenerators::ParseHeaders(
 
     // Parse header content for MOC
     if (!this->MocExecutable.empty() &&
-        !ListContains(this->SkipMoc, headerName) &&
         (includedMocs.find(headerName) == includedMocs.end())) {
-
-      if (this->Verbose) {
-        std::ostringstream err;
-        err << "AUTOMOC: Checking " << headerName << "\n";
-        this->LogInfo(err.str());
-      }
-
-      std::string macroName;
-      if (this->requiresMocing(contents, macroName)) {
-        notIncludedMocs[headerName] = fpathCheckSum.getPart(headerName) +
-          "/moc_" +
-          cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName) +
-          ".cpp";
+      if (ListContains(this->SkipMoc, headerName)) {
+        // Skip
+        if (this->Verbose) {
+          std::ostringstream err;
+          err << "AUTOMOC: Skipping " << headerName << "\n";
+          this->LogInfo(err.str());
+        }
+      } else {
+        // Process
+        if (this->Verbose) {
+          std::ostringstream err;
+          err << "AUTOMOC: Checking " << headerName << "\n";
+          this->LogInfo(err.str());
+        }
+        std::string macroName;
+        if (this->requiresMocing(contents, macroName)) {
+          notIncludedMocs[headerName] = fpathCheckSum.getPart(headerName) +
+            "/moc_" +
+            cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName) +
+            ".cpp";
+        }
       }
     }
 

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=de531432887487943dbe4ae5a1bde762d5582e06
commit de531432887487943dbe4ae5a1bde762d5582e06
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Thu Dec 29 17:16:12 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Generators: Remove unused variable

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 4b5e113..c162c87 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -666,13 +666,12 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   std::string ownMocUnderscoreFile;
   std::string ownMocHeaderFile;
 
-  std::string::size_type matchOffset = 0;
   // first a simple string check for "moc" is *much* faster than the regexp,
   // and if the string search already fails, we don't have to try the
   // expensive regexp
-  if (strstr(contentsString.c_str(), "moc") != CM_NULLPTR) {
+  const char* contentChars = contentsString.c_str();
+  if (strstr(contentChars, "moc") != CM_NULLPTR) {
     // Iterate over all included moc files
-    const char* contentChars = contentsString.c_str();
     while (this->RegExpMocInclude.find(contentChars)) {
       const std::string currentMoc = this->RegExpMocInclude.match(1);
       // Basename of the current moc include

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d8e45536fb3637454cf17a638dcd9fc236e94660
commit d8e45536fb3637454cf17a638dcd9fc236e94660
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 31 11:17:07 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Initializer: Always remember skipped files

diff --git a/Source/cmQtAutoGeneratorInitializer.cxx 
b/Source/cmQtAutoGeneratorInitializer.cxx
index b74fbf3..6d4c302 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -101,14 +101,17 @@ static std::string GetQtMajorVersion(cmGeneratorTarget 
const* target)
 static void SetupSourceFiles(cmGeneratorTarget const* target,
                              std::vector<std::string>& mocUicSources,
                              std::vector<std::string>& mocUicHeaders,
-                             std::vector<std::string>& skipMoc,
-                             std::vector<std::string>& skipUic)
+                             std::vector<std::string>& skipMocList,
+                             std::vector<std::string>& skipUicList)
 {
   cmMakefile* makefile = target->Target->GetMakefile();
 
   std::vector<cmSourceFile*> srcFiles;
   target->GetConfigCommonSourceFiles(srcFiles);
 
+  const bool targetMoc = target->GetPropertyAsBool("AUTOMOC");
+  const bool targetUic = target->GetPropertyAsBool("AUTOUIC");
+
   cmFilePathChecksum fpathCheckSum(makefile);
   for (std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
        fileIt != srcFiles.end(); ++fileIt) {
@@ -123,32 +126,38 @@ static void SetupSourceFiles(cmGeneratorTarget const* 
target,
     if (cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"))) {
       continue;
     }
-    if (cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN"))) {
-      continue;
-    }
-    const bool fileSkipUic =
-      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"));
-    const bool fileSkipMoc =
-      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
-    if (fileSkipUic && fileSkipMoc) {
-      continue;
-    }
-
-    // Use file
     const std::string absFile =
       cmsys::SystemTools::GetRealPath(sf->GetFullPath());
-    // Add file name to sources or headers list
-    if (fileType == cmSystemTools::CXX_FILE_FORMAT) {
-      mocUicSources.push_back(absFile);
-    } else if (fileType == cmSystemTools::HEADER_FILE_FORMAT) {
-      mocUicHeaders.push_back(absFile);
-    }
-    // Add file name to skip lists on demand
-    if (fileSkipUic) {
-      skipUic.push_back(absFile);
-    }
-    if (fileSkipMoc) {
-      skipMoc.push_back(absFile);
+    // Skip flags
+    const bool skipAll =
+      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN"));
+    const bool skipMoc =
+      skipAll || cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
+    const bool skipUic =
+      skipAll || cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"));
+    // Add file name to skip lists.
+    // Do this even when the file is not added to the sources/headers lists
+    // because the file name may be extracted from an other file when
+    // processing
+    if (skipMoc) {
+      skipMocList.push_back(absFile);
+    }
+    if (skipUic) {
+      skipUicList.push_back(absFile);
+    }
+
+    if ((targetMoc && !skipMoc) || (targetUic && !skipUic)) {
+      // Add file name to sources or headers list
+      switch (fileType) {
+        case cmSystemTools::CXX_FILE_FORMAT:
+          mocUicSources.push_back(absFile);
+          break;
+        case cmSystemTools::HEADER_FILE_FORMAT:
+          mocUicHeaders.push_back(absFile);
+          break;
+        default:
+          break;
+      }
     }
   }
 }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d9313a82906ced0ff3c76828e86d9d7a248a5e49
commit d9313a82906ced0ff3c76828e86d9d7a248a5e49
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Dec 28 12:15:11 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Initializer: Enable SKIP_AUTOGEN on all AUTOGEN generated sources

diff --git a/Source/cmQtAutoGeneratorInitializer.cxx 
b/Source/cmQtAutoGeneratorInitializer.cxx
index de0c212..b74fbf3 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -646,7 +646,8 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenSources(
     cmMakefile* makefile = target->Target->GetMakefile();
     const std::string mocCppFile =
       GetAutogenTargetBuildDir(target) + "moc_compilation.cpp";
-    makefile->GetOrCreateSource(mocCppFile, true);
+    cmSourceFile* gf = makefile->GetOrCreateSource(mocCppFile, true);
+    gf->SetProperty("SKIP_AUTOGEN", "On");
     target->AddSource(mocCppFile);
   }
 }
@@ -778,7 +779,8 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
           rccOutputFile += ".cpp";
 
           // Add rcc output file to origin target sources
-          makefile->GetOrCreateSource(rccOutputFile, true);
+          cmSourceFile* gf = makefile->GetOrCreateSource(rccOutputFile, true);
+          gf->SetProperty("SKIP_AUTOGEN", "On");
           target->AddSource(rccOutputFile);
           // Register rcc output file as generated
           autogenOutputFiles.push_back(rccOutputFile);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=32d3540e090c4a24d55b99c49c094a9cb574c9b3
commit 32d3540e090c4a24d55b99c49c094a9cb574c9b3
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Dec 28 12:01:31 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Initializer: Introduce SKIP_AUTOGEN checks

diff --git a/Source/cmQtAutoGeneratorInitializer.cxx 
b/Source/cmQtAutoGeneratorInitializer.cxx
index 5304aec..de0c212 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -123,6 +123,9 @@ static void SetupSourceFiles(cmGeneratorTarget const* 
target,
     if (cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"))) {
       continue;
     }
+    if (cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN"))) {
+      continue;
+    }
     const bool fileSkipUic =
       cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"));
     const bool fileSkipMoc =
@@ -578,7 +581,9 @@ static void RccSetupAutoTarget(cmGeneratorTarget const* 
target,
     std::string ext = sf->GetExtension();
     if (ext == "qrc") {
       std::string absFile = cmsys::SystemTools::GetRealPath(sf->GetFullPath());
-      bool skip = cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC"));
+      const bool skip =
+        cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN")) ||
+        cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC"));
 
       if (!skip) {
         _rcc_files += sepRccFiles;
@@ -756,6 +761,7 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
          fileIt != srcFiles.end(); ++fileIt) {
       cmSourceFile* sf = *fileIt;
       if (sf->GetExtension() == "qrc" &&
+          !cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN")) &&
           !cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC"))) {
         {
           const std::string absFile =

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e7280a7f1743d73cdab41ed709a9e1d0f99b6342
commit e7280a7f1743d73cdab41ed709a9e1d0f99b6342
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Dec 28 11:56:20 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Rename config variables
    
    The new names describe the variables use cases better.

diff --git a/Modules/AutogenInfo.cmake.in b/Modules/AutogenInfo.cmake.in
index 84b0f4d..3fafaff 100644
--- a/Modules/AutogenInfo.cmake.in
+++ b/Modules/AutogenInfo.cmake.in
@@ -1,7 +1,7 @@
-set(AM_SOURCES @_cpp_files@ )
-set(AM_SKIP_MOC @_skip_moc@ )
-set(AM_SKIP_UIC @_skip_uic@ )
-set(AM_HEADERS @_moc_headers@ )
+set(AM_SOURCES @_moc_uic_sources@)
+set(AM_HEADERS @_moc_uic_headers@)
+set(AM_SKIP_MOC @_skip_moc@)
+set(AM_SKIP_UIC @_skip_uic@)
 set(AM_MOC_COMPILE_DEFINITIONS @_moc_compile_defs@)
 set(AM_MOC_INCLUDES @_moc_incs@)
 set(AM_MOC_OPTIONS @_moc_options@)
diff --git a/Source/cmQtAutoGeneratorInitializer.cxx 
b/Source/cmQtAutoGeneratorInitializer.cxx
index 0ed43b1..5304aec 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -99,9 +99,9 @@ static std::string GetQtMajorVersion(cmGeneratorTarget const* 
target)
 }
 
 static void SetupSourceFiles(cmGeneratorTarget const* target,
+                             std::vector<std::string>& mocUicSources,
+                             std::vector<std::string>& mocUicHeaders,
                              std::vector<std::string>& skipMoc,
-                             std::vector<std::string>& sources,
-                             std::vector<std::string>& headers,
                              std::vector<std::string>& skipUic)
 {
   cmMakefile* makefile = target->Target->GetMakefile();
@@ -136,9 +136,9 @@ static void SetupSourceFiles(cmGeneratorTarget const* 
target,
       cmsys::SystemTools::GetRealPath(sf->GetFullPath());
     // Add file name to sources or headers list
     if (fileType == cmSystemTools::CXX_FILE_FORMAT) {
-      sources.push_back(absFile);
+      mocUicSources.push_back(absFile);
     } else if (fileType == cmSystemTools::HEADER_FILE_FORMAT) {
-      headers.push_back(absFile);
+      mocUicHeaders.push_back(absFile);
     }
     // Add file name to skip lists on demand
     if (fileSkipUic) {
@@ -171,7 +171,6 @@ static void GetCompileDefinitionsAndDirectories(
 static void MocSetupAutoTarget(
   cmGeneratorTarget const* target, const std::string& autogenTargetName,
   std::vector<std::string> const& skipMoc,
-  std::vector<std::string> const& mocHeaders,
   std::map<std::string, std::string>& configIncludes,
   std::map<std::string, std::string>& configDefines)
 {
@@ -185,9 +184,6 @@ static void MocSetupAutoTarget(
   makefile->AddDefinition(
     "_skip_moc",
     cmOutputConverter::EscapeForCMake(cmJoin(skipMoc, ";")).c_str());
-  makefile->AddDefinition(
-    "_moc_headers",
-    cmOutputConverter::EscapeForCMake(cmJoin(mocHeaders, ";")).c_str());
   bool relaxedMode = makefile->IsOn("CMAKE_AUTOMOC_RELAXED_MODE");
   makefile->AddDefinition("_moc_relaxed_mode", relaxedMode ? "TRUE" : "FALSE");
 
@@ -863,10 +859,10 @@ void 
cmQtAutoGeneratorInitializer::SetupAutoGenerateTarget(
     cmOutputConverter::EscapeForCMake(target->GetName()).c_str());
   makefile->AddDefinition("_target_qt_version", qtMajorVersion.c_str());
 
-  std::vector<std::string> skipUic;
+  std::vector<std::string> mocUicSources;
+  std::vector<std::string> mocUicHeaders;
   std::vector<std::string> skipMoc;
-  std::vector<std::string> mocSources;
-  std::vector<std::string> mocHeaders;
+  std::vector<std::string> skipUic;
   std::map<std::string, std::string> configMocIncludes;
   std::map<std::string, std::string> configMocDefines;
   std::map<std::string, std::string> configUicOptions;
@@ -874,14 +870,18 @@ void 
cmQtAutoGeneratorInitializer::SetupAutoGenerateTarget(
   if (target->GetPropertyAsBool("AUTOMOC") ||
       target->GetPropertyAsBool("AUTOUIC") ||
       target->GetPropertyAsBool("AUTORCC")) {
-    SetupSourceFiles(target, skipMoc, mocSources, mocHeaders, skipUic);
+    SetupSourceFiles(target, mocUicSources, mocUicHeaders, skipMoc, skipUic);
   }
   makefile->AddDefinition(
-    "_cpp_files",
-    cmOutputConverter::EscapeForCMake(cmJoin(mocSources, ";")).c_str());
+    "_moc_uic_sources",
+    cmOutputConverter::EscapeForCMake(cmJoin(mocUicSources, ";")).c_str());
+  makefile->AddDefinition(
+    "_moc_uic_headers",
+    cmOutputConverter::EscapeForCMake(cmJoin(mocUicHeaders, ";")).c_str());
+
   if (target->GetPropertyAsBool("AUTOMOC")) {
-    MocSetupAutoTarget(target, autogenTargetName, skipMoc, mocHeaders,
-                       configMocIncludes, configMocDefines);
+    MocSetupAutoTarget(target, autogenTargetName, skipMoc, configMocIncludes,
+                       configMocDefines);
   }
   if (target->GetPropertyAsBool("AUTOUIC")) {
     UicSetupAutoTarget(target, skipUic, configUicOptions);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=63d3ca4c1cab0c7b9c71d6c051c3b4c053eb7627
commit 63d3ca4c1cab0c7b9c71d6c051c3b4c053eb7627
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Dec 28 11:43:25 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:15 2017 +0100

    AUTOGEN: Make skipMoc and skipUic blacklists behave the same way
    
    Before skipMoc was a list of files that were not included in the
    sources. Now the skipMoc files are added to the sources as well in case
    they are needed for uic processing. skipMoc becomes a blacklist just like
    skipUic.

diff --git a/Source/cmQtAutoGeneratorInitializer.cxx 
b/Source/cmQtAutoGeneratorInitializer.cxx
index f0847b1..0ed43b1 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -100,8 +100,8 @@ static std::string GetQtMajorVersion(cmGeneratorTarget 
const* target)
 
 static void SetupSourceFiles(cmGeneratorTarget const* target,
                              std::vector<std::string>& skipMoc,
-                             std::vector<std::string>& mocSources,
-                             std::vector<std::string>& mocHeaders,
+                             std::vector<std::string>& sources,
+                             std::vector<std::string>& headers,
                              std::vector<std::string>& skipUic)
 {
   cmMakefile* makefile = target->Target->GetMakefile();
@@ -113,26 +113,39 @@ static void SetupSourceFiles(cmGeneratorTarget const* 
target,
   for (std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
        fileIt != srcFiles.end(); ++fileIt) {
     cmSourceFile* sf = *fileIt;
+    const cmSystemTools::FileFormat fileType =
+      cmSystemTools::GetFileFormat(sf->GetExtension().c_str());
+
+    if (!(fileType == cmSystemTools::CXX_FILE_FORMAT) &&
+        !(fileType == cmSystemTools::HEADER_FILE_FORMAT)) {
+      continue;
+    }
+    if (cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"))) {
+      continue;
+    }
+    const bool fileSkipUic =
+      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"));
+    const bool fileSkipMoc =
+      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
+    if (fileSkipUic && fileSkipMoc) {
+      continue;
+    }
+
+    // Use file
     const std::string absFile =
       cmsys::SystemTools::GetRealPath(sf->GetFullPath());
-    const std::string ext = sf->GetExtension();
-
-    if (cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"))) {
+    // Add file name to sources or headers list
+    if (fileType == cmSystemTools::CXX_FILE_FORMAT) {
+      sources.push_back(absFile);
+    } else if (fileType == cmSystemTools::HEADER_FILE_FORMAT) {
+      headers.push_back(absFile);
+    }
+    // Add file name to skip lists on demand
+    if (fileSkipUic) {
       skipUic.push_back(absFile);
     }
-
-    if (!cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"))) {
-      if (cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"))) {
-        skipMoc.push_back(absFile);
-      } else {
-        cmSystemTools::FileFormat fileType =
-          cmSystemTools::GetFileFormat(ext.c_str());
-        if (fileType == cmSystemTools::CXX_FILE_FORMAT) {
-          mocSources.push_back(absFile);
-        } else if (fileType == cmSystemTools::HEADER_FILE_FORMAT) {
-          mocHeaders.push_back(absFile);
-        }
-      }
+    if (fileSkipMoc) {
+      skipMoc.push_back(absFile);
     }
   }
 }
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 5877619..4b5e113 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -89,6 +89,12 @@ static std::string ReadAll(const std::string& filename)
   return stream.str();
 }
 
+static bool ListContains(const std::vector<std::string>& list,
+                         const std::string& entry)
+{
+  return (std::find(list.begin(), list.end(), entry) != list.end());
+}
+
 cmQtAutoGenerators::cmQtAutoGenerators()
   : Verbose(cmsys::SystemTools::HasEnv("VERBOSE"))
   , ColorOutput(true)
@@ -502,56 +508,35 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
 
   // key = moc source filepath, value = moc output filepath
   std::map<std::string, std::string> includedMocs;
-  // collect all headers which may need to be mocced
+  std::map<std::string, std::string> notIncludedMocs;
+  std::map<std::string, std::vector<std::string> > includedUis;
+  // collects all headers which may need to be mocced
   std::set<std::string> headerFiles;
 
-  const std::vector<std::string>& headerExtensions =
-    makefile->GetCMakeInstance()->GetHeaderExtensions();
-
-  std::map<std::string, std::vector<std::string> > includedUis;
-  std::map<std::string, std::vector<std::string> > skippedUis;
-
-  for (std::vector<std::string>::const_iterator it = this->Sources.begin();
-       it != this->Sources.end(); ++it) {
-    const std::string& absFilename = *it;
-    const bool skipUic = std::find(this->SkipUic.begin(), this->SkipUic.end(),
-                                   absFilename) != this->SkipUic.end();
-    std::map<std::string, std::vector<std::string> >& uiFiles =
-      skipUic ? skippedUis : includedUis;
-    if (this->Verbose) {
-      std::ostringstream err;
-      err << "AUTOGEN: Checking " << absFilename << std::endl;
-      this->LogInfo(err.str());
-    }
-    // Parse source file for MOC/UIC
-    if (!this->ParseSourceFile(absFilename, headerExtensions, includedMocs,
-                               uiFiles, this->MocRelaxedMode)) {
-      return false;
-    }
-    // Find additional headers
-    this->SearchHeadersForCppFile(absFilename, headerExtensions, headerFiles);
-  }
+  // Parse sources
+  {
+    const std::vector<std::string>& headerExtensions =
+      makefile->GetCMakeInstance()->GetHeaderExtensions();
 
-  for (std::vector<std::string>::const_iterator it = this->SkipMoc.begin();
-       it != this->SkipMoc.end(); ++it) {
-    if (std::find(this->SkipUic.begin(), this->SkipUic.end(), *it) !=
-        this->SkipUic.end()) {
+    for (std::vector<std::string>::const_iterator it = this->Sources.begin();
+         it != this->Sources.end(); ++it) {
       const std::string& absFilename = *it;
-      if (this->Verbose) {
-        std::ostringstream err;
-        err << "AUTOGEN: Checking " << absFilename << std::endl;
-        this->LogInfo(err.str());
+      // Parse source file for MOC/UIC
+      if (!this->ParseSourceFile(absFilename, headerExtensions, includedMocs,
+                                 includedUis, this->MocRelaxedMode)) {
+        return false;
       }
-      this->ParseForUic(absFilename, includedUis);
+      // Find additional headers
+      this->SearchHeadersForCppFile(absFilename, headerExtensions,
+                                    headerFiles);
     }
   }
 
+  // Parse headers
   headerFiles.insert(this->Headers.begin(), this->Headers.end());
-
-  // key = moc source filepath, value = moc output filename
-  std::map<std::string, std::string> notIncludedMocs;
   this->ParseHeaders(headerFiles, includedMocs, notIncludedMocs, includedUis);
 
+  // Generate files
   if (!this->MocExecutable.empty()) {
     if (!this->GenerateMocFiles(includedMocs, notIncludedMocs)) {
       return false;
@@ -588,11 +573,13 @@ bool cmQtAutoGenerators::ParseSourceFile(
         << "The file is empty\n";
     this->LogWarning(err.str());
   } else {
-    // Parse source contents for UIC
-    this->ParseContentForUic(absFilename, contentsString, includedUis);
     // Parse source contents for MOC
     success = this->ParseContentForMoc(
       absFilename, contentsString, headerExtensions, includedMocs, relaxed);
+    // Parse source contents for UIC
+    if (success) {
+      this->ParseContentForUic(absFilename, contentsString, includedUis);
+    }
   }
   return success;
 }
@@ -616,31 +603,21 @@ bool cmQtAutoGenerators::requiresMocing(const 
std::string& text,
   return false;
 }
 
-void cmQtAutoGenerators::ParseForUic(
-  const std::string& absFilename,
+void cmQtAutoGenerators::ParseContentForUic(
+  const std::string& absFilename, const std::string& contentsString,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
-  if (this->UicExecutable.empty()) {
+  if (this->UicExecutable.empty() ||
+      ListContains(this->SkipUic, absFilename)) {
     return;
   }
-  const std::string contentsString = ReadAll(absFilename);
-  if (contentsString.empty()) {
+
+  if (this->Verbose) {
     std::ostringstream err;
-    err << "AUTOGEN: warning: " << absFilename << ": file is empty\n"
-        << std::endl;
-    this->LogWarning(err.str());
-    return;
+    err << "AUTOUIC: Checking " << absFilename << "\n";
+    this->LogInfo(err.str());
   }
-  this->ParseContentForUic(absFilename, contentsString, includedUis);
-}
 
-void cmQtAutoGenerators::ParseContentForUic(
-  const std::string& absFilename, const std::string& contentsString,
-  std::map<std::string, std::vector<std::string> >& includedUis)
-{
-  if (this->UicExecutable.empty()) {
-    return;
-  }
   const std::string realName = cmsys::SystemTools::GetRealPath(absFilename);
   const char* contentChars = contentsString.c_str();
   if (strstr(contentChars, "ui_") != CM_NULLPTR) {
@@ -664,10 +641,17 @@ bool cmQtAutoGenerators::ParseContentForMoc(
   const std::vector<std::string>& headerExtensions,
   std::map<std::string, std::string>& includedMocs, bool relaxed)
 {
-  if (this->MocExecutable.empty()) {
+  if (this->MocExecutable.empty() ||
+      ListContains(this->SkipMoc, absFilename)) {
     return true;
   }
 
+  if (this->Verbose) {
+    std::ostringstream err;
+    err << "AUTOMOC: Checking " << absFilename << "\n";
+    this->LogInfo(err.str());
+  }
+
   const std::string scannedFileAbsPath =
     cmsys::SystemTools::GetFilenamePath(
       cmsys::SystemTools::GetRealPath(absFilename)) +
@@ -887,11 +871,14 @@ void cmQtAutoGenerators::ParseHeaders(
     const std::string& headerName = *hIt;
     const std::string contents = ReadAll(headerName);
 
+    // Parse header content for MOC
     if (!this->MocExecutable.empty() &&
-        includedMocs.find(headerName) == includedMocs.end()) {
+        !ListContains(this->SkipMoc, headerName) &&
+        (includedMocs.find(headerName) == includedMocs.end())) {
+
       if (this->Verbose) {
         std::ostringstream err;
-        err << "AUTOGEN: Checking " << headerName << std::endl;
+        err << "AUTOMOC: Checking " << headerName << "\n";
         this->LogInfo(err.str());
       }
 
@@ -903,6 +890,8 @@ void cmQtAutoGenerators::ParseHeaders(
           ".cpp";
       }
     }
+
+    // Parse header content for UIC
     this->ParseContentForUic(headerName, contents, includedUis);
   }
 }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6ae19bf32e232beb59a0c427d82c0761e8248ab8
commit 6ae19bf32e232beb59a0c427d82c0761e8248ab8
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Dec 28 10:25:16 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Add dedicated method for moc content parsing

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 33550b0..5877619 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -580,19 +580,90 @@ bool cmQtAutoGenerators::ParseSourceFile(
   std::map<std::string, std::string>& includedMocs,
   std::map<std::string, std::vector<std::string> >& includedUis, bool relaxed)
 {
+  bool success = true;
   const std::string contentsString = ReadAll(absFilename);
   if (contentsString.empty()) {
     std::ostringstream err;
     err << "AUTOGEN: warning: " << absFilename << "\n"
         << "The file is empty\n";
     this->LogWarning(err.str());
-    return true;
+  } else {
+    // Parse source contents for UIC
+    this->ParseContentForUic(absFilename, contentsString, includedUis);
+    // Parse source contents for MOC
+    success = this->ParseContentForMoc(
+      absFilename, contentsString, headerExtensions, includedMocs, relaxed);
+  }
+  return success;
+}
+
+bool cmQtAutoGenerators::requiresMocing(const std::string& text,
+                                        std::string& macroName)
+{
+  // Run a simple check before an expensive regular expression check
+  if (strstr(text.c_str(), "Q_OBJECT") != CM_NULLPTR) {
+    if (this->RegExpQObject.find(text)) {
+      macroName = "Q_OBJECT";
+      return true;
+    }
+  }
+  if (strstr(text.c_str(), "Q_GADGET") != CM_NULLPTR) {
+    if (this->RegExpQGadget.find(text)) {
+      macroName = "Q_GADGET";
+      return true;
+    }
   }
+  return false;
+}
 
-  // Parse source contents for UIC
+void cmQtAutoGenerators::ParseForUic(
+  const std::string& absFilename,
+  std::map<std::string, std::vector<std::string> >& includedUis)
+{
+  if (this->UicExecutable.empty()) {
+    return;
+  }
+  const std::string contentsString = ReadAll(absFilename);
+  if (contentsString.empty()) {
+    std::ostringstream err;
+    err << "AUTOGEN: warning: " << absFilename << ": file is empty\n"
+        << std::endl;
+    this->LogWarning(err.str());
+    return;
+  }
   this->ParseContentForUic(absFilename, contentsString, includedUis);
+}
 
-  // Continue with moc parsing on demand
+void cmQtAutoGenerators::ParseContentForUic(
+  const std::string& absFilename, const std::string& contentsString,
+  std::map<std::string, std::vector<std::string> >& includedUis)
+{
+  if (this->UicExecutable.empty()) {
+    return;
+  }
+  const std::string realName = cmsys::SystemTools::GetRealPath(absFilename);
+  const char* contentChars = contentsString.c_str();
+  if (strstr(contentChars, "ui_") != CM_NULLPTR) {
+    while (this->RegExpUicInclude.find(contentChars)) {
+      const std::string currentUi = this->RegExpUicInclude.match(1);
+      const std::string basename =
+        cmsys::SystemTools::GetFilenameWithoutLastExtension(currentUi);
+      // basename should be the part of the ui filename used for
+      // finding the correct header, so we need to remove the ui_ part
+      includedUis[realName].push_back(basename.substr(3));
+      contentChars += this->RegExpUicInclude.end();
+    }
+  }
+}
+
+/**
+ * @return True on success
+ */
+bool cmQtAutoGenerators::ParseContentForMoc(
+  const std::string& absFilename, const std::string& contentsString,
+  const std::vector<std::string>& headerExtensions,
+  std::map<std::string, std::string>& includedMocs, bool relaxed)
+{
   if (this->MocExecutable.empty()) {
     return true;
   }
@@ -775,65 +846,6 @@ bool cmQtAutoGenerators::ParseSourceFile(
   return true;
 }
 
-bool cmQtAutoGenerators::requiresMocing(const std::string& text,
-                                        std::string& macroName)
-{
-  // Run a simple check before an expensive regular expression check
-  if (strstr(text.c_str(), "Q_OBJECT") != CM_NULLPTR) {
-    if (this->RegExpQObject.find(text)) {
-      macroName = "Q_OBJECT";
-      return true;
-    }
-  }
-  if (strstr(text.c_str(), "Q_GADGET") != CM_NULLPTR) {
-    if (this->RegExpQGadget.find(text)) {
-      macroName = "Q_GADGET";
-      return true;
-    }
-  }
-  return false;
-}
-
-void cmQtAutoGenerators::ParseForUic(
-  const std::string& absFilename,
-  std::map<std::string, std::vector<std::string> >& includedUis)
-{
-  if (this->UicExecutable.empty()) {
-    return;
-  }
-  const std::string contentsString = ReadAll(absFilename);
-  if (contentsString.empty()) {
-    std::ostringstream err;
-    err << "AUTOGEN: warning: " << absFilename << ": file is empty\n"
-        << std::endl;
-    this->LogWarning(err.str());
-    return;
-  }
-  this->ParseContentForUic(absFilename, contentsString, includedUis);
-}
-
-void cmQtAutoGenerators::ParseContentForUic(
-  const std::string& absFilename, const std::string& contentsString,
-  std::map<std::string, std::vector<std::string> >& includedUis)
-{
-  if (this->UicExecutable.empty()) {
-    return;
-  }
-  const std::string realName = cmsys::SystemTools::GetRealPath(absFilename);
-  const char* contentChars = contentsString.c_str();
-  if (strstr(contentChars, "ui_") != CM_NULLPTR) {
-    while (this->RegExpUicInclude.find(contentChars)) {
-      const std::string currentUi = this->RegExpUicInclude.match(1);
-      const std::string basename =
-        cmsys::SystemTools::GetFilenameWithoutLastExtension(currentUi);
-      // basename should be the part of the ui filename used for
-      // finding the correct header, so we need to remove the ui_ part
-      includedUis[realName].push_back(basename.substr(3));
-      contentChars += this->RegExpUicInclude.end();
-    }
-  }
-}
-
 void cmQtAutoGenerators::SearchHeadersForCppFile(
   const std::string& absFilename,
   const std::vector<std::string>& headerExtensions,
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index f86e7c3..dac23d9 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -72,6 +72,12 @@ private:
     const std::string& fileName, const std::string& contentsString,
     std::map<std::string, std::vector<std::string> >& includedUis);
 
+  bool ParseContentForMoc(const std::string& absFilename,
+                          const std::string& contentsString,
+                          const std::vector<std::string>& headerExtensions,
+                          std::map<std::string, std::string>& includedMocs,
+                          bool relaxed);
+
   void ParseForUic(
     const std::string& fileName,
     std::map<std::string, std::vector<std::string> >& includedUis);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9986da4f0f2f49c0d7d260f9d21deaa906708376
commit 9986da4f0f2f49c0d7d260f9d21deaa906708376
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 19:08:23 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Split config SKIP_MOC and SKIP_UIC into vectors

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 5a370fe..33550b0 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -227,7 +227,8 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
                                     this->Headers);
 
   // - Moc
-  this->SkipMoc = makefile->GetSafeDefinition("AM_SKIP_MOC");
+  cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_SKIP_MOC"),
+                                    this->SkipMoc);
   {
     std::string compileDefsPropOrig = "AM_MOC_COMPILE_DEFINITIONS";
     std::string compileDefsProp = compileDefsPropOrig;
@@ -254,7 +255,8 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
   this->MocOptionsStr = makefile->GetSafeDefinition("AM_MOC_OPTIONS");
 
   // - Uic
-  this->SkipUic = makefile->GetSafeDefinition("AM_SKIP_UIC");
+  cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_SKIP_UIC"),
+                                    this->SkipUic);
   {
     const char* uicOptionsFiles =
       makefile->GetSafeDefinition("AM_UIC_OPTIONS_FILES");
@@ -508,14 +510,12 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
 
   std::map<std::string, std::vector<std::string> > includedUis;
   std::map<std::string, std::vector<std::string> > skippedUis;
-  std::vector<std::string> uicSkipped;
-  cmSystemTools::ExpandListArgument(this->SkipUic, uicSkipped);
 
   for (std::vector<std::string>::const_iterator it = this->Sources.begin();
        it != this->Sources.end(); ++it) {
     const std::string& absFilename = *it;
-    const bool skipUic = std::find(uicSkipped.begin(), uicSkipped.end(),
-                                   absFilename) != uicSkipped.end();
+    const bool skipUic = std::find(this->SkipUic.begin(), this->SkipUic.end(),
+                                   absFilename) != this->SkipUic.end();
     std::map<std::string, std::vector<std::string> >& uiFiles =
       skipUic ? skippedUis : includedUis;
     if (this->Verbose) {
@@ -532,21 +532,17 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
     this->SearchHeadersForCppFile(absFilename, headerExtensions, headerFiles);
   }
 
-  {
-    std::vector<std::string> mocSkipped;
-    cmSystemTools::ExpandListArgument(this->SkipMoc, mocSkipped);
-    for (std::vector<std::string>::const_iterator it = mocSkipped.begin();
-         it != mocSkipped.end(); ++it) {
-      if (std::find(uicSkipped.begin(), uicSkipped.end(), *it) !=
-          uicSkipped.end()) {
-        const std::string& absFilename = *it;
-        if (this->Verbose) {
-          std::ostringstream err;
-          err << "AUTOGEN: Checking " << absFilename << std::endl;
-          this->LogInfo(err.str());
-        }
-        this->ParseForUic(absFilename, includedUis);
+  for (std::vector<std::string>::const_iterator it = this->SkipMoc.begin();
+       it != this->SkipMoc.end(); ++it) {
+    if (std::find(this->SkipUic.begin(), this->SkipUic.end(), *it) !=
+        this->SkipUic.end()) {
+      const std::string& absFilename = *it;
+      if (this->Verbose) {
+        std::ostringstream err;
+        err << "AUTOGEN: Checking " << absFilename << std::endl;
+        this->LogInfo(err.str());
       }
+      this->ParseForUic(absFilename, includedUis);
     }
   }
 
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index bffdee2..f86e7c3 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -119,7 +119,7 @@ private:
   std::vector<std::string> Sources;
   std::vector<std::string> Headers;
   // - Moc
-  std::string SkipMoc;
+  std::vector<std::string> SkipMoc;
   std::string MocCompileDefinitionsStr;
   std::string MocIncludesStr;
   std::string MocOptionsStr;
@@ -129,7 +129,7 @@ private:
   std::list<std::string> MocDefinitions;
   std::vector<std::string> MocOptions;
   // - Uic
-  std::string SkipUic;
+  std::vector<std::string> SkipUic;
   std::vector<std::string> UicTargetOptions;
   std::map<std::string, std::string> UicOptions;
   // - Rcc

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d51cc88e844c78c01c1616e6a2fb102c0682dd00
commit d51cc88e844c78c01c1616e6a2fb102c0682dd00
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 19:03:14 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Split config headers/sources into vector

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index f2f1505..5a370fe 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -221,8 +221,10 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
   this->RccExecutable = makefile->GetSafeDefinition("AM_QT_RCC_EXECUTABLE");
 
   // - File Lists
-  this->Sources = makefile->GetSafeDefinition("AM_SOURCES");
-  this->Headers = makefile->GetSafeDefinition("AM_HEADERS");
+  cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_SOURCES"),
+                                    this->Sources);
+  cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_HEADERS"),
+                                    this->Headers);
 
   // - Moc
   this->SkipMoc = makefile->GetSafeDefinition("AM_SKIP_MOC");
@@ -501,9 +503,6 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
   // collect all headers which may need to be mocced
   std::set<std::string> headerFiles;
 
-  std::vector<std::string> sourceFiles;
-  cmSystemTools::ExpandListArgument(this->Sources, sourceFiles);
-
   const std::vector<std::string>& headerExtensions =
     makefile->GetCMakeInstance()->GetHeaderExtensions();
 
@@ -512,13 +511,13 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
   std::vector<std::string> uicSkipped;
   cmSystemTools::ExpandListArgument(this->SkipUic, uicSkipped);
 
-  for (std::vector<std::string>::const_iterator it = sourceFiles.begin();
-       it != sourceFiles.end(); ++it) {
-    const bool skipUic =
-      std::find(uicSkipped.begin(), uicSkipped.end(), *it) != uicSkipped.end();
+  for (std::vector<std::string>::const_iterator it = this->Sources.begin();
+       it != this->Sources.end(); ++it) {
+    const std::string& absFilename = *it;
+    const bool skipUic = std::find(uicSkipped.begin(), uicSkipped.end(),
+                                   absFilename) != uicSkipped.end();
     std::map<std::string, std::vector<std::string> >& uiFiles =
       skipUic ? skippedUis : includedUis;
-    const std::string& absFilename = *it;
     if (this->Verbose) {
       std::ostringstream err;
       err << "AUTOGEN: Checking " << absFilename << std::endl;
@@ -551,9 +550,7 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
     }
   }
 
-  std::vector<std::string> headerFilesVec;
-  cmSystemTools::ExpandListArgument(this->Headers, headerFilesVec);
-  headerFiles.insert(headerFilesVec.begin(), headerFilesVec.end());
+  headerFiles.insert(this->Headers.begin(), this->Headers.end());
 
   // key = moc source filepath, value = moc output filename
   std::map<std::string, std::string> notIncludedMocs;
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index c6fe3b6..bffdee2 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -116,8 +116,8 @@ private:
   std::string UicExecutable;
   std::string RccExecutable;
   // - File lists
-  std::string Sources;
-  std::string Headers;
+  std::vector<std::string> Sources;
+  std::vector<std::string> Headers;
   // - Moc
   std::string SkipMoc;
   std::string MocCompileDefinitionsStr;

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cf1d5a9cdba49a2e9f08879d756ae118b22bfc6a
commit cf1d5a9cdba49a2e9f08879d756ae118b22bfc6a
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 18:55:51 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Rename ParseForUic method

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 561e566..f2f1505 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -597,7 +597,7 @@ bool cmQtAutoGenerators::ParseSourceFile(
   }
 
   // Parse source contents for UIC
-  this->ParseForUic(absFilename, contentsString, includedUis);
+  this->ParseContentForUic(absFilename, contentsString, includedUis);
 
   // Continue with moc parsing on demand
   if (this->MocExecutable.empty()) {
@@ -816,10 +816,10 @@ void cmQtAutoGenerators::ParseForUic(
     this->LogWarning(err.str());
     return;
   }
-  this->ParseForUic(absFilename, contentsString, includedUis);
+  this->ParseContentForUic(absFilename, contentsString, includedUis);
 }
 
-void cmQtAutoGenerators::ParseForUic(
+void cmQtAutoGenerators::ParseContentForUic(
   const std::string& absFilename, const std::string& contentsString,
   std::map<std::string, std::vector<std::string> >& includedUis)
 {
@@ -898,7 +898,7 @@ void cmQtAutoGenerators::ParseHeaders(
           ".cpp";
       }
     }
-    this->ParseForUic(headerName, contents, includedUis);
+    this->ParseContentForUic(headerName, contents, includedUis);
   }
 }
 
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index b6bca8a..c6fe3b6 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -68,7 +68,7 @@ private:
 
   bool requiresMocing(const std::string& text, std::string& macroName);
 
-  void ParseForUic(
+  void ParseContentForUic(
     const std::string& fileName, const std::string& contentsString,
     std::map<std::string, std::vector<std::string> >& includedUis);
 

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f962275987e17cf94da663a919f52b6d0c8f44f4
commit f962275987e17cf94da663a919f52b6d0c8f44f4
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 18:37:30 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Group static function definitions

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 6a7f828..561e566 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -80,6 +80,15 @@ static bool FileNameIsUnique(const std::string& filePath,
   return true;
 }
 
+static std::string ReadAll(const std::string& filename)
+{
+  cmsys::ifstream file(filename.c_str());
+  std::ostringstream stream;
+  stream << file.rdbuf();
+  file.close();
+  return stream.str();
+}
+
 cmQtAutoGenerators::cmQtAutoGenerators()
   : Verbose(cmsys::SystemTools::HasEnv("VERBOSE"))
   , ColorOutput(true)
@@ -472,15 +481,6 @@ void cmQtAutoGenerators::Init()
   }
 }
 
-static std::string ReadAll(const std::string& filename)
-{
-  cmsys::ifstream file(filename.c_str());
-  std::ostringstream stream;
-  stream << file.rdbuf();
-  file.close();
-  return stream.str();
-}
-
 bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
 {
   // If settings changed everything needs to be re-generated.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c736c41ad192c89e1c74751a8f401c75955f5f3b
commit c736c41ad192c89e1c74751a8f401c75955f5f3b
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 14:52:49 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Use precompiled regular expressions

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 8439f2a..6a7f828 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -6,7 +6,6 @@
 #include <assert.h>
 #include <cmConfigure.h>
 #include <cmsys/FStream.hxx>
-#include <cmsys/RegularExpression.hxx>
 #include <cmsys/Terminal.h>
 #include <iostream>
 #include <sstream>
@@ -28,27 +27,6 @@
 #include <unistd.h>
 #endif
 
-static bool requiresMocing(const std::string& text, std::string& macroName)
-{
-  // this simple check is much much faster than the regexp
-  if (strstr(text.c_str(), "Q_OBJECT") == CM_NULLPTR &&
-      strstr(text.c_str(), "Q_GADGET") == CM_NULLPTR) {
-    return false;
-  }
-
-  cmsys::RegularExpression qObjectRegExp("[\n][ \t]*Q_OBJECT[^a-zA-Z0-9_]");
-  if (qObjectRegExp.find(text)) {
-    macroName = "Q_OBJECT";
-    return true;
-  }
-  cmsys::RegularExpression qGadgetRegExp("[\n][ \t]*Q_GADGET[^a-zA-Z0-9_]");
-  if (qGadgetRegExp.find(text)) {
-    macroName = "Q_GADGET";
-    return true;
-  }
-  return false;
-}
-
 static std::string findMatchingHeader(
   const std::string& absPath, const std::string& mocSubDir,
   const std::string& basename,
@@ -120,6 +98,15 @@ cmQtAutoGenerators::cmQtAutoGenerators()
       this->ColorOutput = false;
     }
   }
+
+  // Precompile regular expressions
+  this->RegExpQObject.compile("[\n][ \t]*Q_OBJECT[^a-zA-Z0-9_]");
+  this->RegExpQGadget.compile("[\n][ \t]*Q_GADGET[^a-zA-Z0-9_]");
+  this->RegExpMocInclude.compile(
+    "[\n][ \t]*#[ \t]*include[ \t]+"
+    "[\"<](([^ \">]+/)?moc_[^ \">/]+\\.cpp|[^ \">]+\\.moc)[\">]");
+  this->RegExpUicInclude.compile("[\n][ \t]*#[ \t]*include[ \t]+"
+                                 "[\"<](([^ \">]+/)?ui_[^ \">/]+\\.h)[\">]");
 }
 
 void cmQtAutoGenerators::MergeUicOptions(
@@ -600,10 +587,6 @@ bool cmQtAutoGenerators::ParseSourceFile(
   std::map<std::string, std::string>& includedMocs,
   std::map<std::string, std::vector<std::string> >& includedUis, bool relaxed)
 {
-  cmsys::RegularExpression mocIncludeRegExp(
-    "[\n][ \t]*#[ \t]*include[ \t]+"
-    "[\"<](([^ \">]+/)?moc_[^ \">/]+\\.cpp|[^ \">]+\\.moc)[\">]");
-
   const std::string contentsString = ReadAll(absFilename);
   if (contentsString.empty()) {
     std::ostringstream err;
@@ -629,7 +612,7 @@ bool cmQtAutoGenerators::ParseSourceFile(
     cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
 
   std::string macroName;
-  const bool requiresMoc = requiresMocing(contentsString, macroName);
+  const bool requiresMoc = this->requiresMocing(contentsString, macroName);
   bool ownDotMocIncluded = false;
   bool ownMocUnderscoreIncluded = false;
   std::string ownMocUnderscoreFile;
@@ -642,8 +625,8 @@ bool cmQtAutoGenerators::ParseSourceFile(
   if (strstr(contentsString.c_str(), "moc") != CM_NULLPTR) {
     // Iterate over all included moc files
     const char* contentChars = contentsString.c_str();
-    while (mocIncludeRegExp.find(contentChars)) {
-      const std::string currentMoc = mocIncludeRegExp.match(1);
+    while (this->RegExpMocInclude.find(contentChars)) {
+      const std::string currentMoc = this->RegExpMocInclude.match(1);
       // Basename of the current moc include
       std::string basename =
         cmsys::SystemTools::GetFilenameWithoutLastExtension(currentMoc);
@@ -758,7 +741,7 @@ bool cmQtAutoGenerators::ParseSourceFile(
         }
       }
       // Forward content pointer
-      contentChars += mocIncludeRegExp.end();
+      contentChars += this->RegExpMocInclude.end();
     }
   }
 
@@ -799,6 +782,25 @@ bool cmQtAutoGenerators::ParseSourceFile(
   return true;
 }
 
+bool cmQtAutoGenerators::requiresMocing(const std::string& text,
+                                        std::string& macroName)
+{
+  // Run a simple check before an expensive regular expression check
+  if (strstr(text.c_str(), "Q_OBJECT") != CM_NULLPTR) {
+    if (this->RegExpQObject.find(text)) {
+      macroName = "Q_OBJECT";
+      return true;
+    }
+  }
+  if (strstr(text.c_str(), "Q_GADGET") != CM_NULLPTR) {
+    if (this->RegExpQGadget.find(text)) {
+      macroName = "Q_GADGET";
+      return true;
+    }
+  }
+  return false;
+}
+
 void cmQtAutoGenerators::ParseForUic(
   const std::string& absFilename,
   std::map<std::string, std::vector<std::string> >& includedUis)
@@ -825,20 +827,16 @@ void cmQtAutoGenerators::ParseForUic(
     return;
   }
   const std::string realName = cmsys::SystemTools::GetRealPath(absFilename);
-  cmsys::RegularExpression uiIncludeRegExp(
-    "[\n][ \t]*#[ \t]*include[ \t]+"
-    "[\"<](([^ \">]+/)?ui_[^ \">/]+\\.h)[\">]");
-
   const char* contentChars = contentsString.c_str();
   if (strstr(contentChars, "ui_") != CM_NULLPTR) {
-    while (uiIncludeRegExp.find(contentChars)) {
-      const std::string currentUi = uiIncludeRegExp.match(1);
+    while (this->RegExpUicInclude.find(contentChars)) {
+      const std::string currentUi = this->RegExpUicInclude.match(1);
       const std::string basename =
         cmsys::SystemTools::GetFilenameWithoutLastExtension(currentUi);
       // basename should be the part of the ui filename used for
       // finding the correct header, so we need to remove the ui_ part
       includedUis[realName].push_back(basename.substr(3));
-      contentChars += uiIncludeRegExp.end();
+      contentChars += this->RegExpUicInclude.end();
     }
   }
 }
@@ -893,7 +891,7 @@ void cmQtAutoGenerators::ParseHeaders(
       }
 
       std::string macroName;
-      if (requiresMocing(contents, macroName)) {
+      if (this->requiresMocing(contents, macroName)) {
         notIncludedMocs[headerName] = fpathCheckSum.getPart(headerName) +
           "/moc_" +
           cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName) +
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index 08f98b5..b6bca8a 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -5,6 +5,7 @@
 
 #include <cmConfigure.h> // IWYU pragma: keep
 #include <cmFilePathChecksum.h>
+#include <cmsys/RegularExpression.hxx>
 
 #include <list>
 #include <map>
@@ -65,6 +66,8 @@ private:
     std::map<std::string, std::string>& notIncludedMocs,
     std::map<std::string, std::vector<std::string> >& includedUis);
 
+  bool requiresMocing(const std::string& text, std::string& macroName);
+
   void ParseForUic(
     const std::string& fileName, const std::string& contentsString,
     std::map<std::string, std::vector<std::string> >& includedUis);
@@ -138,6 +141,10 @@ private:
   std::string OldCompileSettingsStr;
   // - Utility
   cmFilePathChecksum fpathCheckSum;
+  cmsys::RegularExpression RegExpQObject;
+  cmsys::RegularExpression RegExpQGadget;
+  cmsys::RegularExpression RegExpMocInclude;
+  cmsys::RegularExpression RegExpUicInclude;
   // - Flags
   bool IncludeProjectDirsBefore;
   bool Verbose;

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cbd650c2642e40369eaa53d20dafee6cdccae4af
commit cbd650c2642e40369eaa53d20dafee6cdccae4af
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 14:26:56 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:14 2017 +0100

    AUTOGEN: Generators: Use unified ParseSourceFile and drop old methods

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 41bb6f9..8439f2a 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -537,17 +537,12 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
       err << "AUTOGEN: Checking " << absFilename << std::endl;
       this->LogInfo(err.str());
     }
-    if (this->MocRelaxedMode) {
-      if (!this->ParseCppFile(absFilename, headerExtensions, includedMocs,
-                              uiFiles)) {
-        return false;
-      }
-    } else {
-      if (!this->StrictParseCppFile(absFilename, headerExtensions,
-                                    includedMocs, uiFiles)) {
-        return false;
-      }
+    // Parse source file for MOC/UIC
+    if (!this->ParseSourceFile(absFilename, headerExtensions, includedMocs,
+                               uiFiles, this->MocRelaxedMode)) {
+      return false;
     }
+    // Find additional headers
     this->SearchHeadersForCppFile(absFilename, headerExtensions, headerFiles);
   }
 
@@ -599,311 +594,6 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
 /**
  * @return True on success
  */
-bool cmQtAutoGenerators::ParseCppFile(
-  const std::string& absFilename,
-  const std::vector<std::string>& headerExtensions,
-  std::map<std::string, std::string>& includedMocs,
-  std::map<std::string, std::vector<std::string> >& includedUis)
-{
-  cmsys::RegularExpression mocIncludeRegExp(
-    "[\n][ \t]*#[ \t]*include[ \t]+"
-    "[\"<](([^ \">]+/)?moc_[^ \">/]+\\.cpp|[^ \">]+\\.moc)[\">]");
-
-  const std::string contentsString = ReadAll(absFilename);
-  if (contentsString.empty()) {
-    std::ostringstream err;
-    err << "AUTOGEN: warning: " << absFilename << ": file is empty\n"
-        << std::endl;
-    this->LogWarning(err.str());
-    return true;
-  }
-  this->ParseForUic(absFilename, contentsString, includedUis);
-  if (this->MocExecutable.empty()) {
-    return true;
-  }
-
-  const std::string absPath = cmsys::SystemTools::GetFilenamePath(
-                                cmsys::SystemTools::GetRealPath(absFilename)) +
-    '/';
-  const std::string scannedFileBasename =
-    cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
-  std::string macroName;
-  const bool requiresMoc = requiresMocing(contentsString, macroName);
-  bool dotMocIncluded = false;
-  bool mocUnderscoreIncluded = false;
-  std::string ownMocUnderscoreFile;
-  std::string ownDotMocFile;
-  std::string ownMocHeaderFile;
-
-  std::string::size_type matchOffset = 0;
-  // first a simple string check for "moc" is *much* faster than the regexp,
-  // and if the string search already fails, we don't have to try the
-  // expensive regexp
-  if ((strstr(contentsString.c_str(), "moc") != CM_NULLPTR) &&
-      (mocIncludeRegExp.find(contentsString))) {
-    // for every moc include in the file
-    do {
-      const std::string currentMoc = mocIncludeRegExp.match(1);
-
-      std::string basename =
-        cmsys::SystemTools::GetFilenameWithoutLastExtension(currentMoc);
-      const bool mocUnderscoreStyle = cmHasLiteralPrefix(basename, "moc_");
-
-      // If the moc include is of the moc_foo.cpp style we expect
-      // the Q_OBJECT class declaration in a header file.
-      // If the moc include is of the foo.moc style we need to look for
-      // a Q_OBJECT macro in the current source file, if it contains the
-      // macro we generate the moc file from the source file.
-      if (mocUnderscoreStyle) {
-        // basename should be the part of the moc filename used for
-        // finding the correct header, so we need to remove the moc_ part
-        basename = basename.substr(4);
-        std::string mocSubDir = extractSubDir(absPath, currentMoc);
-        std::string headerToMoc =
-          findMatchingHeader(absPath, mocSubDir, basename, headerExtensions);
-
-        if (!headerToMoc.empty()) {
-          includedMocs[headerToMoc] = currentMoc;
-          if (basename == scannedFileBasename) {
-            mocUnderscoreIncluded = true;
-            ownMocUnderscoreFile = currentMoc;
-            ownMocHeaderFile = headerToMoc;
-          }
-        } else {
-          std::ostringstream err;
-          err << "AUTOGEN: error: " << absFilename << ": The file "
-              << "includes the moc file \"" << currentMoc << "\", "
-              << "but could not find header \"" << basename << '{'
-              << this->JoinExts(headerExtensions) << "}\" ";
-          if (mocSubDir.empty()) {
-            err << "in " << absPath << "\n" << std::endl;
-          } else {
-            err << "neither in " << absPath << " nor in " << mocSubDir << "\n"
-                << std::endl;
-          }
-          this->LogError(err.str());
-          return false;
-        }
-      } else {
-        std::string fileToMoc = absFilename;
-        if (!requiresMoc || basename != scannedFileBasename) {
-          std::string mocSubDir = extractSubDir(absPath, currentMoc);
-          std::string headerToMoc =
-            findMatchingHeader(absPath, mocSubDir, basename, headerExtensions);
-          if (!headerToMoc.empty()) {
-            // this is for KDE4 compatibility:
-            fileToMoc = headerToMoc;
-            if (!requiresMoc && basename == scannedFileBasename) {
-              std::ostringstream err;
-              err << "AUTOGEN: warning: " << absFilename
-                  << ": The file "
-                     "includes the moc file \""
-                  << currentMoc << "\", but does not contain a " << macroName
-                  << " macro. Running moc on "
-                  << "\"" << headerToMoc << "\" ! Include \"moc_" << basename
-                  << ".cpp\" for a compatibility with "
-                     "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n"
-                  << std::endl;
-              this->LogWarning(err.str());
-            } else {
-              std::ostringstream err;
-              err << "AUTOGEN: warning: " << absFilename
-                  << ": The file "
-                     "includes the moc file \""
-                  << currentMoc << "\" instead of \"moc_" << basename
-                  << ".cpp\". "
-                     "Running moc on "
-                  << "\"" << headerToMoc << "\" ! Include \"moc_" << basename
-                  << ".cpp\" for compatibility with "
-                     "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n"
-                  << std::endl;
-              this->LogWarning(err.str());
-            }
-          } else {
-            std::ostringstream err;
-            err << "AUTOGEN: error: " << absFilename
-                << ": The file "
-                   "includes the moc file \""
-                << currentMoc
-                << "\", which seems to be the moc file from a different "
-                   "source file. CMake also could not find a matching "
-                   "header.\n"
-                << std::endl;
-            this->LogError(err.str());
-            return false;
-          }
-        } else {
-          dotMocIncluded = true;
-          ownDotMocFile = currentMoc;
-        }
-        includedMocs[fileToMoc] = currentMoc;
-      }
-      matchOffset += mocIncludeRegExp.end();
-    } while (mocIncludeRegExp.find(contentsString.c_str() + matchOffset));
-  }
-
-  // In this case, check whether the scanned file itself contains a Q_OBJECT.
-  // If this is the case, the moc_foo.cpp should probably be generated from
-  // foo.cpp instead of foo.h, because otherwise it won't build.
-  // But warn, since this is not how it is supposed to be used.
-  if (!dotMocIncluded && requiresMoc) {
-    if (mocUnderscoreIncluded) {
-      // this is for KDE4 compatibility:
-      std::ostringstream err;
-      err << "AUTOGEN: warning: " << absFilename << ": The file "
-          << "contains a " << macroName << " macro, but does not "
-                                           "include "
-          << "\"" << scannedFileBasename << ".moc\", but instead "
-                                            "includes "
-          << "\"" << ownMocUnderscoreFile << "\". Running moc on "
-          << "\"" << absFilename << "\" ! Better include \""
-          << scannedFileBasename
-          << ".moc\" for compatibility with "
-             "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n"
-          << std::endl;
-      this->LogWarning(err.str());
-
-      includedMocs[absFilename] = ownMocUnderscoreFile;
-      includedMocs.erase(ownMocHeaderFile);
-    } else {
-      // otherwise always error out since it will not compile:
-      std::ostringstream err;
-      err << "AUTOGEN: error: " << absFilename << ": The file "
-          << "contains a " << macroName << " macro, but does not "
-                                           "include "
-          << "\"" << scannedFileBasename << ".moc\" !\n"
-          << std::endl;
-      this->LogError(err.str());
-      return false;
-    }
-  }
-
-  return true;
-}
-
-/**
- * @return True on success
- */
-bool cmQtAutoGenerators::StrictParseCppFile(
-  const std::string& absFilename,
-  const std::vector<std::string>& headerExtensions,
-  std::map<std::string, std::string>& includedMocs,
-  std::map<std::string, std::vector<std::string> >& includedUis)
-{
-  cmsys::RegularExpression mocIncludeRegExp(
-    "[\n][ \t]*#[ \t]*include[ \t]+"
-    "[\"<](([^ \">]+/)?moc_[^ \">/]+\\.cpp|[^ \">]+\\.moc)[\">]");
-
-  const std::string contentsString = ReadAll(absFilename);
-  if (contentsString.empty()) {
-    std::ostringstream err;
-    err << "AUTOGEN: warning: " << absFilename << ": file is empty\n"
-        << std::endl;
-    this->LogWarning(err.str());
-    return true;
-  }
-  this->ParseForUic(absFilename, contentsString, includedUis);
-  if (this->MocExecutable.empty()) {
-    return true;
-  }
-
-  const std::string absPath = cmsys::SystemTools::GetFilenamePath(
-                                cmsys::SystemTools::GetRealPath(absFilename)) +
-    '/';
-  const std::string scannedFileBasename =
-    cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
-
-  bool dotMocIncluded = false;
-
-  std::string::size_type matchOffset = 0;
-  // first a simple string check for "moc" is *much* faster than the regexp,
-  // and if the string search already fails, we don't have to try the
-  // expensive regexp
-  if ((strstr(contentsString.c_str(), "moc") != CM_NULLPTR) &&
-      (mocIncludeRegExp.find(contentsString))) {
-    // for every moc include in the file
-    do {
-      const std::string currentMoc = mocIncludeRegExp.match(1);
-
-      std::string basename =
-        cmsys::SystemTools::GetFilenameWithoutLastExtension(currentMoc);
-      const bool mocUnderscoreStyle = cmHasLiteralPrefix(basename, "moc_");
-
-      // If the moc include is of the moc_foo.cpp style we expect
-      // the Q_OBJECT class declaration in a header file.
-      // If the moc include is of the foo.moc style we need to look for
-      // a Q_OBJECT macro in the current source file, if it contains the
-      // macro we generate the moc file from the source file.
-      if (mocUnderscoreStyle) {
-        // basename should be the part of the moc filename used for
-        // finding the correct header, so we need to remove the moc_ part
-        basename = basename.substr(4);
-        std::string mocSubDir = extractSubDir(absPath, currentMoc);
-        std::string headerToMoc =
-          findMatchingHeader(absPath, mocSubDir, basename, headerExtensions);
-
-        if (!headerToMoc.empty()) {
-          includedMocs[headerToMoc] = currentMoc;
-        } else {
-          std::ostringstream err;
-          err << "AUTOGEN: error: " << absFilename << " The file "
-              << "includes the moc file \"" << currentMoc << "\", "
-              << "but could not find header \"" << basename << '{'
-              << this->JoinExts(headerExtensions) << "}\" ";
-          if (mocSubDir.empty()) {
-            err << "in " << absPath << "\n" << std::endl;
-          } else {
-            err << "neither in " << absPath << " nor in " << mocSubDir << "\n"
-                << std::endl;
-          }
-          this->LogError(err.str());
-          return false;
-        }
-      } else {
-        if (basename != scannedFileBasename) {
-          std::ostringstream err;
-          err << "AUTOGEN: error: " << absFilename
-              << ": The file "
-                 "includes the moc file \""
-              << currentMoc
-              << "\", which seems to be the moc file from a different "
-                 "source file. This is not supported. "
-                 "Include \""
-              << scannedFileBasename << ".moc\" to run "
-                                        "moc on this source file.\n"
-              << std::endl;
-          this->LogError(err.str());
-          return false;
-        }
-        dotMocIncluded = true;
-        includedMocs[absFilename] = currentMoc;
-      }
-      matchOffset += mocIncludeRegExp.end();
-    } while (mocIncludeRegExp.find(contentsString.c_str() + matchOffset));
-  }
-
-  // In this case, check whether the scanned file itself contains a Q_OBJECT.
-  // If this is the case, the moc_foo.cpp should probably be generated from
-  // foo.cpp instead of foo.h, because otherwise it won't build.
-  // But warn, since this is not how it is supposed to be used.
-  std::string macroName;
-  if (!dotMocIncluded && requiresMocing(contentsString, macroName)) {
-    // otherwise always error out since it will not compile:
-    std::ostringstream err;
-    err << "AUTOGEN: error: " << absFilename << ": The file "
-        << "contains a " << macroName << " macro, but does not include "
-        << "\"" << scannedFileBasename << ".moc\" !\n"
-        << std::endl;
-    this->LogError(err.str());
-    return false;
-  }
-
-  return true;
-}
-
-/**
- * @return True on success
- */
 bool cmQtAutoGenerators::ParseSourceFile(
   const std::string& absFilename,
   const std::vector<std::string>& headerExtensions,
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index f6fbed3..08f98b5 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -48,16 +48,6 @@ private:
   bool GenerateQrc(const std::string& qrcInputFile,
                    const std::string& qrcOutputFile, bool unique_n);
 
-  bool ParseCppFile(
-    const std::string& absFilename,
-    const std::vector<std::string>& headerExtensions,
-    std::map<std::string, std::string>& includedMocs,
-    std::map<std::string, std::vector<std::string> >& includedUis);
-  bool StrictParseCppFile(
-    const std::string& absFilename,
-    const std::vector<std::string>& headerExtensions,
-    std::map<std::string, std::string>& includedMocs,
-    std::map<std::string, std::vector<std::string> >& includedUis);
   bool ParseSourceFile(
     const std::string& absFilename,
     const std::vector<std::string>& headerExtensions,

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0b1527ff3d1781380756ee72a9641b7c5c7c87cc
commit 0b1527ff3d1781380756ee72a9641b7c5c7c87cc
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 14:16:10 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:13 2017 +0100

    AUTOGEN: Generators: Introduce unified ParseSourceFile
    
    The new cmQtAutoGenerators::ParseSourceFile method combines the
    functionality of ParseCppFile and StrictParseCppFile in a single method
    to avoid code duplication. Relaxed or strict mode is selected by an
    additional bool argument.

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index a0949d4..41bb6f9 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -901,6 +901,214 @@ bool cmQtAutoGenerators::StrictParseCppFile(
   return true;
 }
 
+/**
+ * @return True on success
+ */
+bool cmQtAutoGenerators::ParseSourceFile(
+  const std::string& absFilename,
+  const std::vector<std::string>& headerExtensions,
+  std::map<std::string, std::string>& includedMocs,
+  std::map<std::string, std::vector<std::string> >& includedUis, bool relaxed)
+{
+  cmsys::RegularExpression mocIncludeRegExp(
+    "[\n][ \t]*#[ \t]*include[ \t]+"
+    "[\"<](([^ \">]+/)?moc_[^ \">/]+\\.cpp|[^ \">]+\\.moc)[\">]");
+
+  const std::string contentsString = ReadAll(absFilename);
+  if (contentsString.empty()) {
+    std::ostringstream err;
+    err << "AUTOGEN: warning: " << absFilename << "\n"
+        << "The file is empty\n";
+    this->LogWarning(err.str());
+    return true;
+  }
+
+  // Parse source contents for UIC
+  this->ParseForUic(absFilename, contentsString, includedUis);
+
+  // Continue with moc parsing on demand
+  if (this->MocExecutable.empty()) {
+    return true;
+  }
+
+  const std::string scannedFileAbsPath =
+    cmsys::SystemTools::GetFilenamePath(
+      cmsys::SystemTools::GetRealPath(absFilename)) +
+    '/';
+  const std::string scannedFileBasename =
+    cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
+
+  std::string macroName;
+  const bool requiresMoc = requiresMocing(contentsString, macroName);
+  bool ownDotMocIncluded = false;
+  bool ownMocUnderscoreIncluded = false;
+  std::string ownMocUnderscoreFile;
+  std::string ownMocHeaderFile;
+
+  std::string::size_type matchOffset = 0;
+  // first a simple string check for "moc" is *much* faster than the regexp,
+  // and if the string search already fails, we don't have to try the
+  // expensive regexp
+  if (strstr(contentsString.c_str(), "moc") != CM_NULLPTR) {
+    // Iterate over all included moc files
+    const char* contentChars = contentsString.c_str();
+    while (mocIncludeRegExp.find(contentChars)) {
+      const std::string currentMoc = mocIncludeRegExp.match(1);
+      // Basename of the current moc include
+      std::string basename =
+        cmsys::SystemTools::GetFilenameWithoutLastExtension(currentMoc);
+
+      // If the moc include is of the moc_foo.cpp style we expect
+      // the Q_OBJECT class declaration in a header file.
+      // If the moc include is of the foo.moc style we need to look for
+      // a Q_OBJECT macro in the current source file, if it contains the
+      // macro we generate the moc file from the source file.
+      if (cmHasLiteralPrefix(basename, "moc_")) {
+        // Include: moc_FOO.cxx
+        // basename should be the part of the moc filename used for
+        // finding the correct header, so we need to remove the moc_ part
+        basename = basename.substr(4);
+        const std::string mocSubDir =
+          extractSubDir(scannedFileAbsPath, currentMoc);
+        const std::string headerToMoc = findMatchingHeader(
+          scannedFileAbsPath, mocSubDir, basename, headerExtensions);
+
+        if (!headerToMoc.empty()) {
+          includedMocs[headerToMoc] = currentMoc;
+          if (relaxed && (basename == scannedFileBasename)) {
+            ownMocUnderscoreIncluded = true;
+            ownMocUnderscoreFile = currentMoc;
+            ownMocHeaderFile = headerToMoc;
+          }
+        } else {
+          std::ostringstream err;
+          err << "AUTOGEN: error: " << absFilename << "\n"
+              << "The file includes the moc file \"" << currentMoc
+              << "\", but could not find header \"" << basename << '{'
+              << this->JoinExts(headerExtensions) << "}\" ";
+          if (mocSubDir.empty()) {
+            err << "in " << scannedFileAbsPath << "\n";
+          } else {
+            err << "neither in " << scannedFileAbsPath << " nor in "
+                << mocSubDir << "\n";
+          }
+          this->LogError(err.str());
+          return false;
+        }
+      } else {
+        // Include: FOO.moc
+        std::string fileToMoc;
+        if (relaxed) {
+          // Mode: Relaxed
+          if (!requiresMoc || basename != scannedFileBasename) {
+            const std::string mocSubDir =
+              extractSubDir(scannedFileAbsPath, currentMoc);
+            const std::string headerToMoc = findMatchingHeader(
+              scannedFileAbsPath, mocSubDir, basename, headerExtensions);
+            if (!headerToMoc.empty()) {
+              // This is for KDE4 compatibility:
+              fileToMoc = headerToMoc;
+              if (!requiresMoc && basename == scannedFileBasename) {
+                std::ostringstream err;
+                err << "AUTOMOC: warning: " << absFilename << "\n"
+                    << "The file includes the moc file \"" << currentMoc
+                    << "\", but does not contain a " << macroName
+                    << " macro. Running moc on "
+                    << "\"" << headerToMoc << "\" ! Include \"moc_" << basename
+                    << ".cpp\" for a compatibility with "
+                       "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
+                this->LogWarning(err.str());
+              } else {
+                std::ostringstream err;
+                err << "AUTOMOC: warning: " << absFilename << "\n"
+                    << "The file includes the moc file \"" << currentMoc
+                    << "\" instead of \"moc_" << basename
+                    << ".cpp\". Running moc on "
+                    << "\"" << headerToMoc << "\" ! Include \"moc_" << basename
+                    << ".cpp\" for compatibility with "
+                       "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
+                this->LogWarning(err.str());
+              }
+            } else {
+              std::ostringstream err;
+              err << "AUTOMOC: error: " << absFilename << "\n"
+                  << "The file includes the moc file \"" << currentMoc
+                  << "\", which seems to be the moc file from a different "
+                     "source file. CMake also could not find a matching "
+                     "header.\n";
+              this->LogError(err.str());
+              return false;
+            }
+          } else {
+            // Include self
+            fileToMoc = absFilename;
+            ownDotMocIncluded = true;
+          }
+        } else {
+          // Mode: Strict
+          if (basename != scannedFileBasename) {
+            // Don't allow FOO.moc include other than self in strict mode
+            std::ostringstream err;
+            err << "AUTOMOC: error: " << absFilename << "\n"
+                << "The file includes the moc file \"" << currentMoc
+                << "\", which seems to be the moc file from a different "
+                   "source file. This is not supported. Include \""
+                << scannedFileBasename
+                << ".moc\" to run moc on this source file.\n";
+            this->LogError(err.str());
+            return false;
+          } else {
+            // Include self
+            fileToMoc = absFilename;
+            ownDotMocIncluded = true;
+          }
+        }
+        if (!fileToMoc.empty()) {
+          includedMocs[fileToMoc] = currentMoc;
+        }
+      }
+      // Forward content pointer
+      contentChars += mocIncludeRegExp.end();
+    }
+  }
+
+  // In this case, check whether the scanned file itself contains a Q_OBJECT.
+  // If this is the case, the moc_foo.cpp should probably be generated from
+  // foo.cpp instead of foo.h, because otherwise it won't build.
+  // But warn, since this is not how it is supposed to be used.
+  if (requiresMoc && !ownDotMocIncluded) {
+    if (relaxed && ownMocUnderscoreIncluded) {
+      // This is for KDE4 compatibility:
+      std::ostringstream err;
+      err << "AUTOMOC: warning: " << absFilename << "\n"
+          << "The file contains a " << macroName
+          << " macro, but does not include "
+          << "\"" << scannedFileBasename << ".moc\", but instead includes "
+          << "\"" << ownMocUnderscoreFile << "\". Running moc on "
+          << "\"" << absFilename << "\" ! Better include \""
+          << scannedFileBasename
+          << ".moc\" for compatibility with "
+             "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
+      this->LogWarning(err.str());
+
+      // Use scanned source file instead of scanned header file as moc source
+      includedMocs[absFilename] = ownMocUnderscoreFile;
+      includedMocs.erase(ownMocHeaderFile);
+    } else {
+      // Otherwise always error out since it will not compile:
+      std::ostringstream err;
+      err << "AUTOMOC: error: " << absFilename << "\n"
+          << "The file contains a " << macroName
+          << " macro, but does not include "
+          << "\"" << scannedFileBasename << ".moc\" !\n";
+      this->LogError(err.str());
+      return false;
+    }
+  }
+
+  return true;
+}
+
 void cmQtAutoGenerators::ParseForUic(
   const std::string& absFilename,
   std::map<std::string, std::vector<std::string> >& includedUis)
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index 24960a5..f6fbed3 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -58,6 +58,12 @@ private:
     const std::vector<std::string>& headerExtensions,
     std::map<std::string, std::string>& includedMocs,
     std::map<std::string, std::vector<std::string> >& includedUis);
+  bool ParseSourceFile(
+    const std::string& absFilename,
+    const std::vector<std::string>& headerExtensions,
+    std::map<std::string, std::string>& includedMocs,
+    std::map<std::string, std::vector<std::string> >& includedUis,
+    bool relaxed);
   void SearchHeadersForCppFile(
     const std::string& absFilename,
     const std::vector<std::string>& headerExtensions,

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2b9d795e63acf723a6abd79f3195ec70476442a5
commit 2b9d795e63acf723a6abd79f3195ec70476442a5
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 10:54:54 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:13 2017 +0100

    AUTOGEN: Generators: Comments

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 6543ac6..a0949d4 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -62,6 +62,7 @@ static std::string findMatchingHeader(
       header = sourceFilePath;
       break;
     }
+    // Try subdirectory instead
     if (!mocSubDir.empty()) {
       sourceFilePath = mocSubDir + basename + "." + (*ext);
       if (cmsys::SystemTools::FileExists(sourceFilePath.c_str())) {
@@ -653,7 +654,6 @@ bool cmQtAutoGenerators::ParseCppFile(
       // If the moc include is of the foo.moc style we need to look for
       // a Q_OBJECT macro in the current source file, if it contains the
       // macro we generate the moc file from the source file.
-      // Q_OBJECT
       if (mocUnderscoreStyle) {
         // basename should be the part of the moc filename used for
         // finding the correct header, so we need to remove the moc_ part

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2cfcdf757d032cdea8b980792007a6f9d749e6fb
commit 2cfcdf757d032cdea8b980792007a6f9d749e6fb
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Tue Dec 27 10:51:14 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:13 2017 +0100

    AUTOGEN: Generators: Variable rename

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 1ada434..6543ac6 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -646,7 +646,7 @@ bool cmQtAutoGenerators::ParseCppFile(
 
       std::string basename =
         cmsys::SystemTools::GetFilenameWithoutLastExtension(currentMoc);
-      const bool moc_style = cmHasLiteralPrefix(basename, "moc_");
+      const bool mocUnderscoreStyle = cmHasLiteralPrefix(basename, "moc_");
 
       // If the moc include is of the moc_foo.cpp style we expect
       // the Q_OBJECT class declaration in a header file.
@@ -654,7 +654,7 @@ bool cmQtAutoGenerators::ParseCppFile(
       // a Q_OBJECT macro in the current source file, if it contains the
       // macro we generate the moc file from the source file.
       // Q_OBJECT
-      if (moc_style) {
+      if (mocUnderscoreStyle) {
         // basename should be the part of the moc filename used for
         // finding the correct header, so we need to remove the moc_ part
         basename = basename.substr(4);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2f67aef23d4192fadb222dc79311fb5ffbbc36ce
commit 2f67aef23d4192fadb222dc79311fb5ffbbc36ce
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 24 16:28:01 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:13 2017 +0100

    AUTOGEN: Generators: Cleanup and optimize ParseForUic method

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 01cc1b3..1ada434 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -931,23 +931,17 @@ void cmQtAutoGenerators::ParseForUic(
     "[\n][ \t]*#[ \t]*include[ \t]+"
     "[\"<](([^ \">]+/)?ui_[^ \">/]+\\.h)[\">]");
 
-  std::string::size_type matchOffset = 0;
-  if ((strstr(contentsString.c_str(), "ui_") != CM_NULLPTR) &&
-      (uiIncludeRegExp.find(contentsString))) {
-    do {
+  const char* contentChars = contentsString.c_str();
+  if (strstr(contentChars, "ui_") != CM_NULLPTR) {
+    while (uiIncludeRegExp.find(contentChars)) {
       const std::string currentUi = uiIncludeRegExp.match(1);
-
-      std::string basename =
+      const std::string basename =
         cmsys::SystemTools::GetFilenameWithoutLastExtension(currentUi);
-
       // basename should be the part of the ui filename used for
       // finding the correct header, so we need to remove the ui_ part
-      basename = basename.substr(3);
-
-      includedUis[realName].push_back(basename);
-
-      matchOffset += uiIncludeRegExp.end();
-    } while (uiIncludeRegExp.find(contentsString.c_str() + matchOffset));
+      includedUis[realName].push_back(basename.substr(3));
+      contentChars += uiIncludeRegExp.end();
+    }
   }
 }
 

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=794fdf40a1bc85dded519d7c737f73690e3a6e42
commit 794fdf40a1bc85dded519d7c737f73690e3a6e42
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 24 16:00:09 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:13 2017 +0100

    AUTOGEN: Generators: Cleanup variable initialization

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 98b3de3..01cc1b3 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -926,15 +926,12 @@ void cmQtAutoGenerators::ParseForUic(
   if (this->UicExecutable.empty()) {
     return;
   }
+  const std::string realName = cmsys::SystemTools::GetRealPath(absFilename);
   cmsys::RegularExpression uiIncludeRegExp(
     "[\n][ \t]*#[ \t]*include[ \t]+"
     "[\"<](([^ \">]+/)?ui_[^ \">/]+\\.h)[\">]");
 
   std::string::size_type matchOffset = 0;
-
-  const std::string realName = cmsys::SystemTools::GetRealPath(absFilename);
-
-  matchOffset = 0;
   if ((strstr(contentsString.c_str(), "ui_") != CM_NULLPTR) &&
       (uiIncludeRegExp.find(contentsString))) {
     do {

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a1e49bb155132606ed9f590c0b62e68f2e288d0b
commit a1e49bb155132606ed9f590c0b62e68f2e288d0b
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Sat Dec 24 17:36:56 2016 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Tue Jan 10 12:49:13 2017 +0100

    AUTOGEN: Generators: rename makeParentDirectory to MakeParentDirectory

diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index a9a9c49..98b3de3 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -1113,7 +1113,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
     this->LogBold(msg);
   }
   // Make sure the parent directory exists
-  bool success = this->makeParentDirectory(this->OutMocCppFilenameAbs);
+  bool success = this->MakeParentDirectory(this->OutMocCppFilenameAbs);
   if (success) {
     cmsys::ofstream outfile;
     outfile.open(this->OutMocCppFilenameAbs.c_str(), std::ios::trunc);
@@ -1154,7 +1154,7 @@ bool cmQtAutoGenerators::GenerateMoc(const std::string& 
sourceFile,
     this->LogBold("Generating MOC source " + mocFileRel);
 
     // Make sure the parent directory exists
-    if (!this->makeParentDirectory(mocFileAbs)) {
+    if (!this->MakeParentDirectory(mocFileAbs)) {
       this->RunMocFailed = true;
       return false;
     }
@@ -1276,7 +1276,7 @@ bool cmQtAutoGenerators::GenerateUi(const std::string& 
realName,
     this->LogBold("Generating UIC header " + uicFileRel);
 
     // Make sure the parent directory exists
-    if (!this->makeParentDirectory(uicFileAbs)) {
+    if (!this->MakeParentDirectory(uicFileAbs)) {
       this->RunUicFailed = true;
       return false;
     }
@@ -1415,7 +1415,7 @@ bool cmQtAutoGenerators::GenerateQrc(const std::string& 
qrcInputFile,
     }
 
     // Make sure the parent directory exists
-    if (!this->makeParentDirectory(qrcOutputFile)) {
+    if (!this->MakeParentDirectory(qrcOutputFile)) {
       this->RunRccFailed = true;
       return false;
     }
@@ -1551,7 +1551,7 @@ void cmQtAutoGenerators::LogCommand(const 
std::vector<std::string>& command)
  * @brief Generates the parent directory of the given file on demand
  * @return True on success
  */
-bool cmQtAutoGenerators::makeParentDirectory(const std::string& filename)
+bool cmQtAutoGenerators::MakeParentDirectory(const std::string& filename)
 {
   bool success = true;
   const std::string dirName = cmSystemTools::GetFilenamePath(filename);
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index c241579..24960a5 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -91,7 +91,7 @@ private:
   void LogError(const std::string& message);
   void LogCommand(const std::vector<std::string>& command);
 
-  bool makeParentDirectory(const std::string& filename);
+  bool MakeParentDirectory(const std::string& filename);
 
   std::string JoinExts(const std::vector<std::string>& lst);
 

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

Summary of changes:
 Help/manual/cmake-properties.7.rst           |    4 +
 Help/manual/cmake-qt.7.rst                   |    9 +
 Help/prop_sf/SKIP_AUTOGEN.rst                |    8 +
 Help/prop_sf/SKIP_AUTOMOC.rst                |    6 +
 Help/prop_sf/SKIP_AUTORCC.rst                |    6 +
 Help/prop_sf/SKIP_AUTOUIC.rst                |    6 +
 Help/prop_tgt/AUTOMOC.rst                    |    3 +
 Help/prop_tgt/AUTORCC.rst                    |    3 +
 Help/prop_tgt/AUTOUIC.rst                    |    3 +
 Help/release/dev/QtAutogen_Skip.rst          |   12 +
 Modules/AutogenInfo.cmake.in                 |    8 +-
 Source/cmQtAutoGeneratorInitializer.cxx      |  102 ++--
 Source/cmQtAutoGenerators.cxx                |  741 ++++++++++++--------------
 Source/cmQtAutoGenerators.h                  |   46 +-
 Tests/QtAutogen/CMakeLists.txt               |   63 +++
 Tests/QtAutogen/skipMoc.cpp                  |   14 +
 Tests/QtAutogen/skipRcc.cpp                  |    9 +
 Tests/QtAutogen/skipSource/qItemA.cpp        |    5 +
 Tests/QtAutogen/skipSource/qItemA.hpp        |   13 +
 Tests/QtAutogen/skipSource/qItemB.cpp        |    5 +
 Tests/QtAutogen/skipSource/qItemB.hpp        |   13 +
 Tests/QtAutogen/skipSource/qItemC.cpp        |    5 +
 Tests/QtAutogen/skipSource/qItemC.hpp        |   13 +
 Tests/QtAutogen/skipSource/skipRccBad1.qrc   |    5 +
 Tests/QtAutogen/skipSource/skipRccBad2.qrc   |    5 +
 Tests/QtAutogen/skipSource/skipRccGood.qrc   |    6 +
 Tests/QtAutogen/skipSource/skipUicGen.cpp    |    7 +
 Tests/QtAutogen/skipSource/skipUicGen.hpp    |    8 +
 Tests/QtAutogen/skipSource/skipUicNoGen1.cpp |    7 +
 Tests/QtAutogen/skipSource/skipUicNoGen1.hpp |    8 +
 Tests/QtAutogen/skipSource/skipUicNoGen2.cpp |    7 +
 Tests/QtAutogen/skipSource/skipUicNoGen2.hpp |    8 +
 Tests/QtAutogen/skipSource/ui_nogen1.h       |    6 +
 Tests/QtAutogen/skipSource/ui_nogen2.h       |    6 +
 Tests/QtAutogen/skipSource/uigen1.ui         |   24 +
 Tests/QtAutogen/skipSource/uigen2.ui         |   24 +
 Tests/QtAutogen/skipUic.cpp                  |   22 +
 37 files changed, 782 insertions(+), 458 deletions(-)
 create mode 100644 Help/prop_sf/SKIP_AUTOGEN.rst
 create mode 100644 Help/prop_sf/SKIP_AUTOMOC.rst
 create mode 100644 Help/prop_sf/SKIP_AUTORCC.rst
 create mode 100644 Help/prop_sf/SKIP_AUTOUIC.rst
 create mode 100644 Help/release/dev/QtAutogen_Skip.rst
 create mode 100644 Tests/QtAutogen/skipMoc.cpp
 create mode 100644 Tests/QtAutogen/skipRcc.cpp
 create mode 100644 Tests/QtAutogen/skipSource/qItemA.cpp
 create mode 100644 Tests/QtAutogen/skipSource/qItemA.hpp
 create mode 100644 Tests/QtAutogen/skipSource/qItemB.cpp
 create mode 100644 Tests/QtAutogen/skipSource/qItemB.hpp
 create mode 100644 Tests/QtAutogen/skipSource/qItemC.cpp
 create mode 100644 Tests/QtAutogen/skipSource/qItemC.hpp
 create mode 100644 Tests/QtAutogen/skipSource/skipRccBad1.qrc
 create mode 100644 Tests/QtAutogen/skipSource/skipRccBad2.qrc
 create mode 100644 Tests/QtAutogen/skipSource/skipRccGood.qrc
 create mode 100644 Tests/QtAutogen/skipSource/skipUicGen.cpp
 create mode 100644 Tests/QtAutogen/skipSource/skipUicGen.hpp
 create mode 100644 Tests/QtAutogen/skipSource/skipUicNoGen1.cpp
 create mode 100644 Tests/QtAutogen/skipSource/skipUicNoGen1.hpp
 create mode 100644 Tests/QtAutogen/skipSource/skipUicNoGen2.cpp
 create mode 100644 Tests/QtAutogen/skipSource/skipUicNoGen2.hpp
 create mode 100644 Tests/QtAutogen/skipSource/ui_nogen1.h
 create mode 100644 Tests/QtAutogen/skipSource/ui_nogen2.h
 create mode 100644 Tests/QtAutogen/skipSource/uigen1.ui
 create mode 100644 Tests/QtAutogen/skipSource/uigen2.ui
 create mode 100644 Tests/QtAutogen/skipUic.cpp


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to