diff --git a/Library/Homebrew/extend/os/linux/keg_relocate.rb b/Library/Homebrew/extend/os/linux/keg_relocate.rb index a3da66d279..34fcb9b5cc 100644 --- a/Library/Homebrew/extend/os/linux/keg_relocate.rb +++ b/Library/Homebrew/extend/os/linux/keg_relocate.rb @@ -39,7 +39,7 @@ class Keg new_rpath = rpath.join(":") cmd = [patchelf, "--force-rpath", "--set-rpath", new_rpath] - if file.binary_executable? + if file.with_interpreter? old_interpreter = Utils.safe_popen_read(patchelf, "--print-interpreter", file).strip new_interpreter = if File.readable? "#{new_prefix}/lib/ld.so" "#{new_prefix}/lib/ld.so" diff --git a/Library/Homebrew/os/linux/elf.rb b/Library/Homebrew/os/linux/elf.rb index 4e3a99a494..4d85ae9858 100644 --- a/Library/Homebrew/os/linux/elf.rb +++ b/Library/Homebrew/os/linux/elf.rb @@ -68,10 +68,28 @@ module ELFShim elf_type == :executable end + def with_interpreter? + return @with_interpreter if defined? @with_interpreter + + @with_interpreter = if binary_executable? + true + elsif dylib? + if which "readelf" + Utils.popen_read("readelf", "-l", to_path).include?(" INTERP ") + elsif which "file" + Utils.popen_read("file", "-L", "-b", to_path).include?(" interpreter ") + else + raise "Please install either readelf (from binutils) or file." + end + else + false + end + end + def dynamic_elf? return @dynamic_elf if defined? @dynamic_elf - if which "readelf" + @dynamic_elf = if which "readelf" Utils.popen_read("readelf", "-l", to_path).include?(" DYNAMIC ") elsif which "file" !Utils.popen_read("file", "-L", "-b", to_path)[/dynamic|shared/].nil?