Skip to content

Commit

Permalink
Refactor $foo into HOMEBREW_FOO
Browse files Browse the repository at this point in the history
CONSTANTS are the far saner choice for these important parameters.

Split env up so I can redefine the CONSTANTS in unittest.rb.
  • Loading branch information
mxcl committed Jul 31, 2009
1 parent 1d4e189 commit 118b41b
Show file tree
Hide file tree
Showing 9 changed files with 160 additions and 127 deletions.
2 changes: 1 addition & 1 deletion Library/Formula/pkg-config.rb
Expand Up @@ -8,7 +8,7 @@ class PkgConfig <Formula
#TODO depend on our glib if available. --with-installed-glib

def install
system "./configure --with-pc-path=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:#{$root}/lib/pkgconfig --disable-debug --prefix='#{prefix}'"
system "./configure --with-pc-path=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:#{HOMEBREW_PREFIX}/lib/pkgconfig --disable-debug --prefix='#{prefix}'"
system "make install"
end
end
14 changes: 7 additions & 7 deletions Library/Homebrew/brewkit.rb
Expand Up @@ -31,18 +31,18 @@
ENV['CXX']='g++-4.2'
ENV['MAKEFLAGS']="-j#{OSX::NSProcessInfo.processInfo.processorCount}"

unless $root.to_s == '/usr/local'
ENV['CPPFLAGS']='-I'+$root+'include'
ENV['LDFLAGS']='-L'+$root+'lib'
unless HOMEBREW_PREFIX == '/usr/local'
ENV['CPPFLAGS']="-I#{HOMEBREW_PREFIX}/include"
ENV['LDFLAGS']="-L#{HOMEBREW_PREFIX}/lib"
end

def inreplace(path, before, after)
before=Regexp.escape before.to_s
after=Regexp.escape after.to_s
before=before.gsub "/", "\\\/"
after=after.gsub "/", "\\\/"
before=before.gsub "'", '\''
after=after.gsub "'", '\''
before.gsub! "/", "\\\/"
after.gsub! "/", "\\\/"
before.gsub! "'", '\''
after.gsub! "'", '\''

# TODO this sucks
# either use 'ed', or allow regexp and use a proper ruby function
Expand Down
101 changes: 4 additions & 97 deletions Library/Homebrew/env.rb
Expand Up @@ -15,103 +15,10 @@
# You should have received a copy of the GNU General Public License
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.

require 'pathname'

$root=Pathname.new(__FILE__).dirname.parent.parent.realpath
$formula=$root+'Library'+'Formula'
$cellar=$root+'Cellar'
require 'pathname+yeast'
require 'utils'

HOMEBREW_VERSION='0.3'
HOMEBREW_CACHE=File.expand_path "~/Library/Caches/Homebrew"


######################################################################## utils
def ohai title
n=`tput cols`.strip.to_i-4
puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m"
end


############################################################### class Pathname
# we enhance Pathname to make our code more legible
# of course this kind of thing is evil, but meh
class Pathname
def mv dst
FileUtils.mv to_s, dst
end

def rename dst
dst=Pathname.new dst
dst.unlink if dst.exist?
mv dst
end

def install src
if src.is_a? Array
src.each {|src| install src }
elsif File.exist? src
mkpath
if File.symlink? src
# we use the BSD mv command because FileUtils copies the target and
# not the link! I'm beginning to wish I'd used Python quite honestly!
`mv #{src} #{to_s}`
else
# we mv when possible as it is faster and you should only be using
# this function when installing from the temporary build directory
FileUtils.mv src, to_s
end
end
end

def cp dst
if file?
FileUtils.cp to_s, dst
else
FileUtils.cp_r to_s, dst
end
end

# extended to support the double extensions .tar.gz and .tar.bz2
def extname
/(\.tar\.(gz|bz2))$/.match to_s
return $1 if $1
return File.extname(to_s)
end

# for filetypes we support, basename without extension
def stem
return File.basename(to_s, extname)
end

def version
# eg. boost_1_39_0
/((\d+_)+\d+)$/.match stem
return $1.gsub('_', '.') if $1

# eg. foobar-4.5.1-1
/-((\d+\.)*\d+-\d+)$/.match stem
return $1 if $1

# eg. foobar-4.5.1
/-((\d+\.)*\d+)$/.match stem
return $1 if $1

# eg. foobar-4.5.1b
/-((\d+\.)*\d+([abc]|rc\d))$/.match stem
return $1 if $1

# eg foobar-4.5.0-beta1
/-((\d+\.)*\d+-beta\d+)$/.match stem
return $1 if $1

# eg. foobar4.5.1
/((\d+\.)*\d+)$/.match stem
return $1 if $1

# eg. otp_src_R13B (this is erlang's style)
# eg. astyle_1.23_macosx.tar.gz
stem.scan /_([^_]+)/ do |match|
return match.first if /\d/.match $1
end
end
end
HOMEBREW_PREFIX=Pathname.new(__FILE__).dirname.parent.parent.realpath
HOMEBREW_CELLAR=HOMEBREW_PREFIX+'Cellar'
6 changes: 2 additions & 4 deletions Library/Homebrew/formula.rb
Expand Up @@ -15,8 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.

require 'env'

class BuildError <RuntimeError
def initialize cmd
super "Build failed during: #{cmd}"
Expand Down Expand Up @@ -76,7 +74,7 @@ def initialize name=nil
def prefix
raise "@name.nil!" if @name.nil?
raise "@version.nil?" if @version.nil?
$cellar+@name+@version
HOMEBREW_CELLAR+@name+@version
end
def bin
prefix+'bin'
Expand Down Expand Up @@ -239,7 +237,7 @@ def self.class name
end

