os/mac/keg_relocate: avoid rpath re-ordering
This should fix the failures seen for `julia` in Homebrew/core.[^1] I've detailed a better/more comprehensive fix as a `TODO` in a comments. However, the problems that the better fix would avoid are comparatively unlikely, so I think we can try this one out for now while I work on implementing the said fix. [^1]: https://github.com/Homebrew/homebrew-core/pull/135398#issuecomment-1643041541
This commit is contained in:
parent
ac93842f8d
commit
aa05c227a0
@ -57,7 +57,13 @@ class Keg
|
|||||||
|
|
||||||
each_linkage_for(file, :rpaths) do |bad_name|
|
each_linkage_for(file, :rpaths) do |bad_name|
|
||||||
# Strip duplicate rpaths and rpaths rooted in the build directory.
|
# Strip duplicate rpaths and rpaths rooted in the build directory.
|
||||||
if rooted_in_build_directory?(bad_name) || (file.rpaths.count(bad_name) > 1)
|
if rooted_in_build_directory?(bad_name) ||
|
||||||
|
(file.rpaths(resolve_variable_references: false).count(bad_name) > 1)
|
||||||
|
# TODO: Drop the `resolve_variable_references` argument above (defaults to `true`)
|
||||||
|
# and fix `delete_rpath` so that it deletes the *last* LC_RPATH command
|
||||||
|
# (instead of the first one) to avoid changing LC_RPATH command ordering.
|
||||||
|
# NOTE: `delete_rpath` will also need to be able to handle rpaths that are different
|
||||||
|
# strings but resolve to the same location.
|
||||||
delete_rpath(bad_name, file)
|
delete_rpath(bad_name, file)
|
||||||
else
|
else
|
||||||
new_name = opt_name_for(bad_name)
|
new_name = opt_name_for(bad_name)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user