MacOS.version#<=> is called many, many times during formula loading with
the same half dozen or so arguments. A typical call to this method
involves:
* a hash lookup to convert a symbol argument to a string
* creation of a throw-away Version object wrapping the argument
* the actual version comparison, which is not cheap
This makes it a prime candidate to be memoized.
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.
The Homebrew command `switch` will now be completed and installed
fomulas can be completed. The installed versions (the last argument of
`brew switch [formula] [version]`) is not completed at this point.
ClosesHomebrew/homebrew#27966.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
Rationale: our arg refurbishment is normally only turned on when
called via the `make` wrapper, for compatibility reasons. However,
there are numberous places we'd like this to be turned on elsewhere,
like software that builds via `python setup.py` where bad flags from
the system python can be pulled in.
This helper appends 'O' to CCCFG, which enables refurbishment for
all calls of the compiler shims.
This method is for internal use only. It is unsuitable for use in
formulae, which should use install_symlink to create relative symlinks.
Thus callers are required to pass a Pathname, not a string, and we can
remove this conditional.
Further, if src is not absolute, then src.relative_path_from(dirname)
will fail. All callers currently pass absolute pathnames. Therefore we
don't need to call expand_path when printing it.