OSX Homebrew error: uninitialized constant MACOS
The MACOS
constant is set in globals.rb
. It seems like you may have a borked installation of Homebrew.
Check the output of brew doctor
for any suggestions.
If that doesn't help please update with the results of brew --config
.
If all else fails you may want to try re-installing Homebrew.
UPDATE:
Since this was a previous user's machine make sure your user is the owner of /usr/local and everything within. Fix it with sudo chown -R $USER /usr/local
.
I'm pretty sure the root cause of this is a failed upgrade attempt to Homebrew 0.9.5 from a much earlier version. Basically, if you run brew update
as opposed to sudo brew update
a portion of files are updated, while others are not. Here's what worked for me:
Edit
/usr/local/bin/brew
(it's just a Ruby file, not a compiled binary, so any text editor will do). You'll find a block like:if MACOS and MACOS_VERSION < 10.5 abort <<-EOABORT.undent Homebrew requires Leopard or higher. For Tiger support, see: https://github.com/mistydemeo/tigerbrew EOABORT end
Comment this out. Even if you don't know Ruby, you can probably intuit what this is doing—it's checking to see if you have a current version of OSX. Assuming that you do in fact have this version, this sanity check isn't necessary. Brew is still broken, but at least now it will load far enough to give error messages.
Run
sudo brew update
, spoiler alert: it fails, but this time with a meaningful error message:$ brew update error: Your local changes to the following files would be overwritten by merge: [giant list of files here]
Well, today I learned that
brew update
is just a wrapper forgit pull
because anyone who has worked with git knows that error message. We can fix this too.Switch into the homebrew git repository with
cd /usr/local
and give the commandgit reset --hard FETCH_HEAD
. This piece found here.Give the command
sudo brew update
. Homebrew should now update successfully and work properly!
Once the system is working again, you can actually kind of see why an error like this would have occurred. For one, usr/local/bin/brew
has been completely rewriten and isn't even Ruby anymore, and most of its configuration has been moved into /usr/local/Library/brew.rb
which no longer uses the constants MACOS
or MACOS_VERSION
constants, as they have been replaced by the more object oriented OS.mac
and MacOS.version
.