cmake: add patch to allow static linking with -DCMAKE_INSTALL_RPATH set (#44900)
This commit is contained in:
		
							
								
								
									
										67
									
								
								var/spack/repos/builtin/packages/cmake/mr-9623.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								var/spack/repos/builtin/packages/cmake/mr-9623.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| diff --git a/Source/cmELF.cxx b/Source/cmELF.cxx | ||||
| index a71e5f1280..003f47b439 100644 | ||||
| --- a/Source/cmELF.cxx | ||||
| +++ b/Source/cmELF.cxx | ||||
| @@ -112,6 +112,9 @@ public: | ||||
|    virtual bool IsMips() const = 0; | ||||
|    virtual void PrintInfo(std::ostream& os) const = 0; | ||||
|   | ||||
| +  /** Returns true if the ELF file has a dynamic section **/ | ||||
| +  bool HasDynamicSection() const { return this->DynamicSectionIndex >= 0; } | ||||
| + | ||||
|    // Lookup the SONAME in the DYNAMIC section. | ||||
|    StringEntry const* GetSOName() | ||||
|    { | ||||
| @@ -461,7 +464,7 @@ template <class Types> | ||||
|  bool cmELFInternalImpl<Types>::LoadDynamicSection() | ||||
|  { | ||||
|    // If there is no dynamic section we are done. | ||||
| -  if (this->DynamicSectionIndex < 0) { | ||||
| +  if (!this->HasDynamicSection()) { | ||||
|      return false; | ||||
|    } | ||||
|   | ||||
| @@ -772,6 +775,11 @@ std::vector<char> cmELF::EncodeDynamicEntries( | ||||
|    return std::vector<char>(); | ||||
|  } | ||||
|   | ||||
| +bool cmELF::HasDynamicSection() const | ||||
| +{ | ||||
| +  return this->Valid() && this->Internal->HasDynamicSection(); | ||||
| +} | ||||
| + | ||||
|  bool cmELF::GetSOName(std::string& soname) | ||||
|  { | ||||
|    if (StringEntry const* se = this->GetSOName()) { | ||||
| diff --git a/Source/cmELF.h b/Source/cmELF.h | ||||
| index ce8bd7fb92..dd37c65302 100644 | ||||
| --- a/Source/cmELF.h | ||||
| +++ b/Source/cmELF.h | ||||
| @@ -88,6 +88,9 @@ public: | ||||
|    std::vector<char> EncodeDynamicEntries( | ||||
|      const DynamicEntryList& entries) const; | ||||
|   | ||||
| +  /** Returns true if the ELF file has a dynamic section **/ | ||||
| +  bool HasDynamicSection() const; | ||||
| + | ||||
|    /** Get the SONAME field if any.  */ | ||||
|    bool GetSOName(std::string& soname); | ||||
|    StringEntry const* GetSOName(); | ||||
| diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx | ||||
| index 093a18b82b..3affef0394 100644 | ||||
| --- a/Source/cmSystemTools.cxx | ||||
| +++ b/Source/cmSystemTools.cxx | ||||
| @@ -2817,6 +2817,10 @@ cm::optional<bool> AdjustRPathELF(std::string const& file, | ||||
|        return cm::nullopt; // Not a valid ELF file. | ||||
|      } | ||||
|   | ||||
| +    if (!elf.HasDynamicSection()) { | ||||
| +      return true; // No dynamic section to update. | ||||
| +    } | ||||
| + | ||||
|      // Get the RPATH and RUNPATH entries from it. | ||||
|      int se_count = 0; | ||||
|      cmELF::StringEntry const* se[2] = { nullptr, nullptr }; | ||||
| --  | ||||
| 2.40.1 | ||||
|  | ||||
| @@ -124,6 +124,10 @@ class Cmake(Package): | ||||
|         when="@3.15.5", | ||||
|     ) | ||||
| 
 | ||||
|     # Statically linked binaries error on install when CMAKE_INSTALL_RPATH is set | ||||
|     # https://gitlab.kitware.com/cmake/cmake/-/merge_requests/9623 | ||||
|     patch("mr-9623.patch", when="@3.22.0:3.30") | ||||
| 
 | ||||
|     depends_on("ninja", when="platform=windows") | ||||
|     depends_on("gmake", when="platform=linux") | ||||
|     depends_on("gmake", when="platform=darwin") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels