mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
101 lines
2.5 KiB
Ruby
101 lines
2.5 KiB
Ruby
![]() |
# 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
|