aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-01-13 19:25:54 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-01-13 19:25:54 +0200
commit57015296328a4fe5c8bad5410a3b4ba67637fbb6 (patch)
tree91bf8d1091715884259f2a945bdb22a0eab21760
parent0783c7ff97da9fbb7b9883a5b392d6f2348f8119 (diff)
downloadmeson-57015296328a4fe5c8bad5410a3b4ba67637fbb6.zip
meson-57015296328a4fe5c8bad5410a3b4ba67637fbb6.tar.gz
meson-57015296328a4fe5c8bad5410a3b4ba67637fbb6.tar.bz2
Can install data files.
-rw-r--r--build.py4
-rwxr-xr-xenvironment.py3
-rwxr-xr-xinterpreter.py27
-rwxr-xr-xshellgenerator.py24
-rw-r--r--test cases/11 subdir/builder.txt2
-rw-r--r--test cases/11 subdir/subdir/builder.txt1
-rw-r--r--test cases/11 subdir/subdir/prog.c1
-rw-r--r--test cases/12 data/builder.txt2
-rw-r--r--test cases/12 data/datafile.dat1
9 files changed, 63 insertions, 2 deletions
diff --git a/build.py b/build.py
index 688f016..8fad6d4 100644
--- a/build.py
+++ b/build.py
@@ -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