79dec437ba
Fixes a problem reported on IRC where these modules can't be imported by a different user than the user that installed Homebrew because building the cffi extensions writes files to the Cellar. Pypy's packaging script normally generates these but it's not invoked by Homebrew. Closes Homebrew/homebrew#33725.
131 lines
4.5 KiB
Ruby
131 lines
4.5 KiB
Ruby
require "formula"
|
|
|
|
class Pypy < Formula
|
|
homepage "http://pypy.org/"
|
|
url "https://bitbucket.org/pypy/pypy/downloads/pypy-2.4.0-src.tar.bz2"
|
|
sha1 "e2e0bcf8457c0ae5a24f126a60aa921dabfe60fb"
|
|
bottle do
|
|
cellar :any
|
|
revision 1
|
|
sha1 "3473464c440ded1e99b5aaa40e5cc740aa3d7ef4" => :yosemite
|
|
sha1 "9d4eccd93b9af5814ce5d159bc4f16bbaf589418" => :mavericks
|
|
sha1 "06ee886537c517845fdec289839105c024689007" => :mountain_lion
|
|
end
|
|
|
|
revision 2
|
|
|
|
depends_on :arch => :x86_64
|
|
depends_on "pkg-config" => :build
|
|
depends_on "openssl"
|
|
|
|
resource "setuptools" do
|
|
url "https://pypi.python.org/packages/source/s/setuptools/setuptools-6.0.2.tar.gz"
|
|
sha1 "a29a81b7913151697cb15b069844af75d441408f"
|
|
end
|
|
|
|
resource "pip" do
|
|
url "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz"
|
|
sha1 "e6cd9e6f2fd8d28c9976313632ef8aa8ac31249e"
|
|
end
|
|
|
|
# https://bugs.launchpad.net/ubuntu/+source/gcc-4.2/+bug/187391
|
|
fails_with :gcc
|
|
|
|
def install
|
|
# Having PYTHONPATH set can cause the build to fail if another
|
|
# Python is present, e.g. a Homebrew-provided Python 2.x
|
|
# See https://github.com/Homebrew/homebrew/issues/24364
|
|
ENV["PYTHONPATH"] = ""
|
|
ENV["PYPY_USESSION_DIR"] = buildpath
|
|
|
|
Dir.chdir "pypy/goal" do
|
|
system "python", buildpath/"rpython/bin/rpython",
|
|
"-Ojit", "--shared", "--cc", ENV["CC"], "--translation-verbose",
|
|
"--make-jobs", ENV.make_jobs, "targetpypystandalone.py"
|
|
system "install_name_tool", "-change", "libpypy-c.dylib", libexec/"lib/libpypy-c.dylib", "pypy-c"
|
|
system "install_name_tool", "-id", opt_libexec/"lib/libpypy-c.dylib", "libpypy-c.dylib"
|
|
(libexec/"bin").install "pypy-c" => "pypy"
|
|
(libexec/"lib").install "libpypy-c.dylib"
|
|
end
|
|
|
|
(libexec/"lib-python").install "lib-python/2.7"
|
|
libexec.install %w[include lib_pypy]
|
|
|
|
# The PyPy binary install instructions suggest installing somewhere
|
|
# (like /opt) and symlinking in binaries as needed. Specifically,
|
|
# we want to avoid putting PyPy's Python.h somewhere that configure
|
|
# scripts will find it.
|
|
bin.install_symlink libexec/"bin/pypy"
|
|
lib.install_symlink libexec/"lib/libpypy-c.dylib"
|
|
end
|
|
|
|
def post_install
|
|
# Precompile cffi extensions in lib_pypy
|
|
# list from create_cffi_import_libraries in pypy/tool/release/package.py
|
|
%w[_sqlite3 _curses syslog gdbm _tkinter].each do |module_name|
|
|
quiet_system bin/"pypy", "-c", "import #{module_name}"
|
|
end
|
|
|
|
# Post-install, fix up the site-packages and install-scripts folders
|
|
# so that user-installed Python software survives minor updates, such
|
|
# as going from 1.7.0 to 1.7.1.
|
|
|
|
# Create a site-packages in the prefix.
|
|
prefix_site_packages.mkpath
|
|
|
|
# Symlink the prefix site-packages into the cellar.
|
|
libexec.install_symlink prefix_site_packages
|
|
|
|
# Tell distutils-based installers where to put scripts
|
|
scripts_folder.mkpath
|
|
(distutils+"distutils.cfg").atomic_write <<-EOF.undent
|
|
[install]
|
|
install-scripts=#{scripts_folder}
|
|
EOF
|
|
|
|
resource("setuptools").stage { system "#{libexec}/bin/pypy", "setup.py", "install" }
|
|
resource("pip").stage { system "#{libexec}/bin/pypy", "setup.py", "install" }
|
|
|
|
# Symlinks to easy_install_pypy and pip_pypy
|
|
bin.install_symlink scripts_folder/"easy_install" => "easy_install_pypy"
|
|
bin.install_symlink scripts_folder/"pip" => "pip_pypy"
|
|
|
|
# post_install happens after linking
|
|
%w[easy_install_pypy pip_pypy].each { |e| (HOMEBREW_PREFIX/"bin").install_symlink bin/e }
|
|
end
|
|
|
|
def caveats; <<-EOS.undent
|
|
A "distutils.cfg" has been written to:
|
|
#{distutils}
|
|
specifying the install-scripts folder as:
|
|
#{scripts_folder}
|
|
|
|
If you install Python packages via "pypy setup.py install", easy_install_pypy,
|
|
or pip_pypy, any provided scripts will go into the install-scripts folder
|
|
above, so you may want to add it to your PATH *after* #{HOMEBREW_PREFIX}/bin
|
|
so you don't overwrite tools from CPython.
|
|
|
|
Setuptools and pip have been installed, so you can use easy_install_pypy and
|
|
pip_pypy.
|
|
To update setuptools and pip between pypy releases, run:
|
|
#{scripts_folder}/pip install --upgrade setuptools
|
|
|
|
See: https://github.com/Homebrew/homebrew/wiki/Homebrew-and-Python
|
|
EOS
|
|
end
|
|
|
|
# The HOMEBREW_PREFIX location of site-packages
|
|
def prefix_site_packages
|
|
HOMEBREW_PREFIX+"lib/pypy/site-packages"
|
|
end
|
|
|
|
# Where setuptools will install executable scripts
|
|
def scripts_folder
|
|
HOMEBREW_PREFIX+"share/pypy"
|
|
end
|
|
|
|
# The Cellar location of distutils
|
|
def distutils
|
|
libexec+"lib-python/2.7/distutils"
|
|
end
|
|
end
|