forked from Homebrew/legacy-homebrew
/
pypy3.rb
130 lines (105 loc) · 4.61 KB
/
pypy3.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
require "formula"
class Pypy3 < Formula
homepage "http://pypy.org/"
url "https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-src.tar.bz2"
sha1 "438572443ae6f54eb6122d807f104787c5247e01"
bottle do
cellar :any
revision 3
sha1 "d7999dceba153f4cecc6ba5f60916aa3d861dcb3" => :yosemite
sha1 "73c695fc641d56732c50395e5228004541b8c8cb" => :mavericks
sha1 "cc8b078834920933b7a83c84cc0d7d6e14cd51c9" => :mountain_lion
end
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-8.0.2.tar.gz"
sha1 "bacdf139b210ea6c16ffa98eefa2eb8074dc7869"
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/libpypy3-c.dylib", "pypy-c"
system "install_name_tool", "-id", opt_libexec/"lib/libpypy3-c.dylib", "libpypy-c.dylib"
(libexec/"bin").install "pypy-c" => "pypy"
(libexec/"lib").install "libpypy-c.dylib" => "libpypy3-c.dylib"
end
(libexec/"lib-python").install "lib-python/3"
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" => "pypy3"
lib.install_symlink libexec/"lib/libpypy3-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/"pypy3", "-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_pypy3 and pip_pypy3
bin.install_symlink scripts_folder/"easy_install" => "easy_install_pypy3"
bin.install_symlink scripts_folder/"pip" => "pip_pypy3"
# post_install happens after linking
%w[easy_install_pypy3 pip_pypy3].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 "pypy3 setup.py install", easy_install_pypy3,
or pip_pypy3, 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_pypy3 and
pip_pypy3.
To update setuptools and pip between pypy3 releases, run:
#{scripts_folder}/pip install --upgrade setuptools pip
See: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Homebrew-and-Python.md
EOS
end
# The HOMEBREW_PREFIX location of site-packages
def prefix_site_packages
HOMEBREW_PREFIX+"lib/pypy3/site-packages"
end
# Where setuptools will install executable scripts
def scripts_folder
HOMEBREW_PREFIX+"share/pypy3"
end
# The Cellar location of distutils
def distutils
libexec+"lib-python/3/distutils"
end
end