make setup.py work well with both automake and bjam

This commit is contained in:
Arvid Norberg 2014-05-11 22:51:06 +00:00
parent 8a132cb9ca
commit 2028a16d87
5 changed files with 95 additions and 29 deletions

View File

@ -152,6 +152,8 @@ EXTRA_DIST = \
Jamroot.jam \ Jamroot.jam \
CMakeLists.txt \ CMakeLists.txt \
LICENSE \ LICENSE \
bindings/python/compile_flags \
bindings/python/link_flags \
libtorrent-rasterbar.pc \ libtorrent-rasterbar.pc \
libtorrent-rasterbar-cmake.pc \ libtorrent-rasterbar-cmake.pc \
$(DOCS_PAGES) \ $(DOCS_PAGES) \

View File

@ -0,0 +1 @@
@COMPILETIME_OPTIONS@ @CPPFLAGS@ @LIBS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@

View File

@ -0,0 +1 @@
@LDFLAGS@

View File

@ -7,48 +7,108 @@ import platform
import sys import sys
import shutil import shutil
import multiprocessing import multiprocessing
import subprocess
if not '--help' in sys.argv \ def parse_cmd(cmdline, prefix, keep_prefix = False):
and not '--help-commands' in sys.argv: ret = []
for token in cmdline.split():
if token[:len(prefix)] == prefix:
if keep_prefix:
ret.append(token)
else:
ret.append(token[len(prefix):])
return ret
toolset = '' def arch():
file_ext = '.so' if platform.system() != 'Darwin': return []
a = os.uname()[4]
if a == 'Power Macintosh': a = 'ppc'
return ['-arch', a]
if platform.system() == 'Windows': def target_specific():
# msvc 9.0 (2008) is the official windows compiler for python 2.6
# http://docs.python.org/whatsnew/2.6.html#build-and-c-api-changes
toolset = ' msvc-9.0'
file_ext = '.pyd'
parallell_builds = ' -j%d' % multiprocessing.cpu_count() if platform.system() != 'Darwin': return []
# build libtorrent using bjam and build the installer with distutils # on mavericks, clang will fail when unknown arguments are
# passed in. python distutils will pass in arguments it doesn't
# know about
return ['-Wno-error=unused-command-line-argument-hard-error-in-future']
cmdline = 'bjam boost=source link=static geoip=static boost-link=static release optimization=space stage_module --abbreviate-paths' + toolset + parallell_builds try:
print cmdline extra_cmd = open('compile_flags').read()
if os.system(cmdline) != 0: except:
print('build failed') extra_cmd = None
sys.exit(1)
try: os.mkdir('build') try:
except: pass ldflags = open('link_flags').read()
try: shutil.rmtree('build/lib') except:
except: pass ldflags = None
try: os.mkdir('build/lib')
except: pass
try: os.mkdir('libtorrent')
except: pass
shutil.copyfile('libtorrent' + file_ext, 'build/lib/libtorrent' + file_ext)
setup( name='python-libtorrent', ext = None
version='1.0.0', packages = None
if '--bjam' in sys.argv or ldflags == None or extra_cmd == None:
del sys.argv[sys.argv.index('--bjam')]
if not '--help' in sys.argv \
and not '--help-commands' in sys.argv:
toolset = ''
file_ext = '.so'
if platform.system() == 'Windows':
# msvc 9.0 (2008) is the official windows compiler for python 2.6
# http://docs.python.org/whatsnew/2.6.html#build-and-c-api-changes
toolset = ' msvc-9.0'
file_ext = '.pyd'
parallell_builds = ' -j%d' % multiprocessing.cpu_count()
# build libtorrent using bjam and build the installer with distutils
cmdline = 'bjam boost=source link=static geoip=static boost-link=static release optimization=space stage_module --abbreviate-paths' + toolset + parallell_builds
print cmdline
if os.system(cmdline) != 0:
print('build failed')
sys.exit(1)
try: os.mkdir('build')
except: pass
try: shutil.rmtree('build/lib')
except: pass
try: os.mkdir('build/lib')
except: pass
try: os.mkdir('libtorrent')
except: pass
shutil.copyfile('libtorrent' + file_ext, 'build/lib/libtorrent' + file_ext)
packages = ['libtorrent']
else:
source_list = os.listdir(os.path.join(os.path.dirname(__file__), "src"))
source_list = [os.path.join("src", s) for s in source_list if s.endswith(".cpp")]
ext = [Extension('libtorrent',
sources = source_list,
language='c++',
include_dirs = ['../../include'] + parse_cmd(extra_cmd, '-I'),
library_dirs = ['../../src/.libs'] + parse_cmd(extra_cmd, '-L'),
extra_link_args = ldflags.split() + arch(),
extra_compile_args = parse_cmd(extra_cmd, '-D', True) + arch() \
+ target_specific(),
libraries = ['torrent-rasterbar'] + parse_cmd(extra_cmd, '-l'))]
setup(name = 'python-libtorrent',
version = '1.0.0',
author = 'Arvid Norberg', author = 'Arvid Norberg',
author_email='arvid@rasterbar.com', author_email = 'arvid@rasterbar.com',
description = 'Python bindings for libtorrent-rasterbar', description = 'Python bindings for libtorrent-rasterbar',
long_description = 'Python bindings for libtorrent-rasterbar', long_description = 'Python bindings for libtorrent-rasterbar',
url = 'http://libtorrent.org', url = 'http://libtorrent.org',
platforms = [platform.system() + '-' + platform.machine()], platforms = [platform.system() + '-' + platform.machine()],
license = 'BSD', license = 'BSD',
packages = ['libtorrent'], packages = packages,
ext_modules = ext
) )

View File

@ -687,6 +687,8 @@ AC_CONFIG_FILES(
[tools/Makefile] [tools/Makefile]
[bindings/Makefile] [bindings/Makefile]
[bindings/python/Makefile] [bindings/python/Makefile]
[bindings/python/link_flags]
[bindings/python/compile_flags]
[libtorrent-rasterbar.pc] [libtorrent-rasterbar.pc]
[libtorrent-rasterbar-cmake.pc] [libtorrent-rasterbar-cmake.pc]
) )