Skip to content

Commit

Permalink
Merge topic 'modernize-memory-management'
Browse files Browse the repository at this point in the history
a009602 GlobalGenerator family: modernize memory management

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4181
  • Loading branch information
MarkaPola authored and kwrobot committed Jan 8, 2020
2 parents 75dfba2 + a009602 commit d020ed9
Show file tree
Hide file tree
Showing 39 changed files with 293 additions and 254 deletions.
4 changes: 2 additions & 2 deletions Source/CPack/cmCPackGenerator.cxx
Expand Up @@ -616,9 +616,9 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
buildConfigs.emplace_back();
}

std::unique_ptr<cmGlobalGenerator> globalGenerator(
std::unique_ptr<cmGlobalGenerator> globalGenerator =
this->MakefileMap->GetCMakeInstance()->CreateGlobalGenerator(
cmakeGenerator));
cmakeGenerator);
if (!globalGenerator) {
cmCPackLogger(cmCPackLog::LOG_ERROR,
"Specified package generator not found. "
Expand Down
8 changes: 4 additions & 4 deletions Source/CTest/cmCTestBuildAndTestHandler.cxx
Expand Up @@ -215,11 +215,11 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)

if (this->BuildNoCMake) {
// Make the generator available for the Build call below.
cmGlobalGenerator* gen = cm.CreateGlobalGenerator(this->BuildGenerator);
cm.SetGlobalGenerator(gen);
cm.SetGlobalGenerator(cm.CreateGlobalGenerator(this->BuildGenerator));
if (!this->BuildGeneratorPlatform.empty()) {
cmMakefile mf(gen, cm.GetCurrentSnapshot());
if (!gen->SetGeneratorPlatform(this->BuildGeneratorPlatform, &mf)) {
cmMakefile mf(cm.GetGlobalGenerator(), cm.GetCurrentSnapshot());
if (!cm.GetGlobalGenerator()->SetGeneratorPlatform(
this->BuildGeneratorPlatform, &mf)) {
return 1;
}
}
Expand Down
11 changes: 2 additions & 9 deletions Source/CTest/cmCTestBuildCommand.cxx
Expand Up @@ -29,13 +29,7 @@ void cmCTestBuildCommand::BindArguments()
this->Bind("PROJECT_NAME"_s, this->ProjectName);
}

cmCTestBuildCommand::~cmCTestBuildCommand()
{
if (this->GlobalGenerator) {
delete this->GlobalGenerator;
this->GlobalGenerator = nullptr;
}
}
cmCTestBuildCommand::~cmCTestBuildCommand() = default;

cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
{
Expand Down Expand Up @@ -79,8 +73,7 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
}
if (this->GlobalGenerator) {
if (this->GlobalGenerator->GetName() != cmakeGeneratorName) {
delete this->GlobalGenerator;
this->GlobalGenerator = nullptr;
this->GlobalGenerator.reset();
}
}
if (!this->GlobalGenerator) {
Expand Down
2 changes: 1 addition & 1 deletion Source/CTest/cmCTestBuildCommand.h
Expand Up @@ -48,7 +48,7 @@ class cmCTestBuildCommand : public cmCTestHandlerCommand
bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override;

cmGlobalGenerator* GlobalGenerator = nullptr;
std::unique_ptr<cmGlobalGenerator> GlobalGenerator;

protected:
cmCTestBuildHandler* Handler;
Expand Down
7 changes: 3 additions & 4 deletions Source/CTest/cmCTestConfigureCommand.cxx
Expand Up @@ -69,12 +69,11 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
bool multiConfig = false;
bool cmakeBuildTypeInOptions = false;

cmGlobalGenerator* gg =
this->Makefile->GetCMakeInstance()->CreateGlobalGenerator(
cmakeGeneratorName);
auto gg = this->Makefile->GetCMakeInstance()->CreateGlobalGenerator(
cmakeGeneratorName);
if (gg) {
multiConfig = gg->IsMultiConfig();
delete gg;
gg.reset();
}

std::string cmakeConfigureCommand =
Expand Down
1 change: 1 addition & 0 deletions Source/QtDialog/QCMake.cxx
Expand Up @@ -6,6 +6,7 @@
#include <QDir>

#include "cmExternalMakefileProjectGenerator.h"
#include "cmGlobalGenerator.h"
#include "cmState.h"
#include "cmStringAlgorithms.h"
#include "cmSystemTools.h"
Expand Down
9 changes: 5 additions & 4 deletions Source/cmExternalMakefileProjectGenerator.h
Expand Up @@ -5,6 +5,7 @@

#include "cmConfigure.h" // IWYU pragma: keep

#include <memory>
#include <string>
#include <vector>

Expand Down Expand Up @@ -78,7 +79,7 @@ class cmExternalMakefileProjectGeneratorFactory
std::vector<std::string> GetSupportedGlobalGenerators() const;
std::vector<std::string> Aliases;

virtual cmExternalMakefileProjectGenerator*
virtual std::unique_ptr<cmExternalMakefileProjectGenerator>
CreateExternalMakefileProjectGenerator() const = 0;

void AddSupportedGlobalGenerator(const std::string& base);
Expand All @@ -100,10 +101,10 @@ class cmExternalMakefileProjectGeneratorSimpleFactory
{
}

cmExternalMakefileProjectGenerator* CreateExternalMakefileProjectGenerator()
const override
std::unique_ptr<cmExternalMakefileProjectGenerator>
CreateExternalMakefileProjectGenerator() const override
{
T* p = new T;
std::unique_ptr<cmExternalMakefileProjectGenerator> p(new T);
p->SetName(GetName());
return p;
}
Expand Down
6 changes: 3 additions & 3 deletions Source/cmGlobalBorlandMakefileGenerator.h
Expand Up @@ -17,10 +17,10 @@ class cmGlobalBorlandMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{
public:
cmGlobalBorlandMakefileGenerator(cmake* cm);
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<
cmGlobalBorlandMakefileGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalBorlandMakefileGenerator>());
}

//! Get the name for the generator.
Expand Down
4 changes: 2 additions & 2 deletions Source/cmGlobalGenerator.cxx
Expand Up @@ -2743,9 +2743,9 @@ bool cmGlobalGenerator::IsReservedTarget(std::string const& name)
}

void cmGlobalGenerator::SetExternalMakefileProjectGenerator(
cmExternalMakefileProjectGenerator* extraGenerator)
std::unique_ptr<cmExternalMakefileProjectGenerator> extraGenerator)
{
this->ExtraGenerator.reset(extraGenerator);
this->ExtraGenerator = std::move(extraGenerator);
if (this->ExtraGenerator) {
this->ExtraGenerator->SetGlobalGenerator(this);
}
Expand Down
2 changes: 1 addition & 1 deletion Source/cmGlobalGenerator.h
Expand Up @@ -272,7 +272,7 @@ class cmGlobalGenerator

//! Set an generator for an "external makefile based project"
void SetExternalMakefileProjectGenerator(
cmExternalMakefileProjectGenerator* extraGenerator);
std::unique_ptr<cmExternalMakefileProjectGenerator> extraGenerator);

