aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/extend/os/linux/extend/pathname.rb19
-rw-r--r--Library/Homebrew/extend/os/mac/extend/pathname.rb (renamed from Library/Homebrew/os/mac/pathname.rb)0
-rw-r--r--Library/Homebrew/extend/os/mac/hardware/cpu.rb2
-rw-r--r--Library/Homebrew/extend/os/pathname.rb5
-rw-r--r--Library/Homebrew/extend/pathname.rb7
-rw-r--r--Library/Homebrew/os/mac.rb1
6 files changed, 30 insertions, 4 deletions
diff --git a/Library/Homebrew/extend/os/linux/extend/pathname.rb b/Library/Homebrew/extend/os/linux/extend/pathname.rb
new file mode 100644
index 000000000..eb6ea409b
--- /dev/null
+++ b/Library/Homebrew/extend/os/linux/extend/pathname.rb
@@ -0,0 +1,19 @@
+class Pathname
+ # @private
+ def elf?
+ # See: https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+ read(4) == "\x7fELF"
+ end
+
+ # @private
+ def dynamic_elf?
+ if which "readelf"
+ popen_read("readelf", "-l", to_path).include?(" DYNAMIC ")
+ elsif which "file"
+ !popen_read("file", "-L", "-b", to_path)[/dynamic|shared/].nil?
+ else
+ raise StandardError, "Neither `readelf` nor `file` is available "\
+ "to determine whether '#{self}' is dynamically or statically linked."
+ end
+ end
+end
diff --git a/Library/Homebrew/os/mac/pathname.rb b/Library/Homebrew/extend/os/mac/extend/pathname.rb
index 5fd59e1e7..5fd59e1e7 100644
--- a/Library/Homebrew/os/mac/pathname.rb
+++ b/Library/Homebrew/extend/os/mac/extend/pathname.rb
diff --git a/Library/Homebrew/extend/os/mac/hardware/cpu.rb b/Library/Homebrew/extend/os/mac/hardware/cpu.rb
index b97c280cd..a216db6ae 100644
--- a/Library/Homebrew/extend/os/mac/hardware/cpu.rb
+++ b/Library/Homebrew/extend/os/mac/hardware/cpu.rb
@@ -1,5 +1,3 @@
-require "os/mac/pathname"
-
module Hardware
class CPU
class << self
diff --git a/Library/Homebrew/extend/os/pathname.rb b/Library/Homebrew/extend/os/pathname.rb
new file mode 100644
index 000000000..5e6edeb30
--- /dev/null
+++ b/Library/Homebrew/extend/os/pathname.rb
@@ -0,0 +1,5 @@
+if OS.mac?
+ require "extend/os/mac/extend/pathname"
+elsif OS.linux?
+ require "extend/os/linux/extend/pathname"
+end
diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb
index b4c7ca959..82cf10be0 100644
--- a/Library/Homebrew/extend/pathname.rb
+++ b/Library/Homebrew/extend/pathname.rb
@@ -189,6 +189,9 @@ class Pathname
rescue Errno::EPERM # rubocop:disable Lint/HandleExceptions
end
+ # Close the file before renaming to prevent the error: Device or resource busy
+ # Affects primarily NFS.
+ tf.close
File.rename(tf.path, self)
ensure
tf.close!
@@ -376,7 +379,7 @@ class Pathname
saved_perms = nil
unless writable_real?
saved_perms = stat.mode
- chmod 0644
+ FileUtils.chmod "u+rw", to_path
end
yield
ensure
@@ -469,6 +472,8 @@ class Pathname
end
end
+require "extend/os/pathname"
+
# @private
module ObserverPathnameExtension
class << self
diff --git a/Library/Homebrew/os/mac.rb b/Library/Homebrew/os/mac.rb
index 3996ac557..9215e3c96 100644
--- a/Library/Homebrew/os/mac.rb
+++ b/Library/Homebrew/os/mac.rb
@@ -3,7 +3,6 @@ require "development_tools"
require "os/mac/version"
require "os/mac/xcode"
require "os/mac/xquartz"
-require "os/mac/pathname"
require "os/mac/sdk"
require "os/mac/keg"