summaryrefslogtreecommitdiffstats
path: root/Source/cmQtAutoGenerators.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2014-02-02 12:19:27 (GMT)
committerBrad King <brad.king@kitware.com>2014-02-04 18:21:43 (GMT)
commit6053ce22f69f58c9dc4db66dbfe62cdd8fbe2774 (patch)
tree8b1edb7c8940d5e7981a17df0fa6fdfc8cf7b875 /Source/cmQtAutoGenerators.cxx
parent1fc9ecfae63447f9109475c1b1ffb6a2974458d9 (diff)
downloadCMake-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.
Diffstat (limited to 'Source/cmQtAutoGenerators.cxx')
-rw-r--r--Source/cmQtAutoGenerators.cxx34
1 files changed, 20 insertions, 14 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(),