aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/dependency.rb
AgeCommit message (Collapse)Author
2017-10-08Clean up code style and remove `.rubocop_todo.yml`.Markus Reiter
2017-09-24Rubocop: automatic rule fixes.Mike McQuaid
2017-06-28Refactor using `Forwardable` and `DelegateClass`.Markus Reiter
2017-01-16Revert "Revert "uses: properly handle untapped fo…Alyssa Ross
…rmulae in recursive dependency expansion"" This reverts commit dc9819b86c60b5c6fd10373ff318d8ef60f97d52.
2017-01-07Revert "uses: properly handle untapped formulae in recursive dependency ↵Mike McQuaid
expansion"
2017-01-05dependency: TapDependency#tap returns a TapAlyssa Ross
Previously, this returned a String, but a Tap instance seems much more sensible. I couldn't find anywhere this method was actually used, so the change shouldn't break anything.
2016-12-10Fix dependency option handling.Mike McQuaid
- formula_installer: only recompute dependencies when necessary i.e. when a bottle pour fails. - formula_installer: re-add accidentally remove dependency options - dependency: missing options are only those that actually exist on a formula
2016-09-23Style/Alias: Prefer `alias`.Markus Reiter
2016-02-07Dependency.expand: ensure pop stackXu Cheng
During the dependencies expansion, there may be errors (e.g. FormulaUnavaiableError). As result, some deps will be left behind in the stack and interfere afterwards dependencies expansion. So let's ensure stack clean for each expansions. Fixes Homebrew/homebrew#48834.
2016-01-18Revert "Revert "dependency: don't recurse infinitely.""Mike McQuaid
This reverts commit fa43883dd1cd82f234b79c4a322339f03b9c098d. Closes Homebrew/homebrew#48187.
2016-01-17Revert "dependency: don't recurse infinitely."Mike McQuaid
This reverts commit 16ffbe1a2b2d99da42481dc50f70dbfee4472da6.
2016-01-17dependency: don't recurse infinitely.Mike McQuaid
If we have a dependency cycle ensure that infinite recursion does not result by storing state in a stack which we push/pop from for each level of recursion and verify that we haven’t been through this dependency already. Closes Homebrew/homebrew#47933. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
2015-12-17dependency: fix merging tags in 'merge_repeats'Martin Afanasjew
While it may suffice to merge string and non-reserved tags by forming a union of all tags of dependencies of the same name, this approach fails to work for the reserved tags. These are now merged such that the most restrictive tag (meaning sometimes an empty tag) is preserved. The previous behavior caused essential dependencies to be omitted and builds to fail in response. E.g., multiple `:fortran` dependencies with tags `[]`, `[:recommended]`, and `[:optional]` would have been expanded and merged to `"gcc"` with tags `[:recommended, :optional]`, causing it to be no longer seen as a required dependency. Closes Homebrew/homebrew#47040. Signed-off-by: Martin Afanasjew <martin@afanasjew.de>
2015-12-15Allow multiple option_names in dep/reqs.Mike McQuaid
This means that dependencies can be merged but still maintain all their option names. Closes Homebrew/homebrew#46916. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
2015-08-20TapDependency: allow passing arbitrary option_nameXu Cheng
2015-08-06favor flat_map over map...flattenXu Cheng
2015-08-03Core files style updates.BrewTestBot
Closes Homebrew/homebrew#42354. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
2014-12-29TapDependency: add tap accessor.Mike McQuaid
2014-11-21Hashes do not iterate in insertion order on Ruby 1.8Jack Nagel
2014-11-21Fix dependency equalityJack Nagel
2014-08-27Rewrite missing_options in a more obvious wayJack Nagel
2014-08-23Remove an unnecessary default argumentJack Nagel
2014-08-11Replace the build object rather than mutate itJack Nagel
2014-07-30Remove confusing implicit options handlingJack Nagel
This code is supposed to allow depends_on "foo" => "with-bar" to work when foo has only a "without-bar" option. The options system was not designed to support this. Unfortunately, it was bolted on anyway. The implementation is extremely difficult to understand, and it only works for certain types of options, which is confusing from a user's point of view. Luckily, no formulae in core or the official taps rely on the behavior in order to function. It is hindering progress in improving this code, so I am removing it.
2014-07-01Always use class.name to build inspect stringsJack Nagel
2014-06-22Move deprecated Formula class methods to compatJack Nagel
These have all been moved to Formulary.
2014-02-28Add TapDependencyJack Nagel
2014-02-27Eliminate mutation of Dependency objectsJack Nagel
2014-02-27Pass expansion-time build options to install_dependencyJack Nagel
2014-02-27Apply cyclic dependency hack unconditionallyJack Nagel
2014-02-27Remove requested? dependency magicJack Nagel
2014-02-13Eliminate unnecessary arrays and call to flattenJack Nagel
2014-01-03dependency: don't try and expand yourself.Mike McQuaid
This can happen on e.g. fossil where the dependency HEAD requires having an install of fossil in order to check it out. Bit of a silly edge case but this handles it. Fixes Homebrew/homebrew#25605
2013-12-09Ensure option names are consistent for default formula requirementsJack Nagel
2013-12-09Pass deps collection to be expanded as a parameterJack Nagel
2013-11-13Prevent deps of build-time deps from leaking into the build environmentJack Nagel
When decided what dependencies should be part of the build environment (and have appropriate entries added to variables like PKG_CONFIG_PATH), we select the entire dependency tree except for (1) inactive optional and recommended deps (2) indirect build-time deps (i.e., build-time deps of other deps) There is a third category that sould be excluded: dependencies of direct build-time deps. These are irrelevant to the build, and including them can cause unexpected linkages.
2013-11-05Dependency: tighten equality checkJack Nagel
2013-09-27Allow Dependency objects to be marshaledJack Nagel
When an exception is raised in the build process, it is marshaled and sent to the main process over a pipe. The marshaled exception has a reference to the formula, so the formula and all objects it references are marshaled as well. Previously this did not include dependencies, as they were stored only on the class and not referenced by an instance variable. However, now they are stored on SoftwareSpec instances, to which the formula *does* have a direct reference, so they must be marshalable.
2013-08-20Avoid the need to compact the expanded deps arrayJack Nagel
2013-07-22Update commentJack Nagel
2013-07-22Check deps of satisfied depsJack Nagel
2013-06-27Fix some #eql? correctness issuesJack Nagel
The implementation of #eql? and #hash should ensure that if a.eql?(b), then a.hash == b.hash, but #eql? itself should not *depend* on #hash. For example, given class Thingy def eql? instance_of?(other.class) && hash == other.hash end def hash [name, *tags].hash end end if #hash produces a collision for different values of [name, *tags], two Thingy objects will appear to be eql?, even though this is not the case. Instead, #eql? should depend on the equality of name and tags directly.
2013-06-25Uniqify tags when merging dependenciesJack Nagel
2013-06-24Copy env_proc when merging depsJack Nagel
2013-06-08Use actual class of dep when recreating merged depsJack Nagel
Refs Homebrew/homebrew#19182.
2013-06-08Merge repeated deps with differing optionsJack Nagel
When expanding dependencies, repeated deps are treated as equal and all but the first are discarded when #uniq is called on the resulting array. However, they may have different sets of options attached, so we cannot assume they are the same. After the initial expansion, we group them by name and then create a new Dependency object for each name, merging the options from each group. Fixes Homebrew/homebrew#20335.
2013-06-07Add Dependency#inspectJack Nagel
2013-06-03Allow explicit conversion of requirements to depsJack Nagel
Fixes Homebrew/homebrew#19857.
2013-06-03Python 2.x and 3.x supportSamuel John
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.
2013-05-25Dependency: use instanceof? in eql?Jack Nagel
This matches the eql? definition for requirements.