Use File::PATH_SEPARATOR globally instead of ':'
On Unix, the path separator is ':', whereas on Windows, it is ';'. This is the first of a series of patch to bring macbrew's and winbrew's codebases closer together. The main places the magic constant ':' was being used were: - the $PATH environment variable - CMAKE-related environment variables - pkg-config related environment variables Closes Homebrew/homebrew#21921. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
parent
809a52a6a3
commit
52ace99f14
@ -42,7 +42,7 @@ class Checks
|
||||
|
||||
############# HELPERS
|
||||
def paths
|
||||
@paths ||= ENV['PATH'].split(':').collect do |p|
|
||||
@paths ||= ENV['PATH'].split(File::PATH_SEPARATOR).collect do |p|
|
||||
begin
|
||||
File.expand_path(p).chomp('/')
|
||||
rescue ArgumentError
|
||||
@ -68,7 +68,7 @@ class Checks
|
||||
# Sorry for the lack of an indent here, the diff would have been unreadable.
|
||||
# See https://github.com/mxcl/homebrew/pull/9986
|
||||
def check_path_for_trailing_slashes
|
||||
bad_paths = ENV['PATH'].split(':').select { |p| p[-1..-1] == '/' }
|
||||
bad_paths = ENV['PATH'].split(File::PATH_SEPARATOR).select { |p| p[-1..-1] == '/' }
|
||||
return if bad_paths.empty?
|
||||
s = <<-EOS.undent
|
||||
Some directories in your path end in a slash.
|
||||
|
||||
@ -12,7 +12,7 @@ module Homebrew extend self
|
||||
ENV.setup_build_environment
|
||||
if superenv?
|
||||
# superenv stopped adding brew's bin but generally user's will want it
|
||||
ENV['PATH'] = ENV['PATH'].split(':').insert(1, "#{HOMEBREW_PREFIX}/bin").join(':')
|
||||
ENV['PATH'] = ENV['PATH'].split(File::PATH_SEPARATOR).insert(1, "#{HOMEBREW_PREFIX}/bin").join(File::PATH_SEPARATOR)
|
||||
end
|
||||
ENV['PS1'] = 'brew \[\033[1;32m\]\w\[\033[0m\]$ '
|
||||
ENV['VERBOSE'] = '1'
|
||||
|
||||
@ -36,7 +36,7 @@ module SharedEnvExtension
|
||||
end
|
||||
end
|
||||
def prepend_path key, path
|
||||
prepend key, path, ':' if File.directory? path
|
||||
prepend key, path, File::PATH_SEPARATOR if File.directory? path
|
||||
end
|
||||
def remove keys, value
|
||||
Array(keys).each do |key|
|
||||
@ -65,9 +65,9 @@ module SharedEnvExtension
|
||||
|
||||
def userpaths!
|
||||
paths = ORIGINAL_PATHS.map { |p| p.realpath.to_s rescue nil } - %w{/usr/X11/bin /opt/X11/bin}
|
||||
self['PATH'] = paths.unshift(*self['PATH'].split(":")).uniq.join(":")
|
||||
self['PATH'] = paths.unshift(*self['PATH'].split(PATH_SEPARATOR)).uniq.join(File::PATH_SEPARATOR)
|
||||
# XXX hot fix to prefer brewed stuff (e.g. python) over /usr/bin.
|
||||
prepend 'PATH', HOMEBREW_PREFIX/'bin', ':'
|
||||
prepend 'PATH', HOMEBREW_PREFIX/'bin', File::PATH_SEPARATOR
|
||||
end
|
||||
|
||||
def fortran
|
||||
|
||||
@ -72,9 +72,9 @@ module Stdenv
|
||||
# For Xcode 4.3 (*without* the "Command Line Tools for Xcode") compiler and tools inside of Xcode:
|
||||
if not MacOS::CLT.installed? and MacOS::Xcode.installed? and MacOS::Xcode.version >= "4.3"
|
||||
# Some tools (clang, etc.) are in the xctoolchain dir of Xcode
|
||||
append 'PATH', "#{MacOS.xctoolchain_path}/usr/bin", ":" if MacOS.xctoolchain_path
|
||||
append 'PATH', "#{MacOS.xctoolchain_path}/usr/bin", File::PATH_SEPARATOR if MacOS.xctoolchain_path
|
||||
# Others are now at /Applications/Xcode.app/Contents/Developer/usr/bin
|
||||
append 'PATH', "#{MacOS.dev_tools_path}", ":"
|
||||
append 'PATH', "#{MacOS.dev_tools_path}", File::PATH_SEPARATOR
|
||||
end
|
||||
end
|
||||
|
||||
@ -84,7 +84,7 @@ module Stdenv
|
||||
paths << HOMEBREW_PREFIX/'share/pkgconfig'
|
||||
paths << HOMEBREW_REPOSITORY/"Library/ENV/pkgconfig/#{MacOS.version}"
|
||||
paths << '/usr/lib/pkgconfig'
|
||||
paths.select { |d| File.directory? d }.join(':')
|
||||
paths.select { |d| File.directory? d }.join(File::PATH_SEPARATOR)
|
||||
end
|
||||
|
||||
def deparallelize
|
||||
@ -217,15 +217,15 @@ module Stdenv
|
||||
# Extra setup to support Xcode 4.3+ without CLT.
|
||||
self['SDKROOT'] = sdk
|
||||
# Tell clang/gcc where system include's are:
|
||||
append 'CPATH', "#{sdk}/usr/include", ":"
|
||||
append 'CPATH', "#{sdk}/usr/include", File::PATH_SEPARATOR
|
||||
# The -isysroot is needed, too, because of the Frameworks
|
||||
append_to_cflags "-isysroot #{sdk}"
|
||||
append 'CPPFLAGS', "-isysroot #{sdk}"
|
||||
# And the linker needs to find sdk/usr/lib
|
||||
append 'LDFLAGS', "-isysroot #{sdk}"
|
||||
# Needed to build cmake itself and perhaps some cmake projects:
|
||||
append 'CMAKE_PREFIX_PATH', "#{sdk}/usr", ':'
|
||||
append 'CMAKE_FRAMEWORK_PATH', "#{sdk}/System/Library/Frameworks", ':'
|
||||
append 'CMAKE_PREFIX_PATH', "#{sdk}/usr", File::PATH_SEPARATOR
|
||||
append 'CMAKE_FRAMEWORK_PATH', "#{sdk}/System/Library/Frameworks", File::PATH_SEPARATOR
|
||||
end
|
||||
end
|
||||
|
||||
@ -250,24 +250,24 @@ module Stdenv
|
||||
|
||||
def x11
|
||||
# There are some config scripts here that should go in the PATH
|
||||
append 'PATH', MacOS::X11.bin, ':'
|
||||
append 'PATH', MacOS::X11.bin, File::PATH_SEPARATOR
|
||||
|
||||
# Append these to PKG_CONFIG_LIBDIR so they are searched
|
||||
# *after* our own pkgconfig directories, as we dupe some of the
|
||||
# libs in XQuartz.
|
||||
append 'PKG_CONFIG_LIBDIR', MacOS::X11.lib/'pkgconfig', ':'
|
||||
append 'PKG_CONFIG_LIBDIR', MacOS::X11.share/'pkgconfig', ':'
|
||||
append 'PKG_CONFIG_LIBDIR', MacOS::X11.lib/'pkgconfig', File::PATH_SEPARATOR
|
||||
append 'PKG_CONFIG_LIBDIR', MacOS::X11.share/'pkgconfig', File::PATH_SEPARATOR
|
||||
|
||||
append 'LDFLAGS', "-L#{MacOS::X11.lib}"
|
||||
append 'CMAKE_PREFIX_PATH', MacOS::X11.prefix, ':'
|
||||
append 'CMAKE_INCLUDE_PATH', MacOS::X11.include, ':'
|
||||
append 'CMAKE_PREFIX_PATH', MacOS::X11.prefix, File::PATH_SEPARATOR
|
||||
append 'CMAKE_INCLUDE_PATH', MacOS::X11.include, File::PATH_SEPARATOR
|
||||
|
||||
append 'CPPFLAGS', "-I#{MacOS::X11.include}"
|
||||
|
||||
append 'ACLOCAL_PATH', MacOS::X11.share/'aclocal', ':'
|
||||
append 'ACLOCAL_PATH', MacOS::X11.share/'aclocal', File::PATH_SEPARATOR
|
||||
|
||||
unless MacOS::CLT.installed?
|
||||
append 'CMAKE_PREFIX_PATH', MacOS.sdk_path/'usr/X11', ':'
|
||||
append 'CMAKE_PREFIX_PATH', MacOS.sdk_path/'usr/X11', File::PATH_SEPARATOR
|
||||
append 'CPPFLAGS', "-I#{MacOS::X11.include}/freetype2"
|
||||
append 'CFLAGS', "-I#{MacOS::X11.include}"
|
||||
end
|
||||
|
||||
@ -96,7 +96,7 @@ module Superenv
|
||||
# so xcrun may not be able to find it
|
||||
if self['HOMEBREW_CC'] == 'gcc-4.2'
|
||||
apple_gcc42 = Formula.factory('apple-gcc42') rescue nil
|
||||
append('PATH', apple_gcc42.opt_prefix/'bin', ':') if apple_gcc42
|
||||
append('PATH', apple_gcc42.opt_prefix/'bin', File::PATH_SEPARATOR) if apple_gcc42
|
||||
end
|
||||
end
|
||||
|
||||
@ -303,6 +303,6 @@ end
|
||||
|
||||
class Array
|
||||
def to_path_s
|
||||
map(&:to_s).uniq.select{|s| File.directory? s }.join(':').chuzzle
|
||||
map(&:to_s).uniq.select{|s| File.directory? s }.join(File::PATH_SEPARATOR).chuzzle
|
||||
end
|
||||
end
|
||||
|
||||
@ -98,7 +98,7 @@ HOMEBREW_PULL_OR_COMMIT_URL_REGEX = 'https:\/\/github.com\/(\w+)\/homebrew(-\w+)
|
||||
|
||||
require 'compat' unless ARGV.include? "--no-compat" or ENV['HOMEBREW_NO_COMPAT']
|
||||
|
||||
ORIGINAL_PATHS = ENV['PATH'].split(':').map{ |p| Pathname.new(p).expand_path rescue nil }.compact.freeze
|
||||
ORIGINAL_PATHS = ENV['PATH'].split(File::PATH_SEPARATOR).map{ |p| Pathname.new(p).expand_path rescue nil }.compact.freeze
|
||||
|
||||
SUDO_BAD_ERRMSG = <<-EOS.undent
|
||||
You can use brew with sudo, but only if the brew executable is owned by root.
|
||||
|
||||
@ -62,11 +62,11 @@ def python_helper(options={:allowed_major_versions => [2, 3]}, &block)
|
||||
# so that lib points to the HOMEBREW_PREFIX/Cellar/<formula>/<version>/lib
|
||||
puts "brew: Prepending to PYTHONPATH: #{py.site_packages}" if ARGV.verbose?
|
||||
mkdir_p py.site_packages
|
||||
ENV.prepend 'PYTHONPATH', py.site_packages, ':'
|
||||
ENV.prepend 'PYTHONPATH', py.site_packages, File::PATH_SEPARATOR
|
||||
ENV['PYTHON'] = py.binary
|
||||
ENV.prepend 'CMAKE_INCLUDE_PATH', py.incdir, ':'
|
||||
ENV.prepend 'PKG_CONFIG_PATH', py.pkg_config_path, ':' if py.pkg_config_path
|
||||
ENV.prepend 'PATH', py.binary.dirname, ':' unless py.from_osx?
|
||||
ENV.prepend 'CMAKE_INCLUDE_PATH', py.incdir, File::PATH_SEPARATOR
|
||||
ENV.prepend 'PKG_CONFIG_PATH', py.pkg_config_path, File::PATH_SEPARATOR if py.pkg_config_path
|
||||
ENV.prepend 'PATH', py.binary.dirname, File::PATH_SEPARATOR unless py.from_osx?
|
||||
#Note: Don't set LDFLAGS to point to the Python.framework, because
|
||||
# it breaks builds (for example scipy.)
|
||||
|
||||
|
||||
@ -122,7 +122,7 @@ class PythonInstalled < Requirement
|
||||
else
|
||||
# Using the ORIGINAL_PATHS here because in superenv, the user
|
||||
# installed external Python is not visible otherwise.
|
||||
which(@name, ORIGINAL_PATHS.join(':'))
|
||||
which(@name, ORIGINAL_PATHS.join(File::PATH_SEPARATOR))
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -252,12 +252,12 @@ class PythonInstalled < Requirement
|
||||
file.write(sitecustomize)
|
||||
|
||||
# For non-system python's we add the opt_prefix/bin of python to the path.
|
||||
ENV.prepend 'PATH', binary.dirname, ':' unless from_osx?
|
||||
ENV.prepend 'PATH', binary.dirname, File::PATH_SEPARATOR unless from_osx?
|
||||
|
||||
ENV['PYTHONHOME'] = nil # to avoid fuck-ups.
|
||||
ENV['PYTHONPATH'] = if brewed? then nil; else global_site_packages.to_s; end
|
||||
ENV.append 'CMAKE_INCLUDE_PATH', incdir, ':'
|
||||
ENV.append 'PKG_CONFIG_PATH', pkg_config_path, ':' if pkg_config_path
|
||||
ENV.append 'CMAKE_INCLUDE_PATH', incdir, File::PATH_SEPARATOR
|
||||
ENV.append 'PKG_CONFIG_PATH', pkg_config_path, File::PATH_SEPARATOR if pkg_config_path
|
||||
# We don't set the -F#{framework} here, because if Python 2.x and 3.x are
|
||||
# used, `Python.framework` is ambiguous. However, in the `python do` block
|
||||
# we can set LDFLAGS+="-F#{framework}" because only one is temporarily set.
|
||||
|
||||
@ -33,7 +33,7 @@ MACOS = true
|
||||
MACOS_FULL_VERSION = `/usr/bin/sw_vers -productVersion`.chomp
|
||||
MACOS_VERSION = ENV.fetch('MACOS_VERSION') { MACOS_FULL_VERSION[/10\.\d+/] }.to_f
|
||||
|
||||
ORIGINAL_PATHS = ENV['PATH'].split(':').map{ |p| Pathname.new(p).expand_path rescue nil }.compact.freeze
|
||||
ORIGINAL_PATHS = ENV['PATH'].split(File::PATH_SEPARATOR).map{ |p| Pathname.new(p).expand_path rescue nil }.compact.freeze
|
||||
|
||||
module Homebrew extend self
|
||||
include FileUtils
|
||||
|
||||
@ -167,7 +167,7 @@ def puts_columns items, star_items=[]
|
||||
end
|
||||
|
||||
def which cmd, path=ENV['PATH']
|
||||
dir = path.split(':').find {|p| File.executable? File.join(p, cmd)}
|
||||
dir = path.split(File::PATH_SEPARATOR).find {|p| File.executable? File.join(p, cmd)}
|
||||
Pathname.new(File.join(dir, cmd)) unless dir.nil?
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user