From fe0163cd232cdacd22fbb3f7a063034161acba8c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 7 Aug 2025 21:53:29 -0400 Subject: [PATCH] autogen: compute short directories too Not just short directory roots. The test suites did an improper generator check and masked them as the generator masks were put in place after the core development but before the autogen-specific logic tests were created. --- Source/cmExtraEclipseCDT4Generator.cxx | 3 ++- Source/cmGeneratorTarget.cxx | 6 +++--- Source/cmLocalCommonGenerator.cxx | 5 +++-- Source/cmLocalCommonGenerator.h | 6 +++++- Source/cmLocalGenerator.cxx | 3 ++- Source/cmLocalGenerator.h | 3 ++- Source/cmLocalGhsMultiGenerator.cxx | 7 ++++++- Source/cmLocalGhsMultiGenerator.h | 6 +++++- Source/cmLocalVisualStudio7Generator.cxx | 5 +++-- Source/cmLocalVisualStudio7Generator.h | 4 +++- Source/cmLocalXCodeGenerator.cxx | 3 ++- Source/cmLocalXCodeGenerator.h | 3 ++- 12 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index cabfe193f6..968145c2d0 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -974,7 +974,8 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const std::string cleanArgs = cmStrCat("-E chdir \"", lgen->GetObjectOutputRoot(), "\" \"", cmSystemTools::GetCMakeCommand(), "\" -P \""); - cleanArgs += lgen->GetTargetDirectory(target.get()); + cleanArgs += lgen->GetTargetDirectory( + target.get(), cmStateEnums::IntermediateDirKind::ObjectFiles); cleanArgs += "/cmake_clean.cmake\""; cmExtraEclipseCDT4Generator::AppendTarget( xml, "Clean", cmSystemTools::GetCMakeCommand(), cleanArgs, diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 91fa0f3052..cb12b2e4e3 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -5436,7 +5436,7 @@ std::string cmGeneratorTarget::GetSupportDirectory( { cmLocalGenerator* lg = this->GetLocalGenerator(); return cmStrCat(lg->GetObjectOutputRoot(kind), '/', - lg->GetTargetDirectory(this)); + lg->GetTargetDirectory(this, kind)); } std::string cmGeneratorTarget::GetCMFSupportDirectory( @@ -5445,10 +5445,10 @@ std::string cmGeneratorTarget::GetCMFSupportDirectory( cmLocalGenerator* lg = this->GetLocalGenerator(); if (!lg->AlwaysUsesCMFPaths()) { return cmStrCat(lg->GetCurrentBinaryDirectory(), "/CMakeFiles/", - lg->GetTargetDirectory(this)); + lg->GetTargetDirectory(this, kind)); } return cmStrCat(lg->GetObjectOutputRoot(kind), '/', - lg->GetTargetDirectory(this)); + lg->GetTargetDirectory(this, kind)); } bool cmGeneratorTarget::IsLinkable() const diff --git a/Source/cmLocalCommonGenerator.cxx b/Source/cmLocalCommonGenerator.cxx index b79b24bdb3..3c026eed99 100644 --- a/Source/cmLocalCommonGenerator.cxx +++ b/Source/cmLocalCommonGenerator.cxx @@ -105,9 +105,10 @@ std::string cmLocalCommonGenerator::ComputeLongTargetDirectory( } std::string cmLocalCommonGenerator::GetTargetDirectory( - cmGeneratorTarget const* target) const + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const { - if (target->GetUseShortObjectNames()) { + if (target->GetUseShortObjectNames(kind)) { return this->ComputeShortTargetDirectory(target); } return this->ComputeLongTargetDirectory(target); diff --git a/Source/cmLocalCommonGenerator.h b/Source/cmLocalCommonGenerator.h index 1c104a7a85..82271a7454 100644 --- a/Source/cmLocalCommonGenerator.h +++ b/Source/cmLocalCommonGenerator.h @@ -15,6 +15,9 @@ class cmGlobalGenerator; class cmMakefile; struct cmObjectLocations; class cmSourceFile; +namespace cmStateEnums { +enum class IntermediateDirKind; +} /** \class cmLocalCommonGenerator * \brief Common infrastructure for Makefile and Ninja local generators. @@ -37,7 +40,8 @@ public: std::string ComputeLongTargetDirectory(cmGeneratorTarget const* gt) const; std::string GetTargetDirectory( - cmGeneratorTarget const* target) const override; + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const override; void ComputeObjectFilenames( std::map& mapping, diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 45b0a65c8f..a46b36da3c 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -4381,7 +4381,8 @@ std::string const& cmLocalGenerator::GetCurrentSourceDirectory() const } std::string cmLocalGenerator::GetTargetDirectory( - cmGeneratorTarget const* /*unused*/) const + cmGeneratorTarget const* /*unused*/, + cmStateEnums::IntermediateDirKind /*kind*/) const { cmSystemTools::Error("GetTargetDirectory" " called on cmLocalGenerator"); diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index 81b516b542..9f38a903ff 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -429,7 +429,8 @@ public: * per-target support directory. */ virtual std::string GetTargetDirectory( - cmGeneratorTarget const* target) const; + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const; cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id) const; diff --git a/Source/cmLocalGhsMultiGenerator.cxx b/Source/cmLocalGhsMultiGenerator.cxx index 812f025282..9bded02c2c 100644 --- a/Source/cmLocalGhsMultiGenerator.cxx +++ b/Source/cmLocalGhsMultiGenerator.cxx @@ -15,6 +15,10 @@ #include "cmStringAlgorithms.h" #include "cmSystemTools.h" +namespace cmStateEnums { +enum class IntermediateDirKind; +} + cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator(cmGlobalGenerator* gg, cmMakefile* mf) : cmLocalGenerator(gg, mf) @@ -24,7 +28,8 @@ cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator(cmGlobalGenerator* gg, cmLocalGhsMultiGenerator::~cmLocalGhsMultiGenerator() = default; std::string cmLocalGhsMultiGenerator::GetTargetDirectory( - cmGeneratorTarget const* target) const + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind /*kind*/) const { std::string dir = cmStrCat(target->GetName(), ".dir"); return dir; diff --git a/Source/cmLocalGhsMultiGenerator.h b/Source/cmLocalGhsMultiGenerator.h index ae80b2b591..390648788e 100644 --- a/Source/cmLocalGhsMultiGenerator.h +++ b/Source/cmLocalGhsMultiGenerator.h @@ -12,6 +12,9 @@ class cmGlobalGenerator; class cmMakefile; struct cmObjectLocations; class cmSourceFile; +namespace cmStateEnums { +enum class IntermediateDirKind; +} /** \class cmLocalGhsMultiGenerator * \brief Write Green Hills MULTI project files. @@ -32,7 +35,8 @@ public: void Generate() override; std::string GetTargetDirectory( - cmGeneratorTarget const* target) const override; + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const override; void ComputeObjectFilenames( std::map& mapping, diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 1d6d973125..02abea8cd9 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -2229,10 +2229,11 @@ void cmLocalVisualStudio7Generator::ReadAndStoreExternalGUID( } std::string cmLocalVisualStudio7Generator::GetTargetDirectory( - cmGeneratorTarget const* target) const + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const { std::string dir; - if (target->GetUseShortObjectNames()) { + if (target->GetUseShortObjectNames(kind)) { dir = this->ComputeShortTargetDirectory(target); } else { dir = cmStrCat(target->GetName(), ".dir"); diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h index c1002c5b69..837a0e1526 100644 --- a/Source/cmLocalVisualStudio7Generator.h +++ b/Source/cmLocalVisualStudio7Generator.h @@ -12,6 +12,7 @@ #include #include "cmLocalVisualStudioGenerator.h" +#include "cmStateTypes.h" #include "cmVisualStudioGeneratorOptions.h" class cmCustomCommand; @@ -76,7 +77,8 @@ public: void SetBuildType(BuildType, std::string const& name); std::string GetTargetDirectory( - cmGeneratorTarget const* target) const override; + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const override; cmSourceFile* CreateVCProjBuildRule(); void WriteStampFiles(); std::string ComputeLongestObjectDirectory( diff --git a/Source/cmLocalXCodeGenerator.cxx b/Source/cmLocalXCodeGenerator.cxx index 5d6a32fa6b..c46ff1b3f9 100644 --- a/Source/cmLocalXCodeGenerator.cxx +++ b/Source/cmLocalXCodeGenerator.cxx @@ -28,7 +28,8 @@ cmLocalXCodeGenerator::cmLocalXCodeGenerator(cmGlobalGenerator* gg, cmLocalXCodeGenerator::~cmLocalXCodeGenerator() = default; std::string cmLocalXCodeGenerator::GetTargetDirectory( - cmGeneratorTarget const* target) const + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind /*kind*/) const { return cmStrCat(target->GetName(), ".dir"); } diff --git a/Source/cmLocalXCodeGenerator.h b/Source/cmLocalXCodeGenerator.h index 7b501fb6e5..aea32e1c54 100644 --- a/Source/cmLocalXCodeGenerator.h +++ b/Source/cmLocalXCodeGenerator.h @@ -30,7 +30,8 @@ public: ~cmLocalXCodeGenerator() override; std::string GetTargetDirectory( - cmGeneratorTarget const* target) const override; + cmGeneratorTarget const* target, + cmStateEnums::IntermediateDirKind kind) const override; void AppendFlagEscape(std::string& flags, std::string const& rawFlag) const override; void Generate() override;