diff options
author | Stephen Kelly <steveire@gmail.com> | 2014-02-02 12:19:27 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2014-02-04 18:21:43 (GMT) |
commit | 6053ce22f69f58c9dc4db66dbfe62cdd8fbe2774 (patch) | |
tree | 8b1edb7c8940d5e7981a17df0fa6fdfc8cf7b875 | |
parent | 1fc9ecfae63447f9109475c1b1ffb6a2974458d9 (diff) | |
download | CMake-6053ce22f69f58c9dc4db66dbfe62cdd8fbe2774.zip CMake-6053ce22f69f58c9dc4db66dbfe62cdd8fbe2774.tar.gz CMake-6053ce22f69f58c9dc4db66dbfe62cdd8fbe2774.tar.bz2 |
QtAutogen: Make uic work even when the source is in a subdir.
Modify the includedUis to store the path to the file which includes
the ui file. Reuse that path to generate the output file from the
uic process.
-rw-r--r-- | Source/cmQtAutoGenerators.cxx | 34 | ||||
-rw-r--r-- | Source/cmQtAutoGenerators.h | 12 | ||||
-rw-r--r-- | Tests/QtAutogen/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/QtAutogen/sub/uiconly.cpp (renamed from Tests/QtAutogen/uiconly.cpp) | 0 | ||||
-rw-r--r-- | Tests/QtAutogen/sub/uiconly.h (renamed from Tests/QtAutogen/uiconly.h) | 0 | ||||
-rw-r--r-- | Tests/QtAutogen/sub/uiconly.ui (renamed from Tests/QtAutogen/uiconly.ui) | 0 |
6 files changed, 28 insertions, 22 deletions
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx index cab59fe..7e44c26 100644 --- a/Source/cmQtAutoGenerators.cxx +++ b/Source/cmQtAutoGenerators.cxx @@ -1279,8 +1279,8 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile) const std::vector<std::string>& headerExtensions = makefile->GetHeaderExtensions(); - std::vector<std::string> includedUis; - std::vector<std::string> skippedUis; + std::map<std::string, std::string> includedUis; + std::map<std::string, std::string> skippedUis; std::vector<std::string> uicSkipped; cmSystemTools::ExpandListArgument(this->SkipUic, uicSkipped); @@ -1290,7 +1290,8 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile) { const bool skipUic = std::find(uicSkipped.begin(), uicSkipped.end(), *it) != uicSkipped.end(); - std::vector<std::string>& uiFiles = skipUic ? skippedUis : includedUis; + std::map<std::string, std::string>& uiFiles + = skipUic ? skippedUis : includedUis; const std::string &absFilename = *it; if (this->Verbose) { @@ -1350,11 +1351,12 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile) { this->GenerateMoc(it->first, it->second); } - for(std::vector<std::string>::const_iterator it = includedUis.begin(); + for(std::map<std::string, std::string>::const_iterator + it = includedUis.begin(); it != includedUis.end(); ++it) { - this->GenerateUi(*it); + this->GenerateUi(it->first, it->second); } if(!this->RccExecutable.empty()) @@ -1431,7 +1433,7 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile) void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::map<std::string, std::string>& includedMocs, - std::vector<std::string> &includedUis) + std::map<std::string, std::string> &includedUis) { cmsys::RegularExpression mocIncludeRegExp( "[\n][ \t]*#[ \t]*include[ \t]+" @@ -1619,7 +1621,7 @@ void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename, void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::map<std::string, std::string>& includedMocs, - std::vector<std::string>& includedUis) + std::map<std::string, std::string>& includedUis) { cmsys::RegularExpression mocIncludeRegExp( "[\n][ \t]*#[ \t]*include[ \t]+" @@ -1737,7 +1739,7 @@ void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename, void cmQtAutoGenerators::ParseForUic(const std::string& absFilename, - std::vector<std::string>& includedUis) + std::map<std::string, std::string>& includedUis) { if (this->UicExecutable.empty()) { @@ -1754,9 +1756,9 @@ void cmQtAutoGenerators::ParseForUic(const std::string& absFilename, } -void cmQtAutoGenerators::ParseForUic(const std::string&, +void cmQtAutoGenerators::ParseForUic(const std::string& absFilename, const std::string& contentsString, - std::vector<std::string>& includedUis) + std::map<std::string, std::string>& includedUis) { if (this->UicExecutable.empty()) { @@ -1768,6 +1770,9 @@ void cmQtAutoGenerators::ParseForUic(const std::string&, std::string::size_type matchOffset = 0; + const std::string absPath = cmsys::SystemTools::GetFilenamePath( + cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/'; + matchOffset = 0; if ((strstr(contentsString.c_str(), "ui_") != NULL) && (uiIncludeRegExp.find(contentsString))) @@ -1783,7 +1788,7 @@ void cmQtAutoGenerators::ParseForUic(const std::string&, // finding the correct header, so we need to remove the ui_ part basename = basename.substr(3); - includedUis.push_back(basename); + includedUis[absPath] = basename; matchOffset += uiIncludeRegExp.end(); } while(uiIncludeRegExp.find(contentsString.c_str() + matchOffset)); @@ -1831,7 +1836,7 @@ cmQtAutoGenerators::SearchHeadersForCppFile(const std::string& absFilename, void cmQtAutoGenerators::ParseHeaders(const std::set<std::string>& absHeaders, const std::map<std::string, std::string>& includedMocs, std::map<std::string, std::string>& notIncludedMocs, - std::vector<std::string>& includedUis) + std::map<std::string, std::string>& includedUis) { for(std::set<std::string>::const_iterator hIt=absHeaders.begin(); hIt!=absHeaders.end(); @@ -1939,7 +1944,8 @@ bool cmQtAutoGenerators::GenerateMoc(const std::string& sourceFile, return false; } -bool cmQtAutoGenerators::GenerateUi(const std::string& uiFileName) +bool cmQtAutoGenerators::GenerateUi(const std::string& path, + const std::string& uiFileName) { if (!cmsys::SystemTools::FileExists(this->Builddir.c_str(), false)) { @@ -1947,7 +1953,7 @@ bool cmQtAutoGenerators::GenerateUi(const std::string& uiFileName) } std::string ui_output_file = "ui_" + uiFileName + ".h"; - std::string ui_input_file = this->Srcdir + uiFileName + ".ui"; + std::string ui_input_file = path + uiFileName + ".ui"; int sourceNewerThanUi = 0; bool success = cmsys::SystemTools::FileTimeCompare(ui_input_file.c_str(), diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h index f66d02b..2840fbf 100644 --- a/Source/cmQtAutoGenerators.h +++ b/Source/cmQtAutoGenerators.h @@ -48,16 +48,16 @@ private: bool RunAutogen(cmMakefile* makefile); bool GenerateMoc(const std::string& sourceFile, const std::string& mocFileName); - bool GenerateUi(const std::string& uiFileName); + bool GenerateUi(const std::string& path, const std::string& uiFileName); bool GenerateQrc(); void ParseCppFile(const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::map<std::string, std::string>& includedMocs, - std::vector<std::string>& includedUis); + std::map<std::string, std::string>& includedUis); void StrictParseCppFile(const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::map<std::string, std::string>& includedMocs, - std::vector<std::string>& includedUis); + std::map<std::string, std::string>& includedUis); void SearchHeadersForCppFile(const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::set<std::string>& absHeaders); @@ -65,14 +65,14 @@ private: void ParseHeaders(const std::set<std::string>& absHeaders, const std::map<std::string, std::string>& includedMocs, std::map<std::string, std::string>& notIncludedMocs, - std::vector<std::string>& includedUis); + std::map<std::string, std::string>& includedUis); void ParseForUic(const std::string& fileName, const std::string& contentsString, - std::vector<std::string>& includedUis); + std::map<std::string, std::string>& includedUis); void ParseForUic(const std::string& fileName, - std::vector<std::string>& includedUis); + std::map<std::string, std::string>& includedUis); void Init(); diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt index 515bf5b..546ed02 100644 --- a/Tests/QtAutogen/CMakeLists.txt +++ b/Tests/QtAutogen/CMakeLists.txt @@ -88,6 +88,6 @@ target_link_libraries(empty no_link_language) add_library(no_link_language STATIC empty.h) set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE) -qtx_wrap_cpp(uicOnlyMoc uiconly.h) -add_executable(uiconly uiconly.cpp ${uicOnlyMoc}) +qtx_wrap_cpp(uicOnlyMoc sub/uiconly.h) +add_executable(uiconly sub/uiconly.cpp ${uicOnlyMoc}) target_link_libraries(uiconly ${QT_LIBRARIES}) diff --git a/Tests/QtAutogen/uiconly.cpp b/Tests/QtAutogen/sub/uiconly.cpp index cdb3318..cdb3318 100644 --- a/Tests/QtAutogen/uiconly.cpp +++ b/Tests/QtAutogen/sub/uiconly.cpp diff --git a/Tests/QtAutogen/uiconly.h b/Tests/QtAutogen/sub/uiconly.h index 9e21f82..9e21f82 100644 --- a/Tests/QtAutogen/uiconly.h +++ b/Tests/QtAutogen/sub/uiconly.h diff --git a/Tests/QtAutogen/uiconly.ui b/Tests/QtAutogen/sub/uiconly.ui index 13fb832..13fb832 100644 --- a/Tests/QtAutogen/uiconly.ui +++ b/Tests/QtAutogen/sub/uiconly.ui |