Skip to content

Commit

Permalink
add arch_only to caveats mini-DSL
Browse files Browse the repository at this point in the history
Relevant to points raised by @goxberry in Homebrew#2581
  • Loading branch information
rolandwalker committed Jan 24, 2014
1 parent 926067b commit 9d2d6e3
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ The following methods may be called to generate standard warning messages:
| `logout` | The user should log out and log back in to complete installation
| `reboot` | The user should reboot to complete installation
| `files_in_usr_local` | The Cask installs files to `/usr/local`, which may confuse Homebrew
| `arch_only(list)` | The Cask only supports certain architectures. Currently valid elements of `list` are `intel-32` and `intel-64`

Example:

Expand Down
27 changes: 27 additions & 0 deletions lib/cask/caveats.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,33 @@ def reboot
EOS
end

# minor bug: because output from arch_only is conditional, the
# existence of this directive causes "===> Caveats" header to
# appear even if no warning is output. One workaround would
# be to spin out arch-detection from caveats into a separate
# Cask stanza, and that is probably a sensible design.
def arch_only(*supported_arches)
known_arches = %w{intel-64 intel-32}
supported_arches.each do |arch|
unless known_arches.include?(arch)
# There ought to be some standard exceptions for Cask validation errors
raise "The only valid arguments to caveats arch_only in #{@cask} are: #{known_arches.join(', ')}"
end
end
this_arch = "#{Hardware::CPU.type}-#{Hardware::CPU.bits}"
unless supported_arches.include?(this_arch)
puts <<-EOS.undent
Cask #{@cask} provides binaries for these architectures: #{supported_arches.join(', ')}.
But you appear to be running on an unsupported architecture:
#{this_arch}
Therefore #{@cask} is not expected to work on your system.
EOS
end
end

def method_missing(method, *args)
poo = <<-EOPOO.undent
Unexpected method #{method} called on caveats in Cask #{@cask}.
Expand Down
5 changes: 5 additions & 0 deletions test/support/Casks/with-caveats.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@ class WithCaveats < TestCask
puts 'Custom text via puts followed by DSL-generated text:'
manual_installer('Installer.app')
end
caveats do
# since both valid arches are specified, no output should be
# generated here during the test
arch_only('intel-32', 'intel-64')
end
end

0 comments on commit 9d2d6e3

Please sign in to comment.