|
|
@ -44,12 +44,19 @@ known_basic_kwargs = {'install' : True, |
|
|
|
'native' : True, |
|
|
|
'native' : True, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
known_shlib_kwargs = known_basic_kwargs.copy() |
|
|
|
# These contain kwargs supported by both static and shared libraries. These are |
|
|
|
known_shlib_kwargs.update({'version' : True, |
|
|
|
# combined here because a library() call might be shared_library() or |
|
|
|
'soversion' : True, |
|
|
|
# static_library() at runtime based on the configuration. |
|
|
|
'name_prefix' : True, |
|
|
|
# FIXME: Find a way to pass that info down here so we can have proper target |
|
|
|
'name_suffix' : True, |
|
|
|
# kwargs checking when specifically using shared_library() or static_library(). |
|
|
|
'vs_module_defs' : True}) |
|
|
|
known_lib_kwargs = known_basic_kwargs.copy() |
|
|
|
|
|
|
|
known_lib_kwargs.update({'version' : True, # Only for shared libs |
|
|
|
|
|
|
|
'soversion' : True, # Only for shared libs |
|
|
|
|
|
|
|
'name_prefix' : True, |
|
|
|
|
|
|
|
'name_suffix' : True, |
|
|
|
|
|
|
|
'vs_module_defs' : True, # Only for shared libs |
|
|
|
|
|
|
|
'pic' : True, # Only for static libs |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
def compilers_are_msvc(compilers): |
|
|
|
def compilers_are_msvc(compilers): |
|
|
|
""" |
|
|
|
""" |
|
|
@ -516,6 +523,16 @@ class BuildTarget(): |
|
|
|
if not isinstance(name_suffix, str): |
|
|
|
if not isinstance(name_suffix, str): |
|
|
|
raise InvalidArguments('Name suffix must be a string.') |
|
|
|
raise InvalidArguments('Name suffix must be a string.') |
|
|
|
self.suffix = name_suffix |
|
|
|
self.suffix = name_suffix |
|
|
|
|
|
|
|
if isinstance(self, StaticLibrary): |
|
|
|
|
|
|
|
# You can't disable PIC on OS X. The compiler ignores -fno-PIC. |
|
|
|
|
|
|
|
# PIC is always on for Windows (all code is position-independent |
|
|
|
|
|
|
|
# since library loading is done differently) |
|
|
|
|
|
|
|
if for_darwin(self.is_cross, self.environment) or for_windows(self.is_cross, self.environment): |
|
|
|
|
|
|
|
self.pic = True |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
self.pic = kwargs.get('pic', False) |
|
|
|
|
|
|
|
if not isinstance(self.pic, bool): |
|
|
|
|
|
|
|
raise InvalidArguments('Argument pic must be boolean') |
|
|
|
|
|
|
|
|
|
|
|
def get_subdir(self): |
|
|
|
def get_subdir(self): |
|
|
|
return self.subdir |
|
|
|
return self.subdir |
|
|
@ -618,6 +635,8 @@ by calling get_variable() on the subproject object.''') |
|
|
|
t = t.held_object |
|
|
|
t = t.held_object |
|
|
|
if not isinstance(t, (StaticLibrary, SharedLibrary)): |
|
|
|
if not isinstance(t, (StaticLibrary, SharedLibrary)): |
|
|
|
raise InvalidArguments('Link target is not library.') |
|
|
|
raise InvalidArguments('Link target is not library.') |
|
|
|
|
|
|
|
if isinstance(self, SharedLibrary) and isinstance(t, StaticLibrary) and not t.pic: |
|
|
|
|
|
|
|
raise InvalidArguments("Can't link a non-PIC static library into a shared library") |
|
|
|
if self.is_cross != t.is_cross: |
|
|
|
if self.is_cross != t.is_cross: |
|
|
|
raise InvalidArguments('Tried to mix cross built and native libraries in target %s.' % self.name) |
|
|
|
raise InvalidArguments('Tried to mix cross built and native libraries in target %s.' % self.name) |
|
|
|
self.link_targets.append(t) |
|
|
|
self.link_targets.append(t) |
|
|
@ -831,6 +850,9 @@ class StaticLibrary(BuildTarget): |
|
|
|
def type_suffix(self): |
|
|
|
def type_suffix(self): |
|
|
|
return "@sta" |
|
|
|
return "@sta" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def check_unknown_kwargs(self, kwargs): |
|
|
|
|
|
|
|
self.check_unknown_kwargs_int(kwargs, known_lib_kwargs) |
|
|
|
|
|
|
|
|
|
|
|
class SharedLibrary(BuildTarget): |
|
|
|
class SharedLibrary(BuildTarget): |
|
|
|
def __init__(self, name, subdir, subproject, is_cross, sources, objects, environment, kwargs): |
|
|
|
def __init__(self, name, subdir, subproject, is_cross, sources, objects, environment, kwargs): |
|
|
|
self.soversion = None |
|
|
|
self.soversion = None |
|
|
@ -988,7 +1010,7 @@ class SharedLibrary(BuildTarget): |
|
|
|
self.link_depends.append(path) |
|
|
|
self.link_depends.append(path) |
|
|
|
|
|
|
|
|
|
|
|
def check_unknown_kwargs(self, kwargs): |
|
|
|
def check_unknown_kwargs(self, kwargs): |
|
|
|
self.check_unknown_kwargs_int(kwargs, known_shlib_kwargs) |
|
|
|
self.check_unknown_kwargs_int(kwargs, known_lib_kwargs) |
|
|
|
|
|
|
|
|
|
|
|
def get_import_filename(self): |
|
|
|
def get_import_filename(self): |
|
|
|
""" |
|
|
|
""" |
|
|
|