dirkbaechle avatar dirkbaechle committed 102c1bf

- patched setup.py and several MANIFEST files, such that the docbook-xsl
folder and all additional documentation sources get packaged properly
- added basic support for wildcards and recursive globbing in MANIFEST files
- added missing JPG/SVG files

Comments (0)

Files changed (18)

 import sys
 import tempfile
 
+import bootstrap
+
 project = 'scons'
 default_version = '2.3.1.alpha.yyyymmdd'
 copyright = "Copyright (c) %s The SCons Foundation" % copyright_years
     # destination files.
     #
     manifest_in = File(os.path.join(src, 'MANIFEST.in')).rstr()
-    src_files = [x[:-1] for x in open(manifest_in).readlines()]
+    src_files = bootstrap.parseManifestLines(src, open(manifest_in).readlines())
     raw_files = src_files[:]
     dst_files = src_files[:]
     rpm_files = []
             isubdir = p['subinst_dirs'][sp['pkg']]
             MANIFEST_in = File(os.path.join(src, ssubdir, 'MANIFEST.in')).rstr()
             MANIFEST_in_list.append(MANIFEST_in)
-            files = [x[:-1] for x in open(MANIFEST_in).readlines()]
+            files = bootstrap.parseManifestLines(os.path.join(src, ssubdir), open(MANIFEST_in).readlines())
             raw_files.extend(files)
             src_files.extend([os.path.join(ssubdir, x) for x in files])
             for f in files:
 import os
 import os.path
 import sys
+import glob
 import subprocess
 
 __doc__ = """bootstrap.py
         "eaten" by the bootstrap.py script.
 """
 
-script_dir = os.path.abspath(os.path.dirname(__file__))
+def parseManifestLines(basedir, lines):
+    """ Scans the single lines of a MANIFEST file,
+        and returns the list of source files.
+        Has basic support for recursive globs '**',
+        filename wildcards of the form '*.xml' and
+        comment lines, starting with a '#'.
+    """
+    sources = []
+    oldwd = os.path.abspath(os.getcwd())
+    basewd = os.path.abspath(basedir)
+    os.chdir(basedir)
+    for l in lines:
+        if l.startswith('#'):
+            # Skip comments
+            continue
+        l = l.rstrip('\n')
+        if l.endswith('**'):
+            # Glob all files recursively
+            globwd, tail = os.path.split(l)
+            if globwd:
+                os.chdir(globwd)
+            for path, dirs, files in os.walk('.'):
+                for f in files:
+                    if globwd:
+                        fpath = os.path.join(globwd, path, f)
+                    else:
+                        fpath = os.path.join(path, f)
+                    sources.append(os.path.normpath(fpath))
+            if globwd:
+                os.chdir(basewd)
+        elif '*' in l:
+            # Glob file pattern
+            globwd, tail = os.path.split(l)
+            if globwd:
+                os.chdir(globwd)
+                files = glob.glob(tail)
+                for f in files:
+                    fpath = os.path.join(globwd, f)
+                    sources.append(os.path.normpath(fpath))
+                os.chdir(basewd)
+            else:
+                sources.extend(glob.glob(tail))
+        else:
+            sources.append(l)
+    os.chdir(oldwd)
 
-bootstrap_dir = os.path.join(script_dir, 'bootstrap')
+    return sources
 
