summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@gmail.com>2023-04-29 17:07:52 +0200
committerMarc Chevrier <marc.chevrier@gmail.com>2023-05-02 17:47:04 +0200
commit24a3e5cda049138ca178216e0d7b02262e4035ed (patch)
tree5f2cd683d0b435959043f67f924683dc91ba82b4 /Source
parent2488d6dbf7481087fa9ee4a0c77c5e3b0a503387 (diff)
downloadcmake-24a3e5cda049138ca178216e0d7b02262e4035ed.tar.gz
cmLocalGenerator::MayBeRelativeToWorkDir: take care of all cases
Diffstat (limited to 'Source')
-rw-r--r--Source/cmLocalCommonGenerator.cxx16
-rw-r--r--Source/cmLocalCommonGenerator.h15
-rw-r--r--Source/cmLocalGenerator.h2
-rw-r--r--Source/cmLocalNinjaGenerator.cxx14
-rw-r--r--Source/cmLocalNinjaGenerator.h4
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx2
-rw-r--r--Source/cmOutputConverter.h10
7 files changed, 32 insertions, 31 deletions
diff --git a/Source/cmLocalCommonGenerator.cxx b/Source/cmLocalCommonGenerator.cxx
index eca7a9eb6e..aa953f469d 100644
--- a/Source/cmLocalCommonGenerator.cxx
+++ b/Source/cmLocalCommonGenerator.cxx
@@ -8,7 +8,6 @@
#include "cmGeneratorTarget.h"
#include "cmMakefile.h"
#include "cmOutputConverter.h"
-#include "cmState.h"
#include "cmStateDirectory.h"
#include "cmStateSnapshot.h"
#include "cmStringAlgorithms.h"
@@ -17,9 +16,8 @@
class cmGlobalGenerator;
cmLocalCommonGenerator::cmLocalCommonGenerator(cmGlobalGenerator* gg,
- cmMakefile* mf, WorkDir wd)
+ cmMakefile* mf)
: cmLocalGenerator(gg, mf)
- , WorkingDirectory(wd)
{
this->ConfigNames =
this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
@@ -29,21 +27,9 @@ cmLocalCommonGenerator::~cmLocalCommonGenerator() = default;
std::string const& cmLocalCommonGenerator::GetWorkingDirectory() const
{
- if (this->WorkingDirectory == WorkDir::TopBin) {
- return this->GetState()->GetBinaryDirectory();
- }
return this->StateSnapshot.GetDirectory().GetCurrentBinary();
}
-std::string cmLocalCommonGenerator::MaybeRelativeToWorkDir(
- std::string const& path) const
-{
- if (this->WorkingDirectory == WorkDir::TopBin) {
- return this->MaybeRelativeToTopBinDir(path);
- }
- return this->MaybeRelativeToCurBinDir(path);
-}
-
std::string cmLocalCommonGenerator::GetTargetFortranFlags(
cmGeneratorTarget const* target, std::string const& config)
{
diff --git a/Source/cmLocalCommonGenerator.h b/Source/cmLocalCommonGenerator.h
index 0505c138d1..52f7a9e5e6 100644
--- a/Source/cmLocalCommonGenerator.h
+++ b/Source/cmLocalCommonGenerator.h
@@ -20,15 +20,8 @@ class cmSourceFile;
*/
class cmLocalCommonGenerator : public cmLocalGenerator
{
-protected:
- enum class WorkDir
- {
- TopBin,
- CurBin,
- };
-
public:
- cmLocalCommonGenerator(cmGlobalGenerator* gg, cmMakefile* mf, WorkDir wd);
+ cmLocalCommonGenerator(cmGlobalGenerator* gg, cmMakefile* mf);
~cmLocalCommonGenerator() override;
std::vector<std::string> const& GetConfigNames() const
@@ -36,9 +29,7 @@ public:
return this->ConfigNames;
}
- std::string const& GetWorkingDirectory() const;
-
- std::string MaybeRelativeToWorkDir(std::string const& path) const;
+ virtual std::string const& GetWorkingDirectory() const;
std::string GetTargetFortranFlags(cmGeneratorTarget const* target,
std::string const& config) override;
@@ -48,8 +39,6 @@ public:
cmGeneratorTarget const* gt = nullptr) override;
protected:
- WorkDir WorkingDirectory;
-
std::vector<std::string> ConfigNames;
friend class cmCommonTargetGenerator;
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index bda82bce00..ea60a4ee35 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -89,7 +89,7 @@ class cmLocalGenerator : public cmOutputConverter
{
public:
cmLocalGenerator(cmGlobalGenerator* gg, cmMakefile* makefile);
- virtual ~cmLocalGenerator();
+ ~cmLocalGenerator() override;
/**
* Generate the makefile for this directory.
diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx
index a047233a57..2e837bb30b 100644
--- a/Source/cmLocalNinjaGenerator.cxx
+++ b/Source/cmLocalNinjaGenerator.cxx
@@ -41,7 +41,7 @@
cmLocalNinjaGenerator::cmLocalNinjaGenerator(cmGlobalGenerator* gg,
cmMakefile* mf)
- : cmLocalCommonGenerator(gg, mf, WorkDir::TopBin)
+ : cmLocalCommonGenerator(gg, mf)
{
}
@@ -188,6 +188,18 @@ cmGlobalNinjaGenerator* cmLocalNinjaGenerator::GetGlobalNinjaGenerator()
return static_cast<cmGlobalNinjaGenerator*>(this->GetGlobalGenerator());
}
+std::string const& cmLocalNinjaGenerator::GetWorkingDirectory() const
+{
+ return this->GetState()->GetBinaryDirectory();
+}
+
+std::string cmLocalNinjaGenerator::MaybeRelativeToWorkDir(
+ std::string const& path) const
+{
+ return this->GetGlobalNinjaGenerator()->NinjaOutputPath(
+ this->MaybeRelativeToTopBinDir(path));
+}
+
// Virtual protected methods.
std::string cmLocalNinjaGenerator::ConvertToIncludeReference(
diff --git a/Source/cmLocalNinjaGenerator.h b/Source/cmLocalNinjaGenerator.h
index 4d393d9c3a..347aaa03bc 100644
--- a/Source/cmLocalNinjaGenerator.h
+++ b/Source/cmLocalNinjaGenerator.h
@@ -52,6 +52,10 @@ public:
const cmake* GetCMakeInstance() const;
cmake* GetCMakeInstance();
+ std::string const& GetWorkingDirectory() const override;
+
+ std::string MaybeRelativeToWorkDir(std::string const& path) const override;
+
/// @returns the relative path between the HomeOutputDirectory and this
/// local generators StartOutputDirectory.
std::string GetHomeRelativeOutputPath() const
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index d8f532f790..028066ef90 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -111,7 +111,7 @@ private:
cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3(
cmGlobalGenerator* gg, cmMakefile* mf)
- : cmLocalCommonGenerator(gg, mf, WorkDir::CurBin)
+ : cmLocalCommonGenerator(gg, mf)
{
this->MakefileVariableSize = 0;
this->ColorMakefile = false;
diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h
index 2717bdd1c2..625d89768c 100644
--- a/Source/cmOutputConverter.h
+++ b/Source/cmOutputConverter.h
@@ -16,6 +16,7 @@ class cmOutputConverter
{
public:
cmOutputConverter(cmStateSnapshot const& snapshot);
+ virtual ~cmOutputConverter() = default;
/**
* Convert the given remote path to a relative path with respect to
@@ -27,6 +28,15 @@ public:
std::string MaybeRelativeToTopBinDir(std::string const& path) const;
std::string MaybeRelativeToCurBinDir(std::string const& path) const;
+ /**
+ * The effective working directory can be different for each generator.
+ * By default, equivalent to the current binary directory.
+ */
+ virtual std::string MaybeRelativeToWorkDir(std::string const& path) const
+ {
+ return this->MaybeRelativeToCurBinDir(path);
+ }
+
std::string const& GetRelativePathTopSource() const;
std::string const& GetRelativePathTopBinary() const;
void SetRelativePathTop(std::string const& topSource,