This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

vim: Preliminary Python 3 support

Signed-off-by: Adam Vandenberg <flangy@gmail.com>

Closes #21366.
  • Loading branch information...
1 parent 93a81cb commit fd2f302cc36ed6402eec20163ba4626a58bc5709 @mbcoguno mbcoguno committed with adamv Aug 26, 2013
Showing with 115 additions and 13 deletions.
  1. +62 −10 Library/Formula/macvim.rb
  2. +53 −3 Library/Formula/vim.rb
View
@@ -17,12 +17,15 @@ class Macvim < Formula
depends_on 'lua' => :optional
depends_on 'luajit' => :optional
depends_on :python => :recommended
- # Help us! :python3 in MacVim makes the window disappear, so only 2.x bindings!
+ depends_on :python3 => :optional
env :std if MacOS.version <= :snow_leopard
# Help us! We'd like to use superenv in these environments too
def install
+ # MacVim doesn't have and required any Python package, unset PYTHONPATH.
+ ENV.delete('PYTHONPATH')
+
# Set ARCHFLAGS so the Python app (with C extension) that is
# used to create the custom icons will not try to compile in
# PPC support (which isn't needed in Homebrew-supported systems.)
@@ -61,7 +64,12 @@ def install
args << "--with-luajit"
end
- args << "--enable-pythoninterp=yes" if build.with? 'python'
+ if build.with? "python" and build.with? "python3"
+ args << "--enable-pythoninterp=dynamic" << "--enable-python3interp=dynamic"
+ else
+ args << "--enable-pythoninterp" if build.with? "python"
+ args << "--enable-python3interp" if build.with? "python3"
+ end
# MacVim seems to link Python by `-framework Python` (instead of
# `python-config --ldflags`) and so we have to pass the -F to point to
@@ -71,7 +79,9 @@ def install
# on the Mac. Note configure detects brewed python correctly, but that
# is ignored.
# See https://github.com/mxcl/homebrew/issues/17908
- ENV.prepend 'LDFLAGS', "-L#{python2.libdir} -F#{python2.framework}" if python && python.brewed?
+ if python2 and python2.framework? and not build.with? "python3"
+ ENV.prepend 'LDFLAGS', "-L#{python2.libdir} -F#{python2.framework}"
+ end
unless MacOS::CLT.installed?
# On Xcode-only systems:
@@ -84,6 +94,35 @@ def install
system "./configure", *args
+ if build.with? "python" and build.with? "python3"
+ # On 64-bit systems, we need to avoid a 32-bit Framework Python.
+ # MacVim doesn't check Python while compiling.
+ python do
+ if MacOS.prefer_64_bit? and python.framework? and not archs_for_command("#{python.prefix}/Python").include? :x86_64
+ opoo "Detected a framework Python that does not have 64-bit support in:"
+ puts <<-EOS.undent
+ #{python.prefix}
+
+ Dynamic loading Python library required the same architecture.
+
+ Note that a framework Python in /Library/Frameworks/Python.framework is
+ the "MacPython" version, and not the system-provided version which is in:
+ /System/Library/Frameworks/Python.framework
+ EOS
+ end
+ end
+ # Help vim find Python's library as absolute path.
+ python do
+ inreplace 'src/auto/config.mk', /-DDYNAMIC_PYTHON#{python.if3then3}_DLL=\\".*\\"/, %Q[-DDYNAMIC_PYTHON#{python.if3then3}_DLL=\'\"#{python.prefix}/Python\"\'] if python.framework?
+ end
+ # Force vim loading different Python on same time, may cause vim crash.
+ unless python.brewed?
+ opoo "Your python isn't comes from Homebrew, you may see warning massage during brewing. That's OK. Because we can't detect what your Python is. We will force replace the string."
+ inreplace 'src/auto/config.h', "/* #undef PY_NO_RTLD_GLOBAL */", "#define PY_NO_RTLD_GLOBAL 1"
+ inreplace 'src/auto/config.h', "/* #undef PY3_NO_RTLD_GLOBAL */", "#define PY3_NO_RTLD_GLOBAL 1"
+ end
+ end
+
if build.include? "custom-icons"
# Get the custom font used by the icons
cd 'src/MacVim/icons' do
@@ -108,14 +147,27 @@ def install
executables.each {|f| ln_s bin+'mvim', bin+f}
end
- def caveats; <<-EOS.undent
- MacVim.app installed to:
- #{prefix}
+ def caveats
+ s = ''
+ s += <<-EOS.undent
+ MacVim.app installed to:
+ #{prefix}
- To link the application to a normal Mac OS X location:
- brew linkapps
- or:
- ln -s #{prefix}/MacVim.app /Applications
+ To link the application to a normal Mac OS X location:
+ brew linkapps
+ or:
+ brew linkapps --local
EOS
+ if build.with? "python" and build.with? "python3"
+ s += <<-EOS.undent
+
+ This MacVim build with dynamic library Python 2 & 3.
+
+ Note that MacVim load dynamic Python 2 & 3 library with the same time
+ may crash MacVim. For more information, see:
+ http://vimdoc.sourceforge.net/htmldoc/if_pyth.html#python3
+ EOS
+ end
+ return s
end
end
View
@@ -17,7 +17,7 @@ class Vim < Formula
option "disable-nls", "Build vim without National Language Support (translated messages, keymaps)"
option "with-client-server", "Enable client/server mode"
- LANGUAGES_OPTIONAL = %w(lua mzscheme perl tcl)
+ LANGUAGES_OPTIONAL = %w(lua mzscheme perl python3 tcl)
LANGUAGES_DEFAULT = %w(ruby python)
LANGUAGES_OPTIONAL.each do |language|
@@ -28,6 +28,7 @@ class Vim < Formula
end
depends_on :python => :recommended
+ depends_on :python3 => :optional
depends_on 'lua' => :optional
depends_on 'gtk+' if build.with? 'client-server'
@@ -42,18 +43,24 @@ def patches; DATA; end
def install
ENV['LUA_PREFIX'] = HOMEBREW_PREFIX if build.with?('lua')
+ # vim doesn't have and required any Python package, unset PYTHONPATH.
+ ENV.delete('PYTHONPATH')
+
opts = []
opts += LANGUAGES_OPTIONAL.map do |language|
"--enable-#{language}interp" if build.with? language
end
opts += LANGUAGES_DEFAULT.map do |language|
"--enable-#{language}interp" unless build.without? language
end
+ if opts.include? "--enable-pythoninterp" and opts.include? "--enable-python3interp"
+ opts = opts - %W[--enable-pythoninterp --enable-python3interp] + %W[--enable-pythoninterp=dynamic --enable-python3interp=dynamic]
+ end
opts << "--disable-nls" if build.include? "disable-nls"
- if python
- if python.brewed?
+ if python2 and not build.with? "python3"
+ if !python.from_osx? && python.framework?
# Avoid that vim always links System's Python even if configure tells us
# it has found a brewed Python. Verify with `otool -L`.
ENV.prepend 'LDFLAGS', "-F#{python.framework}"
@@ -88,13 +95,56 @@ def install
"--with-features=huge",
"--with-compiledby=Homebrew",
*opts
+
+ if build.with? "python" and build.with? "python3"
+ # On 64-bit systems, we need to avoid a 32-bit Framework Python.
+ # vim doesn't check Python while compiling.
+ python do
+ if MacOS.prefer_64_bit? and python.framework? and not archs_for_command("#{python.prefix}/Python").include? :x86_64
+ opoo "Detected a framework Python that does not have 64-bit support in:"
+ puts <<-EOS.undent
+ #{python.prefix}
+
+ Dynamic loading Python library required the same architecture.
+
+ Note that a framework Python in /Library/Frameworks/Python.framework is
+ the "MacPython" version, and not the system-provided version which is in:
+ /System/Library/Frameworks/Python.framework
+ EOS
+ end
+ end
+ # Help vim find Python's library as absolute path.
+ python do
+ inreplace 'src/auto/config.mk', /-DDYNAMIC_PYTHON#{python.if3then3}_DLL=\\".*\\"/, %Q[-DDYNAMIC_PYTHON#{python.if3then3}_DLL=\'\"#{python.prefix}/Python\"\'] if python.framework?
+ end
+ # Force vim loading different Python on same time, may cause vim crash.
+ unless python.brewed?
+ opoo "Your Python isn't comes from Homebrew, you may see warning massage during brewing. That's OK. Because we can't detect what your Python is. We will force replace the string."
+ inreplace 'src/auto/config.h', "/* #undef PY_NO_RTLD_GLOBAL */", "#define PY_NO_RTLD_GLOBAL 1"
+ inreplace 'src/auto/config.h', "/* #undef PY3_NO_RTLD_GLOBAL */", "#define PY3_NO_RTLD_GLOBAL 1"
+ end
+ end
+
system "make"
# If stripping the binaries is not enabled, vim will segfault with
# statically-linked interpreters like ruby
# http://code.google.com/p/vim/issues/detail?id=114&thanks=114&ts=1361483471
system "make", "install", "prefix=#{prefix}", "STRIP=/usr/bin/true"
ln_s bin+'vim', bin+'vi' if build.include? 'override-system-vi'
end
+
+ def caveats
+ s = ''
+ if build.with? "python" and build.with? "python3"
+ s += <<-EOS.undent
+ This vim build with dynamic library Python 2 & 3.
+
+ Note that vim load dynamic Python 2 & 3 library with the same time
+ may crash vim. For more information, see:
+ http://vimdoc.sourceforge.net/htmldoc/if_pyth.html#python3
+ EOS
+ end
+ end
end
__END__

0 comments on commit fd2f302

Please sign in to comment.