-pass_through_args = []
-update_only = None
+def main():
+    script_dir = os.path.abspath(os.path.dirname(__file__))
+    
+    bootstrap_dir = os.path.join(script_dir, 'bootstrap')
+    
+    pass_through_args = []
+    update_only = None
+    
+    requires_an_argument = 'bootstrap.py:  %s requires an argument\n'
+    
+    search = [script_dir]
+    
+    def find(file, search=search):
+        for dir in search:
+            f = os.path.join(dir, file)
+            if os.path.exists(f):
+                return os.path.normpath(f)
+        sys.stderr.write("could not find `%s' in search path:\n" % file)
+        sys.stderr.write("\t" + "\n\t".join(search) + "\n")
+        sys.exit(2)
+    
+    def must_copy(dst, src):
+        if not os.path.exists(dst):
+            return 1
+        return open(dst, 'rb').read() != open(src, 'rb').read()
+    
+    # Note:  We don't use the getopt module to process the command-line
+    # arguments because we'd have to teach it about all of the SCons options.
+    
+    command_line_args = sys.argv[1:]
+    
+    while command_line_args:
+        arg = command_line_args.pop(0)
+    
+        if arg == '--bootstrap_dir':
+            try:
+                bootstrap_dir = command_line_args.pop(0)
+            except IndexError:
+                sys.stderr.write(requires_an_argument % arg)
+                sys.exit(1)
+        elif arg[:16] == '--bootstrap_dir=':
+            bootstrap_dir = arg[16:]
+    
+        elif arg == '--bootstrap_force':
+            def must_copy(dst, src):
+                return 1
+    
+        elif arg == '--bootstrap_src':
+            try:
+                search.insert(0, command_line_args.pop(0))
+            except IndexError:
+                sys.stderr.write(requires_an_argument % arg)
+                sys.exit(1)
+        elif arg[:16] == '--bootstrap_src=':
+            search.insert(0, arg[16:])
+    
+        elif arg == '--bootstrap_update':
+            update_only = 1
+    
+        elif arg in ('-C', '--directory'):
+            try:
+                dir = command_line_args.pop(0)
+            except IndexError:
+                sys.stderr.write(requires_an_argument % arg)
+                sys.exit(1)
+            else:
+                os.chdir(dir)
+        elif arg[:2] == '-C':
+            os.chdir(arg[2:])
+        elif arg[:12] == '--directory=':
+            os.chdir(arg[12:])
+    
+        else:
+            pass_through_args.append(arg)
+    
+    
+    scons_py = os.path.join('src', 'script', 'scons.py')
+    src_engine = os.path.join('src', 'engine')
+    MANIFEST_in = find(os.path.join(src_engine, 'MANIFEST.in'))
+    
+    files = [ scons_py ] + [os.path.join(src_engine, x)
+                            for x in parseManifestLines(src_engine, open(MANIFEST_in).readlines())]
+    
+    for file in files:
+        src = find(file)
+        dst = os.path.join(bootstrap_dir, file)
+        if must_copy(dst, src):
+            dir = os.path.split(dst)[0]
+            if not os.path.isdir(dir):
+                os.makedirs(dir)
+            try: os.unlink(dst)
+            except: pass
+            open(dst, 'wb').write( open(src, 'rb').read() )
+    
+    if update_only:
+        sys.exit(0)
+    
+    args = [
+                sys.executable,
+                os.path.join(bootstrap_dir, scons_py)
+           ] + pass_through_args
+    
+    sys.stdout.write(" ".join(args) + '\n')
+    sys.stdout.flush()
+    
+    os.environ['SCONS_LIB_DIR'] = os.path.join(bootstrap_dir, src_engine)
+    
+    sys.exit(subprocess.Popen(args, env=os.environ).wait())
 
