utils: replace shell `which` with native code

Originally written for tigerbrew, but useful enough for core.
Replaces the shelled-out which in utils.rb with a native-ruby
equivalent, which is moderately faster.

Closes #16659.

Signed-off-by: Misty De Meo <mistydemeo@gmail.com>
Replace sceaga/homebrew with mistydemeo/tigerbrew

@sceaga has discontinued his homebrew fork, so tigerbrew is now PPC/
Tiger users' best bet.
Respect BROWSER environment variable
Fix some doublethink in the Xcode module

Xcode.prefix and Xcode.installed? use slightly different heuristics to
find Xcode. In fact, .installed? basically duplicates a portion of the
.prefix logic. In practice, the methods results are usually consistent,
but .installed? does not handle non-standard prefixes if mdfind cannot
locate Xcode (for example, if the user has disabled Spotlight indexing).

Since .installed? is essentially a subset of the .prefix logic, we can
rely on the result from .prefix instead.

Fixes #16790.
Add --homebrew-developer flag
Add Apache version style.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
Add Apache version style test.
Cleanup FormulaInstaller caveats.
Add caveats class and use in brew info.

Probably a better approach than reverted e721c7.

Fixes #16604.
brew-pull: cleanup installation options.
brew-pull: add missing require.
Guess system XQuartz version when mdfind fails

Fixes #16857.
superenv: make HOMEBREW_FILE available

Superenv scripts have a stripped PATH, which may not include
the brew binary itself. Make this explicitly available to
superenv scripts.

Fixes bsdmake wrapper.

Closes #16805.
Closes #16846.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
audit: check conflict names
audit: remove silly audit, remove duplicate audit
Only add -F if the frameworks folder exists

Closes #16901.
Add support for external ocaml deps via opam

Closes #16280.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
brew update: warn about adamv/homebrew-alt
Document HOMEBREW_BROWSER and BROWSER
Allow tests to be specified in the DSL

Tests can now be specified as a block in the DSL. A temporary test
directory is set up automatically when calling Formula#test. The
semantics of the test remain the same: the block can either raise an
exception or return false to signal failure.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>