mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 16:32:14 -06:00
Autogen: Restore AUTOUIC lookup paths from 3.8.2
When encountering an `#include "<PATH>ui_<BASE>.h"` statement, search for `<BASE>.ui` in - <SOURCE_DIR>/<BASE>.ui - <SOURCE_DIR>/<PATH><BASE>.ui - <AUTOUIC_SEARCH_PATH>/<BASE>.ui - <AUTOUIC_SEARCH_PATH>/<PATH><BASE>.ui In CMake 3.8.2 the lookup list was - <SOURCE_DIR>/<BASE>.ui In CMake 3.9.[01] the lookup list was - <SOURCE_DIR>/<PATH><BASE.ui> - <AUTOUIC_SEARCH_PATH>/<PATH><BASE>.ui Closes #17168
This commit is contained in:
@@ -1446,31 +1446,62 @@ bool cmQtAutoGenerators::MocGenerateFile(
|
||||
|
||||
bool cmQtAutoGenerators::UicFindIncludedFile(std::string& absFile,
|
||||
const std::string& sourceFile,
|
||||
const std::string& includeString)
|
||||
const std::string& searchPath,
|
||||
const std::string& searchFile)
|
||||
{
|
||||
bool success = false;
|
||||
// Search in vicinity of the source
|
||||
std::vector<std::string> testFiles;
|
||||
// Collect search paths list
|
||||
{
|
||||
std::string testPath = SubDirPrefix(sourceFile);
|
||||
testPath += includeString;
|
||||
if (cmsys::SystemTools::FileExists(testPath.c_str())) {
|
||||
absFile = cmsys::SystemTools::GetRealPath(testPath);
|
||||
success = true;
|
||||
const std::string searchFileFull = searchPath + searchFile;
|
||||
// Vicinity of the source
|
||||
{
|
||||
const std::string sourcePath = SubDirPrefix(sourceFile);
|
||||
testFiles.push_back(sourcePath + searchFile);
|
||||
if (!searchPath.empty()) {
|
||||
testFiles.push_back(sourcePath + searchFileFull);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
// AUTOUIC search paths
|
||||
if (!this->UicSearchPaths.empty()) {
|
||||
for (std::vector<std::string>::const_iterator iit =
|
||||
this->UicSearchPaths.begin();
|
||||
iit != this->UicSearchPaths.end(); ++iit) {
|
||||
testFiles.push_back(*iit + "/" + searchFile);
|
||||
}
|
||||
if (!searchPath.empty()) {
|
||||
for (std::vector<std::string>::const_iterator iit =
|
||||
this->UicSearchPaths.begin();
|
||||
iit != this->UicSearchPaths.end(); ++iit) {
|
||||
testFiles.push_back(*iit + "/" + searchFileFull);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Search for the .ui file!
|
||||
for (std::vector<std::string>::const_iterator iit = testFiles.begin();
|
||||
iit != testFiles.end(); ++iit) {
|
||||
const std::string& testFile = *iit;
|
||||
if (cmsys::SystemTools::FileExists(testFile.c_str())) {
|
||||
absFile = cmsys::SystemTools::GetRealPath(testFile);
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Log error
|
||||
if (!success) {
|
||||
std::ostringstream ost;
|
||||
ost << "AutoUic: Error: " << Quoted(sourceFile) << "\n";
|
||||
ost << "Could not find " << Quoted(searchFile) << " in\n";
|
||||
for (std::vector<std::string>::const_iterator iit = testFiles.begin();
|
||||
iit != testFiles.end(); ++iit) {
|
||||
ost << " " << Quoted(*iit) << "\n";
|
||||
}
|
||||
this->LogError(ost.str());
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
@@ -1500,16 +1531,14 @@ bool cmQtAutoGenerators::UicGenerateAll(
|
||||
const std::string uiBasePath = SubDirPrefix(*uit);
|
||||
const std::string uiBaseName =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(*uit).substr(3);
|
||||
const std::string searchFileName = uiBasePath + uiBaseName + ".ui";
|
||||
const std::string uiFileName = uiBaseName + ".ui";
|
||||
std::string uiInputFile;
|
||||
if (UicFindIncludedFile(uiInputFile, source, searchFileName)) {
|
||||
if (UicFindIncludedFile(uiInputFile, source, uiBasePath, uiFileName)) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,8 @@ private:
|
||||
|
||||
// -- Uic file generation
|
||||
bool UicFindIncludedFile(std::string& absFile, const std::string& sourceFile,
|
||||
const std::string& includeString);
|
||||
const std::string& searchPath,
|
||||
const std::string& searchFile);
|
||||
bool UicGenerateAll(
|
||||
const std::map<std::string, std::vector<std::string> >& includedUis);
|
||||
bool UicGenerateFile(const std::string& realName,
|
||||
|
||||
Reference in New Issue
Block a user