-requires_an_argument = 'bootstrap.py:  %s requires an argument\n'
-
-def must_copy(dst, src):
-    if not os.path.exists(dst):
-        return 1
-    return open(dst, 'rb').read() != open(src, 'rb').read()
-
-search = [script_dir]
-
-# Note:  We don't use the getopt module to process the command-line
-# arguments because we'd have to teach it about all of the SCons options.
-
-command_line_args = sys.argv[1:]
-
-while command_line_args:
-    arg = command_line_args.pop(0)
-
-    if arg == '--bootstrap_dir':
-        try:
-            bootstrap_dir = command_line_args.pop(0)
-        except IndexError:
-            sys.stderr.write(requires_an_argument % arg)
-            sys.exit(1)
-    elif arg[:16] == '--bootstrap_dir=':
-        bootstrap_dir = arg[16:]
-
-    elif arg == '--bootstrap_force':
-        def must_copy(dst, src):
-            return 1
-
-    elif arg == '--bootstrap_src':
-        try:
-            search.insert(0, command_line_args.pop(0))
-        except IndexError:
-            sys.stderr.write(requires_an_argument % arg)
-            sys.exit(1)
-    elif arg[:16] == '--bootstrap_src=':
-        search.insert(0, arg[16:])
-
-    elif arg == '--bootstrap_update':
-        update_only = 1
-
-    elif arg in ('-C', '--directory'):
-        try:
-            dir = command_line_args.pop(0)
-        except IndexError:
-            sys.stderr.write(requires_an_argument % arg)
-            sys.exit(1)
-        else:
-            os.chdir(dir)
-    elif arg[:2] == '-C':
-        os.chdir(arg[2:])
-    elif arg[:12] == '--directory=':
-        os.chdir(arg[12:])
-
-    else:
-        pass_through_args.append(arg)
-
-def find(file, search=search):
-    for dir in search:
-        f = os.path.join(dir, file)
-        if os.path.exists(f):
-            return os.path.normpath(f)
-    sys.stderr.write("could not find `%s' in search path:\n" % file)
-    sys.stderr.write("\t" + "\n\t".join(search) + "\n")
-    sys.exit(2)
-
-scons_py = os.path.join('src', 'script', 'scons.py')
-src_engine = os.path.join('src', 'engine')
-MANIFEST_in = find(os.path.join(src_engine, 'MANIFEST.in'))
-
-files = [ scons_py ] + [os.path.join(src_engine, x[:-1])
-                        for x in open(MANIFEST_in).readlines()]
-
-for file in files:
-    src = find(file)
-    dst = os.path.join(bootstrap_dir, file)
-    if must_copy(dst, src):
-        dir = os.path.split(dst)[0]
-        if not os.path.isdir(dir):
-            os.makedirs(dir)
-        try: os.unlink(dst)
-        except: pass
-        open(dst, 'wb').write( open(src, 'rb').read() )
-
-if update_only:
-    sys.exit(0)
-
-args = [
-            sys.executable,
-            os.path.join(bootstrap_dir, scons_py)
-       ] + pass_through_args
-
-sys.stdout.write(" ".join(args) + '\n')
-sys.stdout.flush()
-
-os.environ['SCONS_LIB_DIR'] = os.path.join(bootstrap_dir, src_engine)
-
-sys.exit(subprocess.Popen(args, env=os.environ).wait())
+if __name__ == "__main__":
+    main()
 
 # Local Variables:
 # tab-width:4
 import glob
 import SConsDoc
 import SConsExamples
+import bootstrap
 
 Import('build_dir', 'env', 'whereis', 'revaction')
 
     # get included by the document XML files in the subdirectories.
     #
     manifest = File('MANIFEST').rstr()
-    src_files = [x[:-1] for x in open(manifest).readlines()]
+    src_files = bootstrap.parseManifestLines('.', open(manifest).readlines())
     for s in src_files:
         if not s:
             continue
         env.Execute(Mkdir(os.path.join(build, doc)))
         env.Execute(Mkdir(os.path.join(build, doc, 'titlepage')))
         manifest = File(os.path.join(doc, 'MANIFEST')).rstr()
-        src_files = [x[:-1] for x in open(manifest).readlines()]
+        src_files = bootstrap.parseManifestLines(doc, open(manifest).readlines())
         for s in src_files:
             if not s:
                 continue
     # the SConstruct file.
     e = os.path.join('#src', 'engine')
     manifest_in = File(os.path.join(e, 'MANIFEST.in')).rstr()
-    sources = [x[:-1] for x in open(manifest_in).readlines()]
+    sources = bootstrap.parseManifestLines(e, open(manifest_in).readlines())
     sources = [x for x in sources if x.find('Platform') == -1]
     sources = [x for x in sources if x.find('Tool') == -1]
     # XXX

doc/design/MANIFEST

+# We don't use a wildcard for the XML files
+# here, because it would pull in the created
+# ones as well...
 acks.xml
 bground.xml
 copyright.xml
-engine.fig
-engine.jpg
-engine.svg
 engine.xml
 goals.xml
 install.xml
 native.xml
 overview.xml
 summary.xml
