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", |         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("ninja", when="platform=windows") | ||||||
|     depends_on("gmake", when="platform=linux") |     depends_on("gmake", when="platform=linux") | ||||||
|     depends_on("gmake", when="platform=darwin") |     depends_on("gmake", when="platform=darwin") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels