When the source directory and build directory differ, xml2nroff needs
to pull include files from the source directory, but it was blindly
using the current working directory (the build directory) instead.

Signed-off-by: Ben Pfaff <b...@ovn.org>
Fixes: 7ba0c32f610 ("ovn-nbctl: add db commands help and manpage")
---
 Makefile.am         |  3 ++-
 build-aux/xml2nroff | 30 +++++++++++++++++++++++-------
 2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 9be2b96..9ee2229 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2015 Nicira, Inc.
+# Copyright (C) 2007-2016 Nicira, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
@@ -183,6 +183,7 @@ SUFFIXES += .in
 SUFFIXES += .xml
 %: %.xml
        $(AM_V_GEN)$(run_python) $(srcdir)/build-aux/xml2nroff $< > $@.tmp \
+               -I $(srcdir) \
                --version=$(VERSION) \
                PKIDIR='$(PKIDIR)' \
                LOGDIR='$(LOGDIR)' \
diff --git a/build-aux/xml2nroff b/build-aux/xml2nroff
index 01e79f1..df1df28 100755
--- a/build-aux/xml2nroff
+++ b/build-aux/xml2nroff
@@ -1,6 +1,6 @@
 #! /usr/bin/python
 
-# Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
+# Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -34,13 +34,14 @@ Each VAR, when enclosed by "@"s in the input, is replaced 
by its
 corresponding VALUE, with characters &<>"' in VALUE escaped.
 
 The following options are also available:
+  -I, --include=DIR           search DIR for include files (default: .)
   --version=VERSION           use VERSION to display on document footer
   -h, --help                  display this help message\
 """ % {'argv0': argv0}
     sys.exit(0)
 
 
-def manpage_to_nroff(xml_file, subst, version=None):
+def manpage_to_nroff(xml_file, subst, include_path, version=None):
     with open(xml_file) as f:
         content = f.read()
     for k, v in subst.iteritems():
@@ -49,8 +50,18 @@ def manpage_to_nroff(xml_file, subst, version=None):
 
     xi_nodes = doc.getElementsByTagName("xi:include")
     for node in xi_nodes:
-        with open(node.getAttribute("href")) as xi_f:
-            content = xi_f.read()
+        fn = node.getAttribute("href")
+        content = None
+        for dir in include_path:
+            try:
+                with open("%s/%s" % (dir, fn)) as xi_f:
+                    content = xi_f.read()
+            except IOError:
+                pass
+        if not content:
+            sys.stderr.write("%s: could not open include file %s\n"
+                             % (argv0, fn))
+            sys.exit(1)
         for k, v in subst.iteritems():
             content = content.replace(k, v)
         xi_doc = xml.dom.minidom.parseString(content).documentElement
@@ -89,8 +100,8 @@ def manpage_to_nroff(xml_file, subst, version=None):
 
 if __name__ == "__main__":
     try:
-        options, args = getopt.gnu_getopt(sys.argv[1:], 'hV',
-                                          ['version=', 'help'])
+        options, args = getopt.gnu_getopt(sys.argv[1:], 'hVI:',
+                                          ['version=', 'help', 'include='])
     except getopt.GetoptError, geo:
         sys.stderr.write("%s: %s\n" % (argv0, geo.msg))
         sys.exit(1)
@@ -98,13 +109,18 @@ if __name__ == "__main__":
     er_diagram = None
     title = None
     version = None
+    include_path = []
     for key, value in options:
         if key == '--version':
             version = value
         elif key in ['-h', '--help']:
             usage()
+        elif key in ['-I', '--include']:
+            include_path.append(value)
         else:
             sys.exit(0)
+    if not include_path:
+        include_path = ['.']
 
     if len(args) < 1:
         sys.stderr.write("%s: exactly 1 non-option arguments required "
@@ -122,7 +138,7 @@ if __name__ == "__main__":
         subst['@%s@' % var] = value
 
     try:
-        s = manpage_to_nroff(args[0], subst, version)
+        s = manpage_to_nroff(args[0], subst, include_path, version)
     except build.nroff.error.Error, e:
         sys.stderr.write("%s: %s\n" % (argv0, e.msg))
         sys.exit(1)
-- 
2.1.3

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to