Added shared library versioning.
This commit is contained in:
parent
cd9475bfe5
commit
2ae2a896c1
|
@ -238,6 +238,9 @@ class BuildTarget(InterpreterObject):
|
|||
else:
|
||||
self.extra_args[language] = flags
|
||||
|
||||
def get_aliaslist(self):
|
||||
return []
|
||||
|
||||
class Executable(BuildTarget):
|
||||
def __init__(self, name, subdir, sources, environment):
|
||||
BuildTarget.__init__(self, name, subdir, sources)
|
||||
|
@ -258,10 +261,42 @@ class StaticLibrary(BuildTarget):
|
|||
class SharedLibrary(BuildTarget):
|
||||
def __init__(self, name, subdir, sources, environment):
|
||||
BuildTarget.__init__(self, name, subdir, sources)
|
||||
prefix = environment.get_shared_lib_prefix()
|
||||
suffix = environment.get_shared_lib_suffix()
|
||||
self.filename = prefix + self.name + '.' + suffix
|
||||
self.version = None
|
||||
self.soversion = None
|
||||
self.prefix = environment.get_shared_lib_prefix()
|
||||
self.suffix = environment.get_shared_lib_suffix()
|
||||
self.methods.update({'set_version' : self.set_version_method,
|
||||
'set_soversion' : self.set_soversion_method,
|
||||
})
|
||||
|
||||
def get_shbase(self):
|
||||
return self.prefix + self.name + '.' + self.suffix
|
||||
def get_filename(self):
|
||||
fname = self.get_shbase()
|
||||
if self.version is None:
|
||||
return fname
|
||||
else:
|
||||
return fname + '.' + self.version
|
||||
|
||||
def set_version_method(self, args):
|
||||
v = args[0]
|
||||
if not isinstance(v, str):
|
||||
raise InvalidArguments('Shared library version is not a string.')
|
||||
self.version = v
|
||||
|
||||
def set_soversion_method(self, args):
|
||||
v = args[0]
|
||||
if not isinstance(v, str):
|
||||
raise InvalidArguments('Shared library soversion is not a string.')
|
||||
self.soversion = v
|
||||
|
||||
def get_aliaslist(self):
|
||||
aliases = []
|
||||
if self.soversion is not None:
|
||||
aliases.append(self.get_shbase() + '.' + self.soversion)
|
||||
if self.version is not None:
|
||||
aliases.append(self.get_shbase())
|
||||
return aliases
|
||||
|
||||
class Test(InterpreterObject):
|
||||
def __init__(self, name, exe):
|
||||
|
|
|
@ -192,6 +192,7 @@ echo Run compile.sh before this or bad things will happen.
|
|||
outdir = libdir
|
||||
outfile.write('echo Installing "%s".\n' % name)
|
||||
self.copy_file(outfile, self.get_target_filename(t), outdir)
|
||||
self.generate_shlib_aliases(t, outdir, outfile)
|
||||
|
||||
def generate_tests(self, outfile):
|
||||
for t in self.build.get_tests():
|
||||
|
@ -326,6 +327,14 @@ echo Run compile.sh before this or bad things will happen.
|
|||
quoted = shell_quote(commands)
|
||||
outfile.write('\necho Generating pch \\"%s\\".\n' % pch)
|
||||
outfile.write(' '.join(quoted) + ' || exit\n')
|
||||
|
||||
def generate_shlib_aliases(self, target, outdir, outfile):
|
||||
basename = target.get_filename()
|
||||
aliases = target.get_aliaslist()
|
||||
for alias in aliases:
|
||||
aliasfile = os.path.join(outdir, alias)
|
||||
cmd = ['ln', '-s', '-f', basename, aliasfile]
|
||||
outfile.write(' '.join(shell_quote(cmd)) + '|| exit\n')
|
||||
|
||||
def generate_target(self, target, outfile):
|
||||
name = target.get_basename()
|
||||
|
@ -340,6 +349,7 @@ echo Run compile.sh before this or bad things will happen.
|
|||
for src in target.get_sources():
|
||||
obj_list.append(self.generate_single_compile(target, outfile, src))
|
||||
self.generate_link(target, outfile, outname, obj_list)
|
||||
self.generate_shlib_aliases(target, self.get_target_dir(target), outfile)
|
||||
self.processed_targets[name] = True
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
project('library versions', 'c')
|
||||
|
||||
lib = shared_library('somelib', 'lib.c')
|
||||
lib.set_version('1.2.3')
|
||||
lib.set_soversion('0')
|
||||
|
||||
lib.install()
|
|
@ -0,0 +1,3 @@
|
|||
int myFunc() {
|
||||
return 55;
|
||||
}
|
Loading…
Reference in New Issue