-chtml.xsl
-html.xsl
-pdf.xsl
-scons_title.xsl
+engine.fig
+engine.jpg
+engine.svg
+*.xsl
 scons.css
 SConstruct
 titlepage/bricks.jpg
Add a comment to this file

doc/design/titlepage/bricks.jpg

Added
New image
+# We don't use a wildcard for the XML files
+# here, because it would pull in the created
+# ones as well...
 scons.xml
 sconsign.xml
 scons-time.xml
-html.xsl
-pdf.xsl
-scons_title.xsl
+*.xsl
 scons.css
 SConstruct
 titlepage/bricks.jpg
Add a comment to this file

doc/man/titlepage/bricks.jpg

Added
New image

doc/python10/MANIFEST

+# We don't use a wildcard for the XML files
+# here, because it would pull in the created
+# ones as well...
 abstract.xml
 acks.xml
-arch.fig
-builder.fig
+*.fig
 copyright.xml
 design.xml
 future.xml
 install.xml
 intro.xml
-job-task.fig
 main.xml
-node.fig
 process.xml
-scanner.fig
 summary.xml
Added
New image
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2">
+  <defs
+     id="defs4" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1">
+    <g
+       transform="matrix(0.07462687,0,0,0.07462687,-106.34331,286.09351)"
+       id="g3006"
+       style="fill:none;stroke-width:0.025in">
+      <rect
+         width="1800"
+         height="600"
+         rx="0"
+         x="2700"
+         y="1200"
+         id="rect3008"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1800"
+         height="600"
+         rx="0"
+         x="2700"
+         y="2400"
+         id="rect3010"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1800"
+         height="600"
+         rx="0"
+         x="2700"
+         y="3600"
+         id="rect3012"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1500"
+         height="600"
+         rx="0"
+         x="8400"
+         y="3600"
+         id="rect3014"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1500"
+         height="900"
+         rx="0"
+         x="3900"
+         y="4800"
+         id="rect3016"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1500"
+         height="900"
+         rx="0"
+         x="1800"
+         y="4800"
+         id="rect3018"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1500"
+         height="900"
+         rx="0"
+         x="6300"
+         y="4800"
+         id="rect3020"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1500"
+         height="900"
+         rx="0"
+         x="8400"
+         y="4800"
+         id="rect3022"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1500"
+         height="900"
+         rx="0"
+         x="10500"
+         y="4800"
+         id="rect3024"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <rect
+         width="1200"
+         height="600"
+         rx="0"
+         x="900"
+         y="2400"
+         id="rect3026"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="3600,4200 3600,4200 3525,4350 3675,4350 "
+         id="polygon3028"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polyline
+         id="polyline3030"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="3150,4800 3150,4500 4050,4500 4050,4800 " />
+      <polyline
+         id="polyline3032"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="3600,4350 3600,4500 " />
+      <polygon
+         points="9150,4200 9150,4200 9075,4350 9225,4350 "
+         id="polygon3034"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polyline
+         id="polyline3036"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="7050,4800 7050,4500 10950,4500 10950,4800 " />
+      <polyline
+         id="polyline3038"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="9150,4350 9150,4800 " />
+      <polyline
+         id="polyline3040"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="11550,4650 11550,3900 10019,3900 " />
+      <polygon
+         points="10021,3870 10021,3870 9901,3900 10021,3930 "
+         id="polygon3042"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3044"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="4650,3900 8280,3900 " />
+      <polygon
+         points="8279,3930 8279,3930 8399,3900 8279,3870 "
+         id="polygon3046"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3048"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="3900,2250 3900,1919 " />
+      <polygon
+         points="3930,1921 3930,1921 3900,1801 3870,1921 "
+         id="polygon3050"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3052"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="3300,1950 3300,2280 " />
+      <polygon
+         points="3270,2279 3270,2279 3300,2399 3330,2279 "
+         id="polygon3054"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3056"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="3600,3150 3600,3480 " />
+      <polygon
+         points="3570,3479 3570,3479 3600,3599 3630,3479 "
+         id="polygon3058"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3060"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="4350,4650 4350,4319 " />
+      <polygon
+         points="4380,4321 4380,4321 4350,4201 4320,4321 "
+         id="polygon3062"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3064"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="2850,4650 2850,4319 " />
+      <polygon
+         points="2880,4321 2880,4321 2850,4201 2820,4321 "
+         id="polygon3066"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polyline
+         id="polyline3068"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter"
+         points="1500,3150 1500,3900 2580,3900 " />
+      <polygon
+         points="2579,3930 2579,3930 2699,3900 2579,3870 "
+         id="polygon3070"
+         style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" />
+      <polygon
+         points="4575,3940 4650,3900 4650,3900 4575,3860 4500,3900 "
+         id="polygon3072"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="1540,3075 1500,3000 1500,3000 1460,3075 1500,3150 "
+         id="polygon3074"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="3640,3075 3600,3000 3600,3000 3560,3075 3600,3150 "
+         id="polygon3076"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="3340,1875 3300,1800 3300,1800 3260,1875 3300,1950 "
+         id="polygon3078"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="3940,2325 3900,2250 3900,2250 3860,2325 3900,2400 "
+         id="polygon3080"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="4390,4725 4350,4650 4350,4650 4310,4725 4350,4800 "
+         id="polygon3082"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="2890,4725 2850,4650 2850,4650 2810,4725 2850,4800 "
+         id="polygon3084"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polygon
+         points="11590,4725 11550,4650 11550,4650 11510,4725 11550,4800 "
+         id="polygon3086"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" />
+      <polyline
+         id="polyline3088"
+         style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40"
+         points="3600,1200 3600,900 " />
+      <text
+         x="2925"
+         y="1575"
+         id="text3090"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Environment</text>
+      <text
+         x="3600"
+         y="2775"
+         id="text3092"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">BuilderWrapper</text>
+      <text
+         x="3600"
+         y="3975"
+         id="text3094"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">BuilderBase</text>
+      <text
+         x="9150"
+         y="3975"
+         id="text3096"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">ActionBase</text>
+      <text
+         x="4650"
+         y="5175"
+         id="text3098"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">MultiStep-</text>
+      <text
+         x="4650"
+         y="5460"
+         id="text3100"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Builder</text>
+      <text
+         x="2550"
+         y="5175"
+         id="text3102"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Composite-</text>
+      <text
+         x="2550"
+         y="5460"
+         id="text3104"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Builder</text>
+      <text
+         x="7050"
+         y="5175"
+         id="text3106"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Command</text>
+      <text
+         x="7050"
+         y="5460"
+         id="text3108"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Action</text>
+      <text
+         x="9150"
+         y="5460"
+         id="text3110"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Action</text>
+      <text
+         x="9150"
+         y="5175"
+         id="text3112"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Function</text>
+      <text
+         x="11250"
+         y="5175"
+         id="text3114"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">List</text>
+      <text
+         x="11250"
+         y="5460"
+         id="text3116"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Action</text>
+      <text
+         x="1500"
+         y="2775"
+         id="text3118"
+         xml:space="preserve"
+         style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Node</text>
+    </g>
+  </g>
+</svg>

