aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-01-27 23:51:06 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-01-27 23:51:06 +0200
commit2ae2a896c10233c9e102193dfca473cbd941b6f4 (patch)
tree1ecb9d7fd3eb7c13debd871d35f9a075e24b9b2d
parentcd9475bfe51e5973f23601c6e51b333ea7883fbd (diff)
downloadmeson-2ae2a896c10233c9e102193dfca473cbd941b6f4.zip
meson-2ae2a896c10233c9e102193dfca473cbd941b6f4.tar.gz
meson-2ae2a896c10233c9e102193dfca473cbd941b6f4.tar.bz2
Added shared library versioning.
-rwxr-xr-xinterpreter.py43
-rwxr-xr-xshellgenerator.py10
-rw-r--r--test cases/27 library versions/builder.txt7
-rw-r--r--test cases/27 library versions/lib.c3
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;
+}