diff options
-rwxr-xr-x | interpreter.py | 43 | ||||
-rwxr-xr-x | shellgenerator.py | 10 | ||||
-rw-r--r-- | test cases/27 library versions/builder.txt | 7 | ||||
-rw-r--r-- | test cases/27 library versions/lib.c | 3 |
4 files changed, 59 insertions, 4 deletions
diff --git a/interpreter.py b/interpreter.py index a85a0e5..3e9de62 100755 --- a/interpreter.py +++ b/interpreter.py @@ -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): diff --git a/shellgenerator.py b/shellgenerator.py index 863e06c..6792385 100755 --- a/shellgenerator.py +++ b/shellgenerator.py @@ -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__': diff --git a/test cases/27 library versions/builder.txt b/test cases/27 library versions/builder.txt new file mode 100644 index 0000000..a2d87f5 --- /dev/null +++ b/test cases/27 library versions/builder.txt @@ -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() diff --git a/test cases/27 library versions/lib.c b/test cases/27 library versions/lib.c new file mode 100644 index 0000000..67b6f4d --- /dev/null +++ b/test cases/27 library versions/lib.c @@ -0,0 +1,3 @@ +int myFunc() { + return 55; +} |