diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-13 19:25:54 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-13 19:25:54 +0200 |
commit | 57015296328a4fe5c8bad5410a3b4ba67637fbb6 (patch) | |
tree | 91bf8d1091715884259f2a945bdb22a0eab21760 | |
parent | 0783c7ff97da9fbb7b9883a5b392d6f2348f8119 (diff) | |
download | meson-57015296328a4fe5c8bad5410a3b4ba67637fbb6.zip meson-57015296328a4fe5c8bad5410a3b4ba67637fbb6.tar.gz meson-57015296328a4fe5c8bad5410a3b4ba67637fbb6.tar.bz2 |
Can install data files.
-rw-r--r-- | build.py | 4 | ||||
-rwxr-xr-x | environment.py | 3 | ||||
-rwxr-xr-x | interpreter.py | 27 | ||||
-rwxr-xr-x | shellgenerator.py | 24 | ||||
-rw-r--r-- | test cases/11 subdir/builder.txt | 2 | ||||
-rw-r--r-- | test cases/11 subdir/subdir/builder.txt | 1 | ||||
-rw-r--r-- | test cases/11 subdir/subdir/prog.c | 1 | ||||
-rw-r--r-- | test cases/12 data/builder.txt | 2 | ||||
-rw-r--r-- | test cases/12 data/datafile.dat | 1 |
9 files changed, 63 insertions, 2 deletions
@@ -27,6 +27,7 @@ class Build: self.tests = [] self.headers = [] self.man = [] + self.data = [] self.static_linker = self.environment.detect_static_linker() def get_project(self): @@ -43,3 +44,6 @@ class Build: def get_man(self): return self.man + + def get_data(self): + return self.data diff --git a/environment.py b/environment.py index 1730640..377bbf9 100755 --- a/environment.py +++ b/environment.py @@ -251,6 +251,9 @@ class Environment(): def get_mandir(self): return self.options.mandir + def get_datadir(self): + return self.options.datadir + # This should be an InterpreterObject. Fix it. class PkgConfigDependency(): pkgconfig_found = False diff --git a/interpreter.py b/interpreter.py index 7707b82..293db9e 100755 --- a/interpreter.py +++ b/interpreter.py @@ -54,7 +54,21 @@ class Headers(InterpreterObject): def get_sources(self): return self.sources + +class Data(InterpreterObject): + def __init__(self, subdir, sources): + InterpreterObject.__init__(self) + self.subdir = subdir + self.sources = sources + + def get_subdir(self): + return self.subdir + + def get_sources(self): + return self.sources + + class Man(InterpreterObject): def __init__(self, sources): @@ -185,7 +199,8 @@ class Interpreter(): 'add_test' : self.func_add_test, 'headers' : self.func_headers, 'man' : self.func_man, - 'subdir' : self.func_subdir + 'subdir' : self.func_subdir, + 'data' : self.func_data } def sanity_check_ast(self): @@ -310,6 +325,16 @@ class Interpreter(): self.evaluate_codeblock(codeblock) self.subdir = prev_subdir + def func_data(self, node, args): + if len(args ) < 2: + raise InvalidArguments('Line %d: Data function must have at least two arguments: name and source file(s)' % node.lineno()) + for a in args: + if not isinstance(a, str): + raise InvalidArguments('Line %d: Argument %s is not a string.' % (node.lineno(), str(a))) + data = Data(args[0], args[1:]) + self.build.data.append(data) + return data + def build_target(self, node, args, targetclass): for a in args: if not isinstance(a, str): diff --git a/shellgenerator.py b/shellgenerator.py index 963d914..73574b4 100755 --- a/shellgenerator.py +++ b/shellgenerator.py @@ -74,6 +74,7 @@ echo Run compile.sh before this or bad things will happen. self.generate_target_install(outfile) self.generate_header_install(outfile) self.generate_man_install(outfile) + self.generate_data_install(outfile) outfile.close() def make_subdir(self, outfile, dir): @@ -84,7 +85,24 @@ echo Run compile.sh before this or bad things will happen. cpcommand = ['cp', filename, outdir] cpcommand = ' '.join(shell_quote(cpcommand)) + ' || exit\n' outfile.write(cpcommand) - + + def generate_data_install(self, outfile): + prefix = self.environment.get_prefix() + dataroot = os.path.join(prefix, self.environment.get_datadir()) + data = self.build.get_data() + if len(data) != 0: + outfile.write('\necho Installing data files.\n') + else: + outfile.write('\necho This project has no data files to install.\n') + for d in data: + subdir = os.path.join(self.environment.get_datadir(), d.get_subdir()) + absdir = os.path.join(self.environment.get_prefix(), subdir) + for f in d.get_sources(): + self.make_subdir(outfile, absdir) + srcabs = os.path.join(self.environment.get_source_dir(), f) + dstabs = os.path.join(absdir, f) + self.copy_file(outfile, srcabs, dstabs) + def generate_man_install(self, outfile): prefix = self.environment.get_prefix() manroot = os.path.join(prefix, self.environment.get_mandir()) @@ -126,6 +144,10 @@ echo Run compile.sh before this or bad things will happen. bindir = os.path.join(prefix, self.environment.get_bindir()) self.make_subdir(outfile, libdir) self.make_subdir(outfile, bindir) + if len(self.build.get_targets()) != 0: + outfile.write('\necho Installing targets.\n') + else: + outfile.write('\necho This project has no targets to install.\n') for tmp in self.build.get_targets().items(): (name, t) = tmp if t.should_install(): diff --git a/test cases/11 subdir/builder.txt b/test cases/11 subdir/builder.txt new file mode 100644 index 0000000..bda1f90 --- /dev/null +++ b/test cases/11 subdir/builder.txt @@ -0,0 +1,2 @@ +project('subdir test', 'c') +subdir('subdir') diff --git a/test cases/11 subdir/subdir/builder.txt b/test cases/11 subdir/subdir/builder.txt new file mode 100644 index 0000000..5b399f0 --- /dev/null +++ b/test cases/11 subdir/subdir/builder.txt @@ -0,0 +1 @@ +executable('prog', 'prog.c') diff --git a/test cases/11 subdir/subdir/prog.c b/test cases/11 subdir/subdir/prog.c new file mode 100644 index 0000000..0314ff1 --- /dev/null +++ b/test cases/11 subdir/subdir/prog.c @@ -0,0 +1 @@ +int main(int argc, char **argv) { return 0; } diff --git a/test cases/12 data/builder.txt b/test cases/12 data/builder.txt new file mode 100644 index 0000000..6171940 --- /dev/null +++ b/test cases/12 data/builder.txt @@ -0,0 +1,2 @@ +project('data install test', 'c') +data('progname', 'datafile.dat') diff --git a/test cases/12 data/datafile.dat b/test cases/12 data/datafile.dat new file mode 100644 index 0000000..ff3104b --- /dev/null +++ b/test cases/12 data/datafile.dat @@ -0,0 +1 @@ +this is a data file |