forked from premiere/premiere-libtorrent
more robust flags parsing in python bindings
The flags supplied by libraries cannot be relied upon to be sane so they all must be run through a parser to make sure search paths are specified in the correct order.
This commit is contained in:
parent
d6d0480313
commit
df368c2d15
|
@ -1 +1 @@
|
||||||
@COMPILETIME_OPTIONS@ @CPPFLAGS@ @LIBS@ @BOOST_CPPFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include
|
-I@top_srcdir@/include @COMPILETIME_OPTIONS@ @CPPFLAGS@ @BOOST_CPPFLAGS@ @OPENSSL_INCLUDES@
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
-L@top_builddir@/src/.libs @BOOST_LDFLAGS@ @LDFLAGS@
|
-L@top_builddir@/src/.libs @LDFLAGS@ @LIBS@ @BOOST_LDFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@
|
||||||
|
|
|
@ -9,14 +9,25 @@ import shutil
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
def parse_cmd(cmdline, prefix, keep_prefix = False):
|
class flags_parser:
|
||||||
|
def __init__(self):
|
||||||
|
self.include_dirs = []
|
||||||
|
self.library_dirs = []
|
||||||
|
self.libraries = []
|
||||||
|
|
||||||
|
def parse(self, args):
|
||||||
|
"""Parse out the -I -L -l directives and return a list of all other arguments"""
|
||||||
ret = []
|
ret = []
|
||||||
for token in cmdline.split():
|
for token in args.split():
|
||||||
if token[:len(prefix)] == prefix:
|
prefix = token[:2]
|
||||||
if keep_prefix:
|
if prefix == '-I':
|
||||||
ret.append(token)
|
self.include_dirs.append(token[2:])
|
||||||
|
elif prefix == '-L':
|
||||||
|
self.library_dirs.append(token[2:])
|
||||||
|
elif prefix == '-l':
|
||||||
|
self.libraries.append(token[2:])
|
||||||
else:
|
else:
|
||||||
ret.append(token[len(prefix):])
|
ret.append(token)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def arch():
|
def arch():
|
||||||
|
@ -98,15 +109,19 @@ else:
|
||||||
source_list = [os.path.abspath(os.path.join(os.path.dirname(__file__), "src", s)) for s in source_list if s.endswith(".cpp")]
|
source_list = [os.path.abspath(os.path.join(os.path.dirname(__file__), "src", s)) for s in source_list if s.endswith(".cpp")]
|
||||||
|
|
||||||
if extra_cmd:
|
if extra_cmd:
|
||||||
|
flags = flags_parser()
|
||||||
|
# ldflags must be parsed first to ensure the correct library search path order
|
||||||
|
extra_link = flags.parse(ldflags)
|
||||||
|
extra_compile = flags.parse(extra_cmd)
|
||||||
|
|
||||||
ext = [Extension('libtorrent',
|
ext = [Extension('libtorrent',
|
||||||
sources = source_list,
|
sources = source_list,
|
||||||
language='c++',
|
language='c++',
|
||||||
include_dirs = parse_cmd(extra_cmd, '-I'),
|
include_dirs = flags.include_dirs,
|
||||||
library_dirs = parse_cmd(extra_cmd, '-L'),
|
library_dirs = flags.library_dirs,
|
||||||
extra_link_args = ldflags.split() + arch(),
|
extra_link_args = extra_link + arch(),
|
||||||
extra_compile_args = parse_cmd(extra_cmd, '-D', True) + arch() \
|
extra_compile_args = extra_compile + arch() + target_specific(),
|
||||||
+ target_specific(),
|
libraries = ['torrent-rasterbar'] + flags.libraries)]
|
||||||
libraries = ['torrent-rasterbar'] + parse_cmd(extra_cmd, '-l'))]
|
|
||||||
|
|
||||||
setup(name = 'python-libtorrent',
|
setup(name = 'python-libtorrent',
|
||||||
version = '1.1.0',
|
version = '1.1.0',
|
||||||
|
|
Loading…
Reference in New Issue