def self.path name
$formula+(name.downcase+'.rb')
Pathanme.new(HOMEBREW_PREFIX)+'Formula'+(name.downcase+'.rb')
end

def self.create name
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/keg.rb
Expand Up @@ -15,7 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.

require 'env'
require 'formula'

class Keg
Expand All @@ -29,7 +28,7 @@ def initialize formula
elsif formula.is_a? Pathname
# TODO
elsif formula.is_a? String
path=$cellar+formula
path=HOMEBREW_CELLAR+formula
kids=path.children
raise "Empty installation: #{path}" if kids.length < 1
raise "Multiple versions installed" if kids.length > 1
Expand Down Expand Up @@ -83,12 +82,12 @@ def clean

def rm
# don't rmtree shit if we aren't positive about our location!
raise "Bad stuff!" unless path.parent.parent == $cellar
raise "Bad stuff!" unless path.parent.parent == HOMEBREW_CELLAR

if path.directory?
FileUtils.chmod_R 0777, path # ensure we have permission to delete
path.rmtree # $cellar/foo/1.2.0
path.parent.rmdir if path.parent.children.length == 0 # $cellar/foo
path.rmtree # HOMEBREW_CELLAR/foo/1.2.0
path.parent.rmdir if path.parent.children.length == 0 # HOMEBREW_CELLAR/foo
end
end

Expand All @@ -109,13 +108,14 @@ def __ln start
start=path+start
return unless start.directory?

root=Pathname.new HOMEBREW_PREFIX
start.find do |from|
next if from == start

prune=false

relative_path=from.relative_path_from path
to=$root+relative_path
to=root+relative_path

if from.file?
__symlink_relative_to from, to
Expand Down
100 changes: 100 additions & 0 deletions Library/Homebrew/pathname+yeast.rb
@@ -0,0 +1,100 @@
# Copyright 2009 Max Howell <max@methylblue.com>
#
# This file is part of Homebrew.
#
# Homebrew is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Homebrew is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.

require 'pathname'

# we enhance pathname to make our code more readable
class Pathname
def mv dst
FileUtils.mv to_s, dst
end

def rename dst
dst=Pathname.new dst
dst.unlink if dst.exist?
mv dst
end

def install src
if src.is_a? Array
src.each {|src| install src }
elsif File.exist? src
mkpath
if File.symlink? src
# we use the BSD mv command because FileUtils copies the target and
# not the link! I'm beginning to wish I'd used Python quite honestly!
`mv #{src} #{to_s}`
else
# we mv when possible as it is faster and you should only be using
# this function when installing from the temporary build directory
FileUtils.mv src, to_s
end
end
end

def cp dst
if file?
FileUtils.cp to_s, dst
else
FileUtils.cp_r to_s, dst
end
end

# extended to support the double extensions .tar.gz and .tar.bz2
def extname
/(\.tar\.(gz|bz2))$/.match to_s
return $1 if $1
return File.extname(to_s)
end

# for filetypes we support, basename without extension
def stem
return File.basename(to_s, extname)
end

def version
# eg. boost_1_39_0
/((\d+_)+\d+)$/.match stem
return $1.gsub('_', '.') if $1

# eg. foobar-4.5.1-1
/-((\d+\.)*\d+-\d+)$/.match stem
return $1 if $1

# eg. foobar-4.5.1
/-((\d+\.)*\d+)$/.match stem
return $1 if $1

# eg. foobar-4.5.1b
/-((\d+\.)*\d+([abc]|rc\d))$/.match stem
return $1 if $1

# eg foobar-4.5.0-beta1
/-((\d+\.)*\d+-beta\d+)$/.match stem
return $1 if $1

# eg. foobar4.5.1
/((\d+\.)*\d+)$/.match stem
return $1 if $1

# eg. otp_src_R13B (this is erlang's style)
# eg. astyle_1.23_macosx.tar.gz
stem.scan /_([^_]+)/ do |match|
return match.first if /\d/.match $1
end
end
end
13 changes: 10 additions & 3 deletions Library/Homebrew/unittest.rb
@@ -1,9 +1,16 @@
#!/usr/bin/ruby

$:.unshift File.dirname(__FILE__)
require 'test/unit'
require 'formula'
require 'pathname+yeast'
require 'stringio'
require 'test/unit'
require 'utils'

# these are defined in env usually, but we want a fake place for everything init
HOMEBREW_VERSION='1t'
HOMEBREW_CACHE="/tmp/testbrew"
HOMEBREW_PREFIX=Pathname.new(HOMEBREW_CACHE)+'prefix'
HOMEBREW_CELLAR=Pathname.new(HOMEBREW_CACHE)+'cellar'

class TestFormula <Formula
def initialize url, md5='nomd5'
Expand Down Expand Up @@ -112,7 +119,7 @@ def test_prefix

nostdout do
TestFormula.new(url, md5).brew do |f|
assert_equal File.expand_path(f.prefix), ($cellar+f.name+'0.1').to_s
assert_equal File.expand_path(f.prefix), (HOMEBREW_CELLAR+f.name+'0.1').to_s
assert_kind_of Pathname, f.prefix
end
end
Expand Down
21 changes: 21 additions & 0 deletions Library/Homebrew/utils.rb
@@ -0,0 +1,21 @@
# Copyright 2009 Max Howell <max@methylblue.com>
#
# This file is part of Homebrew.
#
# Homebrew is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Homebrew is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.

def ohai title
n=`tput cols`.strip.to_i-4
puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m"
end

0 comments on commit 118b41b

Please sign in to comment.