Add --libcapnp-url to allow installing arbitrary libcapnp versions

This commit is contained in:
Jason Paryani
2016-02-17 17:23:04 -08:00
parent f78ca108f6
commit 5d69eda752
3 changed files with 30 additions and 5 deletions

View File

@@ -21,6 +21,11 @@ Note: for OSX, if using clang from Xcode 5, you may need to set `CFLAGS` like so
CFLAGS='-stdlib=libc++' pip install pycapnp CFLAGS='-stdlib=libc++' pip install pycapnp
If you wish to install using the latest upstream C++ Cap'n Proto:
pip install --install-option "--libcapnp-url" --install-option "https://github.com/sandstorm-io/capnproto/archive/master.tar.gz" --install-option "--force-bundled-libcapnp" .
## Python Versions ## Python Versions
Python 2.6/2.7 are supported as well as Python 3.2+. PyPy 2.1+ is also supported. Python 2.6/2.7 are supported as well as Python 3.2+. PyPy 2.1+ is also supported.

View File

@@ -73,19 +73,32 @@ def fetch_archive(savedir, url, fname, force=False):
# libcapnp # libcapnp
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
def fetch_libcapnp(savedir): def fetch_libcapnp(savedir, url=None):
"""download and extract libcapnp""" """download and extract libcapnp"""
is_preconfigured = False
if url is None:
url = libcapnp_url
is_preconfigured = True
dest = pjoin(savedir, 'capnproto-c++') dest = pjoin(savedir, 'capnproto-c++')
if os.path.exists(dest): if os.path.exists(dest):
info("already have %s" % dest) info("already have %s" % dest)
return return
fname = fetch_archive(savedir, libcapnp_url, libcapnp) fname = fetch_archive(savedir, url, libcapnp)
tf = tarfile.open(fname) tf = tarfile.open(fname)
with_version = pjoin(savedir, tf.firstmember.path) with_version = pjoin(savedir, tf.firstmember.path)
tf.extractall(savedir) tf.extractall(savedir)
tf.close() tf.close()
# remove version suffix: # remove version suffix:
shutil.move(with_version, dest) if is_preconfigured:
shutil.move(with_version, dest)
else:
cpp_dir = os.path.join(with_version, 'c++')
conf = Popen(['autoreconf', '-i'], cwd=cpp_dir)
returncode = conf.wait()
if returncode != 0:
raise RuntimeError('Autoreconf failed. Make sure autotools are installed on your system.')
shutil.move(cpp_dir, dest)
def stage_platform_hpp(capnproot): def stage_platform_hpp(capnproot):
"""stage platform.hpp into libcapnp sources """stage platform.hpp into libcapnp sources
@@ -162,4 +175,3 @@ def copy_and_patch_libcapnp(capnp, libcapnp):
out,err = p.communicate() out,err = p.communicate()
if p.returncode: if p.returncode:
fatal("Could not patch bundled libcapnp install_name: %s"%err, p.returncode) fatal("Could not patch bundled libcapnp install_name: %s"%err, p.returncode)

View File

@@ -79,6 +79,14 @@ force_cython = "--force-cython" in sys.argv
if force_cython: if force_cython:
sys.argv.remove("--force-cython") sys.argv.remove("--force-cython")
use_cython = True use_cython = True
libcapnp_url = None
try:
libcapnp_url_index = sys.argv.index("--libcapnp-url")
libcapnp_url = sys.argv[libcapnp_url_index + 1]
sys.argv.remove("--libcapnp-url")
sys.argv.remove(libcapnp_url)
except:
pass
if use_cython: if use_cython:
from Cython.Distutils import build_ext as build_ext_c from Cython.Distutils import build_ext as build_ext_c
@@ -107,7 +115,7 @@ class build_libcapnp_ext(build_ext_c):
build_dir = os.path.join(_this_dir, "build") build_dir = os.path.join(_this_dir, "build")
if not os.path.exists(build_dir): if not os.path.exists(build_dir):
os.mkdir(build_dir) os.mkdir(build_dir)
fetch_libcapnp(bundle_dir) fetch_libcapnp(bundle_dir, libcapnp_url)
build_libcapnp(bundle_dir, build_dir) build_libcapnp(bundle_dir, build_dir)