From 76bfd0cecbe8ca74af5b8ea35a4a7251dd1fc729 Mon Sep 17 00:00:00 2001 From: Shaun Jackman Date: Wed, 16 May 2018 11:34:12 -0700 Subject: [PATCH] Add superenv for Linux --- Library/Homebrew/build.rb | 2 ++ Library/Homebrew/extend/ENV/super.rb | 27 ++++++++------- .../Homebrew/extend/os/extend/ENV/super.rb | 6 +++- .../extend/os/linux/extend/ENV/super.rb | 33 +++++++++++++++++++ .../extend/os/mac/extend/ENV/super.rb | 8 +++++ 5 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 Library/Homebrew/extend/os/linux/extend/ENV/super.rb diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index a2a62ccd77..4dfaf9e7e0 100644 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -68,6 +68,7 @@ class Build def install formula_deps = deps.map(&:to_formula) keg_only_deps = formula_deps.select(&:keg_only?) + run_time_deps = deps.reject(&:build?).map(&:to_formula) formula_deps.each do |dep| fixopt(dep) unless dep.opt_prefix.directory? @@ -78,6 +79,7 @@ class Build if superenv? ENV.keg_only_deps = keg_only_deps ENV.deps = formula_deps + ENV.run_time_deps = run_time_deps ENV.x11 = reqs.any? { |rq| rq.is_a?(X11Requirement) } ENV.setup_build_environment(formula) post_superenv_hacks diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index c9fac5b5cd..bd09ed96bf 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -15,12 +15,13 @@ module Superenv include SharedEnvExtension # @private - attr_accessor :keg_only_deps, :deps + attr_accessor :keg_only_deps, :deps, :run_time_deps attr_accessor :x11 def self.extended(base) base.keg_only_deps = [] base.deps = [] + base.run_time_deps = [] end # @private @@ -61,6 +62,8 @@ module Superenv self["HOMEBREW_ISYSTEM_PATHS"] = determine_isystem_paths self["HOMEBREW_INCLUDE_PATHS"] = determine_include_paths self["HOMEBREW_LIBRARY_PATHS"] = determine_library_paths + self["HOMEBREW_RPATH_PATHS"] = determine_rpath_paths(formula) + self["HOMEBREW_DYNAMIC_LINKER"] = determine_dynamic_linker_path self["HOMEBREW_DEPENDENCIES"] = determine_dependencies self["HOMEBREW_FORMULA_PREFIX"] = formula.prefix unless formula.nil? @@ -178,20 +181,22 @@ module Superenv keg_only_deps.map(&:opt_lib), HOMEBREW_PREFIX/"lib", ] - - if compiler == :llvm_clang - if MacOS::CLT.installed? - paths << "/usr/lib" - else - paths << "#{MacOS.sdk_path}/usr/lib" - end - paths << Formula["llvm"].opt_lib.to_s - end - paths += homebrew_extra_library_paths PATH.new(paths).existing end + def determine_extra_rpath_paths(_formula) + [] + end + + def determine_rpath_paths(formula) + PATH.new(determine_extra_rpath_paths(formula)) + end + + def determine_dynamic_linker_path + nil + end + def determine_dependencies deps.map(&:name).join(",") end diff --git a/Library/Homebrew/extend/os/extend/ENV/super.rb b/Library/Homebrew/extend/os/extend/ENV/super.rb index a04f559f23..951f4cac84 100644 --- a/Library/Homebrew/extend/os/extend/ENV/super.rb +++ b/Library/Homebrew/extend/os/extend/ENV/super.rb @@ -1 +1,5 @@ -require "extend/os/mac/extend/ENV/super" if OS.mac? +if OS.mac? + require "extend/os/mac/extend/ENV/super" +elsif OS.linux? + require "extend/os/linux/extend/ENV/super" +end diff --git a/Library/Homebrew/extend/os/linux/extend/ENV/super.rb b/Library/Homebrew/extend/os/linux/extend/ENV/super.rb new file mode 100644 index 0000000000..80f901b781 --- /dev/null +++ b/Library/Homebrew/extend/os/linux/extend/ENV/super.rb @@ -0,0 +1,33 @@ +module Superenv + # @private + def self.bin + (HOMEBREW_SHIMS_PATH/"linux/super").realpath + end + + def homebrew_extra_paths + paths = [] + paths += %w[binutils make].map do |f| + begin + bin = Formula[f].opt_bin + bin if bin.directory? + rescue FormulaUnavailableError + nil + end + end.compact + paths + end + + def determine_extra_rpath_paths(formula) + PATH.new( + formula&.lib, + "#{HOMEBREW_PREFIX}/lib", + PATH.new(run_time_deps.map { |dep| dep.opt_lib.to_s }).existing, + ) + end + + def determine_dynamic_linker_path + path = "#{HOMEBREW_PREFIX}/lib/ld.so" + return unless File.readable? path + path + end +end diff --git a/Library/Homebrew/extend/os/mac/extend/ENV/super.rb b/Library/Homebrew/extend/os/mac/extend/ENV/super.rb index c60c9ab193..9c6db80027 100644 --- a/Library/Homebrew/extend/os/mac/extend/ENV/super.rb +++ b/Library/Homebrew/extend/os/mac/extend/ENV/super.rb @@ -58,6 +58,14 @@ module Superenv def homebrew_extra_library_paths paths = [] + if compiler == :llvm_clang + if MacOS::CLT.installed? + paths << "/usr/lib" + else + paths << "#{MacOS.sdk_path}/usr/lib" + end + paths << Formula["llvm"].opt_lib.to_s + end paths << MacOS::X11.lib.to_s if x11? paths << "#{effective_sysroot}/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries" paths