Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add arch_only to caveats mini-DSL #2592

Merged
merged 1 commit into from
Jan 28, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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