doc/reference/MANIFEST

+# We don't use a wildcard for the XML files
+# here, because it would pull in the created
+# ones as well...
 Alias.xml
 CFile.xml
 CXXFile.xml
 errors.xml
 main.xml
 preface.xml
-chtml.xsl
-html.xsl
-pdf.xsl
-scons_title.xsl
+*.xsl
 scons.css
 SConstruct
 titlepage/bricks.jpg
Add a comment to this file

doc/reference/titlepage/bricks.jpg

Added
New image

doc/user/MANIFEST

+# We don't use a wildcard for the XML files
+# here, because it would pull in the created
+# ones as well...
 actions.xml
 add-method.xml
 alias.xml
 troubleshoot.xml
 variants.xml
 variables.xml
-SCons-win32-install-1.jpg
-SCons-win32-install-2.jpg
-SCons-win32-install-3.jpg
-SCons-win32-install-4.jpg
-chtml.xsl
-html.xsl
-pdf.xsl
-scons_title.xsl
+*.jpg
+*.xsl
 scons.css
 SConstruct
 titlepage/bricks.jpg
Add a comment to this file

doc/user/titlepage/bricks.jpg

Added
New image

rpm/scons.spec.in

 python setup.py build
 
 %install
-python setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES --install-lib=/usr/lib/scons --install-scripts=/usr/bin --install-data=/usr/share
+python setup.py install --root=$RPM_BUILD_ROOT --install-lib=/usr/lib/scons --install-scripts=/usr/bin --install-data=/usr/share
 
 %clean
 rm -rf $RPM_BUILD_ROOT
   From Philipp Kraus:
     - Added optional ZIPROOT to Zip tool.
 
