summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/SConsDoc.py421
-rw-r--r--bin/docs-update-generated.py48
-rw-r--r--bin/docs-validate.py17
-rw-r--r--bin/scons-proc.py357
-rw-r--r--doc/SConscript9
-rw-r--r--doc/scons.mod714
-rw-r--r--src/engine/SCons/Tool/qt.xml8
-rw-r--r--src/engine/SCons/Tool/xgettext.xml4
8 files changed, 771 insertions, 807 deletions
diff --git a/bin/SConsDoc.py b/bin/SConsDoc.py
index 4927dc04..8889923f 100644
--- a/bin/SConsDoc.py
+++ b/bin/SConsDoc.py
@@ -112,7 +112,173 @@ import imp
import os.path
import re
import sys
-import xml.sax.handler
+
+# Do we have libxml2/libxslt/lxml?
+has_libxml2 = True
+has_lxml = True
+try:
+ import libxml2
+ import libxslt
+except:
+ has_libxml2 = False
+try:
+ import lxml
+except:
+ has_lxml = False
+
+
+re_entity = re.compile("\&([^;]+);")
+
+entity_header = """<!DOCTYPE sconsdoc [
+<!ENTITY % scons SYSTEM 'scons.mod'>
+%scons;
+<!ENTITY % builders-mod SYSTEM 'builders.mod'>
+%builders-mod;
+<!ENTITY % functions-mod SYSTEM 'functions.mod'>
+%functions-mod;
+<!ENTITY % tools-mod SYSTEM 'tools.mod'>
+%tools-mod;
+<!ENTITY % variables-mod SYSTEM 'variables.mod'>
+%variables-mod;
+]>"""
+
+# Namespace for the SCons Docbook XSD
+dbxsd="http://www.scons.org/dbxsd/v1.0"
+
+xml_header = """<?xml version="1.0" encoding="UTF-8"?>
+<!--
+__COPYRIGHT__
+
+This file is processed by the bin/SConsDoc.py module.
+See its __doc__ string for a discussion of the format.
+-->
+
+%s
+
+<sconsdoc xmlns="http://www.scons.org/dbxsd/v1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="%s scons.xsd">
+""" % (entity_header, dbxsd)
+
+def remove_entities(content):
+ # Cut out entity inclusions
+ content = content.replace(entity_header, "")
+ # Cut out entities themselves
+ content = re_entity.sub(lambda match: match.group(1), content)
+
+ return content
+
+default_xsd = os.path.join('doc','xsd','scons.xsd')
+
+def validate_xml(fpath, xmlschema_context):
+ if not has_libxml2:
+ # At the moment we prefer libxml2 over lxml, the latter can lead
+ # to conflicts when installed together with libxml2.
+ if has_lxml:
+ # Use lxml
+ from lxml import etree
+ xmlschema = etree.XMLSchema(xmlschema_context)
+ doc = etree.parse(fpath)
+ try:
+ xmlschema.assertValid(doc)
+ except:
+ return False
+ return True
+ else:
+ # Try xmllint as a last fallback
+ try:
+ import subprocess
+ p = subprocess.Popen(['xmllint','--noout','--noent','--schema',default_xsd,fpath],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ sout, serr = p.communicate()
+ if serr and not 'validates' in serr:
+ print serr
+ return False
+
+ return True
+
+ except:
+ print "Can't validate %s! Neither lxml/libxml2, nor xmllint found." % fpath
+ return False
+
+ # Read file and resolve entities
+ doc = libxml2.readFile(fpath, None, libxml2.XML_PARSE_NOENT)
+ err = xmlschema_context.schemaValidateDoc(doc)
+ # Cleanup
+ doc.freeDoc()
+
+ if err:
+ # TODO: print error message "Haha",err
+ return False
+
+ return True
+
+perc="%"
+
+def validate_all_xml(dpath='src', xsdfile=default_xsd):
+ xmlschema_context = None
+ if not has_libxml2:
+ # At the moment we prefer libxml2 over lxml, the latter can lead
+ # to conflicts when installed together with libxml2.
+ if has_lxml:
+ # Use lxml
+ from lxml import etree
+ xmlschema_context = etree.parse(xsdfile)
+ else:
+ # Use libxml2 and prepare the schema validation context
+ ctxt = libxml2.schemaNewParserCtxt(xsdfile)
+ schema = ctxt.schemaParse()
+ del ctxt
+ xmlschema_context = schema.schemaNewValidCtxt()
+
+ fpaths = []
+ for path, dirs, files in os.walk(dpath):
+ for f in files:
+ if f.endswith('.xml'):
+ fp = os.path.join(path, f)
+ fpaths.append(fp)
+
+ fails = []
+ for idx, fp in enumerate(fpaths):
+ fpath = os.path.join(path, f)
+ print "%.2f%s (%d/%d) %s" % (float(idx+1)*100.0/float(len(fpaths)),
+ perc, idx+1, len(fpaths),fp)
+
+ if not validate_xml(fp, xmlschema_context):
+ fails.append(fp)
+ continue
+
+ if has_libxml2:
+ # Cleanup
+ del xmlschema_context
+ del schema
+
+ if fails:
+ return False
+
+ return True
+
+try:
+ from lxml import etree
+except ImportError:
+ try:
+ # Python 2.5
+ import xml.etree.cElementTree as etree
+ except ImportError:
+ try:
+ # Python 2.5
+ import xml.etree.ElementTree as etree
+ except ImportError:
+ try:
+ # normal cElementTree install
+ import cElementTree as etree
+ except ImportError:
+ try:
+ # normal ElementTree install
+ import elementtree.ElementTree as etree
+ except ImportError:
+ print("Failed to import ElementTree from any known place")
+ sys.exit(1)
class Item(object):
def __init__(self, name):
@@ -121,8 +287,8 @@ class Item(object):
if self.sort_name[0] == '_':
self.sort_name = self.sort_name[1:]
self.summary = []
- self.sets = None
- self.uses = None
+ self.sets = []
+ self.uses = []
def cmp_name(self, name):
if name[0] == '_':
name = name[1:]
@@ -175,201 +341,78 @@ class Arguments(object):
def append(self, data):
self.body.append(data)
-class Summary(object):
+class SConsDocHandler(object):
def __init__(self):
- self.body = []
- self.collect = []
- def append(self, data):
- self.collect.append(data)
- def end_para(self):
- text = ''.join(self.collect)
- paras = text.split('\n\n')
- if paras == ['\n']:
- return
- if paras[0] == '':
- self.body.append('\n')
- paras = paras[1:]
- paras[0] = '\n' + paras[0]
- if paras[-1] == '':
- paras = paras[:-1]
- paras[-1] = paras[-1] + '\n'
- last = '\n'
- else:
- last = None
- sep = None
- for p in paras:
- c = Chunk("para", p)
- if sep:
- self.body.append(sep)
- self.body.append(c)
- sep = '\n'
- if last:
- self.body.append(last)
- def begin_chunk(self, chunk):
- self.end_para()
- self.collect = chunk
- def end_chunk(self):
- self.body.append(self.collect)
- self.collect = []
-
-class SConsDocHandler(xml.sax.handler.ContentHandler,
- xml.sax.handler.ErrorHandler):
- def __init__(self):
- self._start_dispatch = {}
- self._end_dispatch = {}
- keys = list(self.__class__.__dict__.keys())
- start_tag_method_names = [k for k in keys if k[:6] == 'start_']
- end_tag_method_names = [k for k in keys if k[:4] == 'end_']
- for method_name in start_tag_method_names:
- tag = method_name[6:]
- self._start_dispatch[tag] = getattr(self, method_name)
- for method_name in end_tag_method_names:
- tag = method_name[4:]
- self._end_dispatch[tag] = getattr(self, method_name)
- self.stack = []
- self.collect = []
- self.current_object = []
self.builders = {}
self.functions = {}
self.tools = {}
self.cvars = {}
- def startElement(self, name, attrs):
- try:
- start_element_method = self._start_dispatch[name]
- except KeyError:
- self.characters('<%s>' % name)
- else:
- start_element_method(attrs)
+ def parseText(self, root):
+ txt = ""
+ for e in root.childNodes:
+ if (e.nodeType == e.TEXT_NODE):
+ txt += e.data
+ return txt
- def endElement(self, name):
- try:
- end_element_method = self._end_dispatch[name]
- except KeyError:
- self.characters('</%s>' % name)
- else:
- end_element_method()
-
- #
- #
- def characters(self, chars):
- self.collect.append(chars)
-
- def begin_collecting(self, chunk):
- self.collect = chunk
- def end_collecting(self):
- self.collect = []
-
- def begin_chunk(self):
- pass
- def end_chunk(self):
- pass
-
- #
- #
- #
-
- def begin_xxx(self, obj):
- self.stack.append(self.current_object)
- self.current_object = obj
- def end_xxx(self):
- self.current_object = self.stack.pop()
-
- #
- #
- #
- def start_scons_doc(self, attrs):
- pass
- def end_scons_doc(self):
- pass
-
- def start_builder(self, attrs):
- name = attrs.get('name')
- try:
- builder = self.builders[name]
- except KeyError:
- builder = Builder(name)
- self.builders[name] = builder
- self.begin_xxx(builder)
- def end_builder(self):
- self.end_xxx()
-
- def start_scons_function(self, attrs):
- name = attrs.get('name')
- try:
- function = self.functions[name]
- except KeyError:
- function = Function(name)
- self.functions[name] = function
- self.begin_xxx(function)
- def end_scons_function(self):
- self.end_xxx()
-
- def start_tool(self, attrs):
- name = attrs.get('name')
- try:
- tool = self.tools[name]
- except KeyError:
- tool = Tool(name)
- self.tools[name] = tool
- self.begin_xxx(tool)
- def end_tool(self):
- self.end_xxx()
-
- def start_cvar(self, attrs):
- name = attrs.get('name')
+ def parseItems(self, domelem):
+ items = []
+
+ for i in domelem.iterchildren(tag="item"):
+ items.append(self.parseText(i))
+
+ return items
+
+ def parseUsesSets(self, domelem):
+ uses = []
+ sets = []
+
+ for u in domelem.iterchildren(tag="uses"):
+ uses.extend(self.parseItems(u))
+ for s in domelem.iterchildren(tag="sets"):
+ sets.extend(self.parseItems(s))
+
+ return sorted(uses), sorted(sets)
+
+ def parseInstance(self, domelem, map, Class):
+ name = domelem.attrib.get('name','unknown')
try:
- cvar = self.cvars[name]
+ instance = map[name]
except KeyError:
- cvar = ConstructionVariable(name)
- self.cvars[name] = cvar
- self.begin_xxx(cvar)
- def end_cvar(self):
- self.end_xxx()
-
- def start_arguments(self, attrs):
- arguments = Arguments(attrs.get('signature', "both"))
- self.current_object.arguments.append(arguments)
- self.begin_xxx(arguments)
- self.begin_collecting(arguments)
- def end_arguments(self):
- self.end_xxx()
-
- def start_summary(self, attrs):
- summary = Summary()
- self.current_object.summary = summary
- self.begin_xxx(summary)
- self.begin_collecting(summary)
- def end_summary(self):
- self.current_object.end_para()
- self.end_xxx()
-
- def start_example(self, attrs):
- example = Chunk("programlisting")
- self.current_object.begin_chunk(example)
- def end_example(self):
- self.current_object.end_chunk()
-
- def start_uses(self, attrs):
- self.begin_collecting([])
- def end_uses(self):
- self.current_object.uses = sorted(''.join(self.collect).split())
- self.end_collecting()
-
- def start_sets(self, attrs):
- self.begin_collecting([])
- def end_sets(self):
- self.current_object.sets = sorted(''.join(self.collect).split())
- self.end_collecting()
-
- # Stuff for the ErrorHandler portion.
- def error(self, exception):
- linenum = exception._linenum - self.preamble_lines
- sys.stderr.write('%s:%d:%d: %s (error)\n' % (self.filename, linenum, exception._colnum, ''.join(exception.args)))
-
- def fatalError(self, exception):
- linenum = exception._linenum - self.preamble_lines
- sys.stderr.write('%s:%d:%d: %s (fatalError)\n' % (self.filename, linenum, exception._colnum, ''.join(exception.args)))
+ instance = Class(name)
+ map[name] = instance
+ uses, sets = self.parseUsesSets(domelem)
+ instance.uses.extend(uses)
+ instance.sets.extend(sets)
+ # Parse summary and function blobs
+
+ def parseDomtree(self, root):
+ # Process Builders
+ for b in root.iterchildren(tag="{%s}builder" % dbxsd):
+ self.parseInstance(b, self.builders, Builder)
+ # Process Functions
+ for f in root.iterchildren(tag="{%s}scons_function" % dbxsd):
+ self.parseInstance(f, self.functions, Function)
+ # Process Tools
+ for t in root.iterchildren(tag="{%s}tool" % dbxsd):
+ self.parseInstance(t, self.tools, Tool)
+ # Process CVars
+ for c in root.iterchildren(tag="{%s}cvar" % dbxsd):
+ self.parseInstance(c, self.cvars, ConstructionVariable)
+
+ def parseContent(self, content, include_entities=True):
+ if not include_entities:
+ content = remove_entities(content)
+ # Create domtree from given content string
+ root = etree.fromstring(content)
+ # Parse it
+ self.parseDomtree(root)
+
+ def parseXmlFile(self, fpath):
+ # Create domtree from file
+ domtree = etree.parse(fpath)
+ # Parse it
+ self.parseDomtree(domtree.getroot())
def set_file_info(self, filename, preamble_lines):
self.filename = filename
diff --git a/bin/docs-update-generated.py b/bin/docs-update-generated.py
new file mode 100644
index 00000000..2a78b9ff
--- /dev/null
+++ b/bin/docs-update-generated.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#
+# Searches through the whole source tree and updates
+# the generated *.gen/*.mod files in the docs folder, keeping all
+# documentation for the tools, builders and functions...
+# as well as the entity declarations for them.
+# Uses scons-proc.py under the hood...
+#
+
+import os
+
+# Directory where all generated files are stored
+gen_folder = 'doc/generated'
+
+def argpair(key):
+ """ Return the argument pair *.gen,*.mod for the given key. """
+ arg = '%s,%s' % (os.path.join(gen_folder,'%s.gen' % key),
+ os.path.join(gen_folder,'%s.mod' % key))
+
+ return arg
+
+def generate_all():
+ """ Scan for XML files in the src directory and call scons-proc.py
+ to generate the *.gen/*.mod files from it.
+ """
+ flist = []
+ for path, dirs, files in os.walk('src'):
+ for f in files:
+ if f.endswith('.xml'):
+ fpath = os.path.join(path, f)
+ flist.append(fpath)
+
+ if flist:
+ # Does the destination folder exist
+ if not os.path.isdir(gen_folder):
+ try:
+ os.makedirs(gen_folder)
+ except:
+ print "Couldn't create destination folder %s! Exiting..." % gen_folder
+ return
+ # Call scons-proc.py
+ os.system('python bin/scons-proc.py -b %s -f %s -t %s -v %s %s' %
+ (argpair('builders'), argpair('functions'),
+ argpair('tools'), argpair('variables'), ' '.join(flist)))
+
+
+if __name__ == "__main__":
+ generate_all()
diff --git a/bin/docs-validate.py b/bin/docs-validate.py
new file mode 100644
index 00000000..2bc70a98
--- /dev/null
+++ b/bin/docs-validate.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+#
+# Searches through the whole source tree and validates all
+# documentation files against our own XSD in docs/xsd.
+# Additionally, it rewrites all files such that the XML gets
+# pretty-printed in a consistent way. This is done to ensure that
+# merging and diffing doesn't get too hard when people start to
+# use different XML editors...
+#
+
+import SConsDoc
+
+if __name__ == "__main__":
+ if SConsDoc.validate_all_xml():
+ print "OK"
+ else:
+ print "Validation failed! Please correct the errors above and try again."
diff --git a/bin/scons-proc.py b/bin/scons-proc.py
index 1f537c71..7a56a798 100644
--- a/bin/scons-proc.py
+++ b/bin/scons-proc.py
@@ -5,17 +5,15 @@
# This script creates formatted lists of the Builders, functions, Tools
# or construction variables documented in the specified XML files.
#
-# Dependening on the options, the lists are output in either
+# Depending on the options, the lists are output in either
# DocBook-formatted generated XML files containing the summary text
-# and/or .mod files contining the ENTITY definitions for each item,
-# or in man-page-formatted output.
+# and/or .mod files containing the ENTITY definitions for each item.
#
import getopt
import os
import re
import string
import sys
-import xml.sax
try:
from io import StringIO # usable as of 2.6; takes unicode only
except ImportError:
@@ -27,28 +25,26 @@ import SConsDoc
base_sys_path = [os.getcwd() + '/build/test-tar-gz/lib/scons'] + sys.path
helpstr = """\
-Usage: scons-proc.py [--man|--xml]
- [-b file(s)] [-f file(s)] [-t file(s)] [-v file(s)]
+Usage: scons-proc.py [-b file(s)] [-f file(s)] [-t file(s)] [-v file(s)]
[infile ...]
Options:
-b file(s) dump builder information to the specified file(s)
-f file(s) dump function information to the specified file(s)
-t file(s) dump tool information to the specified file(s)
-v file(s) dump variable information to the specified file(s)
- --man print info in man page format, each -[btv] argument
- is a single file name
- --xml (default) print info in SML format, each -[btv] argument
- is a pair of comma-separated .gen,.mod file names
+
+ Regard that each -[btv] argument is a pair of
+ comma-separated .gen,.mod file names.
+
"""
opts, args = getopt.getopt(sys.argv[1:],
"b:f:ht:v:",
['builders=', 'help',
- 'man', 'xml', 'tools=', 'variables='])
+ 'tools=', 'variables='])
buildersfiles = None
functionsfiles = None
-output_type = '--xml'
toolsfiles = None
variablesfiles = None
@@ -60,55 +56,29 @@ for o, a in opts:
elif o in ['-h', '--help']:
sys.stdout.write(helpstr)
sys.exit(0)
- elif o in ['--man', '--xml']:
- output_type = o
elif o in ['-t', '--tools']:
toolsfiles = a
elif o in ['-v', '--variables']:
variablesfiles = a
-h = SConsDoc.SConsDocHandler()
-saxparser = xml.sax.make_parser()
-saxparser.setContentHandler(h)
-saxparser.setErrorHandler(h)
-
-xml_preamble = """\
-<?xml version="1.0"?>
-<scons_doc>
-"""
-
-xml_postamble = """\
-</scons_doc>
-"""
-
-for f in args:
- _, ext = os.path.splitext(f)
- if ext == '.py':
- dir, _ = os.path.split(f)
- if dir:
- sys.path = [dir] + base_sys_path
- module = SConsDoc.importfile(f)
- h.set_file_info(f, len(xml_preamble.split('\n')))
- try:
- content = module.__scons_doc__
- except AttributeError:
- content = None
+def parse_docs(args, include_entities=True):
+ h = SConsDoc.SConsDocHandler()
+ for f in args:
+ if include_entities:
+ try:
+ h.parseXmlFile(f)
+ except:
+ sys.stderr.write("error in %s\n" % f)
+ raise
else:
- del module.__scons_doc__
- else:
- h.set_file_info(f, len(xml_preamble.split('\n')))
- content = open(f).read()
- if content:
- content = content.replace('&', '&amp;')
- # Strip newlines after comments so they don't turn into
- # spurious paragraph separators.
- content = content.replace('-->\n', '-->')
- input = xml_preamble + content + xml_postamble
- try:
- saxparser.parse(StringIO(unicode(input)))
- except:
- sys.stderr.write("error in %s\n" % f)
- raise
+ content = open(f).read()
+ if content:
+ try:
+ h.parseContent(content, include_entities)
+ except:
+ sys.stderr.write("error in %s\n" % f)
+ raise
+ return h
Warning = """\
<!--
@@ -137,27 +107,35 @@ class SCons_XML(object):
self.values = entries
for k, v in kw.items():
setattr(self, k, v)
+
def fopen(self, name):
if name == '-':
return sys.stdout
return open(name, 'w')
-
-class SCons_XML_to_XML(SCons_XML):
+
def write(self, files):
gen, mod = files.split(',')
- g.write_gen(gen)
- g.write_mod(mod)
+ self.write_gen(gen)
+ self.write_mod(mod)
+
def write_gen(self, filename):
if not filename:
return
+ # Try to split off .gen filename
+ if filename.count(','):
+ fl = filename.split(',')
+ filename = fl[0]
f = self.fopen(filename)
for v in self.values:
f.write('\n<varlistentry id="%s%s">\n' %
(v.prefix, v.idfunc()))
f.write('%s\n' % v.xml_term())
f.write('<listitem>\n')
- for chunk in v.summary.body:
- f.write(str(chunk))
+ # TODO: write summary
+ f.write('<para>\n')
+ if v.summary:
+ pass
+ f.write('</para>\n')
if v.sets:
s = ['&cv-link-%s;' % x for x in v.sets]
f.write('<para>\n')
@@ -170,143 +148,53 @@ class SCons_XML_to_XML(SCons_XML):
f.write('</para>\n')
f.write('</listitem>\n')
f.write('</varlistentry>\n')
+
def write_mod(self, filename):
- description = self.values[0].description
+ try:
+ description = self.values[0].description
+ except:
+ description = ""
if not filename:
return
+ # Try to split off .mod filename
+ if filename.count(','):
+ fl = filename.split(',')
+ filename = fl[1]
f = self.fopen(filename)
f.write(Warning)
f.write('\n')
f.write(Regular_Entities_Header % description)
f.write('\n')
for v in self.values:
- f.write('<!ENTITY %s%s "<%s>%s</%s>">\n' %
+ f.write('<!ENTITY %s%s "<%s xmlns=\'%s\'>%s</%s>">\n' %
(v.prefix, v.idfunc(),
- v.tag, v.entityfunc(), v.tag))
+ v.tag, SConsDoc.dbxsd, v.entityfunc(), v.tag))
if self.env_signatures:
f.write('\n')
for v in self.values:
- f.write('<!ENTITY %senv-%s "<%s>env.%s</%s>">\n' %
+ f.write('<!ENTITY %senv-%s "<%s xmlns=\'%s\'>env.%s</%s>">\n' %
(v.prefix, v.idfunc(),
- v.tag, v.entityfunc(), v.tag))
+ v.tag, SConsDoc.dbxsd, v.entityfunc(), v.tag))
f.write('\n')
f.write(Warning)
f.write('\n')
f.write(Link_Entities_Header % description)
f.write('\n')
for v in self.values:
- f.write('<!ENTITY %slink-%s \'<link linkend="%s%s"><%s>%s</%s></link>\'>\n' %
+ f.write('<!ENTITY %slink-%s "<link linkend=\'%s%s\' xmlns=\'%s\'><%s>%s</%s></link>">\n' %
(v.prefix, v.idfunc(),
- v.prefix, v.idfunc(),
+ v.prefix, v.idfunc(), SConsDoc.dbxsd,
v.tag, v.entityfunc(), v.tag))
if self.env_signatures:
f.write('\n')
for v in self.values:
- f.write('<!ENTITY %slink-env-%s \'<link linkend="%s%s"><%s>env.%s</%s></link>\'>\n' %
+ f.write('<!ENTITY %slink-env-%s "<link linkend=\'%s%s\' xmlns=\'%s\'><%s>env.%s</%s></link>">\n' %
(v.prefix, v.idfunc(),
- v.prefix, v.idfunc(),
+ v.prefix, v.idfunc(), SConsDoc.dbxsd,
v.tag, v.entityfunc(), v.tag))
f.write('\n')
f.write(Warning)
-class SCons_XML_to_man(SCons_XML):
- def write(self, filename):
- """
- Converts the contents of the specified filename from DocBook XML
- to man page macros.
-
- This does not do an intelligent job. In particular, it doesn't
- actually use the structured nature of XML to handle arbitrary
- input. Instead, we're using text replacement and regular
- expression substitutions to convert observed patterns into the
- macros we want. To the extent that we're relatively consistent
- with our input .xml, this works, but could easily break if handed
- input that doesn't match these specific expectations.
- """
- if not filename:
- return
- f = self.fopen(filename)
- chunks = []
- for v in self.values:
- chunks.extend(v.man_separator())
- chunks.extend(v.initial_man_chunks())
- chunks.extend(list(map(str, v.summary.body)))
-
- body = ''.join(chunks)
-
- # Simple transformation of examples into our defined macros for those.
- body = body.replace('<programlisting>', '.ES')
- body = body.replace('</programlisting>', '.EE')
-
- # Replace groupings of <para> tags and surrounding newlines
- # with single blank lines.
- body = body.replace('\n</para>\n<para>\n', '\n\n')
- body = body.replace('<para>\n', '')
- body = body.replace('<para>', '\n')
- body = body.replace('</para>\n', '')
-
- # Convert <variablelist> and its child tags.
- body = body.replace('<variablelist>\n', '.RS 10\n')
- # Handling <varlistentry> needs to be rationalized and made
- # consistent. Right now, the <term> values map to arbitrary,
- # ad-hoc idioms in the current man page.
- body = re.compile(r'<varlistentry>\n<term><literal>([^<]*)</literal></term>\n<listitem>\n').sub(r'.TP 6\n.B \1\n', body)
- body = re.compile(r'<varlistentry>\n<term><parameter>([^<]*)</parameter></term>\n<listitem>\n').sub(r'.IP \1\n', body)
- body = re.compile(r'<varlistentry>\n<term>([^<]*)</term>\n<listitem>\n').sub(r'.HP 6\n.B \1\n', body)
- body = body.replace('</listitem>\n', '')
- body = body.replace('</varlistentry>\n', '')
- body = body.replace('</variablelist>\n', '.RE\n')
-
- # Get rid of unnecessary .IP macros, and unnecessary blank lines
- # in front of .IP macros.
- body = re.sub(r'\.EE\n\n+(?!\.IP)', '.EE\n.IP\n', body)
- body = body.replace('\n.EE\n.IP\n.ES\n', '\n.EE\n\n.ES\n')
- body = body.replace('\n.IP\n\'\\"', '\n\n\'\\"')
-
- # Convert various named entities and tagged names to nroff
- # in-line font conversions (\fB, \fI, \fP).
- body = re.sub('&(scons|SConstruct|SConscript|Dir|jar|Make|lambda);',
- r'\\fB\1\\fP', body)
- body = re.sub('&(TARGET|TARGETS|SOURCE|SOURCES);', r'\\fB$\1\\fP', body)
- body = re.sub('&(target|source);', r'\\fI\1\\fP', body)
- body = re.sub('&b(-link)?-([^;]*);', r'\\fB\2\\fP()', body)
- body = re.sub('&cv(-link)?-([^;]*);', r'\\fB$\2\\fP', body)
- body = re.sub('&f(-link)?-env-([^;]*);', r'\\fBenv.\2\\fP()', body)
- body = re.sub('&f(-link)?-([^;]*);', r'\\fB\2\\fP()', body)
- body = re.sub(r'<(application|command|envar|filename|function|literal|option)>([^<]*)</\1>',
- r'\\fB\2\\fP', body)
- body = re.sub(r'<(classname|emphasis|varname)>([^<]*)</\1>',
- r'\\fI\2\\fP', body)
-
- # Convert groupings of font conversions (\fB, \fI, \fP) to
- # man page .B, .BR, .I, .IR, .R, .RB and .RI macros.
- body = re.compile(r'^\\f([BI])([^\\]* [^\\]*)\\fP\s*$', re.M).sub(r'.\1 "\2"', body)
- body = re.compile(r'^\\f([BI])(.*)\\fP\s*$', re.M).sub(r'.\1 \2', body)
- body = re.compile(r'^\\f([BI])(.*)\\fP(\S+)$', re.M).sub(r'.\1R \2 \3', body)
- body = re.compile(r'^(\.B)( .*)\\fP(.*)\\fB(.*)$', re.M).sub(r'\1R\2 \3 \4', body)
- body = re.compile(r'^(\.B)R?( .*)\\fP(.*)\\fI(.*)$', re.M).sub(r'\1I\2\3 \4', body)
- body = re.compile(r'^(\.I)( .*)\\fP\\fB(.*)\\fP\\fI(.*)$', re.M).sub(r'\1R\2 \3 \4', body)
- body = re.compile(r'^(\S+)\\f([BI])(.*)\\fP$', re.M).sub(r'.R\2 \1 \3', body)
- body = re.compile(r'^(\S+)\\f([BI])(.*)\\fP([^\s\\]+)$', re.M).sub(r'.R\2 \1 \3 \4', body)
- body = re.compile(r'^(\.R[BI].*[\S])\s+$;', re.M).sub(r'\1', body)
-
- # Convert &lt; and &gt; entities to literal < and > characters.
- body = body.replace('&lt;', '<')
- body = body.replace('&gt;', '>')
-
- # Backslashes. Oh joy.
- body = re.sub(r'\\(?=[^f])', r'\\\\', body)
- body = re.compile("^'\\\\\\\\", re.M).sub("'\\\\", body)
- body = re.compile(r'^\.([BI]R?) ([^"]\S*\\\\\S+[^"])$', re.M).sub(r'.\1 "\2"', body)
-
- # Put backslashes in front of various hyphens that need
- # to be long em-dashes.
- body = re.compile(r'^\.([BI]R?) --', re.M).sub(r'.\1 \-\-', body)
- body = re.compile(r'^\.([BI]R?) -', re.M).sub(r'.\1 \-', body)
- body = re.compile(r'\\f([BI])-', re.M).sub(r'\\f\1\-', body)
-
- f.write(body)
-
class Proxy(object):
def __init__(self, subject):
"""Wrap an object as a Proxy object"""
@@ -329,6 +217,7 @@ class Proxy(object):
class SConsThing(Proxy):
def idfunc(self):
return self.name
+
def xml_term(self):
return '<term>%s</term>' % self.name
@@ -336,20 +225,19 @@ class Builder(SConsThing):
description = 'builder'
prefix = 'b-'
tag = 'function'
+
def xml_term(self):
return ('<term><synopsis><%s>%s()</%s></synopsis>\n<synopsis><%s>env.%s()</%s></synopsis></term>' %
(self.tag, self.name, self.tag, self.tag, self.name, self.tag))
+
def entityfunc(self):
return self.name
- def man_separator(self):
- return ['\n', "'\\" + '"'*69 + '\n']
- def initial_man_chunks(self):
- return [ '.IP %s()\n.IP env.%s()\n' % (self.name, self.name) ]
class Function(SConsThing):
description = 'function'
prefix = 'f-'
tag = 'function'
+
def args_to_xml(self, arg):
s = ''.join(arg.body).strip()
result = []
@@ -362,6 +250,7 @@ class Function(SConsThing):
else:
result.append(m)
return ''.join(result)
+
def xml_term(self):
try:
arguments = self.arguments
@@ -380,105 +269,73 @@ class Function(SConsThing):
result.append('<synopsis><varname>env</varname>.%s%s</synopsis>' % (self.name, s))
result.append('</term>')
return ''.join(result)
+
def entityfunc(self):
return self.name
- def man_separator(self):
- return ['\n', "'\\" + '"'*69 + '\n']
- def args_to_man(self, arg):
- """Converts the contents of an <arguments> tag, which
- specifies a function's calling signature, into a series
- of tokens that alternate between literal tokens
- (to be displayed in roman or bold face) and variable
- names (to be displayed in italics).
-
- This is complicated by the presence of Python "keyword=var"
- arguments, where "keyword=" should be displayed literally,
- and "var" should be displayed in italics. We do this by
- detecting the keyword= var portion and appending it to the
- previous string, if any.
- """
- s = ''.join(arg.body).strip()
- result = []
- for m in re.findall('([a-zA-Z/_]+=?|[^a-zA-Z/_]+)', s):
- if m[-1] == '=' and result:
- if result[-1][-1] == '"':
- result[-1] = result[-1][:-1] + m + '"'
- else:
- result[-1] += m
- else:
- if ' ' in m:
- m = '"%s"' % m
- result.append(m)
- return ' '.join(result)
- def initial_man_chunks(self):
- try:
- arguments = self.arguments
- except AttributeError:
- arguments = ['()']
- result = []
- for arg in arguments:
- try:
- signature = arg.signature
- except AttributeError:
- signature = "both"
- s = self.args_to_man(arg)
- if signature in ('both', 'global'):
- result.append('.TP\n.RI %s%s\n' % (self.name, s))
- if signature in ('both', 'env'):
- result.append('.TP\n.IR env .%s%s\n' % (self.name, s))
- return result
class Tool(SConsThing):
description = 'tool'
prefix = 't-'
tag = 'literal'
+
def idfunc(self):
return self.name.replace('+', 'X')
+
def entityfunc(self):
return self.name
- def man_separator(self):
- return ['\n']
- def initial_man_chunks(self):
- return ['.IP %s\n' % self.name]
class Variable(SConsThing):
description = 'construction variable'
prefix = 'cv-'
tag = 'envar'
+
def entityfunc(self):
return '$' + self.name
- def man_separator(self):
- return ['\n']
- def initial_man_chunks(self):
- return ['.IP %s\n' % self.name]
-if output_type == '--man':
- processor_class = SCons_XML_to_man
-elif output_type == '--xml':
- processor_class = SCons_XML_to_XML
+def write_output_files(h, buildersfiles, functionsfiles,
+ toolsfiles, variablesfiles, write_func):
+ if buildersfiles:
+ g = processor_class([ Builder(b) for b in sorted(h.builders.values()) ],
+ env_signatures=True)
+ write_func(g, buildersfiles)
+
+ if functionsfiles:
+ g = processor_class([ Function(b) for b in sorted(h.functions.values()) ],
+ env_signatures=True)
+ write_func(g, functionsfiles)
+
+ if toolsfiles:
+ g = processor_class([ Tool(t) for t in sorted(h.tools.values()) ],
+ env_signatures=False)
+ write_func(g, toolsfiles)
+
+ if variablesfiles:
+ g = processor_class([ Variable(v) for v in sorted(h.cvars.values()) ],
+ env_signatures=False)
+ write_func(g, variablesfiles)
+
+processor_class = SCons_XML
+
+# Step 1: Creating entity files for builders, functions,...
+h = parse_docs(args, False)
+write_output_files(h, buildersfiles, functionsfiles, toolsfiles,
+ variablesfiles, SCons_XML.write_mod)
+
+# Step 2: Patching the include paths for entity definitions in XML files
+os.system('python bin/docs-correct-mod-paths.py')
+
+# Step 3: Validating all input files
+print "Validating files against SCons XSD..."
+if SConsDoc.validate_all_xml():
+ print "OK"
else:
- sys.stderr.write("Unknown output type '%s'\n" % output_type)
- sys.exit(1)
-
-if buildersfiles:
- g = processor_class([ Builder(b) for b in sorted(h.builders.values()) ],
- env_signatures=True)
- g.write(buildersfiles)
-
-if functionsfiles:
- g = processor_class([ Function(b) for b in sorted(h.functions.values()) ],
- env_signatures=True)
- g.write(functionsfiles)
-
-if toolsfiles:
- g = processor_class([ Tool(t) for t in sorted(h.tools.values()) ],
- env_signatures=False)
- g.write(toolsfiles)
+ print "Validation failed! Please correct the errors above and try again."
-if variablesfiles:
- g = processor_class([ Variable(v) for v in sorted(h.cvars.values()) ],
- env_signatures=False)
- g.write(variablesfiles)
+# Step 4: Creating actual documentation snippets, using the
+# fully resolved and updated entities from the *.mod files.
+h = parse_docs(args, True)
+write_output_files(h, buildersfiles, functionsfiles, toolsfiles,
+ variablesfiles, SCons_XML.write)
# Local Variables:
# tab-width:4
diff --git a/doc/SConscript b/doc/SConscript
index a3d6fe7a..9f7dacda 100644
--- a/doc/SConscript
+++ b/doc/SConscript
@@ -107,15 +107,6 @@ env = orig_env.Clone(SCANNERS = [s],
# SCons documentation XML for processing.
def chop(s): return s[:-1]
-# If we ever read doc from __scons_doc__ strings in *.py files again,
-# here's how it's done:
-#manifest_in = File('#src/engine/MANIFEST.in').rstr()
-#manifest_xml_in = File('#src/engine/MANIFEST-xml.in').rstr()
-#scons_doc_files = map(chop, open(manifest_in).readlines() +\
-# open(manifest_xml_in).readlines())
-#scons_doc_files = map(lambda x: '#src/engine/'+x, scons_doc_files)
-#manifest_in = File('#src/engine/MANIFEST.in').rstr()
-
manifest_xml_in = File('#src/engine/MANIFEST-xml.in').rstr()
scons_doc_files = list(map(chop, open(manifest_xml_in).readlines()))
scons_doc_files = [File('#src/engine/'+x).rstr() for x in scons_doc_files]
diff --git a/doc/scons.mod b/doc/scons.mod
index 7e5ed603..4066ef38 100644
--- a/doc/scons.mod
+++ b/doc/scons.mod
@@ -16,47 +16,47 @@
-->
-<!ENTITY Aegis "<application>Aegis</application>">
-<!ENTITY Ant "<application>Ant</application>">
-<!ENTITY ar "<application>ar</application>">
-<!ENTITY as "<application>as</application>">
-<!ENTITY Autoconf "<application>Autoconf</application>">
-<!ENTITY Automake "<application>Automake</application>">
-<!ENTITY bison "<application>bison</application>">
-<!ENTITY cc "<application>cc</application>">
-<!ENTITY Cons "<application>Cons</application>">
-<!ENTITY cp "<application>cp</application>">
-<!ENTITY csh "<application>csh</application>">
-<!ENTITY f77 "<application>f77</application>">
-<!ENTITY f90 "<application>f90</application>">
-<!ENTITY f95 "<application>f95</application>">
-<!ENTITY gas "<application>gas</application>">
-<!ENTITY gcc "<application>gcc</application>">
-<!ENTITY g77 "<application>g77</application>">
-<!ENTITY gXX "<application>gXX</application>">
-<!ENTITY Jam "<application>Jam</application>">
-<!ENTITY jar "<application>jar</application>">
-<!ENTITY javac "<application>javac</application>">
-<!ENTITY javah "<application>javah</application>">
-<!ENTITY latex "<application>latex</application>">
-<!ENTITY lex "<application>lex</application>">
-<!ENTITY m4 "<application>m4</application>">
-<!ENTITY Make "<application>Make</application>">
-<!ENTITY Makepp "<application>Make++</application>">
-<!ENTITY pdflatex "<application>pdflatex</application>">
-<!ENTITY pdftex "<application>pdftex</application>">
-<!ENTITY Python "<application>Python</application>">
-<!ENTITY ranlib "<application>ranlib</application>">
-<!ENTITY rmic "<application>rmic</application>">
-<!ENTITY SCons "<application>SCons</application>">
-<!ENTITY ScCons "<application>ScCons</application>">
-<!ENTITY sleep "<application>sleep</application>">
-<!ENTITY swig "<application>swig</application>">
-<!ENTITY tar "<application>tar</application>">
-<!ENTITY tex "<application>tex</application>">
-<!ENTITY touch "<application>touch</application>">
-<!ENTITY yacc "<application>yacc</application>">
-<!ENTITY zip "<application>zip</application>">
+<!ENTITY Aegis "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Aegis</application>">
+<!ENTITY Ant "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Ant</application>">
+<!ENTITY ar "<application xmlns='http://www.scons.org/dbxsd/v1.0'>ar</application>">
+<!ENTITY as "<application xmlns='http://www.scons.org/dbxsd/v1.0'>as</application>">
+<!ENTITY Autoconf "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Autoconf</application>">
+<!ENTITY Automake "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Automake</application>">
+<!ENTITY bison "<application xmlns='http://www.scons.org/dbxsd/v1.0'>bison</application>">
+<!ENTITY cc "<application xmlns='http://www.scons.org/dbxsd/v1.0'>cc</application>">
+<!ENTITY Cons "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Cons</application>">
+<!ENTITY cp "<application xmlns='http://www.scons.org/dbxsd/v1.0'>cp</application>">
+<!ENTITY csh "<application xmlns='http://www.scons.org/dbxsd/v1.0'>csh</application>">
+<!ENTITY f77 "<application xmlns='http://www.scons.org/dbxsd/v1.0'>f77</application>">
+<!ENTITY f90 "<application xmlns='http://www.scons.org/dbxsd/v1.0'>f90</application>">
+<!ENTITY f95 "<application xmlns='http://www.scons.org/dbxsd/v1.0'>f95</application>">
+<!ENTITY gas "<application xmlns='http://www.scons.org/dbxsd/v1.0'>gas</application>">
+<!ENTITY gcc "<application xmlns='http://www.scons.org/dbxsd/v1.0'>gcc</application>">
+<!ENTITY g77 "<application xmlns='http://www.scons.org/dbxsd/v1.0'>g77</application>">
+<!ENTITY gXX "<application xmlns='http://www.scons.org/dbxsd/v1.0'>gXX</application>">
+<!ENTITY Jam "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Jam</application>">
+<!ENTITY jar "<application xmlns='http://www.scons.org/dbxsd/v1.0'>jar</application>">
+<!ENTITY javac "<application xmlns='http://www.scons.org/dbxsd/v1.0'>javac</application>">
+<!ENTITY javah "<application xmlns='http://www.scons.org/dbxsd/v1.0'>javah</application>">
+<!ENTITY latex "<application xmlns='http://www.scons.org/dbxsd/v1.0'>latex</application>">
+<!ENTITY lex "<application xmlns='http://www.scons.org/dbxsd/v1.0'>lex</application>">
+<!ENTITY m4 "<application xmlns='http://www.scons.org/dbxsd/v1.0'>m4</application>">
+<!ENTITY Make "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Make</application>">
+<!ENTITY Makepp "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Make++</application>">
+<!ENTITY pdflatex "<application xmlns='http://www.scons.org/dbxsd/v1.0'>pdflatex</application>">
+<!ENTITY pdftex "<application xmlns='http://www.scons.org/dbxsd/v1.0'>pdftex</application>">
+<!ENTITY Python "<application xmlns='http://www.scons.org/dbxsd/v1.0'>Python</application>">
+<!ENTITY ranlib "<application xmlns='http://www.scons.org/dbxsd/v1.0'>ranlib</application>">
+<!ENTITY rmic "<application xmlns='http://www.scons.org/dbxsd/v1.0'>rmic</application>">
+<!ENTITY SCons "<application xmlns='http://www.scons.org/dbxsd/v1.0'>SCons</application>">
+<!ENTITY ScCons "<application xmlns='http://www.scons.org/dbxsd/v1.0'>ScCons</application>">
+<!ENTITY sleep "<application xmlns='http://www.scons.org/dbxsd/v1.0'>sleep</application>">
+<!ENTITY swig "<application xmlns='http://www.scons.org/dbxsd/v1.0'>swig</application>">
+<!ENTITY tar "<application xmlns='http://www.scons.org/dbxsd/v1.0'>tar</application>">
+<!ENTITY tex "<application xmlns='http://www.scons.org/dbxsd/v1.0'>tex</application>">
+<!ENTITY touch "<application xmlns='http://www.scons.org/dbxsd/v1.0'>touch</application>">
+<!ENTITY yacc "<application xmlns='http://www.scons.org/dbxsd/v1.0'>yacc</application>">
+<!ENTITY zip "<application xmlns='http://www.scons.org/dbxsd/v1.0'>zip</application>">
<!--
@@ -65,28 +65,28 @@
-->
-<!ENTITY Action "<classname>Action</classname>">
-<!ENTITY ActionBase "<classname>ActionBase</classname>">
-<!ENTITY CommandAction "<classname>CommandAction</classname>">
-<!ENTITY FunctionAction "<classname>FunctionAction</classname>">
-<!ENTITY ListAction "<classname>ListAction</classname>">
-<!ENTITY Builder "<classname>Builder</classname>">
-<!ENTITY BuilderBase "<classname>BuilderBase</classname>">
-<!ENTITY CompositeBuilder "<classname>CompositeBuilder</classname>">
-<!ENTITY MultiStepBuilder "<classname>MultiStepBuilder</classname>">
-<!ENTITY Job "<classname>Job</classname>">
-<!ENTITY Jobs "<classname>Jobs</classname>">
-<!ENTITY Serial "<classname>Serial</classname>">
-<!ENTITY Parallel "<classname>Parallel</classname>">
-<!ENTITY Node "<classname>Node</classname>">
-<!ENTITY Node_FS "<classname>Node.FS</classname>">
-<!ENTITY Scanner "<classname>Scanner</classname>">
-<!ENTITY Sig "<classname>Sig</classname>">
-<!ENTITY Signature "<classname>Signature</classname>">
-<!ENTITY Taskmaster "<classname>Taskmaster</classname>">
-<!ENTITY TimeStamp "<classname>TimeStamp</classname>">
-<!ENTITY Walker "<classname>Walker</classname>">
-<!ENTITY Wrapper "<classname>Wrapper</classname>">
+<!ENTITY Action "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Action</classname>">
+<!ENTITY ActionBase "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>ActionBase</classname>">
+<!ENTITY CommandAction "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>CommandAction</classname>">
+<!ENTITY FunctionAction "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>FunctionAction</classname>">
+<!ENTITY ListAction "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>ListAction</classname>">
+<!ENTITY Builder "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Builder</classname>">
+<!ENTITY BuilderBase "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>BuilderBase</classname>">
+<!ENTITY CompositeBuilder "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>CompositeBuilder</classname>">
+<!ENTITY MultiStepBuilder "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>MultiStepBuilder</classname>">
+<!ENTITY Job "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Job</classname>">
+<!ENTITY Jobs "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Jobs</classname>">
+<!ENTITY Serial "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Serial</classname>">
+<!ENTITY Parallel "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Parallel</classname>">
+<!ENTITY Node "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Node</classname>">
+<!ENTITY Node_FS "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Node.FS</classname>">
+<!ENTITY Scanner "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Scanner</classname>">
+<!ENTITY Sig "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Sig</classname>">
+<!ENTITY Signature "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Signature</classname>">
+<!ENTITY Taskmaster "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Taskmaster</classname>">
+<!ENTITY TimeStamp "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>TimeStamp</classname>">
+<!ENTITY Walker "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Walker</classname>">
+<!ENTITY Wrapper "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>Wrapper</classname>">
@@ -96,20 +96,20 @@
-->
-<!ENTITY config "<literal>--config</literal>">
-<!ENTITY debug-explain "<literal>--debug=explain</literal>">
-<!ENTITY debug-findlibs "<literal>--debug=findlibs</literal>">
-<!ENTITY debug-includes "<literal>--debug=includes</literal>">
-<!ENTITY debug-prepare "<literal>--debug=prepare</literal>">
-<!ENTITY debug-presub "<literal>--debug=presub</literal>">
-<!ENTITY debug-stacktrace "<literal>--debug=stacktrace</literal>">
-<!ENTITY implicit-cache "<literal>--implicit-cache</literal>">
-<!ENTITY implicit-deps-changed "<literal>--implicit-deps-changed</literal>">
-<!ENTITY implicit-deps-unchanged "<literal>--implicit-deps-unchanged</literal>">
-<!ENTITY profile "<literal>--profile</literal>">
-<!ENTITY taskmastertrace "<literal>--taskmastertrace</literal>">
-<!ENTITY tree "<literal>--tree</literal>">
-<!ENTITY Q "<literal>-Q</literal>">
+<!ENTITY config "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--config</literal>">
+<!ENTITY debug-explain "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--debug=explain</literal>">
+<!ENTITY debug-findlibs "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--debug=findlibs</literal>">
+<!ENTITY debug-includes "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--debug=includes</literal>">
+<!ENTITY debug-prepare "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--debug=prepare</literal>">
+<!ENTITY debug-presub "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--debug=presub</literal>">
+<!ENTITY debug-stacktrace "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--debug=stacktrace</literal>">
+<!ENTITY implicit-cache "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--implicit-cache</literal>">
+<!ENTITY implicit-deps-changed "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--implicit-deps-changed</literal>">
+<!ENTITY implicit-deps-unchanged "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--implicit-deps-unchanged</literal>">
+<!ENTITY profile "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--profile</literal>">
+<!ENTITY taskmastertrace "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--taskmastertrace</literal>">
+<!ENTITY tree "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>--tree</literal>">
+<!ENTITY Q "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>-Q</literal>">
<!--
@@ -117,9 +117,9 @@
-->
-<!ENTITY implicit_cache "<literal>implicit_cache</literal>">
-<!ENTITY implicit_deps_changed "<literal>implicit_deps_changed</literal>">
-<!ENTITY implicit_deps_unchanged "<literal>implicit_deps_unchanged</literal>">
+<!ENTITY implicit_cache "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>implicit_cache</literal>">
+<!ENTITY implicit_deps_changed "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>implicit_deps_changed</literal>">
+<!ENTITY implicit_deps_unchanged "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>implicit_deps_unchanged</literal>">
@@ -129,16 +129,16 @@
-->
-<!ENTITY build "<filename>build</filename>">
-<!ENTITY Makefile "<filename>Makefile</filename>">
-<!ENTITY Makefiles "<filename>Makefiles</filename>">
-<!ENTITY scons "<filename>scons</filename>">
-<!ENTITY SConscript "<filename>SConscript</filename>">
-<!ENTITY SConstruct "<filename>SConstruct</filename>">
-<!ENTITY Sconstruct "<filename>Sconstruct</filename>">
-<!ENTITY sconstruct "<filename>sconstruct</filename>">
-<!ENTITY sconsign "<filename>.sconsign</filename>">
-<!ENTITY src "<filename>src</filename>">
+<!ENTITY build "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>build</filename>">
+<!ENTITY Makefile "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>Makefile</filename>">
+<!ENTITY Makefiles "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>Makefiles</filename>">
+<!ENTITY scons "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>scons</filename>">
+<!ENTITY SConscript "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>SConscript</filename>">
+<!ENTITY SConstruct "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>SConstruct</filename>">
+<!ENTITY Sconstruct "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>Sconstruct</filename>">
+<!ENTITY sconstruct "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>sconstruct</filename>">
+<!ENTITY sconsign "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>.sconsign</filename>">
+<!ENTITY src "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>src</filename>">
@@ -149,149 +149,149 @@
-->
-<!ENTITY Add "<function>Add</function>">
-<!ENTITY AddMethod "<function>AddMethod</function>">
-<!ENTITY AddPostAction "<function>AddPostAction</function>">
-<!ENTITY AddPreAction "<function>AddPreAction</function>">
-<!ENTITY AddOption "<function>AddOption</function>">
-<!ENTITY AddOptions "<function>AddOptions</function>">
-<!ENTITY AddVariables "<function>AddVariables</function>">
-<!ENTITY Alias "<function>Alias</function>">
-<!ENTITY Aliases "<function>Aliases</function>">
-<!ENTITY AllowSubstExceptions "<function>AllowSubstExceptions</function>">
-<!ENTITY AlwaysBuild "<function>AlwaysBuild</function>">
-<!ENTITY Append "<function>Append</function>">
-<!ENTITY AppendENVPath "<function>AppendENVPath</function>">
-<!ENTITY AppendUnique "<function>AppendUnique</function>">
-<!ENTITY BoolOption "<function>BoolOption</function>">
-<!ENTITY BoolVariable "<function>BoolVariable</function>">
-<!ENTITY Build "<function>Build</function>">
-<!ENTITY CacheDir "<function>CacheDir</function>">
-<!ENTITY Chmod "<function>Chmod</function>">
-<!ENTITY Clean "<function>Clean</function>">
-<!ENTITY Clone "<function>Clone</function>">
-<!ENTITY Command "<function>Command</function>">
-<!ENTITY Configure "<function>Configure</function>">
-<!ENTITY Copy "<function>Copy</function>">
-<!ENTITY Decider "<function>Decider</function>">
-<!ENTITY Default "<function>Default</function>">
-<!ENTITY DefaultEnvironment "<function>DefaultEnvironment</function>">
-<!ENTITY DefaultRules "<function>DefaultRules</function>">
-<!ENTITY Delete "<function>Delete</function>">
-<!ENTITY Depends "<function>Depends</function>">
-<!ENTITY Dir "<function>Dir</function>">
-<!ENTITY Dump "<function>Dump</function>">
-<!ENTITY Duplicate "<function>Duplicate</function>">
-<!ENTITY Entry "<function>Entry</function>">
-<!ENTITY EnumOption "<function>EnumOption</function>">
-<!ENTITY EnumVariable "<function>EnumVariable</function>">
-<!ENTITY EnsurePythonVersion "<function>EnsurePythonVersion</function>">
-<!ENTITY EnsureSConsVersion "<function>EnsureSConsVersion</function>">
-<!ENTITY Environment "<function>Environment</function>">
-<!ENTITY Execute "<function>Execute</function>">
-<!ENTITY Exit "<function>Exit</function>">
-<!ENTITY Export "<function>Export</function>">
-<!ENTITY File "<function>File</function>">
-<!ENTITY FindFile "<function>FindFile</function>">
-<!ENTITY FindInstalledFiles "<function>FindInstalledFiles</function>">
-<!ENTITY FindPathDirs "<function>FindPathDirs</function>">
-<!ENTITY Finish "<function>Finish</function>">
-<!ENTITY Flatten "<function>Flatten</function>">
-<!ENTITY GenerateHelpText "<function>GenerateHelpText</function>">
-<!ENTITY GetBuildFailures "<function>GetBuildFailures</function>">
-<!ENTITY GetBuildPath "<function>GetBuildPath</function>">
-<!ENTITY GetLaunchDir "<function>GetLaunchDir</function>">
-<!ENTITY GetOption "<function>GetOption</function>">
-<!ENTITY Glob "<function>Glob</function>">
-<!ENTITY Help "<function>Help</function>">
-<!ENTITY Ignore "<function>Ignore</function>">
-<!ENTITY Import "<function>Import</function>">
-<!ENTITY Install "<function>Install</function>">
-<!ENTITY InstallAs "<function>InstallAs</function>">
-<!ENTITY Link "<function>Link</function>">
-<!ENTITY ListOption "<function>ListOption</function>">
-<!ENTITY ListVariable "<function>ListVariable</function>">
-<!ENTITY Local "<function>Local</function>">
-<!ENTITY MergeFlags "<function>MergeFlags</function>">
-<!ENTITY Mkdir "<function>Mkdir</function>">
-<!ENTITY Module "<function>Module</function>">
-<!ENTITY Move "<function>Move</function>">
-<!ENTITY NoClean "<function>NoClean</function>">
-<!ENTITY NoCache "<function>NoCache</function>">
-<!ENTITY Objects "<function>Objects</function>">
-<!ENTITY Options "<function>Options</function>">
-<!ENTITY Variables "<function>Variables</function>">
-<!ENTITY PackageOption "<function>PackageOption</function>">
-<!ENTITY PackageVariable "<function>PackageVariable</function>">
-<!ENTITY ParseConfig "<function>ParseConfig</function>">
-<!ENTITY ParseDepends "<function>ParseDepends</function>">
-<!ENTITY ParseFlags "<function>ParseFlags</function>">
-<!ENTITY PathOption "<function>PathOption</function>">
-<!ENTITY PathOption_PathAccept "<function>PathOption.PathAccept</function>">
-<!ENTITY PathOption_PathExists "<function>PathOption.PathExists</function>">
-<!ENTITY PathOption_PathIsDir "<function>PathOption.PathIsDir</function>">
-<!ENTITY PathOption_PathIsDirCreate "<function>PathOption.PathIsDirCreate</function>">
-<!ENTITY PathOption_PathIsFile "<function>PathOption.PathIsFile</function>">
-<!ENTITY PathVariable "<function>PathVariable</function>">
-<!ENTITY PathVariable_PathAccept "<function>PathVariable.PathAccept</function>">
-<!ENTITY PathVariable_PathExists "<function>PathVariable.PathExists</function>">
-<!ENTITY PathVariable_PathIsDir "<function>PathVariable.PathIsDir</function>">
-<!ENTITY PathVariable_PathIsDirCreate "<function>PathVariable.PathIsDirCreate</function>">
-<!ENTITY PathVariable_PathIsFile "<function>PathVariable.PathIsFile</function>">
-<!ENTITY Precious "<function>Precious</function>">
-<!ENTITY Prepend "<function>Prepend</function>">
-<!ENTITY PrependENVPath "<function>PrependENVPath</function>">
-<!ENTITY PrependUnique "<function>PrependUnique</function>">
-<!ENTITY Progress "<function>Progress</function>">
-<!ENTITY Replace "<function>Replace</function>">
-<!ENTITY Repository "<function>Repository</function>">
-<!ENTITY Requires "<function>Requires</function>">
-<!ENTITY Return "<function>Return</function>">
-<!ENTITY RuleSet "<function>RuleSet</function>">
-<!ENTITY Salt "<function>Salt</function>">
-<!ENTITY SetBuildSignatureType "<function>SetBuildSignatureType</function>">
-<!ENTITY SetContentSignatureType "<function>SetContentSignatureType</function>">
-<!ENTITY SetDefault "<function>SetDefault</function>">
-<!ENTITY SetOption "<function>SetOption</function>">
-<!ENTITY SideEffect "<function>SideEffect</function>">
-<!ENTITY SourceSignature "<function>SourceSignature</function>">
-<!ENTITY SourceSignatures "<function>SourceSignatures</function>">
-<!ENTITY Split "<function>Split</function>">
-<!ENTITY Tag "<function>Tag</function>">
-<!ENTITY TargetSignatures "<function>TargetSignatures</function>">
-<!ENTITY Task "<function>Task</function>">
-<!ENTITY Touch "<function>Touch</function>">
-<!ENTITY UnknownOptions "<function>UnknownOptions</function>">
-<!ENTITY UnknownVariables "<function>UnknownVariables</function>">
+<!ENTITY Add "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Add</function>">
+<!ENTITY AddMethod "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AddMethod</function>">
+<!ENTITY AddPostAction "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AddPostAction</function>">
+<!ENTITY AddPreAction "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AddPreAction</function>">
+<!ENTITY AddOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AddOption</function>">
+<!ENTITY AddOptions "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AddOptions</function>">
+<!ENTITY AddVariables "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AddVariables</function>">
+<!ENTITY Alias "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Alias</function>">
+<!ENTITY Aliases "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Aliases</function>">
+<!ENTITY AllowSubstExceptions "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AllowSubstExceptions</function>">
+<!ENTITY AlwaysBuild "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AlwaysBuild</function>">
+<!ENTITY Append "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Append</function>">
+<!ENTITY AppendENVPath "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AppendENVPath</function>">
+<!ENTITY AppendUnique "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AppendUnique</function>">
+<!ENTITY BoolOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>BoolOption</function>">
+<!ENTITY BoolVariable "<function xmlns='http://www.scons.org/dbxsd/v1.0'>BoolVariable</function>">
+<!ENTITY Build "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Build</function>">
+<!ENTITY CacheDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CacheDir</function>">
+<!ENTITY Chmod "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Chmod</function>">
+<!ENTITY Clean "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Clean</function>">
+<!ENTITY Clone "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Clone</function>">
+<!ENTITY Command "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Command</function>">
+<!ENTITY Configure "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Configure</function>">
+<!ENTITY Copy "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Copy</function>">
+<!ENTITY Decider "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Decider</function>">
+<!ENTITY Default "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Default</function>">
+<!ENTITY DefaultEnvironment "<function xmlns='http://www.scons.org/dbxsd/v1.0'>DefaultEnvironment</function>">
+<!ENTITY DefaultRules "<function xmlns='http://www.scons.org/dbxsd/v1.0'>DefaultRules</function>">
+<!ENTITY Delete "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Delete</function>">
+<!ENTITY Depends "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Depends</function>">
+<!ENTITY Dir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Dir</function>">
+<!ENTITY Dump "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Dump</function>">
+<!ENTITY Duplicate "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Duplicate</function>">
+<!ENTITY Entry "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Entry</function>">
+<!ENTITY EnumOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>EnumOption</function>">
+<!ENTITY EnumVariable "<function xmlns='http://www.scons.org/dbxsd/v1.0'>EnumVariable</function>">
+<!ENTITY EnsurePythonVersion "<function xmlns='http://www.scons.org/dbxsd/v1.0'>EnsurePythonVersion</function>">
+<!ENTITY EnsureSConsVersion "<function xmlns='http://www.scons.org/dbxsd/v1.0'>EnsureSConsVersion</function>">
+<!ENTITY Environment "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Environment</function>">
+<!ENTITY Execute "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Execute</function>">
+<!ENTITY Exit "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Exit</function>">
+<!ENTITY Export "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Export</function>">
+<!ENTITY File "<function xmlns='http://www.scons.org/dbxsd/v1.0'>File</function>">
+<!ENTITY FindFile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>FindFile</function>">
+<!ENTITY FindInstalledFiles "<function xmlns='http://www.scons.org/dbxsd/v1.0'>FindInstalledFiles</function>">
+<!ENTITY FindPathDirs "<function xmlns='http://www.scons.org/dbxsd/v1.0'>FindPathDirs</function>">
+<!ENTITY Finish "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Finish</function>">
+<!ENTITY Flatten "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Flatten</function>">
+<!ENTITY GenerateHelpText "<function xmlns='http://www.scons.org/dbxsd/v1.0'>GenerateHelpText</function>">
+<!ENTITY GetBuildFailures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>GetBuildFailures</function>">
+<!ENTITY GetBuildPath "<function xmlns='http://www.scons.org/dbxsd/v1.0'>GetBuildPath</function>">
+<!ENTITY GetLaunchDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>GetLaunchDir</function>">
+<!ENTITY GetOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>GetOption</function>">
+<!ENTITY Glob "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Glob</function>">
+<!ENTITY Help "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Help</function>">
+<!ENTITY Ignore "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Ignore</function>">
+<!ENTITY Import "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Import</function>">
+<!ENTITY Install "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Install</function>">
+<!ENTITY InstallAs "<function xmlns='http://www.scons.org/dbxsd/v1.0'>InstallAs</function>">
+<!ENTITY Link "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Link</function>">
+<!ENTITY ListOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ListOption</function>">
+<!ENTITY ListVariable "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ListVariable</function>">
+<!ENTITY Local "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Local</function>">
+<!ENTITY MergeFlags "<function xmlns='http://www.scons.org/dbxsd/v1.0'>MergeFlags</function>">
+<!ENTITY Mkdir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Mkdir</function>">
+<!ENTITY Module "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Module</function>">
+<!ENTITY Move "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Move</function>">
+<!ENTITY NoClean "<function xmlns='http://www.scons.org/dbxsd/v1.0'>NoClean</function>">
+<!ENTITY NoCache "<function xmlns='http://www.scons.org/dbxsd/v1.0'>NoCache</function>">
+<!ENTITY Objects "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Objects</function>">
+<!ENTITY Options "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Options</function>">
+<!ENTITY Variables "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Variables</function>">
+<!ENTITY PackageOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PackageOption</function>">
+<!ENTITY PackageVariable "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PackageVariable</function>">
+<!ENTITY ParseConfig "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ParseConfig</function>">
+<!ENTITY ParseDepends "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ParseDepends</function>">
+<!ENTITY ParseFlags "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ParseFlags</function>">
+<!ENTITY PathOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathOption</function>">
+<!ENTITY PathOption_PathAccept "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathOption.PathAccept</function>">
+<!ENTITY PathOption_PathExists "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathOption.PathExists</function>">
+<!ENTITY PathOption_PathIsDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathOption.PathIsDir</function>">
+<!ENTITY PathOption_PathIsDirCreate "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathOption.PathIsDirCreate</function>">
+<!ENTITY PathOption_PathIsFile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathOption.PathIsFile</function>">
+<!ENTITY PathVariable "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathVariable</function>">
+<!ENTITY PathVariable_PathAccept "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathVariable.PathAccept</function>">
+<!ENTITY PathVariable_PathExists "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathVariable.PathExists</function>">
+<!ENTITY PathVariable_PathIsDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathVariable.PathIsDir</function>">
+<!ENTITY PathVariable_PathIsDirCreate "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathVariable.PathIsDirCreate</function>">
+<!ENTITY PathVariable_PathIsFile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PathVariable.PathIsFile</function>">
+<!ENTITY Precious "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Precious</function>">
+<!ENTITY Prepend "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Prepend</function>">
+<!ENTITY PrependENVPath "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PrependENVPath</function>">
+<!ENTITY PrependUnique "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PrependUnique</function>">
+<!ENTITY Progress "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Progress</function>">
+<!ENTITY Replace "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Replace</function>">
+<!ENTITY Repository "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Repository</function>">
+<!ENTITY Requires "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Requires</function>">
+<!ENTITY Return "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Return</function>">
+<!ENTITY RuleSet "<function xmlns='http://www.scons.org/dbxsd/v1.0'>RuleSet</function>">
+<!ENTITY Salt "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Salt</function>">
+<!ENTITY SetBuildSignatureType "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetBuildSignatureType</function>">
+<!ENTITY SetContentSignatureType "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetContentSignatureType</function>">
+<!ENTITY SetDefault "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetDefault</function>">
+<!ENTITY SetOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetOption</function>">
+<!ENTITY SideEffect "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SideEffect</function>">
+<!ENTITY SourceSignature "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SourceSignature</function>">
+<!ENTITY SourceSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SourceSignatures</function>">
+<!ENTITY Split "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Split</function>">
+<!ENTITY Tag "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Tag</function>">
+<!ENTITY TargetSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TargetSignatures</function>">
+<!ENTITY Task "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Task</function>">
+<!ENTITY Touch "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Touch</function>">
+<!ENTITY UnknownOptions "<function xmlns='http://www.scons.org/dbxsd/v1.0'>UnknownOptions</function>">
+<!ENTITY UnknownVariables "<function xmlns='http://www.scons.org/dbxsd/v1.0'>UnknownVariables</function>">
<!-- Environment methods -->
-<!ENTITY subst "<function>subst</function>">
+<!ENTITY subst "<function xmlns='http://www.scons.org/dbxsd/v1.0'>subst</function>">
<!-- Configure context functions -->
-<!ENTITY Message "<function>Message</function>">
-<!ENTITY Result "<function>Result</function>">
-<!ENTITY CheckCHeader "<function>CheckCHeader</function>">
-<!ENTITY CheckCXXHeader "<function>CheckCXXHeader</function>">
-<!ENTITY CheckFunc "<function>CheckFunc</function>">
-<!ENTITY CheckHeader "<function>CheckHeader</function>">
-<!ENTITY CheckLib "<function>CheckLib</function>">
-<!ENTITY CheckLibWithHeader "<function>CheckLibWithHeader</function>">
-<!ENTITY CheckType "<function>CheckType</function>">
-<!ENTITY TryAction "<function>TryAction</function>">
-<!ENTITY TryBuild "<function>TryBuild</function>">
-<!ENTITY TryCompile "<function>TryCompile</function>">
-<!ENTITY TryLink "<function>TryLink</function>">
-<!ENTITY TryRun "<function>TryRun</function>">
+<!ENTITY Message "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Message</function>">
+<!ENTITY Result "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Result</function>">
+<!ENTITY CheckCHeader "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckCHeader</function>">
+<!ENTITY CheckCXXHeader "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckCXXHeader</function>">
+<!ENTITY CheckFunc "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckFunc</function>">
+<!ENTITY CheckHeader "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckHeader</function>">
+<!ENTITY CheckLib "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckLib</function>">
+<!ENTITY CheckLibWithHeader "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckLibWithHeader</function>">
+<!ENTITY CheckType "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CheckType</function>">
+<!ENTITY TryAction "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TryAction</function>">
+<!ENTITY TryBuild "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TryBuild</function>">
+<!ENTITY TryCompile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TryCompile</function>">
+<!ENTITY TryLink "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TryLink</function>">
+<!ENTITY TryRun "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TryRun</function>">
<!-- Python functions and classes -->
-<!ENTITY IndexError "<classname>IndexError</classname>">
-<!ENTITY NameError "<classname>NameError</classname>">
-<!ENTITY str "<function>str</function>">
-<!ENTITY zipfile "<function>zipfile</function>">
+<!ENTITY IndexError "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>IndexError</classname>">
+<!ENTITY NameError "<classname xmlns='http://www.scons.org/dbxsd/v1.0'>NameError</classname>">
+<!ENTITY str "<function xmlns='http://www.scons.org/dbxsd/v1.0'>str</function>">
+<!ENTITY zipfile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>zipfile</function>">
<!-- Obsolete, but referenced in old documents. -->
-<!ENTITY Cache "<function>Cache</function>">
+<!ENTITY Cache "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Cache</function>">
@@ -301,11 +301,11 @@
-->
-<!ENTITY ARGLIST "<varname>ARGLIST</varname>">
-<!ENTITY ARGUMENTS "<varname>ARGUMENTS</varname>">
-<!ENTITY BUILD_TARGETS "<varname>BUILD_TARGETS</varname>">
-<!ENTITY COMMAND_LINE_TARGETS "<varname>COMMAND_LINE_TARGETS</varname>">
-<!ENTITY DEFAULT_TARGETS "<varname>DEFAULT_TARGETS</varname>">
+<!ENTITY ARGLIST "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>ARGLIST</varname>">
+<!ENTITY ARGUMENTS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>ARGUMENTS</varname>">
+<!ENTITY BUILD_TARGETS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>BUILD_TARGETS</varname>">
+<!ENTITY COMMAND_LINE_TARGETS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>COMMAND_LINE_TARGETS</varname>">
+<!ENTITY DEFAULT_TARGETS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>DEFAULT_TARGETS</varname>">
@@ -315,16 +315,16 @@
-->
-<!ENTITY BUILDERMAP "<varname>BUILDERMAP</varname>">
-<!ENTITY COLOR "<varname>COLOR</varname>">
-<!ENTITY COLORS "<varname>COLORS</varname>">
-<!ENTITY CONFIG "<varname>CONFIG</varname>">
-<!ENTITY CPPDEFINES "<varname>CPPDEFINES</varname>">
-<!ENTITY RELEASE "<varname>RELEASE</varname>">
-<!ENTITY RELEASE_BUILD "<varname>RELEASE_BUILD</varname>">
-<!ENTITY SCANNERMAP "<varname>SCANNERMAP</varname>">
-<!ENTITY TARFLAGS "<varname>TARFLAGS</varname>">
-<!ENTITY TARSUFFIX "<varname>TARSUFFIX</varname>">
+<!ENTITY BUILDERMAP "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>BUILDERMAP</varname>">
+<!ENTITY COLOR "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>COLOR</varname>">
+<!ENTITY COLORS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>COLORS</varname>">
+<!ENTITY CONFIG "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>CONFIG</varname>">
+<!ENTITY CPPDEFINES "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>CPPDEFINES</varname>">
+<!ENTITY RELEASE "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>RELEASE</varname>">
+<!ENTITY RELEASE_BUILD "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>RELEASE_BUILD</varname>">
+<!ENTITY SCANNERMAP "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>SCANNERMAP</varname>">
+<!ENTITY TARFLAGS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>TARFLAGS</varname>">
+<!ENTITY TARSUFFIX "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>TARSUFFIX</varname>">
@@ -334,9 +334,9 @@
-->
-<!ENTITY PATH "<varname>PATH</varname>">
-<!ENTITY PYTHONPATH "<varname>PYTHONPATH</varname>">
-<!ENTITY SCONSFLAGS "<varname>SCONSFLAGS</varname>">
+<!ENTITY PATH "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>PATH</varname>">
+<!ENTITY PYTHONPATH "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>PYTHONPATH</varname>">
+<!ENTITY SCONSFLAGS "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>SCONSFLAGS</varname>">
@@ -346,16 +346,16 @@
-->
-<!ENTITY allowed_values "<varname>allowed_values</varname>">
-<!ENTITY build_dir "<varname>build_dir</varname>">
-<!ENTITY map "<varname>map</varname>">
-<!ENTITY ignorecase "<varname>ignorecase</varname>">
-<!ENTITY options "<varname>options</varname>">
-<!ENTITY exports "<varname>exports</varname>">
-<!ENTITY source "<varname>source</varname>">
-<!ENTITY target "<varname>target</varname>">
-<!ENTITY variables "<varname>variables</varname>">
-<!ENTITY variant_dir "<varname>variant_dir</varname>">
+<!ENTITY allowed_values "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>allowed_values</varname>">
+<!ENTITY build_dir "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>build_dir</varname>">
+<!ENTITY map "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>map</varname>">
+<!ENTITY ignorecase "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>ignorecase</varname>">
+<!ENTITY options "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>options</varname>">
+<!ENTITY exports "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>exports</varname>">
+<!ENTITY source "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>source</varname>">
+<!ENTITY target "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>target</varname>">
+<!ENTITY variables "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>variables</varname>">
+<!ENTITY variant_dir "<varname xmlns='http://www.scons.org/dbxsd/v1.0'>variant_dir</varname>">
@@ -365,8 +365,8 @@
-->
-<!ENTITY all "<literal>all</literal>">
-<!ENTITY none "<literal>none</literal>">
+<!ENTITY all "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>all</literal>">
+<!ENTITY none "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>none</literal>">
@@ -376,33 +376,33 @@
-->
-<!ENTITY BuildDir "<function>BuildDir</function>">
-<!ENTITY CFile "<function>CFile</function>">
-<!ENTITY CXXFile "<function>CXXFile</function>">
-<!ENTITY DVI "<function>DVI</function>">
-<!ENTITY Jar "<function>Jar</function>">
-<!ENTITY Java "<function>Java</function>">
-<!ENTITY JavaH "<function>JavaH</function>">
-<!ENTITY Library "<function>Library</function>">
-<!ENTITY Object "<function>Object</function>">
-<!ENTITY PCH "<function>PCH</function>">
-<!ENTITY PDF "<function>PDF</function>">
-<!ENTITY PostScript "<function>PostScript</function>">
-<!ENTITY Program "<function>Program</function>">
-<!ENTITY RES "<function>RES</function>">
-<!ENTITY RMIC "<function>RMIC</function>">
-<!ENTITY SharedLibrary "<function>SharedLibrary</function>">
-<!ENTITY SharedObject "<function>SharedObject</function>">
-<!ENTITY StaticLibrary "<function>StaticLibrary</function>">
-<!ENTITY StaticObject "<function>StaticObject</function>">
-<!ENTITY Substfile "<function>Substfile</function>">
-<!ENTITY Tar "<function>Tar</function>">
-<!ENTITY Textfile "<function>Textfile</function>">
-<!ENTITY VariantDir "<function>VariantDir</function>">
-<!ENTITY Zip "<function>Zip</function>">
+<!ENTITY BuildDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>BuildDir</function>">
+<!ENTITY CFile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CFile</function>">
+<!ENTITY CXXFile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CXXFile</function>">
+<!ENTITY DVI "<function xmlns='http://www.scons.org/dbxsd/v1.0'>DVI</function>">
+<!ENTITY Jar "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Jar</function>">
+<!ENTITY Java "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Java</function>">
+<!ENTITY JavaH "<function xmlns='http://www.scons.org/dbxsd/v1.0'>JavaH</function>">
+<!ENTITY Library "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Library</function>">
+<!ENTITY Object "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Object</function>">
+<!ENTITY PCH "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PCH</function>">
+<!ENTITY PDF "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PDF</function>">
+<!ENTITY PostScript "<function xmlns='http://www.scons.org/dbxsd/v1.0'>PostScript</function>">
+<!ENTITY Program "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Program</function>">
+<!ENTITY RES "<function xmlns='http://www.scons.org/dbxsd/v1.0'>RES</function>">
+<!ENTITY RMIC "<function xmlns='http://www.scons.org/dbxsd/v1.0'>RMIC</function>">
+<!ENTITY SharedLibrary "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SharedLibrary</function>">
+<!ENTITY SharedObject "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SharedObject</function>">
+<!ENTITY StaticLibrary "<function xmlns='http://www.scons.org/dbxsd/v1.0'>StaticLibrary</function>">
+<!ENTITY StaticObject "<function xmlns='http://www.scons.org/dbxsd/v1.0'>StaticObject</function>">
+<!ENTITY Substfile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Substfile</function>">
+<!ENTITY Tar "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Tar</function>">
+<!ENTITY Textfile "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Textfile</function>">
+<!ENTITY VariantDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>VariantDir</function>">
+<!ENTITY Zip "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Zip</function>">
<!-- Obsolete, but referenced in old documents. -->
-<!ENTITY MakeBuilder "<function>Make</function>">
+<!ENTITY MakeBuilder "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Make</function>">
@@ -413,49 +413,49 @@
-->
-<!ENTITY buildfunc "<literal>builder function</literal>">
-<!ENTITY build_action "<literal>build action</literal>">
-<!ENTITY build_actions "<literal>build actions</literal>">
-<!ENTITY builder_method "<literal>builder method</literal>">
+<!ENTITY buildfunc "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>builder function</literal>">
+<!ENTITY build_action "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>build action</literal>">
+<!ENTITY build_actions "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>build actions</literal>">
+<!ENTITY builder_method "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>builder method</literal>">
-<!ENTITY Configure_Contexts "<literal>Configure Contexts</literal>">
-<!ENTITY configure_context "<literal>configure context</literal>">
+<!ENTITY Configure_Contexts "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Configure Contexts</literal>">
+<!ENTITY configure_context "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>configure context</literal>">
-<!ENTITY ConsEnv "<literal>Construction Environment</literal>">
-<!ENTITY ConsEnvs "<literal>Construction Environments</literal>">
-<!ENTITY Consenv "<literal>Construction environment</literal>">
-<!ENTITY Consenvs "<literal>Construction environments</literal>">
-<!ENTITY consenv "<literal>construction environment</literal>">
-<!ENTITY consenvs "<literal>construction environments</literal>">
+<!ENTITY ConsEnv "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction Environment</literal>">
+<!ENTITY ConsEnvs "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction Environments</literal>">
+<!ENTITY Consenv "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction environment</literal>">
+<!ENTITY Consenvs "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction environments</literal>">
+<!ENTITY consenv "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>construction environment</literal>">
+<!ENTITY consenvs "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>construction environments</literal>">
-<!ENTITY ConsVar "<literal>Construction Variable</literal>">
-<!ENTITY ConsVars "<literal>Construction Variables</literal>">
-<!ENTITY Consvar "<literal>Construction variable</literal>">
-<!ENTITY Consvars "<literal>Construction variables</literal>">
-<!ENTITY consvar "<literal>construction variable</literal>">
-<!ENTITY consvars "<literal>construction variables</literal>">
+<!ENTITY ConsVar "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction Variable</literal>">
+<!ENTITY ConsVars "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction Variables</literal>">
+<!ENTITY Consvar "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction variable</literal>">
+<!ENTITY Consvars "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Construction variables</literal>">
+<!ENTITY consvar "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>construction variable</literal>">
+<!ENTITY consvars "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>construction variables</literal>">
-<!ENTITY CPPPATH "<literal>CPPPATH</literal>">
+<!ENTITY CPPPATH "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>CPPPATH</literal>">
-<!ENTITY Dictionary "<literal>Dictionary</literal>">
+<!ENTITY Dictionary "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Dictionary</literal>">
-<!ENTITY Emitter "<literal>Emitter</literal>">
-<!ENTITY emitter "<literal>emitter</literal>">
+<!ENTITY Emitter "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Emitter</literal>">
+<!ENTITY emitter "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>emitter</literal>">
-<!ENTITY factory "<literal>factory</literal>">
+<!ENTITY factory "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>factory</literal>">
-<!ENTITY Generator "<literal>Generator</literal>">
-<!ENTITY generator "<literal>generator</literal>">
+<!ENTITY Generator "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Generator</literal>">
+<!ENTITY generator "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>generator</literal>">
-<!ENTITY Nodes "<literal>Nodes</literal>">
+<!ENTITY Nodes "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Nodes</literal>">
-<!ENTITY signature "<literal>signature</literal>">
-<!ENTITY buildsignature "<literal>build signature</literal>">
+<!ENTITY signature "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>signature</literal>">
+<!ENTITY buildsignature "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>build signature</literal>">
-<!ENTITY true "<literal>true</literal>">
-<!ENTITY false "<literal>false</literal>">
+<!ENTITY true "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>true</literal>">
+<!ENTITY false "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>false</literal>">
-<!ENTITY typedef "<literal>typedef</literal>">
+<!ENTITY typedef "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>typedef</literal>">
<!--
@@ -463,12 +463,12 @@
-->
-<!ENTITY action "<literal>action=</literal>">
-<!ENTITY batch_key "<literal>batch_key=</literal>">
-<!ENTITY cmdstr "<literal>cmdstr=</literal>">
-<!ENTITY exitstatfunc "<literal>exitstatfunc=</literal>">
-<!ENTITY strfunction "<literal>strfunction=</literal>">
-<!ENTITY varlist "<literal>varlist=</literal>">
+<!ENTITY action "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>action=</literal>">
+<!ENTITY batch_key "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>batch_key=</literal>">
+<!ENTITY cmdstr "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>cmdstr=</literal>">
+<!ENTITY exitstatfunc "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>exitstatfunc=</literal>">
+<!ENTITY strfunction "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>strfunction=</literal>">
+<!ENTITY varlist "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>varlist=</literal>">
<!--
@@ -476,38 +476,38 @@
-->
-<!ENTITY bar "<filename>bar</filename>">
-<!ENTITY common1_c "<filename>common1.c</filename>">
-<!ENTITY common2_c "<filename>common2.c</filename>">
-<!ENTITY custom_py "<filename>custom.py</filename>">
-<!ENTITY goodbye "<filename>goodbye</filename>">
-<!ENTITY goodbye_o "<filename>goodbye.o</filename>">
-<!ENTITY goodbye_obj "<filename>goodbye.obj</filename>">
-<!ENTITY file_dll "<filename>file.dll</filename>">
-<!ENTITY file_in "<filename>file.in</filename>">
-<!ENTITY file_lib "<filename>file.lib</filename>">
-<!ENTITY file_o "<filename>file.o</filename>">
-<!ENTITY file_obj "<filename>file.obj</filename>">
-<!ENTITY file_out "<filename>file.out</filename>">
-<!ENTITY foo "<filename>foo</filename>">
-<!ENTITY foo_o "<filename>foo.o</filename>">
-<!ENTITY foo_obj "<filename>foo.obj</filename>">
-<!ENTITY hello "<filename>hello</filename>">
-<!ENTITY hello_c "<filename>hello.c</filename>">
-<!ENTITY hello_exe "<filename>hello.exe</filename>">
-<!ENTITY hello_h "<filename>hello.h</filename>">
-<!ENTITY hello_o "<filename>hello.o</filename>">
-<!ENTITY hello_obj "<filename>hello.obj</filename>">
-<!ENTITY libfile_a "<filename>libfile_a</filename>">
-<!ENTITY libfile_so "<filename>libfile_so</filename>">
-<!ENTITY new_hello "<filename>new_hello</filename>">
-<!ENTITY new_hello_exe "<filename>new_hello.exe</filename>">
-<!ENTITY prog "<filename>prog</filename>">
-<!ENTITY prog1 "<filename>prog1</filename>">
-<!ENTITY prog2 "<filename>prog2</filename>">
-<!ENTITY prog_c "<filename>prog.c</filename>">
-<!ENTITY prog_exe "<filename>prog.exe</filename>">
-<!ENTITY stdio_h "<filename>stdio.h</filename>">
+<!ENTITY bar "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>bar</filename>">
+<!ENTITY common1_c "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>common1.c</filename>">
+<!ENTITY common2_c "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>common2.c</filename>">
+<!ENTITY custom_py "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>custom.py</filename>">
+<!ENTITY goodbye "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>goodbye</filename>">
+<!ENTITY goodbye_o "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>goodbye.o</filename>">
+<!ENTITY goodbye_obj "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>goodbye.obj</filename>">
+<!ENTITY file_dll "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>file.dll</filename>">
+<!ENTITY file_in "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>file.in</filename>">
+<!ENTITY file_lib "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>file.lib</filename>">
+<!ENTITY file_o "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>file.o</filename>">
+<!ENTITY file_obj "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>file.obj</filename>">
+<!ENTITY file_out "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>file.out</filename>">
+<!ENTITY foo "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>foo</filename>">
+<!ENTITY foo_o "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>foo.o</filename>">
+<!ENTITY foo_obj "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>foo.obj</filename>">
+<!ENTITY hello "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>hello</filename>">
+<!ENTITY hello_c "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>hello.c</filename>">
+<!ENTITY hello_exe "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>hello.exe</filename>">
+<!ENTITY hello_h "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>hello.h</filename>">
+<!ENTITY hello_o "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>hello.o</filename>">
+<!ENTITY hello_obj "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>hello.obj</filename>">
+<!ENTITY libfile_a "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>libfile_a</filename>">
+<!ENTITY libfile_so "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>libfile_so</filename>">
+<!ENTITY new_hello "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>new_hello</filename>">
+<!ENTITY new_hello_exe "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>new_hello.exe</filename>">
+<!ENTITY prog "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>prog</filename>">
+<!ENTITY prog1 "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>prog1</filename>">
+<!ENTITY prog2 "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>prog2</filename>">
+<!ENTITY prog_c "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>prog.c</filename>">
+<!ENTITY prog_exe "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>prog.exe</filename>">
+<!ENTITY stdio_h "<filename xmlns='http://www.scons.org/dbxsd/v1.0'>stdio.h</filename>">
<!--
@@ -515,8 +515,8 @@
-->
-<!ENTITY plus "<literal>+</literal>">
-<!ENTITY hash "<literal>#</literal>">
+<!ENTITY plus "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>+</literal>">
+<!ENTITY hash "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>#</literal>">
<!--
@@ -524,6 +524,14 @@
-->
-<!ENTITY scons-announce "<literal>announce@scons.tigris.org</literal>">
-<!ENTITY scons-devel "<literal>dev@scons.tigris.org</literal>">
-<!ENTITY scons-users "<literal>users@scons.tigris.org</literal>">
+<!ENTITY scons-announce "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>announce@scons.tigris.org</literal>">
+<!ENTITY scons-devel "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>dev@scons.tigris.org</literal>">
+<!ENTITY scons-users "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>users@scons.tigris.org</literal>">
+
+<!--
+
+ Character entities
+
+-->
+
+<!ENTITY lambda "&#923;">
diff --git a/src/engine/SCons/Tool/qt.xml b/src/engine/SCons/Tool/qt.xml
index 7a55dad6..0522f207 100644
--- a/src/engine/SCons/Tool/qt.xml
+++ b/src/engine/SCons/Tool/qt.xml
@@ -98,17 +98,17 @@ Environment(tools=['default','qt'])
The qt tool supports the following operations:
-<emphasis Role="strong">Automatic moc file generation from header files.</emphasis>
+<emphasis role="strong">Automatic moc file generation from header files.</emphasis>
You do not have to specify moc files explicitly, the tool does it for you.
However, there are a few preconditions to do so: Your header file must have
the same filebase as your implementation file and must stay in the same
directory. It must have one of the suffixes .h, .hpp, .H, .hxx, .hh. You
can turn off automatic moc file generation by setting QT_AUTOSCAN to 0.
See also the corresponding
-&b-Moc();
+&b-Moc;()
builder method.
-<emphasis Role="strong">Automatic moc file generation from cxx files.</emphasis>
+<emphasis role="strong">Automatic moc file generation from cxx files.</emphasis>
As stated in the qt documentation, include the moc file at the end of
the cxx file. Note that you have to include the file, which is generated
by the transformation ${QT_MOCCXXPREFIX}&lt;basename&gt;${QT_MOCCXXSUFFIX}, by default
@@ -119,7 +119,7 @@ by setting QT_AUTOSCAN to 0. See also the corresponding
&b-Moc;
builder method.
-<emphasis Role="strong">Automatic handling of .ui files.</emphasis>
+<emphasis role="strong">Automatic handling of .ui files.</emphasis>
The implementation files generated from .ui files are handled much the same
as yacc or lex files. Each .ui file given as a source of Program, Library or
SharedLibrary will generate three files, the declaration file, the
diff --git a/src/engine/SCons/Tool/xgettext.xml b/src/engine/SCons/Tool/xgettext.xml
index 31f58196..045a5747 100644
--- a/src/engine/SCons/Tool/xgettext.xml
+++ b/src/engine/SCons/Tool/xgettext.xml
@@ -158,12 +158,12 @@ message <literal>"Hello from ../a.cpp"</literal>. When you reverse order in
# SConstruct file in '0/1/po/' subdirectory
env = Environment( tools = ['default', 'xgettext'] )
env.POTUpdate(XGETTEXTFROM = 'POTFILES.in', XGETTEXTPATH=['../../', '../'])
-</example> then the <filename>messages.pot</filename> will contain
+</example>
+then the <filename>messages.pot</filename> will contain
<literal>msgid "Hello from ../../a.cpp"</literal> line and not
<literal>msgid "Hello from ../a.cpp"</literal>.
</summary>
-
</builder>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->