[Cmake-commits] CMake branch, next, updated. v3.8.0-rc1-692-g53c4967
Brad King
brad.king at kitware.com
Wed Mar 1 11:24:05 EST 2017
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 53c496702fa99a57f8f83e60c479eb39f66b2263 (commit)
via 15140222af1c415acd227c778bbb3fdc1d03fc39 (commit)
via d72a73320ae4697e60d7485e953d950443345927 (commit)
via 15c1cc55b4123ffb207d6f731ae5152bc99a1540 (commit)
via 793a505e3cf03c6841df92f46ed0aaf15c2479d7 (commit)
via 959748f1c963e9e2d44ef650a2faa3a82985655f (commit)
via 92525eb7b3ad6c71610fead557185aaf8db98739 (commit)
via 851638db8a5fdb9ae974ac32351bc936300b50c9 (commit)
via 0abd89e0eb51b77590210f21d9095ff85771bf1d (commit)
via 55f8d63cdbb15fbee9f3486f8511c7fa16edaaf3 (commit)
via db431ecfe33dbfa9eb43e4edd72ebc35b2c7c563 (commit)
from 4d363faaf9158c54e576552620e48ac09d102765 (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=53c496702fa99a57f8f83e60c479eb39f66b2263
commit 53c496702fa99a57f8f83e60c479eb39f66b2263
Merge: 4d363fa 1514022
Author: Brad King <brad.king at kitware.com>
AuthorDate: Wed Mar 1 11:24:02 2017 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Mar 1 11:24:02 2017 -0500
Merge topic 'autogen_uic_paths' into next
15140222 Autogen: New short InfoGet functions
d72a7332 Autogen: Parse enabled feature configuration only
15c1cc55 Autogen: Add missing return on error
793a505e Autogen: Rename and merge moc related methods
959748f1 Autogen: Add AUTOUIC_SEARCH_PATHS release notes
92525eb7 Autogen: Add AUTOUIC_SEARCH_PATHS documentation
851638db Autogen: Add AUTOUIC_SEARCH_PATHS test
0abd89e0 Autogen: Add AUTOUIC_SEARCH_PATHS support
55f8d63c Autogen: Add subDirPrefix function
db431ecf Autogen: Merge FindInIncludeDirectories into FindIncludeFile
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=15140222af1c415acd227c778bbb3fdc1d03fc39
commit 15140222af1c415acd227c778bbb3fdc1d03fc39
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Mon Feb 27 14:22:07 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:30 2017 +0100
Autogen: New short InfoGet functions
diff --git a/Modules/AutogenInfo.cmake.in b/Modules/AutogenInfo.cmake.in
index f8ffe91..fcecb6c 100644
--- a/Modules/AutogenInfo.cmake.in
+++ b/Modules/AutogenInfo.cmake.in
@@ -16,7 +16,7 @@ set(AM_QT_UIC_EXECUTABLE @_qt_uic_executable@)
set(AM_QT_RCC_EXECUTABLE @_qt_rcc_executable@)
# MOC settings
set(AM_MOC_SKIP @_moc_skip@)
-set(AM_MOC_COMPILE_DEFINITIONS @_moc_compile_defs@)
+set(AM_MOC_DEFINITIONS @_moc_compile_defs@)
set(AM_MOC_INCLUDES @_moc_incs@)
set(AM_MOC_OPTIONS @_moc_options@)
set(AM_MOC_RELAXED_MODE @_moc_relaxed_mode@)
diff --git a/Source/cmQtAutoGeneratorInitializer.cxx b/Source/cmQtAutoGeneratorInitializer.cxx
index 5460f73..a45b3d5 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -972,7 +972,7 @@ void cmQtAutoGeneratorInitializer::SetupAutoGenerateTarget(
it = configMocDefines.begin(),
end = configMocDefines.end();
it != end; ++it) {
- infoFile << "set(AM_MOC_COMPILE_DEFINITIONS_" << it->first << " "
+ infoFile << "set(AM_MOC_DEFINITIONS_" << it->first << " "
<< it->second << ")\n";
}
}
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 79100fe..26dc376 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -55,20 +55,38 @@ static std::string Quoted(const std::string& text)
return res;
}
-static std::string GetConfigDefinition(cmMakefile* makefile,
- const std::string& key,
- const std::string& config)
+static void InfoGet(cmMakefile* makefile, const char* key, std::string& value)
{
- std::string keyConf = key;
- if (!config.empty()) {
- keyConf += "_";
- keyConf += config;
+ value = makefile->GetSafeDefinition(key);
+}
+
+static void InfoGet(cmMakefile* makefile, const char* key, bool& value)
+{
+ value = makefile->IsOn(key);
+}
+
+static void InfoGet(cmMakefile* makefile, const char* key,
+ std::vector<std::string>& list)
+{
+ cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition(key), list);
+}
+
+static void InfoGet(cmMakefile* makefile, const char* key,
+ const std::string& config, std::vector<std::string>& list)
+{
+ const char* valueConf = CM_NULLPTR;
+ {
+ std::string keyConf = key;
+ if (!config.empty()) {
+ keyConf += "_";
+ keyConf += config;
+ }
+ valueConf = makefile->GetDefinition(keyConf);
}
- const char* valueConf = makefile->GetDefinition(keyConf);
- if (valueConf != CM_NULLPTR) {
- return valueConf;
+ if (valueConf == CM_NULLPTR) {
+ valueConf = makefile->GetSafeDefinition(key);
}
- return makefile->GetSafeDefinition(key);
+ cmSystemTools::ExpandListArgument(valueConf, list);
}
static std::string SettingsFile(const std::string& targetDirectory)
@@ -328,59 +346,44 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
}
// - Target names
- this->OriginTargetName =
- makefile->GetSafeDefinition("AM_ORIGIN_TARGET_NAME");
- this->AutogenTargetName = makefile->GetSafeDefinition("AM_TARGET_NAME");
+ InfoGet(makefile, "AM_TARGET_NAME", this->AutogenTargetName);
+ InfoGet(makefile, "AM_ORIGIN_TARGET_NAME", this->OriginTargetName);
// - Files and directories
- this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR");
- this->ProjectBinaryDir = makefile->GetSafeDefinition("AM_CMAKE_BINARY_DIR");
- this->CurrentSourceDir =
- makefile->GetSafeDefinition("AM_CMAKE_CURRENT_SOURCE_DIR");
- this->CurrentBinaryDir =
- makefile->GetSafeDefinition("AM_CMAKE_CURRENT_BINARY_DIR");
-
- cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_SOURCES"),
- this->Sources);
- cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_HEADERS"),
- this->Headers);
- this->IncludeProjectDirsBefore =
- makefile->IsOn("AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE");
+ InfoGet(makefile, "AM_CMAKE_SOURCE_DIR", this->ProjectSourceDir);
+ InfoGet(makefile, "AM_CMAKE_BINARY_DIR", this->ProjectBinaryDir);
+ InfoGet(makefile, "AM_CMAKE_CURRENT_SOURCE_DIR", this->CurrentSourceDir);
+ InfoGet(makefile, "AM_CMAKE_CURRENT_BINARY_DIR", this->CurrentBinaryDir);
+ InfoGet(makefile, "AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE",
+ this->IncludeProjectDirsBefore);
+ InfoGet(makefile, "AM_SOURCES", this->Sources);
+ InfoGet(makefile, "AM_HEADERS", this->Headers);
// - Qt environment
- this->QtMajorVersion = makefile->GetSafeDefinition("AM_QT_VERSION_MAJOR");
- if (this->QtMajorVersion == "") {
- this->QtMajorVersion =
- makefile->GetSafeDefinition("AM_Qt5Core_VERSION_MAJOR");
+ InfoGet(makefile, "AM_QT_VERSION_MAJOR", this->QtMajorVersion);
+ if (this->QtMajorVersion.empty()) {
+ InfoGet(makefile, "AM_Qt5Core_VERSION_MAJOR", this->QtMajorVersion);
}
+ InfoGet(makefile, "AM_QT_MOC_EXECUTABLE", this->MocExecutable);
+ InfoGet(makefile, "AM_QT_UIC_EXECUTABLE", this->UicExecutable);
+ InfoGet(makefile, "AM_QT_RCC_EXECUTABLE", this->RccExecutable);
// Check Qt version
if ((this->QtMajorVersion != "4") && (this->QtMajorVersion != "5")) {
this->LogError("AutoGen: Error: Unsupported Qt version: " +
Quoted(this->QtMajorVersion));
return false;
}
- // Qt executables
- this->MocExecutable = makefile->GetSafeDefinition("AM_QT_MOC_EXECUTABLE");
- this->UicExecutable = makefile->GetSafeDefinition("AM_QT_UIC_EXECUTABLE");
- this->RccExecutable = makefile->GetSafeDefinition("AM_QT_RCC_EXECUTABLE");
// - Moc
if (this->MocEnabled()) {
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_MOC_SKIP"), this->MocSkipList);
- cmSystemTools::ExpandListArgument(
- GetConfigDefinition(makefile, "AM_MOC_COMPILE_DEFINITIONS", config),
- this->MocDefinitions);
- cmSystemTools::ExpandListArgument(
- GetConfigDefinition(makefile, "AM_MOC_INCLUDES", config),
- this->MocIncludePaths);
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_MOC_OPTIONS"), this->MocOptions);
+ InfoGet(makefile, "AM_MOC_SKIP", this->MocSkipList);
+ InfoGet(makefile, "AM_MOC_DEFINITIONS", config, this->MocDefinitions);
+ InfoGet(makefile, "AM_MOC_INCLUDES", config, this->MocIncludePaths);
+ InfoGet(makefile, "AM_MOC_OPTIONS", this->MocOptions);
+ InfoGet(makefile, "AM_MOC_RELAXED_MODE", this->MocRelaxedMode);
{
std::vector<std::string> mocDependFilters;
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_MOC_DEPEND_FILTERS"),
- mocDependFilters);
+ InfoGet(makefile, "AM_MOC_DEPEND_FILTERS", mocDependFilters);
// Insert Q_PLUGIN_METADATA dependency filter
if (this->QtMajorVersion != "4") {
this->MocDependFilterPush("Q_PLUGIN_METADATA",
@@ -403,24 +406,18 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
return false;
}
}
-
- this->MocRelaxedMode = makefile->IsOn("AM_MOC_RELAXED_MODE");
}
// - Uic
if (this->UicEnabled()) {
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_SKIP"), this->UicSkipList);
- cmSystemTools::ExpandListArgument(
- GetConfigDefinition(makefile, "AM_UIC_TARGET_OPTIONS", config),
- this->UicTargetOptions);
+ InfoGet(makefile, "AM_UIC_SKIP", this->UicSkipList);
+ InfoGet(makefile, "AM_UIC_SEARCH_PATHS", this->UicSearchPaths);
+ InfoGet(makefile, "AM_UIC_TARGET_OPTIONS", config, this->UicTargetOptions);
{
std::vector<std::string> uicFilesVec;
std::vector<std::string> uicOptionsVec;
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_OPTIONS_FILES"), uicFilesVec);
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_OPTIONS_OPTIONS"), uicOptionsVec);
+ InfoGet(makefile, "AM_UIC_OPTIONS_FILES", uicFilesVec);
+ InfoGet(makefile, "AM_UIC_OPTIONS_OPTIONS", uicOptionsVec);
// Compare list sizes
if (uicFilesVec.size() == uicOptionsVec.size()) {
for (std::vector<std::string>::iterator
@@ -437,22 +434,16 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
return false;
}
}
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_SEARCH_PATHS"),
- this->UicSearchPaths);
}
// - Rcc
if (this->RccEnabled()) {
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_SOURCES"), this->RccSources);
+ InfoGet(makefile, "AM_RCC_SOURCES", this->RccSources);
{
std::vector<std::string> rccFilesVec;
std::vector<std::string> rccOptionsVec;
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_OPTIONS_FILES"), rccFilesVec);
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_OPTIONS_OPTIONS"), rccOptionsVec);
+ InfoGet(makefile, "AM_RCC_OPTIONS_FILES", rccFilesVec);
+ InfoGet(makefile, "AM_RCC_OPTIONS_OPTIONS", rccOptionsVec);
if (rccFilesVec.size() != rccOptionsVec.size()) {
this->LogError(
"AutoGen: Error: RCC files/options lists size missmatch in: " +
@@ -468,8 +459,7 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
}
{
std::vector<std::string> rccInputLists;
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_INPUTS"), rccInputLists);
+ InfoGet(makefile, "AM_RCC_INPUTS", rccInputLists);
// qrc files in the end of the list may have been empty
if (rccInputLists.size() < this->RccSources.size()) {
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d72a73320ae4697e60d7485e953d950443345927
commit d72a73320ae4697e60d7485e953d950443345927
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Mon Feb 27 13:48:08 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:30 2017 +0100
Autogen: Parse enabled feature configuration only
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index cdae236..79100fe 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -332,7 +332,7 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
makefile->GetSafeDefinition("AM_ORIGIN_TARGET_NAME");
this->AutogenTargetName = makefile->GetSafeDefinition("AM_TARGET_NAME");
- // - Directories
+ // - Files and directories
this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR");
this->ProjectBinaryDir = makefile->GetSafeDefinition("AM_CMAKE_BINARY_DIR");
this->CurrentSourceDir =
@@ -340,6 +340,13 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
this->CurrentBinaryDir =
makefile->GetSafeDefinition("AM_CMAKE_CURRENT_BINARY_DIR");
+ cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_SOURCES"),
+ this->Sources);
+ cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_HEADERS"),
+ this->Headers);
+ this->IncludeProjectDirsBefore =
+ makefile->IsOn("AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE");
+
// - Qt environment
this->QtMajorVersion = makefile->GetSafeDefinition("AM_QT_VERSION_MAJOR");
if (this->QtMajorVersion == "") {
@@ -352,138 +359,140 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
Quoted(this->QtMajorVersion));
return false;
}
-
+ // Qt executables
this->MocExecutable = makefile->GetSafeDefinition("AM_QT_MOC_EXECUTABLE");
this->UicExecutable = makefile->GetSafeDefinition("AM_QT_UIC_EXECUTABLE");
this->RccExecutable = makefile->GetSafeDefinition("AM_QT_RCC_EXECUTABLE");
- // - File Lists
- cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_SOURCES"),
- this->Sources);
- cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_HEADERS"),
- this->Headers);
-
// - Moc
- cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_MOC_SKIP"),
- this->MocSkipList);
- cmSystemTools::ExpandListArgument(
- GetConfigDefinition(makefile, "AM_MOC_COMPILE_DEFINITIONS", config),
- this->MocDefinitions);
- cmSystemTools::ExpandListArgument(
- GetConfigDefinition(makefile, "AM_MOC_INCLUDES", config),
- this->MocIncludePaths);
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_MOC_OPTIONS"), this->MocOptions);
- {
- std::vector<std::string> mocDependFilters;
+ if (this->MocEnabled()) {
cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_MOC_DEPEND_FILTERS"), mocDependFilters);
- // Insert Q_PLUGIN_METADATA dependency filter
- if (this->QtMajorVersion != "4") {
- this->MocDependFilterPush("Q_PLUGIN_METADATA",
- "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\("
- "[^\\)]*FILE[ \t]*\"([^\"]+)\"");
- }
- // Insert user defined dependency filters
- if ((mocDependFilters.size() % 2) == 0) {
- for (std::vector<std::string>::const_iterator dit =
- mocDependFilters.begin();
- dit != mocDependFilters.end(); dit += 2) {
- if (!this->MocDependFilterPush(*dit, *(dit + 1))) {
- return false;
+ makefile->GetSafeDefinition("AM_MOC_SKIP"), this->MocSkipList);
+ cmSystemTools::ExpandListArgument(
+ GetConfigDefinition(makefile, "AM_MOC_COMPILE_DEFINITIONS", config),
+ this->MocDefinitions);
+ cmSystemTools::ExpandListArgument(
+ GetConfigDefinition(makefile, "AM_MOC_INCLUDES", config),
+ this->MocIncludePaths);
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_MOC_OPTIONS"), this->MocOptions);
+ {
+ std::vector<std::string> mocDependFilters;
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_MOC_DEPEND_FILTERS"),
+ mocDependFilters);
+ // Insert Q_PLUGIN_METADATA dependency filter
+ if (this->QtMajorVersion != "4") {
+ this->MocDependFilterPush("Q_PLUGIN_METADATA",
+ "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\("
+ "[^\\)]*FILE[ \t]*\"([^\"]+)\"");
+ }
+ // Insert user defined dependency filters
+ if ((mocDependFilters.size() % 2) == 0) {
+ for (std::vector<std::string>::const_iterator dit =
+ mocDependFilters.begin();
+ dit != mocDependFilters.end(); dit += 2) {
+ if (!this->MocDependFilterPush(*dit, *(dit + 1))) {
+ return false;
+ }
}
+ } else {
+ this->LogError(
+ "AutoMoc: Error: AUTOMOC_DEPEND_FILTERS list size is not "
+ "a multiple of 2");
+ return false;
}
- } else {
- this->LogError("AutoMoc: Error: AUTOMOC_DEPEND_FILTERS list size is not "
- "a multiple of 2");
- return false;
}
+
+ this->MocRelaxedMode = makefile->IsOn("AM_MOC_RELAXED_MODE");
}
// - Uic
- cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition("AM_UIC_SKIP"),
- this->UicSkipList);
- cmSystemTools::ExpandListArgument(
- GetConfigDefinition(makefile, "AM_UIC_TARGET_OPTIONS", config),
- this->UicTargetOptions);
- {
- std::vector<std::string> uicFilesVec;
- std::vector<std::string> uicOptionsVec;
+ if (this->UicEnabled()) {
cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_OPTIONS_FILES"), uicFilesVec);
+ makefile->GetSafeDefinition("AM_UIC_SKIP"), this->UicSkipList);
cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_OPTIONS_OPTIONS"), uicOptionsVec);
- // Compare list sizes
- if (uicFilesVec.size() == uicOptionsVec.size()) {
- for (std::vector<std::string>::iterator fileIt = uicFilesVec.begin(),
- optionIt = uicOptionsVec.begin();
- fileIt != uicFilesVec.end(); ++fileIt, ++optionIt) {
- cmSystemTools::ReplaceString(*optionIt, "@list_sep@", ";");
- this->UicOptions[*fileIt] = *optionIt;
+ GetConfigDefinition(makefile, "AM_UIC_TARGET_OPTIONS", config),
+ this->UicTargetOptions);
+ {
+ std::vector<std::string> uicFilesVec;
+ std::vector<std::string> uicOptionsVec;
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_UIC_OPTIONS_FILES"), uicFilesVec);
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_UIC_OPTIONS_OPTIONS"), uicOptionsVec);
+ // Compare list sizes
+ if (uicFilesVec.size() == uicOptionsVec.size()) {
+ for (std::vector<std::string>::iterator
+ fileIt = uicFilesVec.begin(),
+ optionIt = uicOptionsVec.begin();
+ fileIt != uicFilesVec.end(); ++fileIt, ++optionIt) {
+ cmSystemTools::ReplaceString(*optionIt, "@list_sep@", ";");
+ this->UicOptions[*fileIt] = *optionIt;
+ }
+ } else {
+ this->LogError(
+ "AutoGen: Error: Uic files/options lists size missmatch in: " +
+ filename);
+ return false;
}
- } else {
- this->LogError(
- "AutoGen: Error: Uic files/options lists size missmatch in: " +
- filename);
- return false;
}
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_UIC_SEARCH_PATHS"),
+ this->UicSearchPaths);
}
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_UIC_SEARCH_PATHS"), this->UicSearchPaths);
// - Rcc
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_SOURCES"), this->RccSources);
- {
- std::vector<std::string> rccFilesVec;
- std::vector<std::string> rccOptionsVec;
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_OPTIONS_FILES"), rccFilesVec);
+ if (this->RccEnabled()) {
cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_OPTIONS_OPTIONS"), rccOptionsVec);
- if (rccFilesVec.size() != rccOptionsVec.size()) {
- this->LogError(
- "AutoGen: Error: RCC files/options lists size missmatch in: " +
- filename);
- return false;
- }
- for (std::vector<std::string>::iterator fileIt = rccFilesVec.begin(),
- optionIt = rccOptionsVec.begin();
- fileIt != rccFilesVec.end(); ++fileIt, ++optionIt) {
- cmSystemTools::ReplaceString(*optionIt, "@list_sep@", ";");
- this->RccOptions[*fileIt] = *optionIt;
+ makefile->GetSafeDefinition("AM_RCC_SOURCES"), this->RccSources);
+ {
+ std::vector<std::string> rccFilesVec;
+ std::vector<std::string> rccOptionsVec;
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_RCC_OPTIONS_FILES"), rccFilesVec);
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_RCC_OPTIONS_OPTIONS"), rccOptionsVec);
+ if (rccFilesVec.size() != rccOptionsVec.size()) {
+ this->LogError(
+ "AutoGen: Error: RCC files/options lists size missmatch in: " +
+ filename);
+ return false;
+ }
+ for (std::vector<std::string>::iterator fileIt = rccFilesVec.begin(),
+ optionIt = rccOptionsVec.begin();
+ fileIt != rccFilesVec.end(); ++fileIt, ++optionIt) {
+ cmSystemTools::ReplaceString(*optionIt, "@list_sep@", ";");
+ this->RccOptions[*fileIt] = *optionIt;
+ }
}
- }
- {
- std::vector<std::string> rccInputLists;
- cmSystemTools::ExpandListArgument(
- makefile->GetSafeDefinition("AM_RCC_INPUTS"), rccInputLists);
+ {
+ std::vector<std::string> rccInputLists;
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_RCC_INPUTS"), rccInputLists);
- // qrc files in the end of the list may have been empty
- if (rccInputLists.size() < this->RccSources.size()) {
- rccInputLists.resize(this->RccSources.size());
- }
- if (this->RccSources.size() != rccInputLists.size()) {
- this->LogError(
- "AutoGen: Error: RCC sources/inputs lists size missmatch in: " +
- filename);
- return false;
- }
- for (std::vector<std::string>::iterator fileIt = this->RccSources.begin(),
- inputIt = rccInputLists.begin();
- fileIt != this->RccSources.end(); ++fileIt, ++inputIt) {
- cmSystemTools::ReplaceString(*inputIt, "@list_sep@", ";");
- std::vector<std::string> rccInputFiles;
- cmSystemTools::ExpandListArgument(*inputIt, rccInputFiles);
- this->RccInputs[*fileIt] = rccInputFiles;
+ // qrc files in the end of the list may have been empty
+ if (rccInputLists.size() < this->RccSources.size()) {
+ rccInputLists.resize(this->RccSources.size());
+ }
+ if (this->RccSources.size() != rccInputLists.size()) {
+ this->LogError(
+ "AutoGen: Error: RCC sources/inputs lists size missmatch in: " +
+ filename);
+ return false;
+ }
+ for (std::vector<std::string>::iterator
+ fileIt = this->RccSources.begin(),
+ inputIt = rccInputLists.begin();
+ fileIt != this->RccSources.end(); ++fileIt, ++inputIt) {
+ cmSystemTools::ReplaceString(*inputIt, "@list_sep@", ";");
+ std::vector<std::string> rccInputFiles;
+ cmSystemTools::ExpandListArgument(*inputIt, rccInputFiles);
+ this->RccInputs[*fileIt] = rccInputFiles;
+ }
}
}
- // - Flags
- this->IncludeProjectDirsBefore =
- makefile->IsOn("AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE");
- this->MocRelaxedMode = makefile->IsOn("AM_MOC_RELAXED_MODE");
-
return true;
}
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=15c1cc55b4123ffb207d6f731ae5152bc99a1540
commit 15c1cc55b4123ffb207d6f731ae5152bc99a1540
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Fri Feb 24 12:21:31 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Add missing return on error
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index ddb29a6..cdae236 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -396,6 +396,7 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
} else {
this->LogError("AutoMoc: Error: AUTOMOC_DEPEND_FILTERS list size is not "
"a multiple of 2");
+ return false;
}
}
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=793a505e3cf03c6841df92f46ed0aaf15c2479d7
commit 793a505e3cf03c6841df92f46ed0aaf15c2479d7
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Fri Feb 24 12:11:55 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Rename and merge moc related methods
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 756735f..ddb29a6 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -740,6 +740,7 @@ void cmQtAutoGenerators::MocFindDepends(
// regular expression check
if (contentText.find(filter.key) != std::string::npos) {
// Run regular expression check loop
+ const std::string sourcePath = subDirPrefix(absFilename);
const char* contentChars = contentText.c_str();
while (filter.regExp.find(contentChars)) {
// Evaluate match
@@ -747,7 +748,7 @@ void cmQtAutoGenerators::MocFindDepends(
if (!match.empty()) {
// Find the dependency file
std::string incFile;
- if (this->FindIncludedFile(incFile, absFilename, match)) {
+ if (this->MocFindIncludedFile(incFile, sourcePath, match)) {
mocDepends[absFilename].insert(incFile);
if (this->Verbose) {
this->LogInfo("AutoMoc: Found dependency:\n " +
@@ -886,7 +887,7 @@ bool cmQtAutoGenerators::MocParseSourceContent(
// Remove the moc_ part
const std::string incRealBasename = incBasename.substr(4);
const std::string headerToMoc =
- this->FindMocHeader(scannedFileAbsPath, incRealBasename, incSubDir);
+ this->MocFindHeader(scannedFileAbsPath, incSubDir + incRealBasename);
if (!headerToMoc.empty()) {
// Register moc job
mocsIncluded[headerToMoc] = incString;
@@ -919,7 +920,7 @@ bool cmQtAutoGenerators::MocParseSourceContent(
} else {
// In relaxed mode try to find a header instead but issue a warning
const std::string headerToMoc =
- this->FindMocHeader(scannedFileAbsPath, incBasename, incSubDir);
+ this->MocFindHeader(scannedFileAbsPath, incSubDir + incBasename);
if (!headerToMoc.empty()) {
// This is for KDE4 compatibility:
fileToMoc = headerToMoc;
@@ -1782,39 +1783,22 @@ bool cmQtAutoGenerators::FindHeader(std::string& header,
return false;
}
-bool cmQtAutoGenerators::FindHeaderGlobal(
- std::string& header, const std::string& testBasePath) const
-{
- for (std::vector<std::string>::const_iterator iit =
- this->MocIncludePaths.begin();
- iit != this->MocIncludePaths.end(); ++iit) {
- const std::string fullPath = ((*iit) + '/' + testBasePath);
- if (FindHeader(header, fullPath)) {
- return true;
- }
- }
- return false;
-}
-
-std::string cmQtAutoGenerators::FindMocHeader(const std::string& basePath,
- const std::string& baseName,
- const std::string& subDir) const
+std::string cmQtAutoGenerators::MocFindHeader(
+ const std::string& sourcePath, const std::string& includeBase) const
{
std::string header;
- do {
- if (!subDir.empty()) {
- if (this->FindHeader(header, basePath + subDir + baseName)) {
+ // Search in vicinity of the source
+ if (!this->FindHeader(header, sourcePath + includeBase)) {
+ // Search in include directories
+ for (std::vector<std::string>::const_iterator iit =
+ this->MocIncludePaths.begin();
+ iit != this->MocIncludePaths.end(); ++iit) {
+ const std::string fullPath = ((*iit) + '/' + includeBase);
+ if (FindHeader(header, fullPath)) {
break;
}
}
- if (this->FindHeader(header, basePath + baseName)) {
- break;
- }
- // Try include directories
- if (this->FindHeaderGlobal(header, subDir + baseName)) {
- break;
- }
- } while (false);
+ }
// Sanitize
if (!header.empty()) {
header = cmsys::SystemTools::GetRealPath(header);
@@ -1822,14 +1806,14 @@ std::string cmQtAutoGenerators::FindMocHeader(const std::string& basePath,
return header;
}
-bool cmQtAutoGenerators::FindIncludedFile(
- std::string& absFile, const std::string& sourceFile,
+bool cmQtAutoGenerators::MocFindIncludedFile(
+ std::string& absFile, const std::string& sourcePath,
const std::string& includeString) const
{
bool success = false;
// Search in vicinity of the source
{
- std::string testPath = subDirPrefix(sourceFile);
+ std::string testPath = sourcePath;
testPath += includeString;
if (cmsys::SystemTools::FileExists(testPath.c_str())) {
absFile = cmsys::SystemTools::GetRealPath(testPath);
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index 46c86ff..3bff2b2 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -144,13 +144,11 @@ private:
bool MakeParentDirectory(const std::string& filename) const;
bool FindHeader(std::string& header, const std::string& testBasePath) const;
- bool FindHeaderGlobal(std::string& header,
- const std::string& testBasePath) const;
- std::string FindMocHeader(const std::string& basePath,
- const std::string& baseName,
- const std::string& subDir) const;
- bool FindIncludedFile(std::string& absFile, const std::string& sourceFile,
- const std::string& includeString) const;
+
+ std::string MocFindHeader(const std::string& sourcePath,
+ const std::string& includeBase) const;
+ bool MocFindIncludedFile(std::string& absFile, const std::string& sourceFile,
+ const std::string& includeString) const;
// - Target names
std::string OriginTargetName;
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=959748f1c963e9e2d44ef650a2faa3a82985655f
commit 959748f1c963e9e2d44ef650a2faa3a82985655f
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Sat Feb 25 14:37:09 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Add AUTOUIC_SEARCH_PATHS release notes
diff --git a/Help/release/dev/Autogen_uic_paths.rst b/Help/release/dev/Autogen_uic_paths.rst
new file mode 100644
index 0000000..0893194
--- /dev/null
+++ b/Help/release/dev/Autogen_uic_paths.rst
@@ -0,0 +1,10 @@
+AutoGen uic paths
+-----------------
+
+* Variable :variable:`CMAKE_AUTOUIC_SEARCH_PATHS` was introduced to
+ allow :variable:`CMAKE_AUTOUIC` to search for ``foo.ui`` in more
+ places than the vicinity of the ``ui_foo.h`` including file.
+
+* The new target property :prop_tgt:`AUTOUIC_SEARCH_PATHS` was introduced to
+ allow :prop_tgt:`AUTOUIC` to search for ``foo.ui`` in more
+ places than the vicinity of the ``ui_foo.h`` including file.
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=92525eb7b3ad6c71610fead557185aaf8db98739
commit 92525eb7b3ad6c71610fead557185aaf8db98739
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Fri Feb 24 23:13:39 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Add AUTOUIC_SEARCH_PATHS documentation
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index f31b0f8..3db2e41 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -121,6 +121,7 @@ Properties on Targets
/prop_tgt/AUTOMOC
/prop_tgt/AUTOUIC
/prop_tgt/AUTOUIC_OPTIONS
+ /prop_tgt/AUTOUIC_SEARCH_PATHS
/prop_tgt/AUTORCC
/prop_tgt/AUTORCC_OPTIONS
/prop_tgt/BINARY_DIR
diff --git a/Help/manual/cmake-qt.7.rst b/Help/manual/cmake-qt.7.rst
index 3b9931e..3b95b05 100644
--- a/Help/manual/cmake-qt.7.rst
+++ b/Help/manual/cmake-qt.7.rst
@@ -104,7 +104,9 @@ be run, and to create rules to execute ``uic`` at the appropriate time.
If a preprocessor ``#include`` directive is found which matches
``ui_<basename>.h``, and a ``<basename>.ui`` file exists, then ``uic`` will
-be executed to generate the appropriate file.
+be executed to generate the appropriate file. The ``<basename>.ui`` file is
+searched for first in the vicinity of including file and afterwards in the
+optional :prop_tgt:`AUTOUIC_SEARCH_PATHS` of the target.
The generated generated ``ui_*.h`` files are placed in the
``<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include`` directory which is
diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst
index 259d87b..73fd73c 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -263,6 +263,7 @@ Variables that Control the Build
/variable/CMAKE_AUTORCC_OPTIONS
/variable/CMAKE_AUTOUIC
/variable/CMAKE_AUTOUIC_OPTIONS
+ /variable/CMAKE_AUTOUIC_SEARCH_PATHS
/variable/CMAKE_BUILD_RPATH
/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR
/variable/CMAKE_BUILD_WITH_INSTALL_RPATH
diff --git a/Help/prop_tgt/AUTOUIC.rst b/Help/prop_tgt/AUTOUIC.rst
index fbf24c3..91d95e5 100644
--- a/Help/prop_tgt/AUTOUIC.rst
+++ b/Help/prop_tgt/AUTOUIC.rst
@@ -10,8 +10,13 @@ Qt4 and Qt5 are supported.
When this property is ``ON``, CMake will scan the source files at build time
and invoke ``uic`` accordingly. If an ``#include`` statement like
-``#include "ui_foo.h"`` is found in ``foo.cpp``, a ``foo.ui`` file is
-expected next to ``foo.cpp``, and ``uic`` is run on the ``foo.ui`` file.
+``#include "ui_foo.h"`` is found in ``source.cpp``, a ``foo.ui`` file is
+searched for first in the vicinity of ``source.cpp`` and afterwards in the
+optional :prop_tgt:`AUTOUIC_SEARCH_PATHS` of the target.
+``uic`` is run on the ``foo.ui`` file to generate ``ui_foo.h`` in the directory
+``<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include``,
+which is added to the target's :prop_tgt:`INCLUDE_DIRECTORIES` automatically.
+
This property is initialized by the value of the :variable:`CMAKE_AUTOUIC`
variable if it is set when a target is created.
diff --git a/Help/prop_tgt/AUTOUIC_OPTIONS.rst b/Help/prop_tgt/AUTOUIC_OPTIONS.rst
index dc3bee5..9fb042e 100644
--- a/Help/prop_tgt/AUTOUIC_OPTIONS.rst
+++ b/Help/prop_tgt/AUTOUIC_OPTIONS.rst
@@ -1,7 +1,7 @@
AUTOUIC_OPTIONS
---------------
-Additional options for uic when using :prop_tgt:`AUTOUIC`
+Additional options for ``uic`` when using :prop_tgt:`AUTOUIC`
This property holds additional command line options which will be used when
``uic`` is executed during the build via :prop_tgt:`AUTOUIC`, i.e. it is
diff --git a/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst b/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
new file mode 100644
index 0000000..96d9f89
--- /dev/null
+++ b/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
@@ -0,0 +1,12 @@
+AUTOUIC_SEARCH_PATHS
+--------------------
+
+Search path list used by :prop_tgt:`AUTOUIC` to find included
+``.ui`` files.
+
+This property is initialized by the value of the
+:variable:`CMAKE_AUTOUIC_SEARCH_PATHS` variable if it is set
+when a target is created. Otherwise it is empty.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst b/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
new file mode 100644
index 0000000..aa132bf
--- /dev/null
+++ b/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
@@ -0,0 +1,11 @@
+CMAKE_AUTOUIC_SEARCH_PATHS
+--------------------------
+
+Search path list used by :variable:`CMAKE_AUTOUIC` to find included
+``.ui`` files.
+
+This variable is used to initialize the :prop_tgt:`AUTOUIC_SEARCH_PATHS`
+property on all the targets. See that target property for additional
+information.
+
+By default it is empty.
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=851638db8a5fdb9ae974ac32351bc936300b50c9
commit 851638db8a5fdb9ae974ac32351bc936300b50c9
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Thu Feb 23 21:36:10 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Add AUTOUIC_SEARCH_PATHS test
diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt
index dc631c6..4960472 100644
--- a/Tests/QtAutogen/CMakeLists.txt
+++ b/Tests/QtAutogen/CMakeLists.txt
@@ -287,5 +287,9 @@ if (NOT QT_TEST_VERSION STREQUAL 4)
endif()
# -- Test
+# Tests various .ui include directories
+add_subdirectory(uicInclude)
+
+# -- Test
# Complex test case
add_subdirectory(complex)
diff --git a/Tests/QtAutogen/uicInclude/CMakeLists.txt b/Tests/QtAutogen/uicInclude/CMakeLists.txt
new file mode 100644
index 0000000..f62ebb0
--- /dev/null
+++ b/Tests/QtAutogen/uicInclude/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Test moc include patterns
+
+set(CMAKE_AUTOUIC_SEARCH_PATHS "dirA")
+
+add_executable(uicInclude main.cpp)
+target_link_libraries(uicInclude ${QT_LIBRARIES})
+set_target_properties(uicInclude PROPERTIES AUTOUIC ON)
+set_property(TARGET uicInclude APPEND PROPERTY AUTOUIC_SEARCH_PATHS "dirB")
diff --git a/Tests/QtAutogen/uicInclude/PageC.ui b/Tests/QtAutogen/uicInclude/PageC.ui
new file mode 100644
index 0000000..bb2fb5e
--- /dev/null
+++ b/Tests/QtAutogen/uicInclude/PageC.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PageC</class>
+ <widget class="QWidget" name="PageC">
+ <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/uicInclude/dirA/PageA.ui b/Tests/QtAutogen/uicInclude/dirA/PageA.ui
new file mode 100644
index 0000000..dd81802
--- /dev/null
+++ b/Tests/QtAutogen/uicInclude/dirA/PageA.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PageA</class>
+ <widget class="QWidget" name="PageA">
+ <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/uicInclude/dirB/sub/PageB.ui b/Tests/QtAutogen/uicInclude/dirB/sub/PageB.ui
new file mode 100644
index 0000000..fa6dfa6
--- /dev/null
+++ b/Tests/QtAutogen/uicInclude/dirB/sub/PageB.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PageB</class>
+ <widget class="QWidget" name="PageB">
+ <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/uicInclude/main.cpp b/Tests/QtAutogen/uicInclude/main.cpp
new file mode 100644
index 0000000..4ca66a7
--- /dev/null
+++ b/Tests/QtAutogen/uicInclude/main.cpp
@@ -0,0 +1,10 @@
+
+#include "main.hpp"
+
+int main(int argv, char** args)
+{
+ return 0;
+}
+
+#include "sub/ui_PageB.h"
+#include "ui_PageC.h"
diff --git a/Tests/QtAutogen/uicInclude/main.hpp b/Tests/QtAutogen/uicInclude/main.hpp
new file mode 100644
index 0000000..58ddc26
--- /dev/null
+++ b/Tests/QtAutogen/uicInclude/main.hpp
@@ -0,0 +1,6 @@
+#ifndef MAIN_HPP
+#define MAIN_HPP
+
+#include "ui_PageA.h"
+
+#endif
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0abd89e0eb51b77590210f21d9095ff85771bf1d
commit 0abd89e0eb51b77590210f21d9095ff85771bf1d
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Thu Feb 23 19:35:48 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Add AUTOUIC_SEARCH_PATHS support
Closes #15227
diff --git a/Modules/AutogenInfo.cmake.in b/Modules/AutogenInfo.cmake.in
index fc5024f..f8ffe91 100644
--- a/Modules/AutogenInfo.cmake.in
+++ b/Modules/AutogenInfo.cmake.in
@@ -26,6 +26,7 @@ set(AM_UIC_SKIP @_uic_skip@)
set(AM_UIC_TARGET_OPTIONS @_uic_target_options@)
set(AM_UIC_OPTIONS_FILES @_qt_uic_options_files@)
set(AM_UIC_OPTIONS_OPTIONS @_qt_uic_options_options@)
+set(AM_UIC_SEARCH_PATHS @_uic_search_paths@)
# RCC settings
set(AM_RCC_SOURCES @_rcc_files@ )
set(AM_RCC_INPUTS @_rcc_inputs@)
diff --git a/Source/cmQtAutoGeneratorInitializer.cxx b/Source/cmQtAutoGeneratorInitializer.cxx
index de18265..5460f73 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -306,6 +306,19 @@ static void UicSetupAutoTarget(
AddDefinitionEscaped(makefile, "_uic_skip", uicSkipList);
+ // Uic search paths
+ {
+ std::vector<std::string> uicSearchPaths;
+ cmSystemTools::ExpandListArgument(
+ GetSafeProperty(target, "AUTOUIC_SEARCH_PATHS"), uicSearchPaths);
+ const std::string srcDir = makefile->GetCurrentSourceDirectory();
+ for (std::vector<std::string>::iterator it = uicSearchPaths.begin();
+ it != uicSearchPaths.end(); ++it) {
+ *it = cmSystemTools::CollapseFullPath(*it, srcDir);
+ }
+ AddDefinitionEscaped(makefile, "_uic_search_paths", uicSearchPaths);
+ }
+
// Uic target options
{
std::string _uic_opts;
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 43cae04..756735f 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -412,19 +412,23 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
makefile->GetSafeDefinition("AM_UIC_OPTIONS_FILES"), uicFilesVec);
cmSystemTools::ExpandListArgument(
makefile->GetSafeDefinition("AM_UIC_OPTIONS_OPTIONS"), uicOptionsVec);
- if (uicFilesVec.size() != uicOptionsVec.size()) {
+ // Compare list sizes
+ if (uicFilesVec.size() == uicOptionsVec.size()) {
+ for (std::vector<std::string>::iterator fileIt = uicFilesVec.begin(),
+ optionIt = uicOptionsVec.begin();
+ fileIt != uicFilesVec.end(); ++fileIt, ++optionIt) {
+ cmSystemTools::ReplaceString(*optionIt, "@list_sep@", ";");
+ this->UicOptions[*fileIt] = *optionIt;
+ }
+ } else {
this->LogError(
"AutoGen: Error: Uic files/options lists size missmatch in: " +
filename);
return false;
}
- for (std::vector<std::string>::iterator fileIt = uicFilesVec.begin(),
- optionIt = uicOptionsVec.begin();
- fileIt != uicFilesVec.end(); ++fileIt, ++optionIt) {
- cmSystemTools::ReplaceString(*optionIt, "@list_sep@", ";");
- this->UicOptions[*fileIt] = *optionIt;
- }
}
+ cmSystemTools::ExpandListArgument(
+ makefile->GetSafeDefinition("AM_UIC_SEARCH_PATHS"), this->UicSearchPaths);
// - Rcc
cmSystemTools::ExpandListArgument(
@@ -831,12 +835,7 @@ void cmQtAutoGenerators::UicParseContent(
const char* contentChars = contentText.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
- uisIncluded[absFilename].push_back(basename.substr(3));
+ uisIncluded[absFilename].push_back(this->RegExpUicInclude.match(1));
contentChars += this->RegExpUicInclude.end();
}
}
@@ -1325,6 +1324,36 @@ bool cmQtAutoGenerators::MocGenerateFile(
return mocGenerated;
}
+bool cmQtAutoGenerators::UicFindIncludedFile(std::string& absFile,
+ const std::string& sourceFile,
+ const std::string& includeString)
+{
+ bool success = false;
+ // Search in vicinity of the source
+ {
+ std::string testPath = subDirPrefix(sourceFile);
+ testPath += includeString;
+ if (cmsys::SystemTools::FileExists(testPath.c_str())) {
+ absFile = cmsys::SystemTools::GetRealPath(testPath);
+ success = true;
+ }
+ }
+ // Search in include directories
+ if (!success) {
+ for (std::vector<std::string>::const_iterator iit =
+ this->UicSearchPaths.begin();
+ iit != this->UicSearchPaths.end(); ++iit) {
+ const std::string fullPath = ((*iit) + '/' + includeString);
+ if (cmsys::SystemTools::FileExists(fullPath.c_str())) {
+ absFile = cmsys::SystemTools::GetRealPath(fullPath);
+ success = true;
+ break;
+ }
+ }
+ }
+ return success;
+}
+
bool cmQtAutoGenerators::UicGenerateAll(
const std::map<std::string, std::vector<std::string> >& uisIncluded)
{
@@ -1333,46 +1362,57 @@ bool cmQtAutoGenerators::UicGenerateAll(
}
// single map with input / output names
- std::map<std::string, std::map<std::string, std::string> > uiGenMap;
- std::map<std::string, std::string> testMap;
- for (std::map<std::string, std::vector<std::string> >::const_iterator it =
- uisIncluded.begin();
- it != uisIncluded.end(); ++it) {
- // source file path
- std::string sourcePath = cmsys::SystemTools::GetFilenamePath(it->first);
- sourcePath += '/';
- // insert new map for source file an use new reference
- uiGenMap[it->first] = std::map<std::string, std::string>();
- std::map<std::string, std::string>& sourceMap = uiGenMap[it->first];
- for (std::vector<std::string>::const_iterator sit = it->second.begin();
- sit != it->second.end(); ++sit) {
- const std::string& uiFileName = *sit;
- const std::string uiInputFile = sourcePath + uiFileName + ".ui";
- const std::string uiOutputFile = "ui_" + uiFileName + ".h";
- sourceMap[uiInputFile] = uiOutputFile;
- testMap[uiInputFile] = uiOutputFile;
- }
- }
-
- // look for name collisions
+ std::map<std::string, std::map<std::string, std::string> > sourceGenMap;
{
- std::multimap<std::string, std::string> collisions;
- if (this->NameCollisionTest(testMap, collisions)) {
- std::ostringstream ost;
- ost << "AutoUic: Error: The same ui_NAME.h file will be generated "
- "from different sources.\n"
- "To avoid this error rename the source files.\n";
- this->LogErrorNameCollision(ost.str(), collisions);
- return false;
+ // Collision lookup map
+ std::map<std::string, std::string> testMap;
+ // Compile maps
+ for (std::map<std::string, std::vector<std::string> >::const_iterator sit =
+ uisIncluded.begin();
+ sit != uisIncluded.end(); ++sit) {
+ const std::string& source(sit->first);
+ const std::vector<std::string>& sourceIncs(sit->second);
+ // insert new source/destination map
+ std::map<std::string, std::string>& uiGenMap = sourceGenMap[source];
+ for (std::vector<std::string>::const_iterator uit = sourceIncs.begin();
+ uit != sourceIncs.end(); ++uit) {
+ // Remove ui_ from the begin filename by substr()
+ const std::string uiBasePath = subDirPrefix(*uit);
+ const std::string uiBaseName =
+ cmsys::SystemTools::GetFilenameWithoutLastExtension(*uit).substr(3);
+ const std::string searchFileName = uiBasePath + uiBaseName + ".ui";
+ std::string uiInputFile;
+ if (UicFindIncludedFile(uiInputFile, source, searchFileName)) {
+ std::string uiOutputFile = uiBasePath + "ui_" + uiBaseName + ".h";
+ cmSystemTools::ReplaceString(uiOutputFile, "..", "__");
+ uiGenMap[uiInputFile] = uiOutputFile;
+ testMap[uiInputFile] = uiOutputFile;
+ } else {
+ this->LogError("AutoUic: Error: " + Quoted(sit->first) +
+ "\nCould not find " + Quoted(searchFileName));
+ return false;
+ }
+ }
+ }
+ // look for name collisions
+ {
+ std::multimap<std::string, std::string> collisions;
+ if (this->NameCollisionTest(testMap, collisions)) {
+ std::ostringstream ost;
+ ost << "AutoUic: Error: The same ui_NAME.h file will be generated "
+ "from different sources.\n"
+ "To avoid this error rename the source files.\n";
+ this->LogErrorNameCollision(ost.str(), collisions);
+ return false;
+ }
}
}
- testMap.clear();
// generate ui files
for (std::map<std::string,
std::map<std::string, std::string> >::const_iterator it =
- uiGenMap.begin();
- it != uiGenMap.end(); ++it) {
+ sourceGenMap.begin();
+ it != sourceGenMap.end(); ++it) {
for (std::map<std::string, std::string>::const_iterator sit =
it->second.begin();
sit != it->second.end(); ++sit) {
@@ -1415,15 +1455,15 @@ bool cmQtAutoGenerators::UicGenerateFile(const std::string& realName,
std::vector<std::string> cmd;
cmd.push_back(this->UicExecutable);
{
- std::vector<std::string> opts = this->UicTargetOptions;
+ std::vector<std::string> allOpts = this->UicTargetOptions;
std::map<std::string, std::string>::const_iterator optionIt =
this->UicOptions.find(uiInputFile);
if (optionIt != this->UicOptions.end()) {
std::vector<std::string> fileOpts;
cmSystemTools::ExpandListArgument(optionIt->second, fileOpts);
- UicMergeOptions(opts, fileOpts, (this->QtMajorVersion == "5"));
+ UicMergeOptions(allOpts, fileOpts, (this->QtMajorVersion == "5"));
}
- cmd.insert(cmd.end(), opts.begin(), opts.end());
+ cmd.insert(cmd.end(), allOpts.begin(), allOpts.end());
}
cmd.push_back("-o");
cmd.push_back(uicFileAbs);
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index f9b9083..46c86ff 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -111,6 +111,8 @@ private:
const std::map<std::string, std::set<std::string> >& mocDepends);
// - Uic file generation
+ bool UicFindIncludedFile(std::string& absFile, const std::string& sourceFile,
+ const std::string& includeString);
bool UicGenerateAll(
const std::map<std::string, std::vector<std::string> >& includedUis);
bool UicGenerateFile(const std::string& realName,
@@ -184,6 +186,7 @@ private:
std::vector<std::string> UicSkipList;
std::vector<std::string> UicTargetOptions;
std::map<std::string, std::string> UicOptions;
+ std::vector<std::string> UicSearchPaths;
// - Rcc
std::vector<std::string> RccSources;
std::map<std::string, std::string> RccOptions;
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 0f3d91b..c360c19 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -248,6 +248,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
this->SetPropertyDefault("AUTOMOC_DEPEND_FILTERS", CM_NULLPTR);
this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", CM_NULLPTR);
this->SetPropertyDefault("AUTOUIC_OPTIONS", CM_NULLPTR);
+ this->SetPropertyDefault("AUTOUIC_SEARCH_PATHS", CM_NULLPTR);
this->SetPropertyDefault("AUTORCC_OPTIONS", CM_NULLPTR);
this->SetPropertyDefault("LINK_DEPENDS_NO_SHARED", CM_NULLPTR);
this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", CM_NULLPTR);
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=55f8d63cdbb15fbee9f3486f8511c7fa16edaaf3
commit 55f8d63cdbb15fbee9f3486f8511c7fa16edaaf3
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Fri Feb 24 11:41:50 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:29 2017 +0100
Autogen: Add subDirPrefix function
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 902e872..43cae04 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -94,6 +94,15 @@ static void SettingWrite(std::ostream& ostr, const char* key,
}
}
+std::string subDirPrefix(const std::string fileName)
+{
+ std::string res(cmsys::SystemTools::GetFilenamePath(fileName));
+ if (!res.empty()) {
+ res += '/';
+ }
+ return res;
+}
+
static bool FileNameIsUnique(const std::string& filePath,
const std::map<std::string, std::string>& fileMap)
{
@@ -845,8 +854,7 @@ bool cmQtAutoGenerators::MocParseSourceContent(
this->LogInfo("AutoMoc: Checking " + absFilename);
}
- const std::string scannedFileAbsPath =
- cmsys::SystemTools::GetFilenamePath(absFilename) + '/';
+ const std::string scannedFileAbsPath = subDirPrefix(absFilename);
const std::string scannedFileBasename =
cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
@@ -865,13 +873,9 @@ bool cmQtAutoGenerators::MocParseSourceContent(
while (this->RegExpMocInclude.find(contentChars)) {
const std::string incString = this->RegExpMocInclude.match(1);
// Basename of the moc include
+ const std::string incSubDir(subDirPrefix(incString));
const std::string incBasename =
cmsys::SystemTools::GetFilenameWithoutLastExtension(incString);
- std::string incSubDir;
- if (incString.find_first_of('/') != std::string::npos) {
- incSubDir = cmsys::SystemTools::GetFilenamePath(incString);
- incSubDir += '/';
- }
// If the moc include is of the moc_foo.cpp style we expect
// the Q_OBJECT class declaration in a header file.
@@ -1055,8 +1059,7 @@ void cmQtAutoGenerators::SearchHeadersForSourceFile(
{
std::string basepaths[2];
{
- std::string bpath = cmsys::SystemTools::GetFilenamePath(absFilename);
- bpath += '/';
+ std::string bpath = subDirPrefix(absFilename);
bpath += cmsys::SystemTools::GetFilenameWithoutLastExtension(absFilename);
// search for default header files and private header files
basepaths[0] = bpath;
@@ -1234,14 +1237,14 @@ bool cmQtAutoGenerators::MocGenerateAll(
*/
bool cmQtAutoGenerators::MocGenerateFile(
const std::string& sourceFile, const std::string& mocFileName,
- const std::string& subDirPrefix,
+ const std::string& subDir,
const std::map<std::string, std::set<std::string> >& mocDepends)
{
bool mocGenerated = false;
bool generateMoc = this->GenerateAllMoc;
const std::string mocFileRel =
- this->AutogenBuildSubDir + subDirPrefix + mocFileName;
+ this->AutogenBuildSubDir + subDir + mocFileName;
const std::string mocFileAbs = this->CurrentBinaryDir + mocFileRel;
if (!generateMoc) {
@@ -1786,8 +1789,7 @@ bool cmQtAutoGenerators::FindIncludedFile(
bool success = false;
// Search in vicinity of the source
{
- std::string testPath = cmSystemTools::GetFilenamePath(sourceFile);
- testPath += '/';
+ std::string testPath = subDirPrefix(sourceFile);
testPath += includeString;
if (cmsys::SystemTools::FileExists(testPath.c_str())) {
absFile = cmsys::SystemTools::GetRealPath(testPath);
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index b83edf7..f9b9083 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -107,7 +107,7 @@ private:
const std::map<std::string, std::set<std::string> >& mocDepends);
bool MocGenerateFile(
const std::string& sourceFile, const std::string& mocFileName,
- const std::string& subDirPrefix,
+ const std::string& subDir,
const std::map<std::string, std::set<std::string> >& mocDepends);
// - Uic file generation
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=db431ecfe33dbfa9eb43e4edd72ebc35b2c7c563
commit db431ecfe33dbfa9eb43e4edd72ebc35b2c7c563
Author: Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Thu Feb 23 19:44:29 2017 +0100
Commit: Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Wed Mar 1 15:30:28 2017 +0100
Autogen: Merge FindInIncludeDirectories into FindIncludeFile
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index e7e456a..902e872 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -733,9 +733,8 @@ void cmQtAutoGenerators::MocFindDepends(
const std::string match = filter.regExp.match(1);
if (!match.empty()) {
// Find the dependency file
- const std::string incFile =
- this->FindIncludedFile(absFilename, match);
- if (!incFile.empty()) {
+ std::string incFile;
+ if (this->FindIncludedFile(incFile, absFilename, match)) {
mocDepends[absFilename].insert(incFile);
if (this->Verbose) {
this->LogInfo("AutoMoc: Found dependency:\n " +
@@ -1780,40 +1779,35 @@ std::string cmQtAutoGenerators::FindMocHeader(const std::string& basePath,
return header;
}
-std::string cmQtAutoGenerators::FindIncludedFile(
- const std::string& sourceFile, const std::string& includeString) const
+bool cmQtAutoGenerators::FindIncludedFile(
+ std::string& absFile, const std::string& sourceFile,
+ const std::string& includeString) const
{
+ bool success = false;
// Search in vicinity of the source
{
std::string testPath = cmSystemTools::GetFilenamePath(sourceFile);
testPath += '/';
testPath += includeString;
if (cmsys::SystemTools::FileExists(testPath.c_str())) {
- return cmsys::SystemTools::GetRealPath(testPath);
+ absFile = cmsys::SystemTools::GetRealPath(testPath);
+ success = true;
}
}
- // Search globally
- return FindInIncludeDirectories(includeString);
-}
-
-/**
- * @brief Tries to find a file in the include directories
- * @return True on success
- */
-std::string cmQtAutoGenerators::FindInIncludeDirectories(
- const std::string& includeString) const
-{
- std::string res;
- for (std::vector<std::string>::const_iterator iit =
- this->MocIncludePaths.begin();
- iit != this->MocIncludePaths.end(); ++iit) {
- const std::string fullPath = ((*iit) + '/' + includeString);
- if (cmsys::SystemTools::FileExists(fullPath.c_str())) {
- res = cmsys::SystemTools::GetRealPath(fullPath);
- break;
+ // Search in include directories
+ if (!success) {
+ for (std::vector<std::string>::const_iterator iit =
+ this->MocIncludePaths.begin();
+ iit != this->MocIncludePaths.end(); ++iit) {
+ const std::string fullPath = ((*iit) + '/' + includeString);
+ if (cmsys::SystemTools::FileExists(fullPath.c_str())) {
+ absFile = cmsys::SystemTools::GetRealPath(fullPath);
+ success = true;
+ break;
+ }
}
}
- return res;
+ return success;
}
/**
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h
index e4b7f60..b83edf7 100644
--- a/Source/cmQtAutoGenerators.h
+++ b/Source/cmQtAutoGenerators.h
@@ -147,9 +147,8 @@ private:
std::string FindMocHeader(const std::string& basePath,
const std::string& baseName,
const std::string& subDir) const;
- std::string FindIncludedFile(const std::string& sourceFile,
- const std::string& includeString) const;
- std::string FindInIncludeDirectories(const std::string& includeString) const;
+ bool FindIncludedFile(std::string& absFile, const std::string& sourceFile,
+ const std::string& includeString) const;
// - Target names
std::string OriginTargetName;
-----------------------------------------------------------------------
Summary of changes:
Help/manual/cmake-properties.7.rst | 1 +
Help/manual/cmake-qt.7.rst | 4 +-
Help/manual/cmake-variables.7.rst | 1 +
Help/prop_tgt/AUTOUIC.rst | 9 +-
Help/prop_tgt/AUTOUIC_OPTIONS.rst | 2 +-
Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst | 12 +
Help/release/dev/Autogen_uic_paths.rst | 10 +
Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst | 11 +
Modules/AutogenInfo.cmake.in | 3 +-
Source/cmQtAutoGeneratorInitializer.cxx | 15 +-
Source/cmQtAutoGenerators.cxx | 516 ++++++++++----------
Source/cmQtAutoGenerators.h | 18 +-
Source/cmTarget.cxx | 1 +
Tests/QtAutogen/CMakeLists.txt | 4 +
Tests/QtAutogen/uicInclude/CMakeLists.txt | 8 +
.../{skipSource/uigen1.ui => uicInclude/PageC.ui} | 4 +-
.../uigen1.ui => uicInclude/dirA/PageA.ui} | 4 +-
.../uigen1.ui => uicInclude/dirB/sub/PageB.ui} | 4 +-
Tests/QtAutogen/uicInclude/main.cpp | 10 +
Tests/QtAutogen/uicInclude/main.hpp | 6 +
20 files changed, 374 insertions(+), 269 deletions(-)
create mode 100644 Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
create mode 100644 Help/release/dev/Autogen_uic_paths.rst
create mode 100644 Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
create mode 100644 Tests/QtAutogen/uicInclude/CMakeLists.txt
copy Tests/QtAutogen/{skipSource/uigen1.ui => uicInclude/PageC.ui} (87%)
copy Tests/QtAutogen/{skipSource/uigen1.ui => uicInclude/dirA/PageA.ui} (87%)
copy Tests/QtAutogen/{skipSource/uigen1.ui => uicInclude/dirB/sub/PageB.ui} (87%)
create mode 100644 Tests/QtAutogen/uicInclude/main.cpp
create mode 100644 Tests/QtAutogen/uicInclude/main.hpp
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list