+  From Dirk Baechle:
+    - Replaced old SGML-based documentation toolchain with a more modern
+      approach, that also requires less external dependencies (programs and
+      Python packages). Added a customized Docbook XSD for strict validation of
+      all input XML files.
+      
 RELEASE 2.3.0 - Mon, 02 Mar 2013 13:22:29 -0400
 
   From Anatoly Techtonik:

src/engine/MANIFEST-xml.in

-SCons/Action.xml
-SCons/Defaults.xml
-SCons/Environment.xml
-SCons/Platform/__init__.xml
-SCons/Platform/posix.xml
-SCons/Platform/sunos.xml
-SCons/Platform/win32.xml
+SCons/*.xml
+SCons/Platform/*.xml
 SCons/Scanner/__init__.xml
-SCons/Script/Main.xml
-SCons/Script/SConscript.xml
-SCons/Subst.xml
-SCons/Tool/386asm.xml
-SCons/Tool/BitKeeper.xml
-SCons/Tool/CVS.xml
-SCons/Tool/Perforce.xml
-SCons/Tool/RCS.xml
-SCons/Tool/SCCS.xml
-SCons/Tool/Subversion.xml
-SCons/Tool/__init__.xml
-SCons/Tool/aixc++.xml
-SCons/Tool/aixcc.xml
-SCons/Tool/aixf77.xml
-SCons/Tool/aixlink.xml
-SCons/Tool/applelink.xml
-SCons/Tool/ar.xml
-SCons/Tool/as.xml
-SCons/Tool/bcc32.xml
-SCons/Tool/c++.xml
-SCons/Tool/cc.xml
-SCons/Tool/cvf.xml
-SCons/Tool/default.xml
-SCons/Tool/dmd.xml
+SCons/Script/*.xml
+SCons/Tool/*.xml
 SCons/Tool/docbook/__init__.xml
-SCons/Tool/dvi.xml
-SCons/Tool/dvipdf.xml
-SCons/Tool/dvips.xml
-SCons/Tool/f77.xml
-SCons/Tool/f90.xml
-SCons/Tool/f95.xml
-SCons/Tool/fortran.xml
-SCons/Tool/g++.xml
-SCons/Tool/g77.xml
-SCons/Tool/gas.xml
-SCons/Tool/gcc.xml
-SCons/Tool/gfortran.xml
-SCons/Tool/gnulink.xml
-SCons/Tool/gs.xml
-SCons/Tool/hpc++.xml
-SCons/Tool/hpcc.xml
-SCons/Tool/hplink.xml
-SCons/Tool/icc.xml
-SCons/Tool/icl.xml
-SCons/Tool/ifl.xml
-SCons/Tool/ifort.xml
-SCons/Tool/ilink.xml
-SCons/Tool/ilink32.xml
-SCons/Tool/install.xml
-SCons/Tool/intelc.xml
-SCons/Tool/jar.xml
-SCons/Tool/javac.xml
-SCons/Tool/javah.xml
-SCons/Tool/latex.xml
-SCons/Tool/lex.xml
-SCons/Tool/link.xml
-SCons/Tool/linkloc.xml
-SCons/Tool/m4.xml
-SCons/Tool/masm.xml
-SCons/Tool/midl.xml
-SCons/Tool/mingw.xml
-SCons/Tool/mslib.xml
-SCons/Tool/mslink.xml
-SCons/Tool/mssdk.xml
-SCons/Tool/msvc.xml
-SCons/Tool/msvs.xml
-SCons/Tool/mwcc.xml
-SCons/Tool/mwld.xml
-SCons/Tool/nasm.xml
-SCons/Tool/packaging.xml
 SCons/Tool/packaging/__init__.xml
-SCons/Tool/pdf.xml
-SCons/Tool/pdflatex.xml
-SCons/Tool/pdftex.xml
-SCons/Tool/qt.xml
-SCons/Tool/rmic.xml
-SCons/Tool/rpcgen.xml
-SCons/Tool/sgiar.xml
-SCons/Tool/sgic++.xml
-SCons/Tool/sgicc.xml
-SCons/Tool/sgilink.xml
-SCons/Tool/sunar.xml
-SCons/Tool/sunc++.xml
-SCons/Tool/suncc.xml
-SCons/Tool/sunf77.xml
-SCons/Tool/sunf90.xml
-SCons/Tool/sunf95.xml
-SCons/Tool/sunlink.xml
-SCons/Tool/swig.xml
-SCons/Tool/tar.xml
-SCons/Tool/tex.xml
-SCons/Tool/textfile.xml
-SCons/Tool/tlib.xml
-SCons/Tool/yacc.xml
-SCons/Tool/zip.xml
-SCons/Tool/gettext.xml
-SCons/Tool/msgfmt.xml
-SCons/Tool/msginit.xml
-SCons/Tool/msgmerge.xml
-SCons/Tool/xgettext.xml

src/engine/MANIFEST.in

 SCons/__init__.py
 SCons/Action.py
 SCons/Builder.py
-SCons/compat/__init__.py
-SCons/compat/_scons_builtins.py
-SCons/compat/_scons_collections.py
-SCons/compat/_scons_dbm.py
-SCons/compat/_scons_hashlib.py
-SCons/compat/_scons_io.py
-SCons/compat/_scons_sets.py
-SCons/compat/_scons_subprocess.py
+SCons/compat/*.py
 SCons/CacheDir.py
 SCons/Conftest.py
 SCons/cpp.py
 SCons/Node/Alias.py
 SCons/Node/FS.py
 SCons/Node/Python.py
-SCons/Options/__init__.py
-SCons/Options/BoolOption.py
-SCons/Options/EnumOption.py
-SCons/Options/ListOption.py
-SCons/Options/PackageOption.py
-SCons/Options/PathOption.py
+SCons/Options/*.py
 SCons/PathList.py
 SCons/Platform/__init__.py
 SCons/Platform/aix.py
 SCons/Tool/CVS.py
 SCons/Tool/default.py
 SCons/Tool/dmd.py
-SCons/Tool/docbook/__init__.xml
+SCons/Tool/docbook/__init__.py
 SCons/Tool/dvi.py
 SCons/Tool/dvipdf.py
 SCons/Tool/dvips.py
 SCons/Tool/mwcc.py
 SCons/Tool/mwld.py
 SCons/Tool/nasm.py
-SCons/Tool/packaging/__init__.py
-SCons/Tool/packaging/ipk.py
-SCons/Tool/packaging/msi.py
-SCons/Tool/packaging/rpm.py
-SCons/Tool/packaging/src_tarbz2.py
-SCons/Tool/packaging/src_targz.py
-SCons/Tool/packaging/src_zip.py
-SCons/Tool/packaging/tarbz2.py
-SCons/Tool/packaging/targz.py
-SCons/Tool/packaging/zip.py
+SCons/Tool/packaging/*.py
 SCons/Tool/pdf.py
 SCons/Tool/pdflatex.py
 SCons/Tool/pdftex.py
                           "SCons.Scanner",
                           "SCons.Script",
                           "SCons.Tool",
+                          "SCons.Tool.docbook",
                           "SCons.Tool.MSCommon",
                           "SCons.Tool.packaging",
                           "SCons.Variables",
                          ],
-    'package_dir'      : {'' : 'engine'},
+    'package_dir'      : {'' : 'engine',
+                          'SCons.Tool.docbook' : 'engine/SCons/Tool/docbook'},
+    'package_data'     : {'SCons.Tool.docbook' : ['docbook-xsl-1.76.1/*',
+                                                  'docbook-xsl-1.76.1/common/*',
+                                                  'docbook-xsl-1.76.1/docsrc/*',
+                                                  'docbook-xsl-1.76.1/eclipse/*',
+                                                  'docbook-xsl-1.76.1/epub/*',
+                                                  'docbook-xsl-1.76.1/epub/bin/*',
+                                                  'docbook-xsl-1.76.1/epub/bin/lib/*',
+                                                  'docbook-xsl-1.76.1/epub/bin/xslt/*',
+                                                  'docbook-xsl-1.76.1/extensions/*',
+                                                  'docbook-xsl-1.76.1/fo/*',
+                                                  'docbook-xsl-1.76.1/highlighting/*',
+                                                  'docbook-xsl-1.76.1/html/*',
+                                                  'docbook-xsl-1.76.1/htmlhelp/*',
+                                                  'docbook-xsl-1.76.1/images/*',
+                                                  'docbook-xsl-1.76.1/images/callouts/*',
+                                                  'docbook-xsl-1.76.1/images/colorsvg/*',
+                                                  'docbook-xsl-1.76.1/javahelp/*',
+                                                  'docbook-xsl-1.76.1/lib/*',
+                                                  'docbook-xsl-1.76.1/manpages/*',
+                                                  'docbook-xsl-1.76.1/params/*',
+                                                  'docbook-xsl-1.76.1/profiling/*',
+                                                  'docbook-xsl-1.76.1/roundtrip/*',
+                                                  'docbook-xsl-1.76.1/slides/browser/*',
+                                                  'docbook-xsl-1.76.1/slides/fo/*',
+                                                  'docbook-xsl-1.76.1/slides/graphics/*',
+                                                  'docbook-xsl-1.76.1/slides/graphics/active/*',
+                                                  'docbook-xsl-1.76.1/slides/graphics/inactive/*',
+                                                  'docbook-xsl-1.76.1/slides/graphics/toc/*',
+                                                  'docbook-xsl-1.76.1/slides/html/*',
+                                                  'docbook-xsl-1.76.1/slides/htmlhelp/*',
+                                                  'docbook-xsl-1.76.1/slides/keynote/*',
+                                                  'docbook-xsl-1.76.1/slides/keynote/xsltsl/*',
+                                                  'docbook-xsl-1.76.1/slides/svg/*',
+                                                  'docbook-xsl-1.76.1/slides/xhtml/*',
+                                                  'docbook-xsl-1.76.1/template/*',
+                                                  'docbook-xsl-1.76.1/tests/*',
+                                                  'docbook-xsl-1.76.1/tools/bin/*',
+                                                  'docbook-xsl-1.76.1/tools/make/*',
+                                                  'docbook-xsl-1.76.1/webhelp/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/css/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/images/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/jquery/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/jquery/theme-redmond/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/jquery/theme-redmond/images/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/jquery/treeview/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/common/jquery/treeview/images/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/content/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/content/search/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docs/content/search/stemmers/*',
+                                                  'docbook-xsl-1.76.1/webhelp/docsrc/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/css/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/images/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/jquery/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/jquery/theme-redmond/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/jquery/theme-redmond/images/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/jquery/treeview/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/common/jquery/treeview/images/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/content/search/*',
+                                                  'docbook-xsl-1.76.1/webhelp/template/content/search/stemmers/*',
+                                                  'docbook-xsl-1.76.1/webhelp/xsl/*',
+                                                  'docbook-xsl-1.76.1/website/*',
+                                                  'docbook-xsl-1.76.1/xhtml/*',
+                                                  'docbook-xsl-1.76.1/xhtml-1_1/*',
+                                                  'utils/*']},
     'data_files'       : [('man/man1', man_pages)],
     'scripts'          : scripts,
     'cmdclass'         : {'install'         : install,
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.