From 23a38e0ff6beb26f86eca0c56b25d6100375b60d Mon Sep 17 00:00:00 2001 From: ilovezfs Date: Fri, 5 Aug 2016 00:20:20 -0700 Subject: virtualenv_install_with_resources: select correct python `virtualenv_install_with_resources` will now attempt to guess the desired Python based on the active build options and based on the dependencies and requirements. When the situation is ambiguous (e.g., `depends_on :python3` and `build.with? "python"` is true) raise `FormulaAmbiguousPythonError` unless `:using => "python"` or `:using => "python3"` has been passed to resolve the ambiguity. In most cases, this will allow ``` virtualenv_create(libexec, "python3") virtualenv_install_with_resources ``` to be changed to just ``` virtualenv_install_with_resources ``` --- Library/Homebrew/language/python.rb | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'Library/Homebrew/language/python.rb') diff --git a/Library/Homebrew/language/python.rb b/Library/Homebrew/language/python.rb index 95259c841..b28b1ca60 100644 --- a/Library/Homebrew/language/python.rb +++ b/Library/Homebrew/language/python.rb @@ -139,11 +139,33 @@ module Language venv end + # Returns true if a formula option for the specified python is currently + # active or if the specified python is required by the formula. Valid + # inputs are "python", "python3", :python, and :python3. Note that + # "with-python", "without-python", "with-python3", and "without-python3" + # formula options are handled correctly even if not associated with any + # corresponding depends_on statement. + # @api private + def needs_python?(python) + return true if build.with?(python) + (requirements.to_a | deps).any? { |r| r.name == python && r.required? } + end + # Helper method for the common case of installing a Python application. # Creates a virtualenv in `libexec`, installs all `resource`s defined - # on the formula, and then installs the formula. - def virtualenv_install_with_resources - venv = virtualenv_create(libexec) + # on the formula, and then installs the formula. An options hash may be + # passed (e.g., :using => "python3") to override the default, guessed + # formula preference for python or python3, or to resolve an ambiguous + # case where it's not clear whether python or python3 should be the + # default guess. + def virtualenv_install_with_resources(options = {}) + python = options[:using] + if python.nil? + wanted = %w[python python3].select { |py| needs_python?(py) } + raise FormulaAmbiguousPythonError, self if wanted.size > 1 + python = wanted.first || "python" + end + venv = virtualenv_create(libexec, python) venv.pip_install resources venv.pip_install_and_link buildpath venv -- cgit v1.2.3