diff options
| author | Bob W. Hogg | 2017-02-20 09:42:43 -0800 | 
|---|---|---|
| committer | Bob W. Hogg | 2017-04-15 21:20:09 -0700 | 
| commit | 608d72a35fc437a0cf3e8da53729e479cde0be3d (patch) | |
| tree | 3f7534ed8fb65da220b7a6a227f7d27d53b0f678 | |
| parent | 02f0189335907805d422c817462674081f48ab60 (diff) | |
| download | brew-608d72a35fc437a0cf3e8da53729e479cde0be3d.tar.bz2 | |
OsxfuseRequirement: Port to Linux
6 files changed, 128 insertions, 27 deletions
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 000000000..3fd847bc4 --- /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 000000000..8c898a272 --- /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 000000000..5f56d48c4 --- /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 d5a341567..9a07209d4 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 000000000..c45af2fa7 --- /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 000000000..06d3d885e --- /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  | 
