build.without? seemingly always returns true for requirements that are
neither recommended nor optional so check these before deciding not to
install a default formula.
ClosesHomebrew/homebrew#31511.
Use the build options instead of whether the requirement is optional to
work out if it is needed. This handles the case of an optional
requirement becoming needed because it's a dependency for another
formula.
ClosesHomebrew/homebrew#31476.
(Commit message written by Mike McQuaid)
With the change in a0a93f1b3b7b2be9b8a319be91086ffe220f8e32
unfortunately requirements with default formulae no longer could be
resolved when the default formulae were not installed. This commit
fixes this problem.
ClosesHomebrew/homebrew#31476.
ClosesHomebrew/homebrew#31444.
ClosesHomebrew/homebrew#30901.
ClosesHomebrew/homebrew#31471.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
If the build process tries to write more bytes than will fit in the pipe
buffer, it will block until the parent process does a read. However, the
parent process will only do a read after the child process has exited or
died, leading to a deadlock. Fix this by doing the read in a separate
thread.
When Python is required or recommended then always bottle against the
Homebrew provided Python rather than the system one. This will allow
bottling of packages that have a hard dependency on Python bindings
(which can’t be shared between system and Homebrew Pythons).
ClosesHomebrew/homebrew#27112.
This should give us a bit of control over what e.g. Boxen are doing
whilst at the same time stopping us from accidentally breaking each
other's stuff every so often.
I'm aware this may be somewhat controversial so I'm open to other
approaches.
Symlinks in opt and LinkedKegs point directly at a keg in the cellar, so
only resolving one symlink should suffice, and make it clear what path
we are actually interested in.
Since the primary FormulaInstaller instance handles the entire
dependency tree, we set ignore_deps to true when instantiated the class
for each dependency in over to avoid repeated work.
However, now that arguments for the build process are whitelisted
instead of blacklisted, we have begun adding "--ignore-dependencies" if
ignore_deps is true.
This isn't quite right when we are installing a dependency. We want to
skip the calculation and installation of *its* dependencies, since the
primary installer takes care of that, but we still want to consider them
in the build process, so that they are available in the build
environment.