Autogen: Parse enabled feature configuration only

This commit is contained in:
Sebastian Holtermann
2017-02-27 13:48:08 +01:00
committed by Brad King
parent ac77fa35c0
commit 154d8339f7

View File

@@ -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,137 +359,139 @@ 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;
if (this->RccEnabled()) {
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;
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;
}
}
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);
// 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;
}
}
}
{
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;
}
}
// - Flags
this->IncludeProjectDirsBefore =
makefile->IsOn("AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE");
this->MocRelaxedMode = makefile->IsOn("AM_MOC_RELAXED_MODE");
return true;
}