Autogen: Revert changes to generate moc/rcc in subdirectories
Revert these commits: * v3.6.0-rc1~134^2 Tests: QtAutogen: Same source name in different directories test, 2016-04-13 * v3.6.0-rc1~134^2~1 Autogen: Generate qrc_NAME.cpp files in subdirectories, 2016-04-19 * v3.6.0-rc1~134^2~2 Autogen: Generate not included moc files in subdirectories, 2016-04-19 They regress existing builds that depend on the paths/symbols generated previously. Another approach will be needed to solve the name collision problem they were intended to solve. Leave the error diagnostics for the colliding cases that were added in the same topic as the above commits because they provide a useful early failure in relevant cases. Fixes #16209.
This commit is contained in:
parent
e31084e657
commit
5e55d87bdc
|
@ -25,79 +25,6 @@
|
|||
#include "cmGlobalVisualStudioGenerator.h"
|
||||
#endif
|
||||
|
||||
static std::string GetAutogenTargetName(cmGeneratorTarget const* target)
|
||||
{
|
||||
std::string autogenTargetName = target->GetName();
|
||||
autogenTargetName += "_automoc";
|
||||
return autogenTargetName;
|
||||
}
|
||||
|
||||
static std::string GetAutogenTargetDir(cmGeneratorTarget const* target)
|
||||
{
|
||||
cmMakefile* makefile = target->Target->GetMakefile();
|
||||
std::string targetDir = makefile->GetCurrentBinaryDirectory();
|
||||
targetDir += makefile->GetCMakeInstance()->GetCMakeFilesDirectory();
|
||||
targetDir += "/";
|
||||
targetDir += GetAutogenTargetName(target);
|
||||
targetDir += ".dir/";
|
||||
return targetDir;
|
||||
}
|
||||
|
||||
static std::string GetAutogenTargetBuildDir(cmGeneratorTarget const* target)
|
||||
{
|
||||
cmMakefile* makefile = target->Target->GetMakefile();
|
||||
std::string targetDir = makefile->GetCurrentBinaryDirectory();
|
||||
targetDir += "/";
|
||||
targetDir += GetAutogenTargetName(target);
|
||||
targetDir += ".dir/";
|
||||
return targetDir;
|
||||
}
|
||||
|
||||
static std::string GetSourceRelativePath(cmGeneratorTarget const* target,
|
||||
const std::string& fileName)
|
||||
{
|
||||
std::string pathRel;
|
||||
// Test if the file is child to any of the known directories
|
||||
{
|
||||
const std::string fileNameReal = cmsys::SystemTools::GetRealPath(fileName);
|
||||
std::string parentDirectory;
|
||||
bool match(false);
|
||||
{
|
||||
std::string testDirs[4];
|
||||
{
|
||||
cmMakefile* makefile = target->Target->GetMakefile();
|
||||
testDirs[0] = makefile->GetCurrentSourceDirectory();
|
||||
testDirs[1] = makefile->GetCurrentBinaryDirectory();
|
||||
testDirs[2] = makefile->GetHomeDirectory();
|
||||
testDirs[3] = makefile->GetHomeOutputDirectory();
|
||||
}
|
||||
for (int ii = 0; ii != sizeof(testDirs) / sizeof(std::string); ++ii) {
|
||||
const ::std::string testDir =
|
||||
cmsys::SystemTools::GetRealPath(testDirs[ii]);
|
||||
if (!testDir.empty() &&
|
||||
cmsys::SystemTools::IsSubDirectory(fileNameReal, testDir)) {
|
||||
parentDirectory = testDir;
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Use root as fallback parent directory
|
||||
if (!match) {
|
||||
cmsys::SystemTools::SplitPathRootComponent(fileNameReal,
|
||||
&parentDirectory);
|
||||
}
|
||||
pathRel = cmsys::SystemTools::RelativePath(
|
||||
parentDirectory, cmsys::SystemTools::GetParentDirectory(fileNameReal));
|
||||
}
|
||||
// Sanitize relative path
|
||||
if (!pathRel.empty()) {
|
||||
pathRel += '/';
|
||||
cmSystemTools::ReplaceString(pathRel, "..", "__");
|
||||
}
|
||||
return pathRel;
|
||||
}
|
||||
|
||||
static void SetupSourceFiles(cmGeneratorTarget const* target,
|
||||
std::vector<std::string>& skipMoc,
|
||||
std::vector<std::string>& mocSources,
|
||||
|
@ -128,16 +55,13 @@ static void SetupSourceFiles(cmGeneratorTarget const* target,
|
|||
if (target->GetPropertyAsBool("AUTORCC")) {
|
||||
if (ext == "qrc" &&
|
||||
!cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC"))) {
|
||||
|
||||
std::string rcc_output_dir = GetAutogenTargetBuildDir(target);
|
||||
rcc_output_dir += GetSourceRelativePath(target, absFile);
|
||||
cmSystemTools::MakeDirectory(rcc_output_dir.c_str());
|
||||
|
||||
std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(absFile);
|
||||
|
||||
std::string rcc_output_dir = target->GetSupportDirectory();
|
||||
cmSystemTools::MakeDirectory(rcc_output_dir.c_str());
|
||||
std::string rcc_output_file = rcc_output_dir;
|
||||
rcc_output_file += "qrc_" + basename + ".cpp";
|
||||
rcc_output_file += "/qrc_" + basename + ".cpp";
|
||||
makefile->AppendProperty("ADDITIONAL_MAKE_CLEAN_FILES",
|
||||
rcc_output_file.c_str(), false);
|
||||
makefile->GetOrCreateSource(rcc_output_file, true);
|
||||
|
@ -441,6 +365,24 @@ static void MergeRccOptions(std::vector<std::string>& opts,
|
|||
opts.insert(opts.end(), extraOpts.begin(), extraOpts.end());
|
||||
}
|
||||
|
||||
std::string GetAutogenTargetName(cmGeneratorTarget const* target)
|
||||
{
|
||||
std::string autogenTargetName = target->GetName();
|
||||
autogenTargetName += "_automoc";
|
||||
return autogenTargetName;
|
||||
}
|
||||
|
||||
std::string GetAutogenTargetDir(cmGeneratorTarget const* target)
|
||||
{
|
||||
cmMakefile* makefile = target->Target->GetMakefile();
|
||||
std::string targetDir = makefile->GetCurrentBinaryDirectory();
|
||||
targetDir += makefile->GetCMakeInstance()->GetCMakeFilesDirectory();
|
||||
targetDir += "/";
|
||||
targetDir += GetAutogenTargetName(target);
|
||||
targetDir += ".dir/";
|
||||
return targetDir;
|
||||
}
|
||||
|
||||
static void copyTargetProperty(cmTarget* destinationTarget,
|
||||
cmTarget* sourceTarget,
|
||||
const std::string& propertyName)
|
||||
|
@ -803,18 +745,14 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
|
|||
if (target->GetPropertyAsBool("AUTORCC")) {
|
||||
if (ext == "qrc" &&
|
||||
!cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC"))) {
|
||||
std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(absFile);
|
||||
|
||||
{
|
||||
std::string rcc_output_dir = GetAutogenTargetBuildDir(target);
|
||||
rcc_output_dir += GetSourceRelativePath(target, absFile);
|
||||
cmSystemTools::MakeDirectory(rcc_output_dir.c_str());
|
||||
|
||||
std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(absFile);
|
||||
std::string rcc_output_file = rcc_output_dir;
|
||||
rcc_output_file += "qrc_" + basename + ".cpp";
|
||||
rcc_output.push_back(rcc_output_file);
|
||||
}
|
||||
std::string rcc_output_dir = target->GetSupportDirectory();
|
||||
cmSystemTools::MakeDirectory(rcc_output_dir.c_str());
|
||||
std::string rcc_output_file = rcc_output_dir;
|
||||
rcc_output_file += "/qrc_" + basename + ".cpp";
|
||||
rcc_output.push_back(rcc_output_file);
|
||||
|
||||
if (!cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"))) {
|
||||
if (qtMajorVersion == "5") {
|
||||
|
|
|
@ -358,12 +358,11 @@ void cmQtAutoGenerators::WriteOldMocDefinitionsFile(
|
|||
|
||||
void cmQtAutoGenerators::Init()
|
||||
{
|
||||
this->TargetBuildSubDir = this->TargetName;
|
||||
this->TargetBuildSubDir += ".dir/";
|
||||
|
||||
this->OutMocCppFilenameRel = this->TargetName;
|
||||
this->OutMocCppFilenameRel += ".cpp";
|
||||
this->OutMocCppFilenameAbs = this->Builddir + this->OutMocCppFilenameRel;
|
||||
|
||||
this->OutMocCppFilename = this->Builddir;
|
||||
this->OutMocCppFilename += this->OutMocCppFilenameRel;
|
||||
|
||||
std::vector<std::string> cdefList;
|
||||
cmSystemTools::ExpandListArgument(this->MocCompileDefinitionsStr, cdefList);
|
||||
|
@ -440,7 +439,7 @@ static std::string ReadAll(const std::string& filename)
|
|||
|
||||
bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
|
||||
{
|
||||
if (!cmsys::SystemTools::FileExists(this->OutMocCppFilenameAbs.c_str()) ||
|
||||
if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str()) ||
|
||||
(this->OldCompileSettingsStr != this->CurrentCompileSettingsStr)) {
|
||||
this->GenerateAll = true;
|
||||
}
|
||||
|
@ -948,13 +947,12 @@ void cmQtAutoGenerators::ParseHeaders(
|
|||
this->LogInfo(err.str());
|
||||
}
|
||||
|
||||
const std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName);
|
||||
|
||||
const std::string currentMoc = "moc_" + basename + ".cpp";
|
||||
std::string macroName;
|
||||
if (requiresMocing(contents, macroName)) {
|
||||
const std::string parentDir =
|
||||
this->TargetBuildSubDir + this->SourceRelativePath(headerName);
|
||||
const std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName);
|
||||
const std::string currentMoc = parentDir + "moc_" + basename + ".cpp";
|
||||
notIncludedMocs[headerName] = currentMoc;
|
||||
}
|
||||
}
|
||||
|
@ -1032,7 +1030,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
|
|||
// check if we even need to update _automoc.cpp
|
||||
if (!automocCppChanged) {
|
||||
// compare contents of the _automoc.cpp file
|
||||
const std::string oldContents = ReadAll(this->OutMocCppFilenameAbs);
|
||||
const std::string oldContents = ReadAll(this->OutMocCppFilename);
|
||||
if (oldContents == automocSource) {
|
||||
// nothing changed: don't touch the _automoc.cpp file
|
||||
if (this->Verbose) {
|
||||
|
@ -1055,7 +1053,7 @@ bool cmQtAutoGenerators::GenerateMocFiles(
|
|||
}
|
||||
{
|
||||
cmsys::ofstream outfile;
|
||||
outfile.open(this->OutMocCppFilenameAbs.c_str(), std::ios::trunc);
|
||||
outfile.open(this->OutMocCppFilename.c_str(), std::ios::trunc);
|
||||
outfile << automocSource;
|
||||
outfile.close();
|
||||
}
|
||||
|
@ -1264,10 +1262,8 @@ bool cmQtAutoGenerators::GenerateQrcFiles()
|
|||
if (ext == ".qrc") {
|
||||
std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(*si);
|
||||
std::string qrcOutputFile = this->TargetBuildSubDir +
|
||||
this->SourceRelativePath(*si) + "qrc_" + basename + ".cpp";
|
||||
// std::string qrcOutputFile = "CMakeFiles/" + this->OriginTargetName
|
||||
// + ".dir/qrc_" + basename + ".cpp";
|
||||
std::string qrcOutputFile = "CMakeFiles/" + this->OriginTargetName +
|
||||
".dir/qrc_" + basename + ".cpp";
|
||||
qrcGenMap[*si] = qrcOutputFile;
|
||||
}
|
||||
}
|
||||
|
@ -1302,10 +1298,8 @@ bool cmQtAutoGenerators::GenerateQrcFiles()
|
|||
bool cmQtAutoGenerators::GenerateQrc(const std::string& qrcInputFile,
|
||||
const std::string& qrcOutputFile)
|
||||
{
|
||||
std::string relName = this->SourceRelativePath(qrcInputFile);
|
||||
std::replace(relName.begin(), relName.end(), '/', '_');
|
||||
relName += cmsys::SystemTools::GetFilenameWithoutLastExtension(qrcInputFile);
|
||||
|
||||
const std::string basename =
|
||||
cmsys::SystemTools::GetFilenameWithoutLastExtension(qrcInputFile);
|
||||
const ::std::string qrcBuildFile = this->Builddir + qrcOutputFile;
|
||||
|
||||
int sourceNewerThanQrc = 0;
|
||||
|
@ -1332,7 +1326,7 @@ bool cmQtAutoGenerators::GenerateQrc(const std::string& qrcInputFile,
|
|||
}
|
||||
|
||||
command.push_back("-name");
|
||||
command.push_back(relName);
|
||||
command.push_back(basename);
|
||||
command.push_back("-o");
|
||||
command.push_back(qrcBuildFile);
|
||||
command.push_back(qrcInputFile);
|
||||
|
@ -1357,49 +1351,6 @@ bool cmQtAutoGenerators::GenerateQrc(const std::string& qrcInputFile,
|
|||
return true;
|
||||
}
|
||||
|
||||
std::string cmQtAutoGenerators::SourceRelativePath(const std::string& filename)
|
||||
{
|
||||
std::string pathRel;
|
||||
|
||||
// Test if the file is child to any of the known directories
|
||||
{
|
||||
std::string fileNameReal = cmsys::SystemTools::GetRealPath(filename);
|
||||
std::string parentDirectory;
|
||||
bool match(false);
|
||||
{
|
||||
const ::std::string* testDirs[4];
|
||||
testDirs[0] = &(this->Srcdir);
|
||||
testDirs[1] = &(this->Builddir);
|
||||
testDirs[2] = &(this->ProjectSourceDir);
|
||||
testDirs[3] = &(this->ProjectBinaryDir);
|
||||
for (int ii = 0; ii != sizeof(testDirs) / sizeof(const ::std::string*);
|
||||
++ii) {
|
||||
const ::std::string testDir =
|
||||
cmsys::SystemTools::GetRealPath(*(testDirs[ii]));
|
||||
if (cmsys::SystemTools::IsSubDirectory(fileNameReal, testDir)) {
|
||||
parentDirectory = testDir;
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Use root as fallback parent directory
|
||||
if (!match) {
|
||||
cmsys::SystemTools::SplitPathRootComponent(fileNameReal,
|
||||
&parentDirectory);
|
||||
}
|
||||
pathRel = cmsys::SystemTools::RelativePath(
|
||||
parentDirectory, cmsys::SystemTools::GetParentDirectory(fileNameReal));
|
||||
}
|
||||
|
||||
// Sanitize relative path
|
||||
if (!pathRel.empty()) {
|
||||
pathRel += '/';
|
||||
cmSystemTools::ReplaceString(pathRel, "..", "__");
|
||||
}
|
||||
return pathRel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Collects name collisions as output/input pairs
|
||||
* @return True if there were collisions
|
||||
|
|
|
@ -83,8 +83,6 @@ private:
|
|||
|
||||
void Init();
|
||||
|
||||
std::string SourceRelativePath(const std::string& filename);
|
||||
|
||||
bool NameCollisionTest(const std::map<std::string, std::string>& genFiles,
|
||||
std::multimap<std::string, std::string>& collisions);
|
||||
void NameCollisionLog(
|
||||
|
@ -125,9 +123,8 @@ private:
|
|||
std::string CurrentCompileSettingsStr;
|
||||
std::string OldCompileSettingsStr;
|
||||
|
||||
std::string TargetBuildSubDir;
|
||||
std::string OutMocCppFilenameRel;
|
||||
std::string OutMocCppFilenameAbs;
|
||||
std::string OutMocCppFilename;
|
||||
std::list<std::string> MocIncludes;
|
||||
std::list<std::string> MocDefinitions;
|
||||
std::vector<std::string> MocOptions;
|
||||
|
|
|
@ -110,10 +110,6 @@ set_target_properties(
|
|||
AUTOMOC TRUE
|
||||
)
|
||||
|
||||
# Test AUTOMOC and AUTORCC on source files with the same name
|
||||
# but in different subdirectories
|
||||
add_subdirectory(same_name)
|
||||
|
||||
include(GenerateExportHeader)
|
||||
# The order is relevant here. B depends on A, and B headers depend on A
|
||||
# headers both subdirectories use CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE and we
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
# Test AUTOMOC and AUTORCC on source files with the same name
|
||||
# but in different subdirectories
|
||||
|
||||
add_executable(same_name
|
||||
aaa/bbb/item.cpp
|
||||
aaa/bbb/data.qrc
|
||||
aaa/item.cpp
|
||||
aaa/data.qrc
|
||||
bbb/aaa/item.cpp
|
||||
bbb/aaa/data.qrc
|
||||
bbb/item.cpp
|
||||
bbb/data.qrc
|
||||
ccc/item.cpp
|
||||
ccc/data.qrc
|
||||
main.cpp
|
||||
data.qrc
|
||||
)
|
||||
target_include_directories(same_name PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||
target_link_libraries(same_name ${QT_LIBRARIES})
|
||||
set_target_properties( same_name PROPERTIES AUTOMOC TRUE AUTORCC TRUE )
|
|
@ -1,6 +0,0 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="aaa/bbb">
|
||||
<file>item.hpp</file>
|
||||
<file>item.cpp</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,10 +0,0 @@
|
|||
#include "item.hpp"
|
||||
|
||||
namespace aaa {
|
||||
namespace bbb {
|
||||
|
||||
void Item::go()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
#ifndef SDA_SDB_ITEM_HPP
|
||||
#define SDA_SDB_ITEM_HPP
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace aaa {
|
||||
namespace bbb {
|
||||
|
||||
class Item : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_SLOT
|
||||
void go();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,6 +0,0 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="aaa/">
|
||||
<file>item.hpp</file>
|
||||
<file>item.cpp</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,8 +0,0 @@
|
|||
#include "item.hpp"
|
||||
|
||||
namespace aaa {
|
||||
|
||||
void Item::go()
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef SDA_ITEM_HPP
|
||||
#define SDA_ITEM_HPP
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace aaa {
|
||||
|
||||
class Item : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_SLOT
|
||||
void go();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,6 +0,0 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="bbb/aaa/">
|
||||
<file>item.hpp</file>
|
||||
<file>item.cpp</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,10 +0,0 @@
|
|||
#include "item.hpp"
|
||||
|
||||
namespace bbb {
|
||||
namespace aaa {
|
||||
|
||||
void Item::go()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
#ifndef SDB_SDA_ITEM_HPP
|
||||
#define SDB_SDA_ITEM_HPP
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace bbb {
|
||||
namespace aaa {
|
||||
|
||||
class Item : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_SLOT
|
||||
void go();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,6 +0,0 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="bbb/">
|
||||
<file>item.hpp</file>
|
||||
<file>item.cpp</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,8 +0,0 @@
|
|||
#include "item.hpp"
|
||||
|
||||
namespace bbb {
|
||||
|
||||
void Item::go()
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef SDB_ITEM_HPP
|
||||
#define SDB_ITEM_HPP
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace bbb {
|
||||
|
||||
class Item : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_SLOT
|
||||
void go();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,6 +0,0 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="ccc/">
|
||||
<file>item.hpp</file>
|
||||
<file>item.cpp</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,23 +0,0 @@
|
|||
#include "item.hpp"
|
||||
|
||||
namespace ccc {
|
||||
|
||||
void Item::go()
|
||||
{
|
||||
}
|
||||
|
||||
class MocTest : public QObject
|
||||
{
|
||||
Q_OBJECT;
|
||||
Q_SLOT
|
||||
void go();
|
||||
};
|
||||
|
||||
void MocTest::go()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
// Include own moc files
|
||||
#include "item.moc"
|
||||
#include "moc_item.cpp"
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef SDC_ITEM_HPP
|
||||
#define SDC_ITEM_HPP
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace ccc {
|
||||
|
||||
class Item : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_SLOT
|
||||
void go();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>main.cpp</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,16 +0,0 @@
|
|||
#include "aaa/bbb/item.hpp"
|
||||
#include "aaa/item.hpp"
|
||||
#include "bbb/aaa/item.hpp"
|
||||
#include "bbb/item.hpp"
|
||||
#include "ccc/item.hpp"
|
||||
|
||||
int main(int argv, char** args)
|
||||
{
|
||||
// Object instances
|
||||
::aaa::Item aaa_item;
|
||||
::aaa::bbb::Item aaa_bbb_item;
|
||||
::bbb::Item bbb_item;
|
||||
::bbb::aaa::Item bbb_aaa_item;
|
||||
::ccc::Item ccc_item;
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue