Commit e145cfe2 authored by Brad King's avatar Brad King 💬 Committed by Kitware Robot
Browse files

Merge topic 'autogen_source_group'

f89678f6 Autogen: Add AUTOGEN_SOURCE_GROUP release notes
850eb734 Autogen: Add AUTOGEN_SOURCE_GROUP documentation
af1354d6 Autogen: Add AUTOGEN_SOURCE_GROUP support
379cf11b

 Autogen: Add generator type enum
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !586
parents e22dbdb7 f89678f6
......@@ -16,8 +16,11 @@ Properties of Global Scope
:maxdepth: 1
/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS
/prop_gbl/AUTOGEN_SOURCE_GROUP
/prop_gbl/AUTOGEN_TARGETS_FOLDER
/prop_gbl/AUTOMOC_SOURCE_GROUP
/prop_gbl/AUTOMOC_TARGETS_FOLDER
/prop_gbl/AUTORCC_SOURCE_GROUP
/prop_gbl/CMAKE_C_KNOWN_FEATURES
/prop_gbl/CMAKE_CXX_KNOWN_FEATURES
/prop_gbl/DEBUG_CONFIGURATIONS
......
AUTOGEN_SOURCE_GROUP
--------------------
Name of the :command:`source_group` for :prop_tgt:`AUTOMOC` and
:prop_tgt:`AUTORCC` generated files.
Files generated by :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTORCC` are not always
known at configure time and therefore can't be passed to
:command:`source_group`.
:prop_gbl:`AUTOGEN_SOURCE_GROUP` an be used instead to generate or select
a source group for :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTORCC` generated files.
For :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTORCC` specific overrides see
:prop_gbl:`AUTOMOC_SOURCE_GROUP` and :prop_gbl:`AUTORCC_SOURCE_GROUP`
respectively.
AUTOGEN_TARGETS_FOLDER
----------------------
Name of :prop_tgt:`FOLDER` for ``*_autogen`` targets that are added automatically by
CMake for targets for which :prop_tgt:`AUTOMOC` is enabled.
Name of :prop_tgt:`FOLDER` for ``*_autogen`` targets that are added
automatically by CMake for targets for which :prop_tgt:`AUTOMOC` is enabled.
If not set, CMake uses the :prop_tgt:`FOLDER` property of the parent target as a
default value for this property. See also the documentation for the
......
AUTOMOC_SOURCE_GROUP
--------------------
Name of the :command:`source_group` for :prop_tgt:`AUTOMOC` generated files.
When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
files generated by :prop_tgt:`AUTOMOC`.
AUTORCC_SOURCE_GROUP
--------------------
Name of the :command:`source_group` for :prop_tgt:`AUTORCC` generated files.
When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
files generated by :prop_tgt:`AUTORCC`.
......@@ -57,6 +57,9 @@ See the documentation for this variable for more details.
The global property :prop_gbl:`AUTOGEN_TARGETS_FOLDER` can be used to group the
automoc targets together in an IDE, e.g. in MSVS.
The global property :prop_gbl:`AUTOGEN_SOURCE_GROUP` can be used to group
files generated by :prop_tgt:`AUTOMOC` together in an IDE, e.g. in MSVS.
Additional ``moc`` dependency file names can be extracted from source code
by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
......
......@@ -19,6 +19,9 @@ Additional command line options for rcc can be set via the
The global property :prop_gbl:`AUTOGEN_TARGETS_FOLDER` can be used to group
the autorcc targets together in an IDE, e.g. in MSVS.
The global property :prop_gbl:`AUTOGEN_SOURCE_GROUP` can be used to group
files generated by :prop_tgt:`AUTORCC` together in an IDE, e.g. in MSVS.
When there are multiple ``.qrc`` files with the same name, CMake will
generate unspecified unique names for ``rcc``. Therefore if
``Q_INIT_RESOURCE()`` or ``Q_CLEANUP_RESOURCE()`` need to be used the
......
AutoGen source group
--------------------
* Global properties :prop_gbl:`AUTOGEN_SOURCE_GROUP`,
:prop_gbl:`AUTOMOC_SOURCE_GROUP` and
:prop_gbl:`AUTORCC_SOURCE_GROUP` were
introduced to allow files generated by :prop_tgt:`AUTOMOC` or
:prop_tgt:`AUTORCC` to be placed in a :command:`source_group`.
......@@ -16,6 +16,13 @@ class cmQtAutoGeneratorCommon
public:
static const char* listSep;
enum GeneratorType
{
MOC,
UIC,
RCC
};
public:
/// @brief Returns a the string escaped and enclosed in quotes
///
......
......@@ -134,6 +134,61 @@ static void AddDefinitionEscaped(cmMakefile* makefile, const char* key,
key, cmOutputConverter::EscapeForCMake(cmJoin(values, ";")).c_str());
}
static bool AddToSourceGroup(cmMakefile* makefile, const std::string& fileName,
cmQtAutoGeneratorCommon::GeneratorType genType)
{
cmSourceGroup* sourceGroup = CM_NULLPTR;
// Acquire source group
{
const char* groupName = CM_NULLPTR;
// Use generator specific group name
switch (genType) {
case cmQtAutoGeneratorCommon::MOC:
groupName =
makefile->GetState()->GetGlobalProperty("AUTOMOC_SOURCE_GROUP");
break;
case cmQtAutoGeneratorCommon::RCC:
groupName =
makefile->GetState()->GetGlobalProperty("AUTORCC_SOURCE_GROUP");
break;
default:
break;
}
// Use default group name on demand
if ((groupName == CM_NULLPTR) || (*groupName == 0)) {
groupName =
makefile->GetState()->GetGlobalProperty("AUTOGEN_SOURCE_GROUP");
}
// Generate a source group on demand
if ((groupName != CM_NULLPTR) && (*groupName != 0)) {
{
const char* delimiter =
makefile->GetDefinition("SOURCE_GROUP_DELIMITER");
if (delimiter == CM_NULLPTR) {
delimiter = "\\";
}
std::vector<std::string> folders =
cmSystemTools::tokenize(groupName, delimiter);
sourceGroup = makefile->GetSourceGroup(folders);
if (sourceGroup == CM_NULLPTR) {
makefile->AddSourceGroup(folders);
sourceGroup = makefile->GetSourceGroup(folders);
}
}
if (sourceGroup == CM_NULLPTR) {
cmSystemTools::Error(
"Autogen: Could not create or find source group: ",
cmQtAutoGeneratorCommon::Quoted(groupName).c_str());
return false;
}
}
}
if (sourceGroup != CM_NULLPTR) {
sourceGroup->AddGroupFile(fileName);
}
return true;
}
static void AcquireScanFiles(cmGeneratorTarget const* target,
std::vector<std::string>& mocUicSources,
std::vector<std::string>& mocUicHeaders,
......@@ -531,11 +586,14 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenSources(
{
if (target->GetPropertyAsBool("AUTOMOC")) {
cmMakefile* makefile = target->Target->GetMakefile();
const std::string mocCppFile =
GetAutogenTargetBuildDir(target) + "moc_compilation.cpp";
cmSourceFile* gf = makefile->GetOrCreateSource(mocCppFile, true);
gf->SetProperty("SKIP_AUTOGEN", "On");
std::string mocCppFile = GetAutogenTargetBuildDir(target);
mocCppFile += "moc_compilation.cpp";
{
cmSourceFile* gFile = makefile->GetOrCreateSource(mocCppFile, true);
gFile->SetProperty("SKIP_AUTOGEN", "On");
}
target->AddSource(mocCppFile);
AddToSourceGroup(makefile, mocCppFile, cmQtAutoGeneratorCommon::MOC);
}
}
......@@ -700,9 +758,12 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
autogenProvides.push_back(rccOut);
// Add rcc output file to origin target sources
cmSourceFile* gf = makefile->GetOrCreateSource(rccOut, true);
gf->SetProperty("SKIP_AUTOGEN", "On");
{
cmSourceFile* gFile = makefile->GetOrCreateSource(rccOut, true);
gFile->SetProperty("SKIP_AUTOGEN", "On");
}
target->AddSource(rccOut);
AddToSourceGroup(makefile, rccOut, cmQtAutoGeneratorCommon::RCC);
}
if (PropertyEnabled(sf, "GENERATED")) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment