test-bot expects the dependencies returned from SoftwareSpec#deps to
satisfy is_a?(TapDependency) if they come from a tap which might need to
be tapped.
Add special :python3 dependency tag to LANGUAGE_MODULES in
dependency_collector.
ClosesHomebrew/homebrew#37898.
Signed-off-by: Tim D. Smith <git@tim-smith.us>
We have an upstream signed binary available! Big big love to Mattias
for this.
This PR converts all the existing tuntap dependencies into
binary-friendly tuntap dependencies, and adds a tuntap dependency to
requirements to look for the kexts.
ClosesHomebrew/homebrew#33894.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
The search mechanism in MacOS::Xcode is very slow. It requires shelling
out at least twice, and possibly a third time (in the CLT-only case).
Calling provides_cvs? activates this in order to determine the Xcode
version. But if we know that there isn't an Xcode available for the
current OS that meets the criteria, we can avoid this check entirely.
Note, in the explict form:
PythonInstalled.new('2.7') => :recommended
the tag :recommended is ignored (not a limitation
of PythonInstalled itself). One solution was to write
PythonInstalled.new('2.7', [:recommended])
but that is not as beautiful as we like it.
Therefore, now it is possible to:
depends_on :python => ['2.7', :recommended]
Only the first tag is attempted to be parsed as
a version specifyer "x" or "x.y" or "x.y.z"...
* FixesHomebrew/homebrew#20572 by tweaking the logic that decides
which python is used by the `python` object
inside a formula. There was a bug when on 10.6
there is no Python 2.7 but a :recommended
Python was still treated as being available.
* Use the user's PATH when looking for an external
Python. Until now only brewed or OS X system's
python have been found by `depends_on :python`.
But now we support any Python in PATH (e.g.
pyenv's python).
* Further, instead of handling python modules
and import tests in LanguageModuleDependency,
these are now handled by:
depends_on :python => 'numpy' # for example
The old style
depends_on 'numpy' => :python
is still supported and is only an alias
for the newer style (only for :python, the
other languages are not altered by this commit).
The reasoning is that if a formula requires
a python module, it basically also needs
python itself - and further that specific
version of python has to provide the module.
So the `PythonInstalled` is the natural place
to check for the availability of a python
module.
Using a python module and other tags like
:optional or :recommended is done like so:
depends_on :python => [:optional, 'numpy']
Specifying another PyPi (Python Package index)
name than the module import name is seldom used
but supported, too:
depends_on :python => ['enchant'=>'pyenchant']
A last note: For clarity, you can define
multiple depends_on statements with different
modules to be importable.`
This allows formulae which won't build with Tiger's ld to conditionally
request a dependency on the ld64 formula. This modifies the build
environment appropriately, and will only be active on Tiger.
New `depends_on :python` Dependency.
New `depends_on :python3` Dependency.
To avoid having multiple formulae with endings -py2 and -py3,
we will handle support for different pythons (2.x vs. 3.x)
in the same formula.
Further brewed vs. external python will be transparently supported.
The formula also gets a new object `python`, which is false if
no Python is available or the user has disabled it. Otherwise
it is defined and provides several support methods:
python.site_packages # the site-packages in the formula's Cellar
python.global_site_packages
python.binary # the full path to the python binary
python.prefix
python.version
python.version.major
python.version.minor
python.xy # => e.g. "python2.7"
python.incdir # includes of python
python.libdir # the python dylib library
python.pkg_config_path # used internally by brew
python.from_osx?
python.framework?
python.universal?
python.pypy?
python.standard_caveats # Text to set PYTHONPATH for python.from_osx?
python.if3then3 # => "" for 2.x and to "3" for 3.x.
Further, to avoid code duplication, `python` takes an optional
block that is run twice if the formula defines depends_on
:python AND :python3.
python do
system python, 'setup.py', "--prefix=#{prefix}"
end
Read more in the Homebrew wiki.
By always passing around a single, unnested array rather than splatting
and then defensively flattening and compacting things, we can avoid
allocating a bunch of unnecessary arrays. This gives a performance boost
of roughly 4% when enumerating 2500 formulae, and has the side effect of
cleaning up the dependency API.
Currently we check if "tag" is present in LANGUAGE_MODULES for every
String dep, even if tag is nil. Stop doing this, and make the
LANGUAGE_MODULES array into a Set instead to improve lookup performance.