diff --git a/Library/Homebrew/extend/os/linux/requirements/osxfuse_requirement.rb b/Library/Homebrew/extend/os/linux/requirements/osxfuse_requirement.rb new file mode 100644 index 0000000000000000000000000000000000000000..3fd847bc4b6a854afade62dc60414e03c84b60d3 --- /dev/null +++ b/Library/Homebrew/extend/os/linux/requirements/osxfuse_requirement.rb @@ -0,0 +1,39 @@ +require "requirement" + +class OsxfuseRequirement < Requirement + download "https://github.com/libfuse/libfuse" + + satisfy(build_env: false) do + next true if libfuse_formula_exists? && Formula["libfuse"].installed? + includedirs = %w[ + /usr/include + /usr/local/include + ] + next true if (includedirs.map do |dir| + File.exist? "#{dir}/fuse.h" + end).any? + false + end + + def message + msg = "libfuse is required to install this formula.\n" + if libfuse_formula_exists? + msg + <<-EOS.undent + Run "brew install libfuse" to install it. + EOS + else + msg + super + end + end + + private + + def libfuse_formula_exists? + begin + Formula["libfuse"] + rescue FormulaUnavailableError + return false + end + true + end +end diff --git a/Library/Homebrew/extend/os/mac/requirements/osxfuse_requirement.rb b/Library/Homebrew/extend/os/mac/requirements/osxfuse_requirement.rb new file mode 100644 index 0000000000000000000000000000000000000000..8c898a2726bc068a48c641d6147234088c06b2d5 --- /dev/null +++ b/Library/Homebrew/extend/os/mac/requirements/osxfuse_requirement.rb @@ -0,0 +1,34 @@ +require "requirement" + +class OsxfuseRequirement < Requirement + cask "osxfuse" + download "https://osxfuse.github.io/" + + satisfy(build_env: false) { self.class.binary_osxfuse_installed? } + + def self.binary_osxfuse_installed? + File.exist?("/usr/local/include/osxfuse/fuse.h") && + !File.symlink?("/usr/local/include/osxfuse") + end + + env do + ENV.append_path "PKG_CONFIG_PATH", HOMEBREW_LIBRARY/"Homebrew/os/mac/pkgconfig/fuse" + + unless HOMEBREW_PREFIX.to_s == "/usr/local" + ENV.append_path "HOMEBREW_LIBRARY_PATHS", "/usr/local/lib" + ENV.append_path "HOMEBREW_INCLUDE_PATHS", "/usr/local/include/osxfuse" + end + end +end + +class NonBinaryOsxfuseRequirement < Requirement + fatal true + satisfy(build_env: false) { HOMEBREW_PREFIX.to_s != "/usr/local" || !OsxfuseRequirement.binary_osxfuse_installed? } + + def message + <<-EOS.undent + osxfuse is already installed from the binary distribution and + conflicts with this formula. + EOS + end +end diff --git a/Library/Homebrew/extend/os/requirements/osxfuse_requirement.rb b/Library/Homebrew/extend/os/requirements/osxfuse_requirement.rb new file mode 100644 index 0000000000000000000000000000000000000000..5f56d48c4a01ccadbc58296eab02a17c88d63624 --- /dev/null +++ b/Library/Homebrew/extend/os/requirements/osxfuse_requirement.rb @@ -0,0 +1,7 @@ +require "requirements/osxfuse_requirement" + +if OS.mac? + require "extend/os/mac/requirements/osxfuse_requirement" +elsif OS.linux? + require "extend/os/linux/requirements/osxfuse_requirement" +end diff --git a/Library/Homebrew/requirements/osxfuse_requirement.rb b/Library/Homebrew/requirements/osxfuse_requirement.rb index d5a3415671351084e339300496c44c28256bbf7d..9a07209d432ad29a4cb0246bccc793d95ec7e82d 100644 --- a/Library/Homebrew/requirements/osxfuse_requirement.rb +++ b/Library/Homebrew/requirements/osxfuse_requirement.rb @@ -2,34 +2,10 @@ require "requirement" class OsxfuseRequirement < Requirement fatal true - cask "osxfuse" - download "https://osxfuse.github.io/" - - satisfy(build_env: false) { self.class.binary_osxfuse_installed? } - - def self.binary_osxfuse_installed? - File.exist?("/usr/local/include/osxfuse/fuse.h") && - !File.symlink?("/usr/local/include/osxfuse") - end - - env do - ENV.append_path "PKG_CONFIG_PATH", HOMEBREW_LIBRARY/"Homebrew/os/mac/pkgconfig/fuse" - - unless HOMEBREW_PREFIX.to_s == "/usr/local" - ENV.append_path "HOMEBREW_LIBRARY_PATHS", "/usr/local/lib" - ENV.append_path "HOMEBREW_INCLUDE_PATHS", "/usr/local/include/osxfuse" - end - end end class NonBinaryOsxfuseRequirement < Requirement - fatal true - satisfy(build_env: false) { HOMEBREW_PREFIX.to_s != "/usr/local" || !OsxfuseRequirement.binary_osxfuse_installed? } - - def message - <<-EOS.undent - osxfuse is already installed from the binary distribution and - conflicts with this formula. - EOS - end + fatal false end + +require "extend/os/requirements/osxfuse_requirement" diff --git a/Library/Homebrew/test/os/linux/osxfuse_requirement_spec.rb b/Library/Homebrew/test/os/linux/osxfuse_requirement_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..c45af2fa794d0b57eeadd46d3e7d92e25fdb36b5 --- /dev/null +++ b/Library/Homebrew/test/os/linux/osxfuse_requirement_spec.rb @@ -0,0 +1,9 @@ +require "requirements/osxfuse_requirement" + +describe OsxfuseRequirement do + subject { described_class.new([]) } + + describe "#message" do + its(:message) { is_expected.to match("libfuse is required to install this formula") } + end +end diff --git a/Library/Homebrew/test/os/mac/osxfuse_requirement_spec.rb b/Library/Homebrew/test/os/mac/osxfuse_requirement_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..06d3d885e63d2fffed1c767aabbbc3a02e7773e2 --- /dev/null +++ b/Library/Homebrew/test/os/mac/osxfuse_requirement_spec.rb @@ -0,0 +1,36 @@ +require "requirements/osxfuse_requirement" + +describe OsxfuseRequirement do + subject { described_class.new([]) } + + describe "::binary_osxfuse_installed?" do + it "returns false if fuse.h does not exist" do + allow(File).to receive(:exist?).and_return(false) + expect(described_class).not_to be_binary_osxfuse_installed + end + + it "returns false if osxfuse include directory is a symlink" do + allow(File).to receive(:exist?).and_return(true) + allow(File).to receive(:symlink?).and_return(true) + expect(described_class).not_to be_binary_osxfuse_installed + end + end + + describe "environment" do + it "adds the fuse directories to the appropriate paths" do + expect(ENV).to receive(:append_path).with("PKG_CONFIG_PATH", any_args) + expect(ENV).to receive(:append_path).with("HOMEBREW_LIBRARY_PATHS", any_args) + expect(ENV).to receive(:append_path).with("HOMEBREW_INCLUDE_PATHS", any_args) + subject.modify_build_environment + end + end +end + +describe NonBinaryOsxfuseRequirement do + subject { described_class.new([]) } + + describe "#message" do + msg = /osxfuse is already installed from the binary distribution/ + its(:message) { is_expected.to match(msg) } + end +end