std::string GetExtraGeneratorName() const;

Expand Down
14 changes: 8 additions & 6 deletions Source/cmGlobalGeneratorFactory.h
Expand Up @@ -8,6 +8,8 @@
#include <string>
#include <vector>

#include <cm/memory>

class cmGlobalGenerator;
class cmake;
struct cmDocumentationEntry;
Expand All @@ -23,8 +25,8 @@ class cmGlobalGeneratorFactory
virtual ~cmGlobalGeneratorFactory() = default;

/** Create a GlobalGenerator */
virtual cmGlobalGenerator* CreateGlobalGenerator(const std::string& n,
cmake* cm) const = 0;
virtual std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator(
const std::string& n, cmake* cm) const = 0;

/** Get the documentation entry for this factory */
virtual void GetDocumentation(cmDocumentationEntry& entry) const = 0;
Expand All @@ -51,13 +53,13 @@ class cmGlobalGeneratorSimpleFactory : public cmGlobalGeneratorFactory
{
public:
/** Create a GlobalGenerator */
cmGlobalGenerator* CreateGlobalGenerator(const std::string& name,
cmake* cm) const override
std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator(
const std::string& name, cmake* cm) const override
{
if (name != T::GetActualName()) {
return nullptr;
return std::unique_ptr<cmGlobalGenerator>();
}
return new T(cm);
return std::unique_ptr<cmGlobalGenerator>(cm::make_unique<T>(cm));
}

/** Get the documentation entry for this factory */
Expand Down
5 changes: 3 additions & 2 deletions Source/cmGlobalGhsMultiGenerator.h
Expand Up @@ -29,9 +29,10 @@ class cmGlobalGhsMultiGenerator : public cmGlobalGenerator
cmGlobalGhsMultiGenerator(cmake* cm);
~cmGlobalGhsMultiGenerator() override;

static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>());
}

