aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-01-12 14:31:43 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-01-12 14:31:43 +0200
commit5969b1ed334454ff6907c521493d635bfb878456 (patch)
treeb3d6f9478695f17cd545d6720359b0a282735970
parent8d038ef09ed709f7db95504f04b13678ecf79816 (diff)
downloadmeson-5969b1ed334454ff6907c521493d635bfb878456.zip
meson-5969b1ed334454ff6907c521493d635bfb878456.tar.gz
meson-5969b1ed334454ff6907c521493d635bfb878456.tar.bz2
Can install Man files.
-rw-r--r--build.py4
-rwxr-xr-xbuilder.py1
-rwxr-xr-xenvironment.py13
-rwxr-xr-xinterpreter.py27
-rwxr-xr-xshellgenerator.py29
-rw-r--r--test cases/10 man install/bar.21
-rw-r--r--test cases/10 man install/builder.txt3
-rw-r--r--test cases/10 man install/foo.11
8 files changed, 69 insertions, 10 deletions
diff --git a/build.py b/build.py
index 96e345f..688f016 100644
--- a/build.py
+++ b/build.py
@@ -26,6 +26,7 @@ class Build:
self.compilers = []
self.tests = []
self.headers = []
+ self.man = []
self.static_linker = self.environment.detect_static_linker()
def get_project(self):
@@ -39,3 +40,6 @@ class Build:
def get_headers(self):
return self.headers
+
+ def get_man(self):
+ return self.man
diff --git a/builder.py b/builder.py
index 07325cd..d48c5a1 100755
--- a/builder.py
+++ b/builder.py
@@ -27,6 +27,7 @@ parser.add_option('--libdir', default='lib', dest='libdir')
parser.add_option('--bindir', default='bin', dest='bindir')
parser.add_option('--includedir', default='include', dest='includedir')
parser.add_option('--datadir', default='share', dest='datadir')
+parser.add_option('--mandir' , default='share/man', dest='mandir')
class BuilderApp():
builder_filename = 'builder.txt'
diff --git a/environment.py b/environment.py
index baf0861..ec2d73c 100755
--- a/environment.py
+++ b/environment.py
@@ -230,22 +230,25 @@ class Environment():
def get_static_lib_suffix(self):
return self.static_lib_suffix
-
+
def get_object_suffix(self):
return self.object_suffix
-
+
def get_prefix(self):
return self.options.prefix
-
+
def get_libdir(self):
return self.options.libdir
-
+
def get_bindir(self):
return self.options.bindir
-
+
def get_includedir(self):
return self.options.includedir
+ def get_mandir(self):
+ return self.options.mandir
+
# This should be an InterpreterObject. Fix it.
class PkgConfigDependency():
pkgconfig_found = False
diff --git a/interpreter.py b/interpreter.py
index b38bbbc..8969d68 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -53,6 +53,22 @@ class Headers(InterpreterObject):
def get_sources(self):
return self.sources
+
+class Man(InterpreterObject):
+
+ def __init__(self, sources):
+ InterpreterObject.__init__(self)
+ self.sources = sources
+ self.validate_sources()
+
+ def validate_sources(self):
+ for s in self.sources:
+ num = int(s.split('.')[-1])
+ if num < 1 or num > 8:
+ raise InvalidArguments('Man file must have a file extension of a number between 1 and 8')
+
+ def get_sources(self):
+ return self.sources
class BuildTarget(InterpreterObject):
@@ -161,7 +177,8 @@ class Interpreter():
'static_library' : self.func_static_lib,
'shared_library' : self.func_shared_lib,
'add_test' : self.func_add_test,
- 'headers' : self.func_headers
+ 'headers' : self.func_headers,
+ 'man' : self.func_man
}
def sanity_check_ast(self):
@@ -260,6 +277,14 @@ class Interpreter():
h = Headers(args)
self.build.headers.append(h)
return h
+
+ def func_man(self, node, args):
+ for a in args:
+ if not isinstance(a, str):
+ raise InvalidArguments('Line %d: Argument %s is not a string.' % (node.lineno(), str(a)))
+ m = Man(args)
+ self.build.man.append(m)
+ return m
def build_target(self, node, args, targetclass):
for a in args:
diff --git a/shellgenerator.py b/shellgenerator.py
index 79dab1a..6b98b65 100755
--- a/shellgenerator.py
+++ b/shellgenerator.py
@@ -73,16 +73,37 @@ echo Run compile.sh before this or bad things will happen.
outfile = self.create_shfile(outfilename, message)
self.generate_target_install(outfile)
self.generate_header_install(outfile)
+ self.generate_man_install(outfile)
outfile.close()
def make_subdir(self, outfile, dir):
cmdlist = ['mkdir', '-p', dir]
- outfile.write(' '.join(shell_quote(cmdlist)) + '\n')
+ outfile.write(' '.join(shell_quote(cmdlist)) + ' || exit\n')
def copy_file(self, outfile, filename, outdir):
cpcommand = ['cp', filename, outdir]
- cpcommand = ' '.join(shell_quote(cpcommand)) + '\n'
+ cpcommand = ' '.join(shell_quote(cpcommand)) + ' || exit\n'
outfile.write(cpcommand)
+
+ def generate_man_install(self, outfile):
+ prefix = self.environment.get_prefix()
+ manroot = os.path.join(prefix, self.environment.get_mandir())
+ man = self.build.get_man()
+ if len(man) != 0:
+ outfile.write('\necho Installing man pages.\n')
+ else:
+ outfile.write('\necho This project has no man pages to install.\n')
+ for m in man:
+ for f in m.get_sources():
+ num = f.split('.')[-1]
+ subdir = 'man' + num
+ absdir = os.path.join(manroot, subdir)
+ self.make_subdir(outfile, absdir)
+ srcabs = os.path.join(self.environment.get_source_dir(), f)
+ dstabs = os.path.join(manroot,
+ os.path.join(subdir, f + '.gz'))
+ cmd = "gzip < '%s' > '%s' || exit\n" % (srcabs, dstabs)
+ outfile.write(cmd)
def generate_header_install(self, outfile):
prefix = self.environment.get_prefix()
@@ -91,12 +112,12 @@ echo Run compile.sh before this or bad things will happen.
if len(headers) != 0:
outfile.write('\necho Installing headers.\n')
else:
- outfile.write('\necho This project has no headers to install.')
+ outfile.write('\necho This project has no headers to install.\n')
for h in headers:
outdir = os.path.join(incroot, h.get_subdir())
self.make_subdir(outfile, outdir)
for f in h.get_sources():
- abspath = os.path.join(self.environment.get_source_dir(), f)
+ abspath = os.path.join(self.environment.get_source_dir(), f) # FIXME
self.copy_file(outfile, abspath, outdir)
def generate_target_install(self, outfile):
diff --git a/test cases/10 man install/bar.2 b/test cases/10 man install/bar.2
new file mode 100644
index 0000000..9d82d7e
--- /dev/null
+++ b/test cases/10 man install/bar.2
@@ -0,0 +1 @@
+this is a man page of bar.2, its contents are irrelevant \ No newline at end of file
diff --git a/test cases/10 man install/builder.txt b/test cases/10 man install/builder.txt
new file mode 100644
index 0000000..107f8b5
--- /dev/null
+++ b/test cases/10 man install/builder.txt
@@ -0,0 +1,3 @@
+project('man install', 'c')
+m1 = man('foo.1')
+m2 = man('bar.2') \ No newline at end of file
diff --git a/test cases/10 man install/foo.1 b/test cases/10 man install/foo.1
new file mode 100644
index 0000000..647c097
--- /dev/null
+++ b/test cases/10 man install/foo.1
@@ -0,0 +1 @@
+this is a man page of foo.1 its contents are irrelevant