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.
This commit is contained in:
parent
1fc9ecfae6
commit
6053ce22f6
@ -1279,8 +1279,8 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
|
|||||||
const std::vector<std::string>& headerExtensions =
|
const std::vector<std::string>& headerExtensions =
|
||||||
makefile->GetHeaderExtensions();
|
makefile->GetHeaderExtensions();
|
||||||
|
|
||||||
std::vector<std::string> includedUis;
|
std::map<std::string, std::string> includedUis;
|
||||||
std::vector<std::string> skippedUis;
|
std::map<std::string, std::string> skippedUis;
|
||||||
std::vector<std::string> uicSkipped;
|
std::vector<std::string> uicSkipped;
|
||||||
cmSystemTools::ExpandListArgument(this->SkipUic, 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)
|
const bool skipUic = std::find(uicSkipped.begin(), uicSkipped.end(), *it)
|
||||||
!= uicSkipped.end();
|
!= 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;
|
const std::string &absFilename = *it;
|
||||||
if (this->Verbose)
|
if (this->Verbose)
|
||||||
{
|
{
|
||||||
@ -1350,11 +1351,12 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
|
|||||||
{
|
{
|
||||||
this->GenerateMoc(it->first, it->second);
|
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 != includedUis.end();
|
||||||
++it)
|
++it)
|
||||||
{
|
{
|
||||||
this->GenerateUi(*it);
|
this->GenerateUi(it->first, it->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!this->RccExecutable.empty())
|
if(!this->RccExecutable.empty())
|
||||||
@ -1431,7 +1433,7 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
|
|||||||
void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
|
void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
|
||||||
const std::vector<std::string>& headerExtensions,
|
const std::vector<std::string>& headerExtensions,
|
||||||
std::map<std::string, std::string>& includedMocs,
|
std::map<std::string, std::string>& includedMocs,
|
||||||
std::vector<std::string> &includedUis)
|
std::map<std::string, std::string> &includedUis)
|
||||||
{
|
{
|
||||||
cmsys::RegularExpression mocIncludeRegExp(
|
cmsys::RegularExpression mocIncludeRegExp(
|
||||||
"[\n][ \t]*#[ \t]*include[ \t]+"
|
"[\n][ \t]*#[ \t]*include[ \t]+"
|
||||||
@ -1619,7 +1621,7 @@ void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
|
|||||||
void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
|
void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
|
||||||
const std::vector<std::string>& headerExtensions,
|
const std::vector<std::string>& headerExtensions,
|
||||||
std::map<std::string, std::string>& includedMocs,
|
std::map<std::string, std::string>& includedMocs,
|
||||||
std::vector<std::string>& includedUis)
|
std::map<std::string, std::string>& includedUis)
|
||||||
{
|
{
|
||||||
cmsys::RegularExpression mocIncludeRegExp(
|
cmsys::RegularExpression mocIncludeRegExp(
|
||||||
"[\n][ \t]*#[ \t]*include[ \t]+"
|
"[\n][ \t]*#[ \t]*include[ \t]+"
|
||||||
@ -1737,7 +1739,7 @@ void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
|
|||||||
|
|
||||||
|
|
||||||
void cmQtAutoGenerators::ParseForUic(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())
|
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,
|
const std::string& contentsString,
|
||||||
std::vector<std::string>& includedUis)
|
std::map<std::string, std::string>& includedUis)
|
||||||
{
|
{
|
||||||
if (this->UicExecutable.empty())
|
if (this->UicExecutable.empty())
|
||||||
{
|
{
|
||||||
@ -1768,6 +1770,9 @@ void cmQtAutoGenerators::ParseForUic(const std::string&,
|
|||||||
|
|
||||||
std::string::size_type matchOffset = 0;
|
std::string::size_type matchOffset = 0;
|
||||||
|
|
||||||
|
const std::string absPath = cmsys::SystemTools::GetFilenamePath(
|
||||||
|
cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/';
|
||||||
|
|
||||||
matchOffset = 0;
|
matchOffset = 0;
|
||||||
if ((strstr(contentsString.c_str(), "ui_") != NULL)
|
if ((strstr(contentsString.c_str(), "ui_") != NULL)
|
||||||
&& (uiIncludeRegExp.find(contentsString)))
|
&& (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
|
// finding the correct header, so we need to remove the ui_ part
|
||||||
basename = basename.substr(3);
|
basename = basename.substr(3);
|
||||||
|
|
||||||
includedUis.push_back(basename);
|
includedUis[absPath] = basename;
|
||||||
|
|
||||||
matchOffset += uiIncludeRegExp.end();
|
matchOffset += uiIncludeRegExp.end();
|
||||||
} while(uiIncludeRegExp.find(contentsString.c_str() + matchOffset));
|
} 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,
|
void cmQtAutoGenerators::ParseHeaders(const std::set<std::string>& absHeaders,
|
||||||
const std::map<std::string, std::string>& includedMocs,
|
const std::map<std::string, std::string>& includedMocs,
|
||||||
std::map<std::string, std::string>& notIncludedMocs,
|
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();
|
for(std::set<std::string>::const_iterator hIt=absHeaders.begin();
|
||||||
hIt!=absHeaders.end();
|
hIt!=absHeaders.end();
|
||||||
@ -1939,7 +1944,8 @@ bool cmQtAutoGenerators::GenerateMoc(const std::string& sourceFile,
|
|||||||
return false;
|
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))
|
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_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;
|
int sourceNewerThanUi = 0;
|
||||||
bool success = cmsys::SystemTools::FileTimeCompare(ui_input_file.c_str(),
|
bool success = cmsys::SystemTools::FileTimeCompare(ui_input_file.c_str(),
|
||||||
|
@ -48,16 +48,16 @@ private:
|
|||||||
bool RunAutogen(cmMakefile* makefile);
|
bool RunAutogen(cmMakefile* makefile);
|
||||||
bool GenerateMoc(const std::string& sourceFile,
|
bool GenerateMoc(const std::string& sourceFile,
|
||||||
const std::string& mocFileName);
|
const std::string& mocFileName);
|
||||||
bool GenerateUi(const std::string& uiFileName);
|
bool GenerateUi(const std::string& path, const std::string& uiFileName);
|
||||||
bool GenerateQrc();
|
bool GenerateQrc();
|
||||||
void ParseCppFile(const std::string& absFilename,
|
void ParseCppFile(const std::string& absFilename,
|
||||||
const std::vector<std::string>& headerExtensions,
|
const std::vector<std::string>& headerExtensions,
|
||||||
std::map<std::string, std::string>& includedMocs,
|
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,
|
void StrictParseCppFile(const std::string& absFilename,
|
||||||
const std::vector<std::string>& headerExtensions,
|
const std::vector<std::string>& headerExtensions,
|
||||||
std::map<std::string, std::string>& includedMocs,
|
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,
|
void SearchHeadersForCppFile(const std::string& absFilename,
|
||||||
const std::vector<std::string>& headerExtensions,
|
const std::vector<std::string>& headerExtensions,
|
||||||
std::set<std::string>& absHeaders);
|
std::set<std::string>& absHeaders);
|
||||||
@ -65,14 +65,14 @@ private:
|
|||||||
void ParseHeaders(const std::set<std::string>& absHeaders,
|
void ParseHeaders(const std::set<std::string>& absHeaders,
|
||||||
const std::map<std::string, std::string>& includedMocs,
|
const std::map<std::string, std::string>& includedMocs,
|
||||||
std::map<std::string, std::string>& notIncludedMocs,
|
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,
|
void ParseForUic(const std::string& fileName,
|
||||||
const std::string& contentsString,
|
const std::string& contentsString,
|
||||||
std::vector<std::string>& includedUis);
|
std::map<std::string, std::string>& includedUis);
|
||||||
|
|
||||||
void ParseForUic(const std::string& fileName,
|
void ParseForUic(const std::string& fileName,
|
||||||
std::vector<std::string>& includedUis);
|
std::map<std::string, std::string>& includedUis);
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
@ -88,6 +88,6 @@ target_link_libraries(empty no_link_language)
|
|||||||
add_library(no_link_language STATIC empty.h)
|
add_library(no_link_language STATIC empty.h)
|
||||||
set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE)
|
set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE)
|
||||||
|
|
||||||
qtx_wrap_cpp(uicOnlyMoc uiconly.h)
|
qtx_wrap_cpp(uicOnlyMoc sub/uiconly.h)
|
||||||
add_executable(uiconly uiconly.cpp ${uicOnlyMoc})
|
add_executable(uiconly sub/uiconly.cpp ${uicOnlyMoc})
|
||||||
target_link_libraries(uiconly ${QT_LIBRARIES})
|
target_link_libraries(uiconly ${QT_LIBRARIES})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user