//! create the correct local generator
Expand Down
6 changes: 4 additions & 2 deletions Source/cmGlobalJOMMakefileGenerator.h
Expand Up @@ -4,6 +4,7 @@
#define cmGlobalJOMMakefileGenerator_h

#include <iosfwd>
#include <memory>

#include "cmGlobalUnixMakefileGenerator3.h"

Expand All @@ -16,9 +17,10 @@ class cmGlobalJOMMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{
public:
cmGlobalJOMMakefileGenerator(cmake* cm);
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<cmGlobalJOMMakefileGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalJOMMakefileGenerator>());
}
//! Get the name for the generator.
std::string GetName() const override
Expand Down
7 changes: 5 additions & 2 deletions Source/cmGlobalMSYSMakefileGenerator.h
Expand Up @@ -3,6 +3,8 @@
#ifndef cmGlobalMSYSMakefileGenerator_h
#define cmGlobalMSYSMakefileGenerator_h

#include <memory>

#include "cmGlobalUnixMakefileGenerator3.h"

/** \class cmGlobalMSYSMakefileGenerator
Expand All @@ -14,9 +16,10 @@ class cmGlobalMSYSMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{
public:
cmGlobalMSYSMakefileGenerator(cmake* cm);
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<cmGlobalMSYSMakefileGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalMSYSMakefileGenerator>());
}

//! Get the name for the generator.
Expand Down
8 changes: 5 additions & 3 deletions Source/cmGlobalMinGWMakefileGenerator.h
Expand Up @@ -3,6 +3,8 @@
#ifndef cmGlobalMinGWMakefileGenerator_h
#define cmGlobalMinGWMakefileGenerator_h

#include <memory>

#include "cmGlobalUnixMakefileGenerator3.h"

/** \class cmGlobalMinGWMakefileGenerator
Expand All @@ -14,10 +16,10 @@ class cmGlobalMinGWMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{
public:
cmGlobalMinGWMakefileGenerator(cmake* cm);
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<
cmGlobalMinGWMakefileGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalMinGWMakefileGenerator>());
}
//! Get the name for the generator.
virtual std::string GetName() const
Expand Down
7 changes: 4 additions & 3 deletions Source/cmGlobalNMakeMakefileGenerator.h
Expand Up @@ -4,6 +4,7 @@
#define cmGlobalNMakeMakefileGenerator_h

#include <iosfwd>
#include <memory>

#include "cmGlobalUnixMakefileGenerator3.h"

Expand All @@ -16,10 +17,10 @@ class cmGlobalNMakeMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{
public:
cmGlobalNMakeMakefileGenerator(cmake* cm);
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<
cmGlobalNMakeMakefileGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalNMakeMakefileGenerator>());
}
//! Get the name for the generator.
std::string GetName() const override
Expand Down
9 changes: 4 additions & 5 deletions Source/cmGlobalNinjaGenerator.cxx
Expand Up @@ -2223,12 +2223,11 @@ int cmcmd_cmake_ninja_dyndep(std::vector<std::string>::const_iterator argBeg,
cmake cm(cmake::RoleInternal, cmState::Unknown);
cm.SetHomeDirectory(dir_top_src);
cm.SetHomeOutputDirectory(dir_top_bld);
std::unique_ptr<cmGlobalNinjaGenerator> ggd(
static_cast<cmGlobalNinjaGenerator*>(cm.CreateGlobalGenerator("Ninja")));
auto ggd = cm.CreateGlobalGenerator("Ninja");
if (!ggd ||
!ggd->WriteDyndepFile(dir_top_src, dir_top_bld, dir_cur_src, dir_cur_bld,
arg_dd, arg_ddis, module_dir, linked_target_dirs,
arg_lang)) {
!cm::static_reference_cast<cmGlobalNinjaGenerator>(ggd).WriteDyndepFile(
dir_top_src, dir_top_bld, dir_cur_src, dir_cur_bld, arg_dd, arg_ddis,
module_dir, linked_target_dirs, arg_lang)) {
return 1;
}
return 0;
Expand Down
10 changes: 6 additions & 4 deletions Source/cmGlobalNinjaGenerator.h
Expand Up @@ -153,9 +153,10 @@ class cmGlobalNinjaGenerator : public cmGlobalCommonGenerator
public:
cmGlobalNinjaGenerator(cmake* cm);

static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>());
}

std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(
Expand Down Expand Up @@ -524,9 +525,10 @@ class cmGlobalNinjaMultiGenerator : public cmGlobalNinjaGenerator

cmGlobalNinjaMultiGenerator(cmake* cm);
bool IsMultiConfig() const override { return true; }
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>());
}

static void GetDocumentation(cmDocumentationEntry& entry);
Expand Down
6 changes: 3 additions & 3 deletions Source/cmGlobalUnixMakefileGenerator3.h
Expand Up @@ -62,10 +62,10 @@ class cmGlobalUnixMakefileGenerator3 : public cmGlobalCommonGenerator
{
public:
cmGlobalUnixMakefileGenerator3(cmake* cm);
static cmGlobalGeneratorFactory* NewFactory()
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory()
{
return new cmGlobalGeneratorSimpleFactory<
cmGlobalUnixMakefileGenerator3>();
return std::unique_ptr<cmGlobalGeneratorFactory>(
new cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>());
}

//! Get the name for the generator.
Expand Down
24 changes: 14 additions & 10 deletions Source/cmGlobalVisualStudio10Generator.cxx
Expand Up @@ -57,27 +57,30 @@ class cmGlobalVisualStudio10Generator::Factory
: public cmGlobalGeneratorFactory
{
public:
cmGlobalGenerator* CreateGlobalGenerator(const std::string& name,
cmake* cm) const override
std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator(
const std::string& name, cmake* cm) const override
{
std::string genName;
const char* p = cmVS10GenName(name, genName);
if (!p) {
return 0;
return std::unique_ptr<cmGlobalGenerator>();
}
if (!*p) {
return new cmGlobalVisualStudio10Generator(cm, genName, "");
return std::unique_ptr<cmGlobalGenerator>(
new cmGlobalVisualStudio10Generator(cm, genName, ""));
}
if (*p++ != ' ') {
return 0;
return std::unique_ptr<cmGlobalGenerator>();
}
if (strcmp(p, "Win64") == 0) {
return new cmGlobalVisualStudio10Generator(cm, genName, "x64");
return std::unique_ptr<cmGlobalGenerator>(
new cmGlobalVisualStudio10Generator(cm, genName, "x64"));
}
if (strcmp(p, "IA64") == 0) {
return new cmGlobalVisualStudio10Generator(cm, genName, "Itanium");
return std::unique_ptr<cmGlobalGenerator>(
new cmGlobalVisualStudio10Generator(cm, genName, "Itanium"));
}
return 0;
return std::unique_ptr<cmGlobalGenerator>();
}

void GetDocumentation(cmDocumentationEntry& entry) const override
Expand Down Expand Up @@ -117,9 +120,10 @@ class cmGlobalVisualStudio10Generator::Factory
std::string GetDefaultPlatformName() const override { return "Win32"; }
};

cmGlobalGeneratorFactory* cmGlobalVisualStudio10Generator::NewFactory()
std::unique_ptr<cmGlobalGeneratorFactory>
cmGlobalVisualStudio10Generator::NewFactory()
{
return new Factory;
return std::unique_ptr<cmGlobalGeneratorFactory>(new Factory);
}

cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator(
Expand Down

0 comments on commit d020ed9

Please sign in to comment.