From 310567c546721f070fd0266f56ffd343a4522fab Mon Sep 17 00:00:00 2001 From: stevenknight Date: Tue, 15 Feb 2005 13:55:44 +0000 Subject: [PATCH] Accumulated documentation changes. git-svn-id: http://scons.tigris.org/svn/scons/trunk@1232 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- bin/SConsDoc.py | 241 +++++++++++++ bin/scons-proc.py | 195 ++++++++++ bin/sconsoutput.py | 63 ++-- doc/SConscript | 126 +++++-- doc/design/MANIFEST | 1 + doc/design/copyright.sgml | 2 +- doc/design/main.sgml | 16 +- doc/design/scons.mod | 428 ++++++++++++++++++++++ doc/man/scons.1 | 85 +++-- doc/python10/MANIFEST | 1 + doc/python10/arch.eps | 134 +++++++ doc/python10/arch.jpg | Bin 0 -> 22004 bytes doc/python10/builder.eps | 325 +++++++++++++++++ doc/python10/builder.jpg | Bin 0 -> 53107 bytes doc/python10/job-task.eps | 238 +++++++++++++ doc/python10/job-task.jpg | Bin 0 -> 25895 bytes doc/python10/main.sgml | 2 +- doc/python10/node.eps | 351 ++++++++++++++++++ doc/python10/node.jpg | Bin 0 -> 61105 bytes doc/python10/scanner.eps | 168 +++++++++ doc/python10/scanner.jpg | Bin 0 -> 26788 bytes doc/python10/scons.mod | 428 ++++++++++++++++++++++ doc/python10/sig.eps | 147 ++++++++ doc/python10/sig.jpg | Bin 0 -> 13913 bytes doc/scons.mod | 30 +- doc/user/ENV.in | 10 +- doc/user/ENV.sgml | 10 +- doc/user/MANIFEST | 6 + doc/user/alias.in | 10 +- doc/user/build-install.in | 118 +++++-- doc/user/build-install.sgml | 118 +++++-- doc/user/builders-built-in.in | 80 ++--- doc/user/builders-built-in.sgml | 68 ++-- doc/user/builders-commands.in | 8 +- doc/user/builders-commands.sgml | 6 +- doc/user/builders-writing.in | 32 +- doc/user/builders-writing.sgml | 30 +- doc/user/builders.in | 56 +++ doc/user/builders.sgml | 56 +++ doc/user/caching.in | 34 +- doc/user/command-line.in | 126 +++---- doc/user/command-line.sgml | 4 +- doc/user/depends.in | 80 ++--- doc/user/depends.sgml | 18 +- doc/user/environments.in | 65 ++-- doc/user/environments.sgml | 35 +- doc/user/factories.in | 470 ++++++++++++++++++++++++ doc/user/factories.sgml | 427 ++++++++++++++++++++++ doc/user/help.in | 61 +++- doc/user/help.sgml | 71 ++++ doc/user/hierarchy.in | 8 +- doc/user/install.in | 14 +- doc/user/java.in | 66 ++-- doc/user/java.sgml | 44 +-- doc/user/less-simple.in | 24 +- doc/user/less-simple.sgml | 10 +- doc/user/libraries.in | 44 +-- doc/user/libraries.sgml | 29 +- doc/user/main.in | 53 +++ doc/user/main.sgml | 53 +++ doc/user/nodes.in | 20 +- doc/user/nodes.sgml | 10 +- doc/user/parseconfig.in | 81 +++++ doc/user/parseconfig.sgml | 72 ++++ doc/user/precious.in | 2 +- doc/user/preface.in | 3 +- doc/user/preface.sgml | 3 +- doc/user/python.in | 154 ++++++++ doc/user/python.sgml | 154 ++++++++ doc/user/repositories.in | 16 +- doc/user/repositories.sgml | 6 +- doc/user/scanners.in | 12 +- doc/user/scanners.sgml | 12 +- doc/user/sconf.in | 85 ++++- doc/user/sconf.sgml | 73 ++++ doc/user/separate.in | 24 +- doc/user/simple.in | 40 +-- doc/user/simple.sgml | 16 +- doc/user/sourcecode.in | 10 +- doc/user/sourcecode.sgml | 2 +- doc/user/tools.in | 38 ++ doc/user/tools.sgml | 38 ++ doc/user/troubleshoot.in | 132 ++++++- doc/user/troubleshoot.sgml | 273 ++++++++++++++ doc/user/variables.in | 56 +++ doc/user/variables.sgml | 56 +++ doc/user/variants.in | 14 +- doc/user/variants.sgml | 10 +- src/CHANGES.txt | 18 + src/engine/MANIFEST-xml.in | 86 +++++ src/engine/SCons/Action.xml | 67 ++++ src/engine/SCons/Defaults.py | 4 - src/engine/SCons/Defaults.xml | 471 +++++++++++++++++++++++++ src/engine/SCons/Environment.xml | 157 +++++++++ src/engine/SCons/Platform/__init__.xml | 118 +++++++ src/engine/SCons/Platform/posix.xml | 45 +++ src/engine/SCons/Platform/win32.xml | 9 + src/engine/SCons/Tool/386asm.xml | 6 + src/engine/SCons/Tool/BitKeeper.xml | 43 +++ src/engine/SCons/Tool/CVS.xml | 51 +++ src/engine/SCons/Tool/Perforce.xml | 33 ++ src/engine/SCons/Tool/RCS.xml | 46 +++ src/engine/SCons/Tool/SCCS.xml | 43 +++ src/engine/SCons/Tool/Subversion.xml | 32 ++ src/engine/SCons/Tool/__init__.py | 4 +- src/engine/SCons/Tool/__init__.xml | 324 +++++++++++++++++ src/engine/SCons/Tool/aixc++.xml | 6 + src/engine/SCons/Tool/aixcc.xml | 6 + src/engine/SCons/Tool/aixf77.xml | 6 + src/engine/SCons/Tool/aixlink.xml | 6 + src/engine/SCons/Tool/applelink.xml | 11 + src/engine/SCons/Tool/ar.py | 1 + src/engine/SCons/Tool/ar.xml | 48 +++ src/engine/SCons/Tool/as.xml | 69 ++++ src/engine/SCons/Tool/bcc32.xml | 6 + src/engine/SCons/Tool/c++.xml | 76 ++++ src/engine/SCons/Tool/cc.xml | 111 ++++++ src/engine/SCons/Tool/cvf.xml | 6 + src/engine/SCons/Tool/default.xml | 6 + src/engine/SCons/Tool/dmd.xml | 6 + src/engine/SCons/Tool/dvipdf.xml | 38 ++ src/engine/SCons/Tool/dvips.xml | 66 ++++ src/engine/SCons/Tool/f77.xml | 196 ++++++++++ src/engine/SCons/Tool/f90.xml | 196 ++++++++++ src/engine/SCons/Tool/f95.xml | 196 ++++++++++ src/engine/SCons/Tool/fortran.xml | 240 +++++++++++++ src/engine/SCons/Tool/g++.xml | 6 + src/engine/SCons/Tool/g77.xml | 6 + src/engine/SCons/Tool/gas.xml | 6 + src/engine/SCons/Tool/gcc.xml | 6 + src/engine/SCons/Tool/gnulink.xml | 6 + src/engine/SCons/Tool/gs.xml | 34 ++ src/engine/SCons/Tool/hpc++.xml | 6 + src/engine/SCons/Tool/hpcc.xml | 6 + src/engine/SCons/Tool/hplink.xml | 6 + src/engine/SCons/Tool/icc.xml | 6 + src/engine/SCons/Tool/icl.xml | 6 + src/engine/SCons/Tool/ifl.xml | 6 + src/engine/SCons/Tool/ifort.xml | 6 + src/engine/SCons/Tool/ilink.xml | 6 + src/engine/SCons/Tool/ilink32.xml | 6 + src/engine/SCons/Tool/intelc.xml | 14 + src/engine/SCons/Tool/jar.xml | 82 +++++ src/engine/SCons/Tool/javac.xml | 109 ++++++ src/engine/SCons/Tool/javah.xml | 82 +++++ src/engine/SCons/Tool/latex.xml | 36 ++ src/engine/SCons/Tool/lex.py | 10 +- src/engine/SCons/Tool/lex.xml | 37 ++ src/engine/SCons/Tool/link.xml | 146 ++++++++ src/engine/SCons/Tool/linkloc.xml | 6 + src/engine/SCons/Tool/m4.xml | 48 +++ src/engine/SCons/Tool/masm.xml | 6 + src/engine/SCons/Tool/midl.xml | 29 ++ src/engine/SCons/Tool/mingw.xml | 6 + src/engine/SCons/Tool/mslib.xml | 6 + src/engine/SCons/Tool/mslink.xml | 105 ++++++ src/engine/SCons/Tool/msvc.xml | 112 ++++++ src/engine/SCons/Tool/msvs.xml | 266 ++++++++++++++ src/engine/SCons/Tool/mwcc.xml | 20 ++ src/engine/SCons/Tool/mwld.xml | 6 + src/engine/SCons/Tool/nasm.xml | 6 + src/engine/SCons/Tool/pdflatex.xml | 6 + src/engine/SCons/Tool/pdftex.xml | 6 + src/engine/SCons/Tool/qt.xml | 274 ++++++++++++++ src/engine/SCons/Tool/rmic.xml | 79 +++++ src/engine/SCons/Tool/rpcgen.xml | 122 +++++++ src/engine/SCons/Tool/sgiar.xml | 6 + src/engine/SCons/Tool/sgic++.xml | 6 + src/engine/SCons/Tool/sgicc.xml | 6 + src/engine/SCons/Tool/sgilink.xml | 6 + src/engine/SCons/Tool/sunar.xml | 6 + src/engine/SCons/Tool/sunc++.xml | 6 + src/engine/SCons/Tool/suncc.xml | 6 + src/engine/SCons/Tool/sunlink.xml | 6 + src/engine/SCons/Tool/swig.xml | 80 +++++ src/engine/SCons/Tool/tar.xml | 75 ++++ src/engine/SCons/Tool/tex.xml | 70 ++++ src/engine/SCons/Tool/tlib.xml | 6 + src/engine/SCons/Tool/yacc.py | 8 +- src/engine/SCons/Tool/yacc.xml | 42 +++ src/engine/SCons/Tool/zip.xml | 83 +++++ src/test_copyrights.py | 1 + 182 files changed, 11005 insertions(+), 735 deletions(-) create mode 100644 bin/SConsDoc.py create mode 100644 bin/scons-proc.py create mode 100644 doc/design/scons.mod create mode 100644 doc/python10/arch.eps create mode 100644 doc/python10/arch.jpg create mode 100644 doc/python10/builder.eps create mode 100644 doc/python10/builder.jpg create mode 100644 doc/python10/job-task.eps create mode 100644 doc/python10/job-task.jpg create mode 100644 doc/python10/node.eps create mode 100644 doc/python10/node.jpg create mode 100644 doc/python10/scanner.eps create mode 100644 doc/python10/scanner.jpg create mode 100644 doc/python10/scons.mod create mode 100644 doc/python10/sig.eps create mode 100644 doc/python10/sig.jpg create mode 100644 doc/user/builders.in create mode 100644 doc/user/builders.sgml create mode 100644 doc/user/factories.in create mode 100644 doc/user/factories.sgml create mode 100644 doc/user/parseconfig.in create mode 100644 doc/user/parseconfig.sgml create mode 100644 doc/user/python.in create mode 100644 doc/user/python.sgml create mode 100644 doc/user/tools.in create mode 100644 doc/user/tools.sgml create mode 100644 doc/user/variables.in create mode 100644 doc/user/variables.sgml create mode 100644 src/engine/MANIFEST-xml.in create mode 100644 src/engine/SCons/Action.xml create mode 100644 src/engine/SCons/Defaults.xml create mode 100644 src/engine/SCons/Environment.xml create mode 100644 src/engine/SCons/Platform/__init__.xml create mode 100644 src/engine/SCons/Platform/posix.xml create mode 100644 src/engine/SCons/Platform/win32.xml create mode 100644 src/engine/SCons/Tool/386asm.xml create mode 100644 src/engine/SCons/Tool/BitKeeper.xml create mode 100644 src/engine/SCons/Tool/CVS.xml create mode 100644 src/engine/SCons/Tool/Perforce.xml create mode 100644 src/engine/SCons/Tool/RCS.xml create mode 100644 src/engine/SCons/Tool/SCCS.xml create mode 100644 src/engine/SCons/Tool/Subversion.xml create mode 100644 src/engine/SCons/Tool/__init__.xml create mode 100644 src/engine/SCons/Tool/aixc++.xml create mode 100644 src/engine/SCons/Tool/aixcc.xml create mode 100644 src/engine/SCons/Tool/aixf77.xml create mode 100644 src/engine/SCons/Tool/aixlink.xml create mode 100644 src/engine/SCons/Tool/applelink.xml create mode 100644 src/engine/SCons/Tool/ar.xml create mode 100644 src/engine/SCons/Tool/as.xml create mode 100644 src/engine/SCons/Tool/bcc32.xml create mode 100644 src/engine/SCons/Tool/c++.xml create mode 100644 src/engine/SCons/Tool/cc.xml create mode 100644 src/engine/SCons/Tool/cvf.xml create mode 100644 src/engine/SCons/Tool/default.xml create mode 100644 src/engine/SCons/Tool/dmd.xml create mode 100644 src/engine/SCons/Tool/dvipdf.xml create mode 100644 src/engine/SCons/Tool/dvips.xml create mode 100644 src/engine/SCons/Tool/f77.xml create mode 100644 src/engine/SCons/Tool/f90.xml create mode 100644 src/engine/SCons/Tool/f95.xml create mode 100644 src/engine/SCons/Tool/fortran.xml create mode 100644 src/engine/SCons/Tool/g++.xml create mode 100644 src/engine/SCons/Tool/g77.xml create mode 100644 src/engine/SCons/Tool/gas.xml create mode 100644 src/engine/SCons/Tool/gcc.xml create mode 100644 src/engine/SCons/Tool/gnulink.xml create mode 100644 src/engine/SCons/Tool/gs.xml create mode 100644 src/engine/SCons/Tool/hpc++.xml create mode 100644 src/engine/SCons/Tool/hpcc.xml create mode 100644 src/engine/SCons/Tool/hplink.xml create mode 100644 src/engine/SCons/Tool/icc.xml create mode 100644 src/engine/SCons/Tool/icl.xml create mode 100644 src/engine/SCons/Tool/ifl.xml create mode 100644 src/engine/SCons/Tool/ifort.xml create mode 100644 src/engine/SCons/Tool/ilink.xml create mode 100644 src/engine/SCons/Tool/ilink32.xml create mode 100644 src/engine/SCons/Tool/intelc.xml create mode 100644 src/engine/SCons/Tool/jar.xml create mode 100644 src/engine/SCons/Tool/javac.xml create mode 100644 src/engine/SCons/Tool/javah.xml create mode 100644 src/engine/SCons/Tool/latex.xml create mode 100644 src/engine/SCons/Tool/lex.xml create mode 100644 src/engine/SCons/Tool/link.xml create mode 100644 src/engine/SCons/Tool/linkloc.xml create mode 100644 src/engine/SCons/Tool/m4.xml create mode 100644 src/engine/SCons/Tool/masm.xml create mode 100644 src/engine/SCons/Tool/midl.xml create mode 100644 src/engine/SCons/Tool/mingw.xml create mode 100644 src/engine/SCons/Tool/mslib.xml create mode 100644 src/engine/SCons/Tool/mslink.xml create mode 100644 src/engine/SCons/Tool/msvc.xml create mode 100644 src/engine/SCons/Tool/msvs.xml create mode 100644 src/engine/SCons/Tool/mwcc.xml create mode 100644 src/engine/SCons/Tool/mwld.xml create mode 100644 src/engine/SCons/Tool/nasm.xml create mode 100644 src/engine/SCons/Tool/pdflatex.xml create mode 100644 src/engine/SCons/Tool/pdftex.xml create mode 100644 src/engine/SCons/Tool/qt.xml create mode 100644 src/engine/SCons/Tool/rmic.xml create mode 100644 src/engine/SCons/Tool/rpcgen.xml create mode 100644 src/engine/SCons/Tool/sgiar.xml create mode 100644 src/engine/SCons/Tool/sgic++.xml create mode 100644 src/engine/SCons/Tool/sgicc.xml create mode 100644 src/engine/SCons/Tool/sgilink.xml create mode 100644 src/engine/SCons/Tool/sunar.xml create mode 100644 src/engine/SCons/Tool/sunc++.xml create mode 100644 src/engine/SCons/Tool/suncc.xml create mode 100644 src/engine/SCons/Tool/sunlink.xml create mode 100644 src/engine/SCons/Tool/swig.xml create mode 100644 src/engine/SCons/Tool/tar.xml create mode 100644 src/engine/SCons/Tool/tex.xml create mode 100644 src/engine/SCons/Tool/tlib.xml create mode 100644 src/engine/SCons/Tool/yacc.xml create mode 100644 src/engine/SCons/Tool/zip.xml diff --git a/bin/SConsDoc.py b/bin/SConsDoc.py new file mode 100644 index 00000000..df28b76d --- /dev/null +++ b/bin/SConsDoc.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python +# +# Module for handling SCons documentation processing. +# +import os.path +import imp +import sys +import xml.sax.handler + +class Item: + def __init__(self, name): + self.name = name + self.sort_name = name.lower() + if self.sort_name[0] == '_': + self.sort_name = self.sort_name[1:] + self.summary = [] + self.uses = None + def cmp_name(self, name): + if name[0] == '_': + name = name[1:] + return name.lower() + def __cmp__(self, other): + return cmp(self.sort_name, other.sort_name) + +class Builder(Item): + pass + +class Tool(Item): + def __init__(self, name): + Item.__init__(self, name) + self.entity = self.name.replace('+', 'X') + +class ConstructionVariable(Item): + pass + +class Chunk: + def __init__(self, tag, body=None): + self.tag = tag + if not body: + body = [] + self.body = body + def __str__(self): + body = ''.join(self.body) + return "<%s>%s\n" % (self.tag, body, self.tag) + def append(self, data): + self.body.append(data) + +class Summary: + 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 = self.__class__.__dict__.keys() + start_tag_method_names = filter(lambda k: k[:6] == 'start_', keys) + end_tag_method_names = filter(lambda k: k[:4] == 'end_', keys) + 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.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 endElement(self, name): + try: + end_element_method = self._end_dispatch[name] + except KeyError: + self.characters('' % 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_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') + try: + cvar = self.cvars[name] + except KeyError: + cvar = ConstructionVariable(name) + self.cvars[name] = cvar + self.begin_xxx(cvar) + def end_cvar(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 = ''.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))) + + def set_file_info(self, filename, preamble_lines): + self.filename = filename + self.preamble_lines = preamble_lines + +# lifted from Ka-Ping Yee's way cool pydoc module. +def importfile(path): + """Import a Python source file or compiled file given its path.""" + magic = imp.get_magic() + file = open(path, 'r') + if file.read(len(magic)) == magic: + kind = imp.PY_COMPILED + else: + kind = imp.PY_SOURCE + file.close() + filename = os.path.basename(path) + name, ext = os.path.splitext(filename) + file = open(path, 'r') + try: + module = imp.load_module(name, file, path, (ext, 'r', kind)) + except ImportError, e: + sys.stderr.write("Could not import %s: %s\n" % (path, e)) + return None + file.close() + return module diff --git a/bin/scons-proc.py b/bin/scons-proc.py new file mode 100644 index 00000000..809c3d04 --- /dev/null +++ b/bin/scons-proc.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python +# +# Process a list of Python and/or XML files containing SCons documentation. +# +# Depending on the options, this script creates DocBook-formatted lists +# of the Builders, Tools or construction variables in generated SGML +# files containing the summary text and/or .mod files contining the +# ENTITY definitions for each item. +# +import getopt +import os.path +import re +import string +import StringIO +import sys +import xml.sax + +import SConsDoc + +base_sys_path = [os.getcwd() + '/build/test-tar-gz/lib/scons'] + sys.path + +helpstr = """\ +Usage: scons-varlist.py [-b .gen,.mod] [-t .gen,.mod] [-v .gen,.mod] [infile] +Options: + -m, --modfile .mod file to hold Builder entities +""" + +opts, args = getopt.getopt(sys.argv[1:], + "b:t:v:", + ['builders=', 'tools=', 'variables=']) + +buildersfiles = None +toolsfiles = None +variablesfiles = None + +for o, a in opts: + if o == '-b' or o == '--builders': + buildersfiles = a + elif o == '-t' or o == '--tools': + toolsfiles = a + elif o == '-v' or o == '--variables': + variablesfiles = a + +h = SConsDoc.SConsDocHandler() +saxparser = xml.sax.make_parser() +saxparser.setContentHandler(h) +saxparser.setErrorHandler(h) + +preamble = """\ + + +""" + +postamble = """\ + +""" + +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(preamble.split('\n'))) + try: + content = module.__scons_doc__ + except AttributeError: + content = None + else: + del module.__scons_doc__ + else: + h.set_file_info(f, len(preamble.split('\n'))) + content = open(f).read() + if content: + content = content.replace('&', '&') + input = preamble + content + postamble + try: + saxparser.parse(StringIO.StringIO(input)) + except: + sys.stderr.write("error in %s\n" % f) + raise + +Warning = """\ + +""" + +Regular_Entities_Header = """\ + +""" + +Link_Entities_Header = """\ + +""" + +class XXX: + def __init__(self, entries, **kw): + values = entries.values() + values.sort() + self.values = values + for k, v in kw.items(): + setattr(self, k, v) + def write_gen(self, filename): + if not filename: + return + f = open(filename, 'w') + for v in self.values: + f.write('\n\n' % + (self.prefix, self.idfunc(v.name))) + for term in self.termfunc(v.name): + f.write('<%s>%s\n' % + (self.tag, term, self.tag)) + f.write('\n') + for chunk in v.summary.body: + f.write(str(chunk)) + #if v.uses: + # u = map(lambda x, s: '&%slink-%s;' % (s.prefix, x), v.uses) + # f.write('\n') + # f.write('Uses: ' + ', '.join(u) + '.\n') + # f.write('\n') + f.write('\n') + f.write('\n') + def write_mod(self, filename): + if not filename: + return + f = open(filename, 'w') + f.write(Warning) + f.write('\n') + f.write(Regular_Entities_Header % self.description) + f.write('\n') + for v in self.values: + f.write('%s">\n' % + (self.prefix, self.idfunc(v.name), + self.tag, self.entityfunc(v.name), self.tag)) + f.write('\n') + f.write(Warning) + f.write('\n') + f.write(Link_Entities_Header % self.description) + f.write('\n') + for v in self.values: + f.write('<%s>%s\'>\n' % + (self.prefix, self.idfunc(v.name), + self.prefix, self.idfunc(v.name), + self.tag, self.entityfunc(v.name), self.tag)) + f.write('\n') + f.write(Warning) + +if buildersfiles: + g = XXX(h.builders, + description = 'builder', + prefix = 'b-', + tag = 'function', + idfunc = lambda x: x, + termfunc = lambda x: [x+'()', 'env.'+x+'()'], + entityfunc = lambda x: x) + + gen, mod = string.split(buildersfiles, ',') + g.write_gen(gen) + g.write_mod(mod) + +if toolsfiles: + g = XXX(h.tools, + description = 'tool', + prefix = 't-', + tag = 'literal', + idfunc = lambda x: string.replace(x, '+', 'X'), + termfunc = lambda x: [x], + entityfunc = lambda x: x) + + gen, mod = string.split(toolsfiles, ',') + g.write_gen(gen) + g.write_mod(mod) + +if variablesfiles: + g = XXX(h.cvars, + description = 'construction variable', + prefix = 'cv-', + tag = 'envar', + idfunc = lambda x: x, + termfunc = lambda x: [x], + entityfunc = lambda x: '$'+x) + + gen, mod = string.split(variablesfiles, ',') + g.write_gen(gen) + g.write_mod(mod) diff --git a/bin/sconsoutput.py b/bin/sconsoutput.py index 3ca8a32d..974646c4 100644 --- a/bin/sconsoutput.py +++ b/bin/sconsoutput.py @@ -23,7 +23,7 @@ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # -__revision__ = "src/sconsoutput.py 0.D003 2003/09/22 22:17:34 software" +__revision__ = "/home/scons/sconsoutput/branch.0/baseline/src/sconsoutput.py 0.4.D001 2004/11/27 18:44:37 knight" # # sconsoutput.py - an SGML preprocessor for capturing SCons output @@ -76,14 +76,14 @@ __revision__ = "src/sconsoutput.py 0.D003 2003/09/22 22:17:34 software" # SCons output is generated from the following sort of tag: # # -# scons -Q foo -# scons -Q foo +# scons -Q foo +# scons -Q foo # # -# You tell it which example to use with the "example" attribute, and -# then give it a list of tags to execute. You can also supply -# an "os" tag, which specifies the type of operating system this example -# is intended to show; if you omit this, default value is "posix". +# You tell it which example to use with the "example" attribute, and then +# give it a list of tags to execute. You can also +# supply an "os" tag, which specifies the type of operating system this +# example is intended to show; if you omit this, default value is "posix". # # The generated SGML will show the command line (with the appropriate # command-line prompt for the operating system), execute the command in @@ -194,7 +194,7 @@ import SCons.Action import SCons.Defaults import SCons.Node.FS -platform = '%s' +platform = '%(osname)s' Sep = { 'posix' : '/', @@ -263,6 +263,10 @@ class ToolSurrogate: env[v] = SCons.Action.Action(self.func, strfunction=strfunction, varlist=self.varlist) + def __repr__(self): + # This is for the benefit of printing the 'TOOLS' + # variable through env.Dump(). + return repr(self.tool) def Null(target, source, env): pass @@ -365,7 +369,12 @@ ToolList = { ], } -tools = map(lambda t: apply(ToolSurrogate, t), ToolList[platform]) +toollist = ToolList[platform] +filter_tools = string.split('%(tools)s') +if filter_tools: + toollist = filter(lambda x, ft=filter_tools: x[0] in ft, toollist) + +toollist = map(lambda t: apply(ToolSurrogate, t), toollist) def surrogate_spawn(sh, escape, cmd, args, env): pass @@ -375,7 +384,7 @@ def surrogate_pspawn(sh, escape, cmd, args, env, stdout, stderr): SCons.Defaults.ConstructionEnvironment.update({ 'PLATFORM' : platform, - 'TOOLS' : tools, + 'TOOLS' : toollist, 'SPAWN' : surrogate_spawn, 'PSPAWN' : surrogate_pspawn, }) @@ -384,7 +393,7 @@ SConscript('SConstruct') """ # "Commands" that we will execute in our examples. -def command_scons(args, c, test, osname): +def command_scons(args, c, test, dict): save_vals = {} delete_keys = [] try: @@ -403,7 +412,7 @@ def command_scons(args, c, test, osname): program = scons_py, arguments = '-f - ' + string.join(args), chdir = test.workpath('WORK'), - stdin = Stdin % osname) + stdin = Stdin % dict) os.environ.update(save_vals) for key in delete_keys: del(os.environ[key]) @@ -417,7 +426,7 @@ def command_scons(args, c, test, osname): # sys.stderr.write(err) return lines -def command_touch(args, c, test, osname): +def command_touch(args, c, test, dict): time.sleep(1) for file in args: if not os.path.isabs(file): @@ -427,7 +436,7 @@ def command_touch(args, c, test, osname): os.utime(file, None) return [] -def command_edit(args, c, test, osname): +def command_edit(args, c, test, dict): try: add_string = c.edit[:] except AttributeError: @@ -441,7 +450,7 @@ def command_edit(args, c, test, osname): open(file, 'wb').write(contents + add_string) return [] -def command_ls(args, c, test, osname): +def command_ls(args, c, test, dict): def ls(a): files = os.listdir(a) files = filter(lambda x: x[0] != '.', files) @@ -462,12 +471,12 @@ CommandDict = { 'ls' : command_ls, } -def ExecuteCommand(args, c, t, osname): +def ExecuteCommand(args, c, t, dict): try: func = CommandDict[args[0]] except KeyError: - func = lambda args, c, t, osname: [] - return func(args[1:], c, t, osname) + func = lambda args, c, t, dict: [] + return func(args[1:], c, t, dict) class MySGML(sgmllib.SGMLParser): """A subclass of the standard Python 2.2 sgmllib SGML parser. @@ -647,6 +656,7 @@ class MySGML(sgmllib.SGMLParser): o = Output() o.preserve = None o.os = 'posix' + o.tools = '' o.e = e # Locally-set. for name, value in attrs: @@ -706,11 +716,16 @@ class MySGML(sgmllib.SGMLParser): e = string.replace(c.data, '__ROOT__', t.workpath('ROOT')) args = string.split(e) - lines = ExecuteCommand(args, c, t, o.os) + lines = ExecuteCommand(args, c, t, {'osname':o.os, 'tools':o.tools}) + content = None if c.output: - sys.stdout.write(p + c.output + '\n') + content = c.output elif lines: - sys.stdout.write(p + string.join(lines, '\n' + p) + '\n') + content = string.join(lines, '\n' + p) + if content: + content = string.replace(content, '<', '<') + content = string.replace(content, '>', '>') + sys.stdout.write(p + content + '\n') if o.data[0] == '\n': o.data = o.data[1:] @@ -718,11 +733,11 @@ class MySGML(sgmllib.SGMLParser): delattr(self, 'o') self.afunclist = self.afunclist[:-1] - def start_command(self, attrs): + def start_scons_output_command(self, attrs): try: o = self.o except AttributeError: - self.error(" tag outside of ") + self.error(" tag outside of ") try: o.prefix except AttributeError: @@ -734,7 +749,7 @@ class MySGML(sgmllib.SGMLParser): o.commandlist.append(c) self.afunclist.append(c.afunc) - def end_command(self): + def end_scons_output_command(self): self.o.data = "" self.afunclist = self.afunclist[:-1] diff --git a/doc/SConscript b/doc/SConscript index 0dd41d1e..008f2058 100644 --- a/doc/SConscript +++ b/doc/SConscript @@ -31,6 +31,10 @@ import string Import('env', 'whereis') +env = env.Copy() + +env.TargetSignatures('content') + build = os.path.join('#build', 'doc') # @@ -97,8 +101,28 @@ def scansgml(node, env, target): return includes s = Scanner(name = 'sgml', function = scansgml, skeys = ['.sgml', '.mod']) + orig_env = env -env = orig_env.Copy(SCANNERS = [s]) +env = orig_env.Copy(SCANNERS = [s], + SCONS_PROC_PY = File('#bin/scons-proc.py').rfile(), + SCONSOUTPUT_PY = File('#bin/sconsoutput.py').rfile()) + +# Fetch the list of files in the build engine that contain +# 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 = map(chop, open(manifest_xml_in).readlines()) +scons_doc_files = map(lambda x: File('#src/engine/'+x).rstr(), scons_doc_files) if jw: # @@ -127,6 +151,20 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT. """ % (date, ver, rev)) + builders_gen = os.path.join(build, 'user', 'builders.gen') + builders_mod = os.path.join(build, 'user', 'builders.mod') + tools_gen = os.path.join(build, 'user', 'tools.gen') + tools_mod = os.path.join(build, 'user', 'tools.mod') + variables_gen = os.path.join(build, 'user', 'variables.gen') + variables_mod = os.path.join(build, 'user', 'variables.mod') + + b = env.Command([builders_gen, builders_mod, + tools_gen, tools_mod, + variables_gen, variables_mod], + scons_doc_files, + "python $SCONS_PROC_PY -b ${TARGETS[0]},${TARGETS[1]} -t ${TARGETS[2]},${TARGETS[3]} -v ${TARGETS[4]},${TARGETS[5]} $SOURCES") + env.Depends(b, "$SCONS_PROC_PY") + # # Each document will live in its own subdirectory. List them here # as hash keys, with a hash of the info to control its build. @@ -138,21 +176,24 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT. 'pdf' : 1, 'text' : 0, }, - 'python10' : { - 'htmlindex' : 't1.html', - 'html' : 1, - 'ps' : 1, - 'pdf' : 0, - 'text' : 0, - 'graphics' : [ - 'arch.fig', - 'builder.fig', - 'job-task.fig', - 'node.fig', - 'scanner.fig', - 'sig.fig' - ], - }, + # This doesn't build on all systems, and the document is old + # enough that there's reallyno need to build it every time any + # more, so just comment it out for now. + #'python10' : { + # 'htmlindex' : 't1.html', + # 'html' : 1, + # 'ps' : 1, + # 'pdf' : 0, + # 'text' : 0, + # 'graphics' : [ + # 'arch.fig', + # 'builder.fig', + # 'job-task.fig', + # 'node.fig', + # 'scanner.fig', + # 'sig.fig' + # ], + #}, 'reference' : { 'htmlindex' : 'book1.html', 'html' : 1, @@ -172,6 +213,7 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT. 'SCons-win32-install-3.jpg', 'SCons-win32-install-4.jpg', ], + 'sconsoutput' : 1, }, } @@ -197,14 +239,20 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT. manifest = File(os.path.join(doc, 'MANIFEST')).rstr() src_files = map(lambda x: x[:-1], open(manifest).readlines()) + build_doc = docs[doc].get('sconsoutput') and int(ARGUMENTS.get('BUILDDOC', 0)) for s in src_files: - base, ext = os.path.splitext(s) + doc_s = os.path.join(doc, s) + build_s = os.path.join(build, doc, s) + base, ext = os.path.splitext(doc_s) if ext in ['.fig', '.jpg']: - orig_env.Install(os.path.join(build, doc), os.path.join(doc, s)) + orig_env.InstallAs(build_s, doc_s) else: - orig_env.SCons_revision(os.path.join(build, doc, s), - os.path.join(doc, s)) - Local(os.path.join(build, doc, s)) + if build_doc and ext == '.sgml': + env.Command(doc_s, + base + '.in', + "python $SCONSOUTPUT_PY $SOURCE > $TARGET") + orig_env.SCons_revision(build_s, doc_s) + Local(build_s) main = os.path.join(build, doc, 'main.sgml') out = 'main.out' @@ -247,13 +295,18 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT. tar_list.extend([html, htmldir]) for g in docs[doc].get('graphics', []): - if g[-4:] == '.fig' and fig2dev: - fig = os.path.join(build, doc, g) - jpg = os.path.join(htmldir, g[:-4] + '.jpg') - env.Command(jpg, fig, - "%s -L jpeg -q 100 $SOURCES $TARGET" % fig2dev) - env.Depends(html, jpg) - Local(jpg) + base, ext = os.path.splitext(g) + if ext == '.fig': + jpg = base + '.jpg' + htmldir_jpg = os.path.join(htmldir, jpg) + if fig2dev: + fig = os.path.join(build, doc, g) + env.Command(htmldir_jpg, fig, + "%s -L jpeg -q 100 $SOURCES $TARGET" % fig2dev) + else: + env.InstallAs(htmldir_jpg, jpg) + env.Depends(html, htmldir_jpg) + Local(htmldir_jpg) else: src = os.path.join(build, doc, g) Local(env.Install(htmldir, src)) @@ -273,12 +326,17 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT. tar_list.append(ps) for g in docs[doc].get('graphics', []): - if g[-4:] == '.fig' and fig2dev: - fig = os.path.join(build, doc, g) - eps = os.path.join(build, 'PS', g[:-4] + '.eps') - env.Command(eps, fig, "%s -L eps $SOURCES $TARGET" % fig2dev) - env.Depends(ps, eps) - Local(eps) + base, ext = os.path.splitext(g) + if ext == '.fig': + eps = base + '.eps' + build_eps = os.path.join(build, 'PS', eps) + if fig2dev: + fig = os.path.join(build, doc, g) + env.Command(build_eps, fig, "%s -L eps $SOURCES $TARGET" % fig2dev) + else: + env.InstallAs(build_eps, eps) + env.Depends(ps, build_eps) + Local(build_eps) else: src = os.path.join(build, doc, g) Local(env.Install(htmldir, src)) diff --git a/doc/design/MANIFEST b/doc/design/MANIFEST index 72d78be4..3fb99f08 100644 --- a/doc/design/MANIFEST +++ b/doc/design/MANIFEST @@ -11,3 +11,4 @@ issues.sgml main.sgml native.sgml overview.sgml +scons.mod diff --git a/doc/design/copyright.sgml b/doc/design/copyright.sgml index 3f908a45..d73906e8 100644 --- a/doc/design/copyright.sgml +++ b/doc/design/copyright.sgml @@ -26,7 +26,7 @@
- Copyright (c) 2001, 2002, 2003 Steven Knight + Copyright (c) 2001 Steven Knight Portions of this document, by the same author, were previously published Copyright 2000 by CodeSourcery LLC, under the Software Carpentry diff --git a/doc/design/main.sgml b/doc/design/main.sgml index 6780d2cc..6246a73d 100644 --- a/doc/design/main.sgml +++ b/doc/design/main.sgml @@ -26,10 +26,24 @@ %version; - + --> + + + + + + %scons; diff --git a/doc/design/scons.mod b/doc/design/scons.mod new file mode 100644 index 00000000..58a6576a --- /dev/null +++ b/doc/design/scons.mod @@ -0,0 +1,428 @@ + + + + + + +Aegis"> +Ant"> +Autoconf"> +Automake"> +cc"> +Cons"> +cp"> +csh"> +gcc"> +Jam"> +jar"> +javac"> +javah"> +Make"> +Make++"> +Python"> +ranlib"> +rmic"> +SCons"> +scons"> +ScCons"> +tar"> +touch"> +zip"> + + + + +Action"> +ActionBase"> +CommandAction"> +FunctionAction"> +ListAction"> +Builder"> +BuilderBase"> +CompositeBuilder"> +MultiStepBuilder"> +Job"> +Jobs"> +Serial"> +Parallel"> +Node"> +Node.FS"> +Scanner"> +Sig"> +Signature"> +Taskmaster"> +TimeStamp"> +Walker"> +Wrapper"> + + + + + +--debug=explain"> +--implicit-cache"> +--implicit-deps-changed"> +--implicit-deps-unchanged"> +-Q"> + + + +implicit_cache"> +implicit_deps_changed"> +implicit_deps_unchanged"> + + + + + +build"> +Makefile"> +Makefiles"> +SConscript"> +SConstruct"> +Sconstruct"> +sconstruct"> +.sconsign"> +src"> + + + + + +Add"> +AddOptions"> +Alias"> +Aliases"> +Append"> +BoolOption"> +Build"> +CacheDir"> +Clean"> +Clone"> +Command"> +Configure"> +Copy"> +Default"> +DefaultRules"> +Depends"> +Dir"> +Entry"> +EnumOption"> +Environment"> +Export"> +File"> +Finish"> +GenerateHelpText"> +Help"> +Ignore"> +Import"> +Install"> +InstallAs"> +Link"> +ListOption"> +Local"> +Module"> +Objects"> +Options"> +PackageOption"> +PathOption"> +Precious"> +Prepend"> +Replace"> +Repository"> +Return"> +RuleSet"> +Salt"> +SetBuildSignatureType"> +SetContentSignatureType"> +SourceSignature"> +SourceSignatures"> +Split"> +TargetSignatures"> +Task"> + + +subst"> + + +Message"> +Result"> +CheckCHeader"> +CheckCXXHeader"> +CheckFunc"> +CheckHeader"> +CheckLib"> +CheckLibWithHeader"> +CheckType"> +TryAction"> +TryBuild"> +TryCompile"> +TryLink"> +TryRun"> + + +str"> +zipfile"> + + +Cache"> + + + + + +ARGUMENTS"> +BUILD_TARGETS"> +COMMAND_LINE_TARGETS"> +DEFAULT_TARGETS"> + + + + + +BUILDERMAP"> +BUILDERS"> +CC"> +CCFLAGS"> +CCCOM"> +COLOR"> +COLORS"> +CONFIG"> +CPPDEFINES"> +ENV"> +JAVACLASSDIR"> +LIBDIRPREFIX"> +LIBDIRSUFFIX"> +LIBLINKPREFIX"> +LIBLINKSUFFIX"> +LIBPATH"> +LIBS"> +LINK"> +LINKCOM"> +LINKFLAGS"> +RELEASE"> +RELEASE_BUILD"> +SCANNERMAP"> +SCANNERS"> +TARFLAGS"> +TARSUFFIX"> + + + + + +PATH"> +PYTHONPATH"> +SCONSFLAGS"> + + + + + +allowed_values"> +build_dir"> +map"> +ignorecase"> +options"> +exports"> +source"> +target"> + + + + + +all"> +none"> + + + + + +BuildDir"> +CFile"> +CXXFile"> +DVI"> +Jar"> +Java"> +JavaH"> +Library"> +Object"> +PCH"> +PDF"> +PostScript"> +Program"> +RES"> +RMIC"> +SharedLibrary"> +SharedObject"> +StaticLibrary"> +StaticObject"> +Tar"> +Zip"> + + +Make"> + + + + + +builder function"> +builder method"> + +Configure Contexts"> +configure context"> + +Construction Environment"> +Construction Environments"> +Construction environment"> +Construction environments"> +construction environment"> +construction environments"> + +Construction Variable"> +Construction Variables"> +Construction variable"> +Construction variables"> +construction variable"> +construction variables"> + +CPPPATH"> + +Dictionary"> + +Emitter"> +emitter"> +Generator"> +generator"> + +Nodes"> + +signature"> +build signature"> + +true"> +false"> + +typedef"> + + + +bar"> +common1.c"> +common2.c"> +custom.py"> +goodbye"> +goodbye.o"> +goodbye.obj"> +file.dll"> +file.in"> +file.lib"> +file.o"> +file.obj"> +file.out"> +foo"> +foo.o"> +foo.obj"> +hello"> +hello.c"> +hello.exe"> +hello.h"> +hello.o"> +hello.obj"> +libfile_a"> +libfile_so"> +new_hello"> +new_hello.exe"> +prog"> +prog1"> +prog2"> +prog.c"> +prog.exe"> +stdio.h"> + + + ++"> +#"> + + + +announce@scons.tigris.org"> +dev@scons.tigris.org"> +users@scons.tigris.org"> diff --git a/doc/man/scons.1 b/doc/man/scons.1 index 690803f6..d26abdcb 100644 --- a/doc/man/scons.1 +++ b/doc/man/scons.1 @@ -31,7 +31,7 @@ .fi .RE .. -.TH SCONS 1 "October 2004" +.TH SCONS 1 "January 2005" .SH NAME scons \- a software construction tool .SH SYNOPSIS @@ -1010,7 +1010,7 @@ have two functions: generate(env, **kw) and exists(env). The .B generate() function -modifies the passed in environment +modifies the passed-in environment to set up variables so that the tool can be executed; it may use any keyword arguments @@ -1293,7 +1293,7 @@ to add a specific flag when compiling one specific object file: .ES -bar_obj_list = env.StaticObject('bar.c', CCFLAGS='-DBAR') +bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR') env.Program(source = ['foo.c', bar_obj_list, 'main.c']) .EE @@ -1340,7 +1340,7 @@ by passing the Node to the Python-builtin function: .ES -bar_obj_list = env.StaticObject('bar.c', CCFLAGS='-DBAR') +bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR') print "The path to bar_obj is:", str(bar_obj_list[0]) .EE @@ -4998,6 +4998,10 @@ env = Environment(CXXCOMSTR = "Compiling static object $TARGET") .IP CXXFLAGS General options that are passed to the C++ compiler. +By default, this includes the value of $CCFLAGS, +so that setting $CCFLAGS affects both C and C++ compilation. +If you want to add C++-specific flags, +you must set or override the value of $CXXFLAGS. .IP CXXVERSION The version number of the C++ compiler. @@ -5582,7 +5586,7 @@ target being built. .IP FRAMEWORKSFLAGS On Mac OS X, -frameworks options to be addad at +frameworks options to be added at the end of a command line building a loadable module. @@ -5789,13 +5793,13 @@ General user options passed to the linker for building loadable modules. The prefix used for loadable module file names. On Mac OS X, this is null; on other systems, this is -the same $SHLIBPREFIX. +the same as $SHLIBPREFIX. .IP LDMODULESUFFIX The suffix used for loadable module file names. On Mac OS X, this is null; on other systems, this is -the same $SHLIBSUFFIX. +the same as $SHLIBSUFFIX. .IP LEX The lexical analyzer generator. @@ -5844,7 +5848,7 @@ for specifying libraries to be linked with the resulting target. The value of $_LIBFLAGS is created by appending $LIBLINKPREFIX and $LIBLINKSUFFIX to the beginning and end -of each directory in $LIBS. +of each filename in $LIBS. .IP LIBLINKPREFIX The prefix used to specify a library to link on the linker command line. @@ -5930,7 +5934,7 @@ appending the values of the $LIBLINKPREFIX and $LIBLINKSUFFIX construction variables to the beginning and end -of each directory in $LIBS. +of each filename in $LIBS. Any command lines you define that need the LIBS library list should include $_LIBFLAGS: @@ -5939,6 +5943,26 @@ include $_LIBFLAGS: env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE") .EE +.IP +If you add a +File +object to the +LIBS +list, the name of that file will be added to +$_LIBFLAGS, +and thus the link line, as is, without +$LIBLINKPREFIX +or +$LIBLINKSUFFIX. +For example: +.ES +env.Append(LIBS=File('/tmp/mylib.so')) +.EE + +.IP +In all cases, scons will add dependencies from the executable program to +all the libraries in this list. + .IP LIBSUFFIX The suffix used for (static) library file names. A default value is set for each platform @@ -7933,7 +7957,7 @@ which verifies that the specified path is an existing directory; and .BR PathOption.PathIsDirCreate , which verifies that the specified path is a directory, -and will create the specified directory if the path exist. +and will create the specified directory if the path does not exist. You may supply your own .I validator function, @@ -8219,6 +8243,15 @@ env.Append(BUILDERS = {'MakeDirectory':MakeDirectoryBuilder}) env.MakeDirectory('new_directory', []) .EE +Note that the call to the MakeDirectory Builder +needs to specify an empty source list +to make the string represent the builder's target; +without that, it would assume the argument is the source, +and would try to deduce the target name from it, +which in the absence of an automatically-added prefix or suffix +would lead to a matching target and source name +and a circular dependency. + .IP source_factory A factory function that the Builder will use to turn any sources specified as strings into SCons Nodes. @@ -9006,7 +9039,7 @@ ${TARGET.filebase} => file ${TARGET.suffix} => .x ${TARGET.abspath} => /top/dir/sub/dir/file.x -BuildDir('sub/dir','src') +SConscript('src/SConscript', build_dir='sub/dir') $SOURCE => sub/dir/file.x ${SOURCE.srcpath} => src/file.x ${SOURCE.srcdir} => src @@ -9620,36 +9653,32 @@ subdirectory/SConscript: .SS Building Multiple Variants From the Same Source -Use the BuildDir() method to establish +Use the build_dir keyword argument to +the SConscript function to establish one or more separate build directories for -a given source directory, -then use the SConscript() method -to specify the SConscript files -in the build directories: +a given source directory: .ES SConstruct: - ccflags = '-DFOO' - Export("ccflags") - BuildDir('foo', 'src') - SConscript('foo/SConscript') + cppdefines = ['FOO'] + Export("cppdefines") + SConscript('src/SConscript', build_dir='foo') - ccflags = '-DBAR' - Export("ccflags") - BuildDir('bar', 'src') - SConscript('bar/SConscript') + cppdefines = ['BAR'] + Export("cppdefines") + SConscript('src/SConscript', build_dir='bar') src/SConscript: - Import("ccflags") - env = Environment(CCFLAGS = ccflags) + Import("cppdefines") + env = Environment(CPPDEFINES = cppdefines) env.Program(target = 'src', source = 'src.c') .EE Note the use of the Export() method -to set the "ccflags" variable to a different -value for each variant build. +to set the "cppdefines" variable to a different +value each time we call the SConscript function. .SS Hierarchical Build of Two Libraries Linked With a Program diff --git a/doc/python10/MANIFEST b/doc/python10/MANIFEST index 56a94d46..e962e6a7 100644 --- a/doc/python10/MANIFEST +++ b/doc/python10/MANIFEST @@ -12,4 +12,5 @@ main.sgml node.fig process.sgml scanner.fig +scons.mod sig.fig diff --git a/doc/python10/arch.eps b/doc/python10/arch.eps new file mode 100644 index 00000000..1fdd51f4 --- /dev/null +++ b/doc/python10/arch.eps @@ -0,0 +1,134 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: build/doc/python10/arch.fig +%%Creator: /usr/bin/fig2dev Version 3.2 Patchlevel 3d +%%CreationDate: Sun Jan 2 01:21:05 2005 +%%For: knight@casablanca.home.baldmt.com (Steven Knight) +%%BoundingBox: 0 0 218 182 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 182 moveto 0 0 lineto 218 0 lineto 218 182 lineto closepath clip newpath +-215.3 324.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit + 0.06000 0.06000 sc +% +% Fig objects follow +% +/Courier-Bold ff 300.00 scf sf +3825 2925 m +gs 1 -1 sc (scons) col0 sh gr +/Times-Roman ff 300.00 scf sf +3825 3225 m +gs 1 -1 sc (Script) col0 sh gr +/Times-Roman ff 300.00 scf sf +5100 4875 m +gs 1 -1 sc (Build Engine) col0 sh gr +/Courier-Bold ff 300.00 scf sf +4200 4875 m +gs 1 -1 sc (SCons) col0 sh gr +% Polyline +7.500 slw +n 3600 4200 m 7200 4200 l 7200 5400 l 3600 5400 l + cp gs col0 s gr +/Courier-Bold ff 300.00 scf sf +4725 4050 m +gs 1 -1 sc (SCons) col0 sh gr +/Times-Roman ff 300.00 scf sf +5625 4050 m +gs 1 -1 sc (API) col0 sh gr +% Polyline +n 3600 2400 m 3600 2400 l 3600 2400 l 3600 2400 l + cp gs col0 s gr +% Polyline +n 3600 2400 m 4800 2400 l 4800 3600 l 3600 3600 l + cp gs col0 s gr +% Polyline +n 3600 3600 m 7200 3600 l 7200 4200 l 3600 4200 l + cp gs col0 s gr +% Polyline + [60] 0 sd +n 6000 3600 m 7200 3600 l 7200 2400 l 6000 2400 l + cp gs col0 s gr [] 0 sd +/Times-Italic ff 300.00 scf sf +6300 2925 m +gs 1 -1 sc (other) col0 sh gr +/Times-Italic ff 300.00 scf sf +6150 3225 m +gs 1 -1 sc (interface) col0 sh gr +$F2psEnd +rs diff --git a/doc/python10/arch.jpg b/doc/python10/arch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e69437b7ada0b9abf98570ea802269cffabafdb GIT binary patch literal 22004 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 X;{OPXpk#k^U&}wf+a+`;4R`%t{&*5u literal 0 HcmV?d00001 diff --git a/doc/python10/builder.eps b/doc/python10/builder.eps new file mode 100644 index 00000000..db87afca --- /dev/null +++ b/doc/python10/builder.eps @@ -0,0 +1,325 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: build/doc/python10/builder.fig +%%Creator: /usr/bin/fig2dev Version 3.2 Patchlevel 3d +%%CreationDate: Sun Jan 2 01:21:05 2005 +%%For: knight@casablanca.home.baldmt.com (Steven Knight) +%%BoundingBox: 0 0 668 290 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 290 moveto 0 0 lineto 668 0 lineto 668 290 lineto closepath clip newpath +-53.3 342.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/reencdict 12 dict def /ReEncode { reencdict begin +/newcodesandnames exch def /newfontname exch def /basefontname exch def +/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def +basefontdict { exch dup /FID ne { dup /Encoding eq +{ exch dup length array copy newfont 3 1 roll put } +{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall +newfont /FontName newfontname put newcodesandnames aload pop +128 1 255 { newfont /Encoding get exch /.notdef put } for +newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat +newfontname newfont definefont pop end } def +/isovec [ +8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde +8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis +8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron +8#220 /dotlessi 8#230 /oe 8#231 /OE +8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling +8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis +8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot +8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus +8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph +8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine +8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf +8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute +8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring +8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute +8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute +8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve +8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply +8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex +8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave +8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring +8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute +8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute +8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve +8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide +8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex +8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def +/Times-Roman /Times-Roman-iso isovec ReEncode +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit + 0.06000 0.06000 sc +% +% Fig objects follow +% +% Polyline +7.500 slw +n 2700 1200 m 4500 1200 l 4500 1800 l 2700 1800 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +2925 1575 m +gs 1 -1 sc (Environment) col0 sh gr +% Polyline +n 2700 2400 m 4500 2400 l 4500 3000 l 2700 3000 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +3600 2775 m +gs 1 -1 sc (BuilderWrapper) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 2700 3600 m 4500 3600 l 4500 4200 l 2700 4200 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +3600 3975 m +gs 1 -1 sc (BuilderBase) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 8400 3600 m 9900 3600 l 9900 4200 l 8400 4200 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +9150 3975 m +gs 1 -1 sc (ActionBase) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 240.00 scf sf +4650 5175 m +gs 1 -1 sc (MultiStep-) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 240.00 scf sf +4650 5460 m +gs 1 -1 sc (Builder) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 3900 4800 m 5400 4800 l 5400 5700 l 3900 5700 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +2550 5175 m +gs 1 -1 sc (Composite-) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 240.00 scf sf +2550 5460 m +gs 1 -1 sc (Builder) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 1800 4800 m 3300 4800 l 3300 5700 l 1800 5700 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +7050 5175 m +gs 1 -1 sc (Command) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 240.00 scf sf +7050 5460 m +gs 1 -1 sc (Action) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 6300 4800 m 7800 4800 l 7800 5700 l 6300 5700 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +9150 5460 m +gs 1 -1 sc (Action) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 240.00 scf sf +9150 5175 m +gs 1 -1 sc (Function) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 8400 4800 m 9900 4800 l 9900 5700 l 8400 5700 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +11250 5175 m +gs 1 -1 sc (List) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 240.00 scf sf +11250 5460 m +gs 1 -1 sc (Action) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 10500 4800 m 12000 4800 l 12000 5700 l 10500 5700 l + cp gs col0 s gr +% Polyline +n 900 2400 m 2100 2400 l 2100 3000 l 900 3000 l + cp gs col0 s gr +/Times-Roman-iso ff 240.00 scf sf +1500 2775 m +gs 1 -1 sc (Node) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 3600 4200 m 3525 4350 l 3675 4350 l + cp gs col0 s gr +% Polyline +n 3150 4800 m 3150 4500 l 4050 4500 l + 4050 4800 l gs col0 s gr +% Polyline +n 3600 4350 m + 3600 4500 l gs col0 s gr +% Polyline +n 9150 4200 m 9075 4350 l 9225 4350 l + cp gs col0 s gr +% Polyline +n 7050 4800 m 7050 4500 l 10950 4500 l + 10950 4800 l gs col0 s gr +% Polyline +n 9150 4350 m + 9150 4800 l gs col0 s gr +% Polyline +gs clippath +9885 3870 m 9885 3930 l 10036 3930 l 9916 3900 l 10036 3870 l cp +eoclip +n 11550 4650 m 11550 3900 l + 9900 3900 l gs col0 s gr gr + +% arrowhead +n 10036 3870 m 9916 3900 l 10036 3930 l 10036 3870 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +8415 3930 m 8415 3870 l 8264 3870 l 8384 3900 l 8264 3930 l cp +eoclip +n 4650 3900 m + 8400 3900 l gs col0 s gr gr + +% arrowhead +n 8264 3930 m 8384 3900 l 8264 3870 l 8264 3930 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3930 1785 m 3870 1785 l 3870 1936 l 3900 1816 l 3930 1936 l cp +eoclip +n 3900 2250 m + 3900 1800 l gs col0 s gr gr + +% arrowhead +n 3930 1936 m 3900 1816 l 3870 1936 l 3930 1936 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3270 2415 m 3330 2415 l 3330 2264 l 3300 2384 l 3270 2264 l cp +eoclip +n 3300 1950 m + 3300 2400 l gs col0 s gr gr + +% arrowhead +n 3270 2264 m 3300 2384 l 3330 2264 l 3270 2264 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3570 3615 m 3630 3615 l 3630 3464 l 3600 3584 l 3570 3464 l cp +eoclip +n 3600 3150 m + 3600 3600 l gs col0 s gr gr + +% arrowhead +n 3570 3464 m 3600 3584 l 3630 3464 l 3570 3464 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4380 4185 m 4320 4185 l 4320 4336 l 4350 4216 l 4380 4336 l cp +eoclip +n 4350 4650 m + 4350 4200 l gs col0 s gr gr + +% arrowhead +n 4380 4336 m 4350 4216 l 4320 4336 l 4380 4336 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2880 4185 m 2820 4185 l 2820 4336 l 2850 4216 l 2880 4336 l cp +eoclip +n 2850 4650 m + 2850 4200 l gs col0 s gr gr + +% arrowhead +n 2880 4336 m 2850 4216 l 2820 4336 l 2880 4336 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2715 3930 m 2715 3870 l 2564 3870 l 2684 3900 l 2564 3930 l cp +eoclip +n 1500 3150 m 1500 3900 l + 2700 3900 l gs col0 s gr gr + +% arrowhead +n 2564 3930 m 2684 3900 l 2564 3870 l 2564 3930 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 4650 3900 m 4575 3860 l 4500 3900 l 4575 3940 l + cp gs col0 s gr +% Polyline +n 1500 3000 m 1460 3075 l 1500 3150 l 1540 3075 l + cp gs col0 s gr +% Polyline +n 3600 3000 m 3560 3075 l 3600 3150 l 3640 3075 l + cp gs col0 s gr +% Polyline +n 3300 1800 m 3260 1875 l 3300 1950 l 3340 1875 l + cp gs col0 s gr +% Polyline +n 3900 2250 m 3860 2325 l 3900 2400 l 3940 2325 l + cp gs col0 s gr +% Polyline +n 4350 4650 m 4310 4725 l 4350 4800 l 4390 4725 l + cp gs col0 s gr +% Polyline +n 2850 4650 m 2810 4725 l 2850 4800 l 2890 4725 l + cp gs col0 s gr +% Polyline +n 11550 4650 m 11510 4725 l 11550 4800 l 11590 4725 l + cp gs col0 s gr +% Polyline + [60] 0 sd +n 3600 1200 m + 3600 900 l gs col0 s gr [] 0 sd +$F2psEnd +rs diff --git a/doc/python10/builder.jpg b/doc/python10/builder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9085e83d7911a21145c96f0bb3e6e29cc7d5d77 GIT binary patch literal 53107 zcmeFa3sh5Qx<4F5jDQ*x0Tp3et)il)tspI6cGXd8sm4o{DoWZ~MWC2zm6B@A77)Wl z%s93(#X?l7Xq86gHY#SD3t($CA_@Xia%+nUDSNjX-jcmH-xJT7^R4y&biV2Q&&)aN ztkbSkWbf?D`##s-^Lw5S-W#;={9a$ObP3PH!-Ka1{^bpJ@)o)O_J8${`y&5W7jS=h z@G5WgaF2yUe)RO1%o{S=!*jI9ppl31cphH=c5U9j|Kl;lbEwxa{%~&}UpS%0k2l1_ z({spBPcN^bL*eY*aGW=EwAYyDUR*HDf8{&;$sde;DeK^|;Zqi#*9ELFcZCT(dUet##`+y|;Nw^465p?K?6) z%9MS)GiPt^K4o5h!5W^`}aTm*nR)OL;B}m9zAyUqhANy@8!Ys{EsF3w-@_A-fJ|x*N~w@ zJ%{q$@8vNh6F#1!hk8Bt;;=CbR`TEZz<=^fS;NOJJb3K9&U?z-RaC&cA2$00J|AJ7 zO1od}$(#LsFP8lez1e@f*#G-p9lQ~q9UtM{DfhnED);I5Hb^vu_R?g_gIr4% zTh)P!td3OzuLo^qvzmX3EcFqGcHBd%2Lu1iYyaIZ`1dZvKkK~kUp%ciGd9geG-0{w zk)lXu_8>2Nqr%KhN1N#!>mV;jF+(0rM={d~>WxZ&Zj5k<{8j45BR13U9`at-WH|dk zO6a89cnyP}c`%@KZn=CSrKCaGA-aD0fivN}I6deAEB6@W4J{qyeX@?wMGW$Kui~2s zHd&&K;1P!R6wQ)H`R2|+-XL#O6f@@fAn)Y5IA&g)BVdsCS}98o@+do@n?(+6{p}6KdhC;DTuDMSzl!|>xB1o6hIfQJzq>=E5;?@!Y89GR>=@*|L&fXNRf9aoY>OZd zA4OU-2wmiC!a5UG(BU>=Z>dd~qm3No?OoEw`G~kNZMfBgD%PtGlms!)@9a93X2X33 zdHQd-Z>gG3xzFs_IB~_ULEcke>0kM}|G=t-;;#AfG)m)`LHSw;$9T&|+&Dp;t-$3N zN})Bn4oTtc9X(h;iZ%e9wp75Awd5 zMOsP-=iAtMlB?1fN?hEtj__O@S%%$fa^8S%{!wv98^CJoGwhm9nvcSqzHHqf zFO_KbZxp>qC-*L3evs!ipPF}&YB3D#J7^2Ov3lLD zn)n-V%C^$ue=$pB=GC=-T$hd?d&s?}9XiO0mP>fRCB8D@sUPzQxHAY8j_8q4x z@?yPCp_84)=y_+3p^o&WJI)Erj(F#H$jcRp60Bia1ngf&pK}uObgg`7<}-YoDZgvf z9jyont&-dfVSps%_Es)}j?#+-@>F_D4n5`<3)^j6=G(YavgfhdZ{63Y{*uxWaX7l> zdQZtmXU2*KdF6^*B(FY>E^bg)sg>H78LW-iihIZuoegEt$iG}3PbHnEi*<^C`W!>l zTE#Rv+29+JN(9Tc8~WFFMNkRsgS59 z8qA$aCq{9V>8_=O?q$&^Swe$km?8l6Sdtqw`=pgjID2f6XF0}&Vdn;U1!h~H(KIxU z=G%u|bcqyqh+#~)9S=!O3TP(ZBSM*lEehdidaf?XoA7ziQDMZ!k(N*K+T|M8BtrMR zJkcdYhq&=-=K%XT`JNz$q{QNmLk-b*VegI`$*-}8MbVsz3qnDz1*spV5hLmoESJqi zm>>QwmVeT{Xxv@Cf~hL0-w%gS^E-+!h=yIdcoQTJdv2 zW~K=xsj0u<7x>H!A$kj=PQzC|APn*Hpg~^lxX?EZ{XJTgkBF;u#Fr2M zVf7$yxYS89&lA)E!r14Ea?NFDK2eUn+}Bu;Vmg?`-P9rHR<;zc(vFu&xZyb<+pn;H z6pj50+P)TrQE;V4?nJ{3^pi8dRHR*rP|)tyV{i|3v!M_I{WM?1_^(V_rAIPy1lr!b347= zxsqyfETA;Y(F41ld!ktacmv&E_lzf0JO=jDI{ymy*f&x!-Hc*U9-?!JC--d!xUo? zrYD19XO?6tA1mo71LlX+4JAnj?PkGO2W=*whec=6+F#bT6fdWR%D$p&wXHiIY!ky* zYx{a7)OI~NLY_fqIxn+-5(S_zd$O{#K|M^qiN@@GdbKA?uyyCIUQTi6xM^sU4f97; z@wa1lSs&kyU1#06vPSLGmD=&)gRZF*OJ5A^xLG>e^drAF*fpKIHOQ-~JAhl%6Y2`! zy-5KxovKmm26-s_2aR!%r^LNtKc)^Pp=8(Chj^XPQRBiD9mEiYPwJR?<TMz3h8cHy~Et=iby?m^xrb$gF<4_i`CxJIE8gEJUq zS;&3s;}}tbwe<>h=4$A4_74#%^d4Nh(@cR7?HS}%OM9E~B6-voT=RtFtj&n95_?F& z<23acS*CMqt0E#T)R((fMU~}PLz0~FzI+~wqeKuUZ#GNuGU{815~d%CSe`b3m0L5zG#0AwcFLg5!b-nIDW+a3FOCEqe9J01CLg}ymr1f3mYY3M1 zs<=Qta|jmlE8_d4LEga_Zl?6tA%nb%gzxz}Gf&a>5l+E6QwKRcSXPZOt&0C2rH^kN; z$4GndGAT&OI6M^_i-H=HCexd*@%#G0uO9<5(m?mN6n#f*)&yg`7FT(slp4Q_lq?P*IeXsWvwr=64?XnG4t?IEiTA|gLF%-N&% zlZA2qQbDI|mravhA7eiv7%BTnnydDU^{|QkWpVm`?IfGkA(T6PRJW=G}*JyK);0V6Yn$atB<$6DrkQ={rDcyZw_2s+#VnJ;(yBz^5nc@26@vj zKunb~$ZOxDXdL7X+$2Y(^$jrZuz6acqE%fb>6N%9D{d;H;jFb>=RjSNmIuKOPwOLV zdXrK&U}#!MzdJIKhojY2dJo?#yXGGthnoyPVG16ItKIlkOlKXMr;W{~AN}SE$XHnIY zxUd0i$yB~FHr$H)pzX^qw#F{9N&RKYx8UrO_6HLL%15&&-~8px){N3sKesKv{irAL zNKen7W*c|w_^vMQv2^Ieu1Pc~q5V(;SS;Oq z@G)nW(FuAoFKGr^N&6c_(@-WY;e7ZYlVyH1f3Ik=EUY0Zpmm2dK$fuNPWt1J3Evkc z*Y4Vte&^2Kt_43GQ)X*n!mU-|~Z-~!mSryj$t7x1l`f#3B(;srh@nDgE| z$ZMH(R6yQ`9O3B)H5l@QjaouSIpV1_YoCMf5)rznL0&poJM}Pbrc8nP%ODvUk3NH> z^y2QAgqE^hg~8X;j>Pn#8B@zN$7DGR@Af{%MxiRb;<=V;b$~3YVg2$dt2p3(M^t`9 z`s(;<9xFNSj$QU$V~>*${7DGZxrtIVwRn*C#sw96U)2%L9gJ}i5UGFwX0Ib2U7zmR zHxOkc|JCmN>Ir(0XeakeE@U=Hy_k8oNbAdVI>}7Z&aXxD zMHS`uOK?Y6IrBU^Wa%pmoy8uk-&l!`tY~4T9%pd&TrpR#ZXjd z3-6nV7Bz*AscV%7f5j4ud5Yf?I-FTnp|~}mYBG0r>RP)dQEfW1qu&_H!+Ej7Q%Kw( z86jyRhH1Ug+U~2OiR>BCB<3YrQFQVl#k|d)h}@;}Gg*oJ3pc~ScMg-suvro8CIjb3 zhh;s!GEC4s@V9K%6C4Rn@HuUFJL{2z<#VEz$kTeEaOWPnzwx^`Cqeh`5skVpxzMeQ zjk9SEv|?kq@CQ<=&e~rjA9+$HavBSH8&R7;}B) zokuYnMLj>~a3kkJR#w4`c3n;KLfzCMBj&S1wNE`xG&P0f&52!R5l)Z=uSBOQU)%2D zz2sKYD0yP-k%pgrr4wa@Q9BQ{)BJc!t&#^Mzhk+Qtk;G%pM8JRoygr`iEWY62Rolc z`%g)d-8SIAX(+Q3&Fkwg8vd1bvW;o5)&7R_vQ;>8J?}>*zEV+64 z6e?T}>Mv=(4o{^w4e63+Ql*dkvtxtO)4(W!P zH78RK?@a#bF>mb3#XPrr8k5Pb1mioj1rh@uTQtafT&kGZ27kk}kmWmfph()+p0Iz% zAkQzYBW_PUKJP@brEl1JccLrI7tO3MGsjUvy*L-*(8!IWIveqEBB88v6|5V!S2Uz> zP1PMaLC``W?ME zgvDGS8CAb*kms#t{KJ0-{<-ifM60iy1b-FX=ZwlDE#)O(-Bk`k@NhtJjQ#AZ2kW<- zf5)l1@NnnuPkUE)F20XZ?O1gJJ2}(o_N)fj&!G@9Jvh7)es~H_8`;nD+!*f2gRaHI z?Jzf@!@O*!;)UF2o1b;51oNX6e8@qbd84OYY&T#I|H3=T0E>Q1Yar9AxGDs3t4_{x zOK^(F8?h8&t!O0qDT-M&EobFxPC_zWk^M*#BHJaVBM+#)?CDsn&YSh9=%btFbv3si z-$-6wcW2YZeNAibr2jGe>nqvMGIoCrpZ^v6JU~D+stY522$WFEaMufhdk}i9YqQ?q z{b%mWc5W71A$md9uh&kaga=5A3acID6~+47#eyD4pjA2b>uhESQuCN_z%-C*`Nd{t zkyY(4+vN^Y4|b(Y=vO}eZt~B+#JBE9Uv;x*`Q3<~Ge?4ZQXCbBr$LOm2j>x%!}BE7 z35Brz`tjZHF&`&x2 zH7Jw^waj5MxTN{odGuzrLE})5NGY45yn2`msiUJh zK{G>hPs)Db0tAibp)yZ6Iov$@;ZjQ<1|~h+4XPETXJFoGC9Ov?0Z_RhZIpIq>daJ~ zb}n}tqn3(0IJ_gxxff-9P>FsrSyfF^G_As@R!T-H0%d%M!iO#6yqH-K=&SH;nti07 zki$@nl|8HWk6rggT4>NM=9LWBY9@_6rI;?8qVF2jtO&1D&cdaqjtZU?hL=A*q6bIM z`;F1QhP;1NfU#vy{LClFi^84zsX1!f$S@s_X$4FKYO^?m4Tmpfs0ymhKFpg`QlVWV zNa3cPZ+^US*K1X@SJ}a@+B&HdJ-k$OVe!XN=Mum`Ej9nT7&b-B zee3Cr8sxQRpzRXkmdE0;EB>oKZnOE+r)qoFfm?jsc3m2fBug;1D!f|dxYZQAQAVt* zr84v6>#U`5fWFSjEU6~b&Q#sCaR8SuN{&lRq#qKPol#L}7y(-r# zW-ePyrV7R@zMjwxX^*dL0=9o=cYbV$O|TaqA7S?1iiZH2s2-;P+|C$Y7ooYQq%3|@oey5JTqMfh!78{a5bR@ci4RPLps-UJ+ zx}5!7F>--TQ`F@lE!2)fo2)O=M{M0ibG88pZ5nD4efnVw8sx3KBTvC|>X+F|aRV1{ zdyZPKoj8yKF`d;czP|3KLqF$Og*s`c zuX6>0V?#I7KNY)X%5v;KYFsaZZG1U)smqVMiw#o*%QvF&R?~g}kk`-xtGaikZ5KrG zQ@L<>_^bF3MK~gKgS;`srXzj1U9Ys9<>t#0R~88Jqp<^wPnYO+L`d>-DTYS7rf@CT zg$51dpI|qtDX~Dw;a8AwkSACJ=Igq11*=v}=S-WLh;w~Rtkij+nE+sBFBrh1k?Q@k zp>!xL!mW#BLHbL@y#$@W`3dtSKHS&k%<5K+Vho{gK%1qN4=x?$gX_9b$BY$Qx74`; zWs980Sq+{lX!pF@h0#F{57!FD7sA7)%DIhY6H$okW#(;wKEqwhxm!4&n<%TWrkjm@ z`^nMotC-pNK8cqNeOht@q!(H193gb4GmWj_URIdYW9xBnP_H43CIL01 z>YTUWMS6dri!E)r#QP+gu5pC8Hpv#*Xa877nVd~%vnxuz6V7Q=<#tU%P?L5ZL1WC- zYY$c=>NW#2qJI^We#rVAsf_ht1&XW0h#FN6alWp%pK98O07Mw^^)8TUrE}+dSXCVp zp*{fcF^N`9h>=LTWSLee6A@%gOqBY`IypbJ;4cr#FwWG{xsnRoqi{p8cI&pwHsQXc z(bRz}r+K>xFqQv+$$Da4pAnycyM4wH$jPDh2k`|n_Rv)cwMu*dJ0Fy#0K6TfJIJE; za{nNj3jbXy524eXx$F@|EZVNu`coRED7Hs3oS9E4?MhVy(fLQyYq#Y1v6R4%6jM>L zYgvlIzow=7N_5-$*7p@WUHZ`VsVo7z_B})?welhCC8$@J_erX|57a=C1(^_5RG&f- z_9%z19owUr#U7Ohxl!^t;H4yXwNaDBJ%{YJ^tiWfa}!f(IaZi}KKMBEEE9h>*8iwX zXxLeF*QAuzoc?LYY3VivkJS*HNKF1F+^#)|yF17Wf*kOZvPtY^xUtFG{bmtZd!pf^ zfp6gF`LVkyQq7py!520@LWNd*A5kN8yh8ol9S@?hFV^3t8Nifx^QMi zvqw9LHZ%S)&JWn~`b?Lv>@B`QjD~}H81L?~rsk7Qi>(b0ri@C$xNl^P_(YNt)#Fn15{YM13 z=9)HUa=(OHF<ldDOWujPsZ9o!wrR!f}}~P zlomI1VbZ(_nR$51pS6JxLtnViCJ(ln@+LHXb}V&*z+fKM)pOl?O8Y9B;u3MK(P2zX z)$8ap%99&y_LKQ?J|HVz@$7kG>&RrCBtQ`?>$WC?5gj7`0G9MvqI^bG6+N$}QZ7PA z=qX%aZl9xw()L^p3JpRt0?%)@UdKm2#Kto(QVGVu(X!=s6DL&MkW@F;(YTH8z|veG z5Bl#fAaH|TS|oLCLSpAGy2&VR?~A9+je;zZ2Z+vQ`3vkGhc;F|vA$I05`g ztg1Y$dfG86&Zv0dR(+yXGD_CeC>me2Y_7F0>v820!n=d@unEz0aj&mcFhm}WPS{LP zaetK}4Z{5xRZQr=K!r9TxL<9)MO=VWn#XyuF?KUbNSbq}J}n*OG?>u)+kB6t`!<-V z{SPNV9dBoYal)1=XL$RjEONLamNSsGZB1s?Jaz4Wd^i~25Q`e%?l@*8UFG&xtiXAN z!h2g>icc>Z$FvnOeMwywJeSWfqf?Uyae?}P<@n^yI2l2DW zt-LC7f*hZ|qvAc+gCat!!Q!v%s1rZC}0e78mrLOljYyu8=3H zd)Jc%k2F~a(T}^stjR|ST?%O_9_0B$?U0LL_hdlu5Gthk*^$IPY@BGGd@N#ZMYsg* z`r<)X2%CeyFWHkc3#GZXJe;sbc>oO0qKkJSIaTYR&eoA-rAA~*YdyJR3 zPv7|><$`<(lHO8)5G_-Ma5pe&4S}Y|Ip)R??{eRg0SrJdk_%0HnHXCUwxPKRh#^bx zz3WZP*yN3H2`Ezi-pO*(ue@^5N+U>58^kI$F_QL@#- zzt0_UZQ~jSOa78$iH&BS9JiYTw(4g?~)tm?VML?VVAttD_^v|V#6il$Dp1vP$qEDRa{U76D8=) zf}i8v1?QOr+908zz72MCEujb8Ztr%^Ux3!CsdJ=LUIsv2phFV9p1pi)}v^+r)vW$N9?L3Yxeo zRN>TW(*dj|MCA~;#-Z&^5`W+e^d+zrgS=#uQZbnl82fU|g4mh}O?!(@;fKB{n?Row z&D_95)+4c9`iI!nR&_zwD8TYO?4|;YTCVOO-n=cEL+CQA$&OzvCY_`}J(h$Vc|YMF zyZaQt)=_pcyQ^PcqR9vOG-1pOs8E<3P2Ld*=Zeh#1->; z2f6oA-#(EikL6m4bn`vZpdMBq=2{|Cx+xVvH2tMXJLw{&&Qipr;lS2-Kn$x-v7LE^ zS(f&(Rqf4)we)+T-ZYjsdz(DS9=xkGIIc|?IWCM+=N~)V{@$&O#WnYF>sey63a!Mc zI|S@N6+|v`h3rHLGe@kHP{)by!8zn+4)UgEa$|6mFv$CP1#a61%m5`9hoO_i_mNzV zWDiu@R?|UNO%dn8q@fd_cLUtbJCODWk+9!Lbo5x;dSfgCKkj;H1gdz)T`XtD;LZY+ zX2lA$k#}PkLzLgvd!k%%D>Mw9aLs>+)td7<7or}U1}&qmtdGzCes*gq5R34EECkPbvLlbI>b(@thjXnpUO4MpW3-h;fiatzw} zu!b2nM|@)~Bm;HKbD~KXYj4$Wgk`vS>@-Mp)Y%OSPNw1SUOD`7aL)iIBmU)9n*V72 ztJu@QxMv5uaO735u`B<}K7ZqZ_v7b-8u~g~Ac-j)_uH#JG9*C8HTOV?e++H)*H zI`O!NW&Z9>8fwr|U!AaNatR-Km__3EFm$}O6}KE87^V5x>bfCWSpVnduWFVFmfYDE z@nH5z?d|HG;=?yFuoX|Q@&3&M@H3Dnca4d$(8-P-ItPpZ9d)1{T**)aTgSMw21Kl* zllRL3`hd5gUKaq_Pp=4|ek|R7R;Dy|{X5Yzvg&pOCb++Tap{kz&-O&0_~EP46AxPJ zqT1SCNL(=MOt%}Ou$&4Nu_r|19}q!`(ZE|KEad}r*%^>bfgFDDwe4$&>C2!b1c>q( ztHdZA%S=c40EWtA5LjI=PfBbQ50~ZWvC-}b-lr!zs-Ql+Jayi{fuau=S9Q+6V!Vo- zdE^GJeiO3J16f-9TQU3<9^o=x{Aq=>{ z?`@&#+@_=Y(QYZk#~}=kgcglAy1bBUr+zwi1`!F|HG0^=Qz>9hb_Sj~eZL=EgKO<) zr;^&^y}l(S|AxRlBMWq^%s*cO{eU9#n@jec~Dmp>G3o8biNpu&SA`WNv13T^^>3Hs#AhPWD9i zUOHKRRF=?~G@o*2Z9kb3I-mZu?Bb&*Ee%hrU_DDMSMbgMfYLq-2fl_;Vri~625_z+ zoWblRnz2*^zfmA*wdR2ZY z6ZWauiessl%2b4ts7Wcwb$oJe!}Z7Pld7+~^7~);k!QJfGP5DA6}HFN>aw|Dc*D`#G~ZfW_$WOpK?&f;j5B|c?IV1dWrsh&fj2tWYVP%} z=n2IrWqz!n^8O17)iW^rS23b_@mSumquIrT?se_hx*ToL*W0a_iX0m${O%$0v_&x|qTDr*DjuA4nCMvy#Y14u{kQC9 zavSDnkfWY)#2q&L{}lP3y$0OdWI7~RGsp(K-OP;wYnrW4e7zI&2mrE7E>H?))n>}& zM$?&lfZ1@M-}sT*7k}TZQdfNrObf+a)MmYdc}Phs09*T#;WHip59w$md4pEvGq2dB zxy7}F-(z#WdIWi%S#13-YGC*Opk9~%lSo6pAo72LF@`Z8pmkJ>U808)aU1w9n`)nA zoCrfvwqk?EpU}fv4gIDWw@#+QjDk@q0K6Z#%oe$kqaP32Mow`7n@y`eMQlmCwDz;J zZ|yGcy;P>&ylbqpS)qQG?)__8$ezLKe3sLC(y3+=H1>JQ-$vKLtP5uL1T#ceY&Y zT7|MZmk{I8rj=B&(G-l5*HYirp7}ynY@1rzbpIJ{^?w`B{!<&z1b@J{N;*1vESU}X zUbR>36jvm73#)E2n)hP@ZmxV)Gc%VGu3$gkAx3d>Zz|kK42=!5@6K$9HaVViEmD}u zFx9s--@&JP#LW?=Q4h6KT7_KmneW6E?dwuL+;ANdk7s2AbTGH-h?_Xtz6XFi{PA(p za;WBiD4plGrZ<0^qLctASyfvj>BHSt^R#@fxy-ADS?~q4+4O@R?o&@-LQbFyZOhNo zYmZnZ1!ca?@(im3H?~HL&S+8s6_cuNM|Q^S-qIG|7Fil?UU}fh;E;rswXbQWL4EsK zJoT->68s-Yt}x8KZW_Q$bM5v`B!*?le;p=!>?p!Fo3X6v`@=({8Bl zKhoXwa~i#_6WI07>UOp<7K1y!2NN^wSSM<63+Eno<4MJ9RVb+;k&f zpe5052kMtW#?WbKv0c+S zp7Ezw8wMh8RtA=zWnQKWqH^UQR3vUdn~XC%mYkLich|tZz?kfjR9EC?2tpJ$iHQmU zqo9@_viWMfAC|oc$h%NS1jL4)L|-;7zg<(4&~ymcMRTzHzh z*wEjRsay7LlN-_&MyNVg8z*Q$@spRWYJ)DpBSkUx{(@>@Knmy87CV<(HGl=quWJzd zZS9(Ox0>XqUW&@v+*T73)3E-q+S+q{YsRkYyI#SebGe)I{@V4bEX+tyOJC!>xvM1A zE7*@+h=V5^at~s=1;qP(4s|>9!z9Z54VW*`+T!ha?|DFNHO@qImtNoRJPelfG&=Id zdRadgq;$lbME-BFrKEKOfMuO%=YX=c2HXoBXX_}$X?mGuPpjKPz9M9Rs zqc-$lfwU0y#dmp!QCi=T?cjnd}w5QZZ zoswbeDFG%Q#h#2^12w-*tlBk?c~!{;kxZbA^LEfpdORHp@co!Gv)AOB25jK-(5%Sa zPMY$wXx@h1Dl1n5gprMOJg|^FAE-N_s9VmG7JXMvIOVvDM{g+`j4r8qj`jAG-7UW=%iik8wUHTvP6G*YI(3xNteNurmQc zOOXF8!jITIu0EW0EoZevs<@-O5g!q|&NBbq9_PWji&U|a@vx}(Yklay!0@ zfRv6MmkxhMxeWMdX7$@$p?`2UGHe#0aH&K5rJ@C+UWZV$&skgx-M7<0*xG?!5ChBo zrn%}4K3XxHS%;_YcoKKpOx?x(cNB_4!I)5N#SZh3G&k!i zT#XV5fn){J*}{pD8(17(bSU?ivMDV1hj%praxj6}3i;dAGz|qCguB+u-=SM8sJV8c zcY9E8yoJohs&T!zqsp=d_F#f+NfVU&mePmp%Dl+FG4hpA17FU(h0ePcD6Zd9+^#}) zo6wPQMn1PWcH|fG#kau)_#PG91>;5N77}ku3Sfmx;2A5Ql-%+qR3$98%GP9*pjYt} zX*TyFtT5l2oTG&u_0BYs6X4_+`^GqKv_#1TaLo`eTc^;6FFOUJwi41RuH{ap;_fg& zhtUkzLS_hiA~yV#tjD<>*?}|FpS?rvw^1g3lUC`(`3hfj+PX2SVQutBpPrS-l2_1z ztc=RPl6UX#JkeV8!N;NH(u%a`HIG`qPCwOtJ?dvK8*KISYKMys*AXK##Cvfs#S8M0 zl(_dI*xL3cTWG#(rlN%mC6Zr*N~t6$#q6OKJsjkP&L%CNVc>_DfJ|o;s?jKJeMFr1 z`n<$(qg(G-C>SOc4Ff(f!SSJmEOXr#pv>T+hII&0sM``pyK+z7?Dq2um8 zS{5Hq_c@l*sU{s!)nuq#GQ3y*F$^6jj#~SH*fn2bf?i{xb0RRBATFtM1;x9970q2h zy;cM(ZcD28z1{R>dtElO6xfIJQH`zA-+@OzWkv|_Mk|B{1>8KmSu#K zgwYL;q>h-T+oC|uOw^LSJ(hUYXmseUJF%^(H4O>+Wr2H_(_76C%u>dn!Lk}O#bhk{?V-Me^(Fk=YKfo zg;K#XNjaUt4{uvqYHLNp{8<`9q ze4DC6{VMta?q9-c9;x;vg|O;Jn%qEWVYOz;mm)j8jL8HqL`w=C%ytM&LtO8oZs!qt zSSiKU<2J{lS0S^UdQ3LuwPr_bTo4nsGr8cbFoW=aFahy<`i;_GUzfTkLv8VZAPv&$ zR&Zb0%iGM4Va!kncRY}=b7i(L-P5wr-8%hxL)@chTLI@?RH5aIYu#w z&}Z7ok@BtZ{dn1ye%q&gdzq!Sc=bNu`eoVE!qb+<5~t+PQ9*{?m=XL+*~FG@5!35& zi^*#%FwVH6f^Q+bNp|$vNfajSJ)aJls8~lL3GSbP=lMMt5E#zfNQ_H+~(&4#+T6_8U1Bu_`JjIL#i|q&b zD3H*fg=KjFB?lq60QV4{1or_PhVbY&TTN&UWEZ%*!m!uC1xlD%LWdCjjOkn5eks?TS_0 zgs+N%%!DpRA%slj_#>jj|4piRKhUiDeC5edr&`Jg*rTFpVCkvSE)?%1&<9q+CrvU! zTJMc3@nk%|Y*KM!$t*mmQa;0`$-|RjA%mRkMOgGDav7Vg6>^Q-B)YP$x4{KZNmum7 z0}q}=c2~6Q@=8`iz9Y>dYPt==j$PKiUXs3U3o@t+FlhL=;%OfW-jEw7D|YT6&$lT; zQLu9xWzL1NV4}Wchy;Z#L|JEL?|VMpWtTF6X`J_`)ZD9TAJLQ^yjI*h$g`8)@~!OA z*l<@A3SI{xRE||?Ob=l)&!&YAtEFMomc$=G3c_197Z&}h$y>e1OUdVWUuTX_M0aX@A~5Hzc|w%tGH?olqJMdQN}Av z%uXfpv~J9_PP+^vg0$1vEAPwKREA|M0)UQk@wTK9_sl4bp3Pr=M=>VlQeU22yglOZ zmY?x&1ZX<0Gr>?T=j949Ot1%uefNHWHi1H__7@n8xH5(Aw5zVF z+X3xccK9<}pDOhEJFzh?&@lZUL7cMK3djmYC|p<42cez6tP%9b?8|smrtZ}2lTXbY zmTOTT#ow2<_dCy{&*(y@4IQJ>EPUqqOl=T?Bz9;j9Rv$`0_yZOjX|p9CbD1FXTtCM z*~_9>#dk!2HbfR~ESXb7`x~(lcwIei7kbMfe=pQV$@o_%#4xMx^huMv72{J@F|U5^ z`G{D;KAE31nwbEco$=N_c-gnxh-8z8EW1;$h(?Zb`EIoOOZfy!QlJT=Zd9uG$=A`M zriMc(%uqJz(nY!=r_xcKzG*|%on$pkk=z%)Sv;9+&6Q%J6QFWQutjDTU*`N5ocF6lA&D)w|x)MXQncCK?ZfX@t}MHT6#j(%%41(vXpB~7MHGpzmW@;1!rxc5EA2#K4Tk23&Qpob*XUuV&v5r7)N(<)*|`>N z{!*4KfjLWIr??gpOV9%^I!nHi4*b!Tgqp0ojtB+JBueb?rDAklv*^sG6uFl@9$ufB z)heG)X$+)awaOd$n2dX1?%#Ammq?`UUhVu7=x+ir{i?6j^=8p=T=?*joK4+Z${vDoc1`xS{0O{|;4=gr=2U^$Re>^qxV?8v&Zm-Xt%rcUY3>Z2Ld7*g z1UTEwOb-0$kOJ(U;VteuMqPpJ!L3jFrBI4yAWDojsA2r#F5((2p07W*6y_@u)H(cn zH2{L(P$u^?`DS`GaV?0ACO`jIqg8`EJ`C{tp2mRw8X!Ak1FqyRc79eQu?MtsB}ib4 zU2vcV&r%0NXUCt&cO_noAA5`&qqwUca+cXlwdm*J)d_m>e)YuI1sd5Qo5~>R$h0*z zs5*R|Njc6>)lJxFBCRsfT9$7~pJJO+?0R`4PoaTwfRDdx2m@XLX0HWE9R}AV`RlOQ zZp&jN0!08{={;O9uZ>nQlW^bI5GRh}wNnucYBNuGh*Jd&@a&xjU=h8s{Wa!uvh9mp zyVcIJ6KT#WGtHnG_RbKP*iN8}~gI=Z|Zjimb%5S zo{HB1H%W3Y$IkB+ThxV;aS=Gy+0H1~i?M4U@!kx%AMLxAI=i!?L3#i>#Or;rMzUj* z+t2%@DQ2|BeITtT*$qyJqk@*H=pqjgSIj%h#515 z^Zv!I34s}MPiFbR!+(xlP!`5+vSWd1(V+C(v*Aw(OiAN`#uFQ5s}w>-oQ}$pds<3kY;gtE zMai~}-N55NgUFS)(?uZVPpv8a!_oKu$lL`gKsD?i>pfwdC*LY;Fz=NFlId(%V~5y5 zg7$q!eg2`Wit||vVf7OfCtgoN0p%D`#n-Fy%Ekl0KtgN|GFYSyL8O5bqD(u`029_V z*RQc|OkV!ymYO4foc+fiX8-gYTlV)cUY`>W zD(%uecoqMuFuUxv+T4#n zDBqY`5?Tb)M{g%C+kGOXO*s4WNm$jLgdg}>!1L{z2Eou=d$CRpc*MVtnDS%RvL(y{ zi)sY(A=;fz&*i+gOKlqEdXUg9_4%C_j6hamCtdcNkO`blSL9?Y5=0h1Y*Ez)0V zEQcu`hQR1=0U3%a+Og5|-ZREr{i76Ua1g(F)Ydg@Jox)aF^~BOiCq!0a?V@hB03{wR8#)RV+g&hr55^3c(DbBAt1#D06{C1dUE}UVYXviVFLv;-CQ{!0zduW(?>=Bt+8s)BH%o^%_kUSkM6x? z|D+xNP(5CY|Ht0u;yybtKbfaN^c>28A+~BN{s_!mldgnOExvj)IMeO6^z}kC<9TP- zM2c;L=1}X6n054)T4!hgR6IZ4ZX<$vq6N9trJL5Db3S7f7|)%@K6Q{V#Ov9+yvcGnTRz%@G+hM;bD{Z5|A7T2!? zRG*nZvbFUYu8o~F>nz5=yrG1l`}DK9_tITAeImPeyrHV*t)2!0?a%Cr|D%o#r}*01^1tU;BUJzw()PacV7bGgyyMYsCkW zp#%0l(leGUE&a==x1%7c;S=F?wtt){PxV=&%64G`051s5> zK!xaLrAQ+r+hBHxP*Xy8_xNTY|~KNgx?X#lVM>)!h(aDIMo z^5zwfe)-U2pZR4|{|9gU>zn_R*f8|-SodUhryB?6ONy*0m1<_6#K)d}*n$GjCUSH)WSCiQym+q|lI zovpba*pOcNKnEmvAVtv{Njj(f5fa4LaBIyG=IjfUvSJD1JrMp3^+SbiI{w~-8xPb1 zrXiUMF31)8Z|jcvw@kCE+N$=pZ2!oVESk~zV*?O`AN`$1gs(tf>(S5t({Bu47~kg4 z_!unII%3}&@)(f17ms6SLK!_5bV53TLJaCMu3{Rp!zdfdMAi)Y(~>u+9|+ptZaBn6 zurGpqH2Wf>uqy*M-!b*gYXM!9M19DaYmVBwnxKJUR5D5qZQ`GHNT@f2ZWIb>WOx7! zJB~wX^E?8Gf+X}$x8yL0fTlBCpGbVDUtNC*o|OCnpqX69_7r;uBUJ?ps;|3ORzoAvqfv$*CQgWKTPd#x|Xb8Inw zFr=nriE<2JZw^78xRvj_aZYWlP*=vjTmv5mB*e-B(PA0QmXA=qsjv)-G-)%ru0r#l z_bl2-arLLN!jbMJ0w};Vq6NU)ZuB5})i_Y07YE%LzFjDPl8vP=ltS7S#xA2RrR++p zbOw{B<)Yy{t=_nI_y0CMSN=R3>-i*pHsHIigKkZBhRvc!%%B?_jXQA4LQ1t30UPbP zq<&ur*Q~8dK!LtUv&)w`zO?ux_8g40R$$LE_!gI?4DrW4uw4=$mo zc6|YCgl@zHG#;M8a|F(j!g?IuiG2=2Jny@62X4e8+Z~Sq>qY?*8FKpn+$bCJs$Vq4 z|L-ULt5*-5h+9usC^50O&mXWHVe6CVhYodaPOcj=zxHRbMf20kngz%0 zVrFjS;7P0Foj>;`(h7&;wv`RLbf>x-opG=MG~SfKRHy2e=^ zyBg+Zu*Z~Ig5TA^u;MNOB@ANG|6K|&m;XP%yg^IYY;wIq2?kA8WS<&1^v*7qNIAc|6$mqWq~YxX#ebNNOWO;-SC% zGLwA{5{2cY&=1dS&(0BjTr0yjUTaba20}_<>_;NOGO^AqSJ*6Lz?>|yeCM8=b^sHG z$$D47F@1=e!8o@nk0HuIN;`4x8 z^ap4e%3Pt75-DTbr4_Cnz(@J?nMVv$7~XXn9RLOvY=&YkLU!9mRB%CAk|u>te2{zgt8Vr7)#A4Bu^xzBkJRQL*}wp*%Tn`AVuQ0- z8;K^tqqxI!gd<{R0?8RRwyE@_I+WxyU%w=+0~eJw8>#Z@HN_ zT0v4y7c1H4*wRqCMn!Mm6JNBH*w1^+q%;af)Fhc#Gu}=FRWnCf*ffsWL z#%WPZo%?-eK!@^zA@ch#c}}63knFQrRJ5vMq%*(cOus1bDh@4<9)DL(YZtp|@V_dgno;0hF*x z)#I@+sJiRm{S^ZvI_bX0KCpx48~=%Gw-bJW`}Vw4`E5S#PpQdg{oK{9n`7{cn=+ecZ>KD=?c z?i>LMN$R0Fjk=#}l z&&(X&^Kh`&y@9*BS@p4P@}gwV3Dt~0ZZorX3DMdyGCB(V}C91U-fqpmb->D#ti;UGOW>0eiip^^!UF@-8*YbfMDqexpaMa57-dT{$7PYCY6|? z{&6lqCBRq{T2X%)wK)oyf1r2m^`8|Kg5vsLluUs}VHzYc%rlR36{GvvlR| z@o^Dg(X^!RP1!M9wYzSr1ISv4EMY>86p#pCa&VksA4%L+p_m>SDb zKj7s$j;k87P7OdSUwX!nGx^ZjGrdnGAITrjGoT+O*t8g2rhe5CL;iqx!@6l4{3zcR1c2g=YeVte%+-#mPbW1Zs=I;5>j*Yf^+o5J<59Z;5~%_CgDEwYL#>>v*0%UEcEVY5Wd zj%F?aWeGf5sE1bNNU}?<^W?uo1(%XtQa~M{@L{h^UT+K55rJvq9ksFn=uL_J`f+OA zp1)hQ&>-1Z-j`7M%3rNoqUh80py4lvGNp2 zz_#5Jj(?G9+FaWmQu{FW_3rnQA35G>lYE%Yuq<8ZQWB9;tspcI+%KyVOh4i*}FgO05O8#+~Ev(iRiZ;iGoO?TN@9w=S7 z8<4~ZOLi*<{YgcS7w8e4az|p3yzW-Adlu+qj|T6;??fTY$3m^89B^x@nOG7n)gWe~ z4Q(VG5$}q; zzCgF)#oUt+8!ljPgV|U*Vb0RQTcerEQQOTy&9oOc-AQHu>2f)DwJM%TdD|{2*qz}J z+9$`^ybh=kkiFxMQ@yqYhi!2m-$R?@m(jtRz6B+hS9M~kC;Iz`ygJmqd5~TlWjE9? z!NBT;;(x1PuW0FwRy50YMc8f$;Y93QFl4Dq(lnb7ovpsf91~Ly54CPOara>r(t6`T zbWT!JclO|)y3Q>L3*As(^5eao1K*rv+vrr2!(GF^!0dM~XW?)yd|igSiZ6K1s{w-d zgvgs+>-oJ3k$2+_H5H4U`z+Jt6R=l3we0#&Ss&(Sa0HJ`Vge~xu3p?SHqN881Jx5P zQ%~CIJm`msz^aHSOABabQt7<*SVIw(Z&MYyc#*DGrF91L1V^{Pzu!#hSVkaOj3$PQc+jc_d0Bzdzp&rrco}uhbv?aY1hAbEid< z`C2Rv+7y z{Nx4-Y#q+s*`3Lw<_br=dDaLt7E*DKe_pYC4l z$!|;ZrQZ$Oo!22QJe<|J&3q9{zsC7u?Qk-F!;7feEbSI%CQQ&_KUxV1bwWOs>yR`I zvpZ?AV?6-W(eoV&C`S$K0^+7vk9y~-edIq>jR!W309tJNx)of=S)0jlOk$SU?lsfp zFM9}4CqShS7}A*H&t!zH`|HoP?VdSec*-+TZJ-$y0_!Kmog_Dcr-EuJy9Dw&z=*(7 z9)*ECf*m;^hm(6>oNkv~K<5ExT!6*d5)$<)_?r8Y^(}`8QaT0fUHgNOoAL;CL+29o z{N22@o7E6Cz!fK;*BV>~BVENovtiI5a-<2cwAW^-8xe5gA_YO2<{C$!JDCx_4v5NN zU{#mnzL<{<_s6!Xz>Bz_%_fb4TPd<@0x#K$O@%25v3R+BK9fT_Uih)v^t&IxZm=f? zR@0ZKy5X7~l6Y}T<(fW(Ny>qXdYW(IfEexyPyG@_g=DN~rYzZp7Gr^K7$bT1w}QJw zkEpA?aJ%hI*>GC%0Kb=yU}9MkSzi}^6cG@%Qh4KD=$ zY-O*zjhHdWX48=0wo|`_H!eFxCl^2`2i6LhA!ih{q7-hes;7cXwh2m`WEvFhYvG=? zOTlje+)Q5JOh_XEG?XHnp_By*g=;PR(4rxtyhT*`#hu^vcbgSuLu!8}U!UerHC89b zst?95r;?L9TbF!><$Zm%F-18E1niP^&QVx`iG5W)HG@trYMncXi~%GEtP9r(xVbgl z^lF}?1$m%?Sq{T#l!V1m9880AFf_zg0L*6&XM#VJa#IQBd9e5sFp2QsOn3-S<8)lN zJJO|e%~84pjri8S4^X4P5eyea>$#xbrZgj*@6!}gRL3soE#*Pqg2G*1O`eZo;(mix z7yOyYSKdX>-_`)KH^pXZ7ngA}s7U=3_i_e>r4{m7H@1RO=t64M-nm8q3tv%1Zr|KN z*vd2GBdx;y++Rky!y)L1c8X^JNcu1xYRh2#-7br#cnQ8A_u_m9Bw?yWvSXZ2sryaY zZM(3;s8EF#ZJ_j(+N5_q$JFmB%3{z!PQVJNS7U<0{ec*!wk2zvA=BblRLdk9q@kPm z>`ms_I_fGY=&r;HfE5(Z2r1mKJ6H$OEhd-x2FQq88~`OoZIx_5q-&V516|ay2U&ad zoVr;a1ja?D;M{wbPW*7o=YKSw#x<+SFp1lLW4V|Ps&ENF2l0)XEueb%xa65vJB8i( zsJt4U8o^CK`tTTwJU)AP^ix;8;I;-dS`O@17c9AjT5Arf5Ku`ywu8Sr6OHAnx!7VF z=@5*`41c4(##js6pN$1~T17$MOggxiMT5?s&Lm*M7tji&cx_t$u*2lK_0h*UC=Tv|US-c(~ z=H@mKm6$?G_v8LcJUJWr-7V?Kv1Mq)ezKHJwE7^MP$Rpj->mxl?6&5mgzpdxPvM|) zxdB;J%_ECILj1TaZ2TnoDYdK0Mby$iB%w;jd2R}Gb9nLZ%*hHum^==sUw zn&~;Bnt`{!uFfF*H?mKZc2q6))Ifkbay3E@kf1u15DTPnopCDg3@6mnM%M`#P?17=g&E05+@d-ZP&Lw)r0_$N3 zDTK~7@b7ae6L^Pie!q3LT|HIi1kd=$qWDaAV%oOkKB1>twGgHiPS~L9xuB(ovp?@; zBRfxYvSX{6q_yWI z+|5ST^;?kEs1HbqIl}cJGn*P~sPdzX<=hnZ&8s^VrNp%O=+EFqgzk7~GW|5o9nYxA z>^84ypt^^9J6fdBPwzl_YFud$IZNd~xI_`26DV28&6H{NDu^OQ3N`p~JS}7wDOn-W z69wBoz=5Vq%|))IP+thRAcTF&LS4#L7bYWq@q*9Ul>0ady-rPciCfnf0e8bCWSwJ20Qcj5o70OBCaRXP>($Ky-3P3fJDf>gM>{)G zB&CEO8)>slXOi?G;)*814~x2xBpA;O-`2cQN5a!HxP`2M*vP25YJW&Q=Iq+5 zL-;rh@thgLOU>g;2Y<9Grk6VpwitE7^0ZJUVnTt<5)4?si{}`0aB__6mZyA(2m}P+ z0);!3`#z)@48IxNpqkG(td1C71<4tR1yV}QrBw-t4d1VdW_FwOzq<>((s-1zCw~+z zG_)8GzV{$Iu6_96;hRj!?KNNLLdLb2*Dxu}gNv62B&s-W;_4jQl*Sa;q~;haGB|>` zi)UuLljYZ;9VdF4jl99l<-Qv>IF!^Ji#2BOTUzqkjrbLGhBc#1^ekANRmGz=!Q?D7 zD1HNVL|?TKmIjtc6?LS|fsJ-ZKASO0z`&Hvw+}m6$nrhJd1T@S#_SqO3)I2vo#m zH-7wzA=9Z)JKl!&#DFJQUHsg9a<_v3F%8x_ZEACz zEts8yG7jh}X7k#w82Uwf}Ll}hU98%+mR>Lewm z&Cogs!`4!YL$j{83h7t=G!|ajV{#p0+>{Y)-g9kYW?mxXJX-}tA&G+yxA>3jbCks4 zMIMjnAR2I3AwXQ*FQ3kip(PsSep9T%F@=umSZbD*Eir~-X*ak)rhX?;w%bzp0IHu* za2{lGbm8-Fu+QY!qVYSEGx#vVE~B!5K9^C3X90EL1rHIQZ}TC%L1gYi1606kDygiF zs(B5BuDiKvI-JRFXV7vhF@-7YzTGZ=rupm6#y!8izpfDXW{ytJ{%Ez=>nRf0_uGl) z487V5@ZXIVc3~wO!S_?3wCRQ11P?&T!)mfd<$G5h*1E$zUshxlJEGmQaLor$rQ(&R zx$jleJtv|ULxR8s8`-DDjHGWSle@#}^nyJE^Tx?b1Ui8q{?0Z+$Us-4-2U-))^lszADPswiP|XbAPd2qKKX>=xN4wK1 zsxx=xZ9eq*nOi9vZ}y6F;@8D22RX74qN^|6cadtgOGb#U2y=|Y2aU|juu{NVQRTy; z0NKMYJlKQkHpjS}`#|?GH9{AX=mG`wJyEG$Xyalx-h5}cium08^M&LKU6+3@pv&8k zrdto$m{K-^_)_T@ZBsKF)l@Q!6e5!yAmiYUuq6+!ONU%1)G8iS!WrR)g6(7baer>A z!rZI1+>}6`QZkNKvQPF+hxC%2rF!NDPVU5f+!>{f$~Zg9&XpIrJ_a(?hV6t8B&@CI z*m!|^Ci@msp5uN`hIh0WVe^D)fi1En3^1mOTm*0vYm_$!T=PpcdC$N(@fpku{59b- zA*BUm=L%X`z5vUh+|N@W@I(bQ>>-8zvW5<`p)lUd)+XrU8;Td4gA!VyQTw;%QsulF zplF^f(n^$?^u+Ymbjl9rATdLhOd`dSHS~lptL8ArZO9X{hS#sfk0)K%;v;Q!>vEw( zoEe*w*%v~Or@mflURoX93|I?+H?Zk>XCcU+OGxMnk}u<$Hn=QexJ>0-NQza>&NDKb zab9`?&ihGSTo6QVAiIqG8MqJ4BbXI<6C_8l_Q9Jd5;zn+ME{1L3*1SWmgeRI_%;xw zu;sNYnMkl&O4ouUg*pT7$?S}M>m^Wm3S5F#TCw*Y|DZV?)Q^6oFX|*?FmIdX5b7_V zE<5H@d#dKE;nsMAD*A51{#($g*wF}XMxh2`ip2)U97qsZO@(OYJ)DeeSDHV^Gr!`5 zf0S!2jei-nH{SmXygj4Q(mUrTqs?NF_9WVnipA<8$#mR$I6T2qg5}z$3wNq}SJ?ja z5%fluxtBM_-aAD#te~THoIilmm80(<4MYJZ&L*Rr`?xWq_^Q98o>vQlR-|?v{BNW| zM18M*umh*Q22zk_KNtZSxIhd0p@n$~u8!m{qrQC}G@nDcRmjgXa2u40|7IGVjKTRh zo-;`(Q=a6)nwn~C1E{_{2d+6$ZpmHT3uxIXo@2d^s&RCw<}$=hgDaaEIJJ2od}b3< zLrZy5W`Py)!``Q3G?q|CtJ&==#g^Hk)7!3X53&fb@%al*l4p@01T#2;CG>$50Zf+D zD!v)1<({J~dvWVUGvc^SI(v@2MoR{7SRtL-&TK^i*W>L`VBp2dKD7x;RboL6OnZhq zDXVXxrvV%PDf=7R(vFs;Exe9-MefH^&an%aZ*8ezd?#~|XB3yKsgJl@>L4zfox~Kl z;Uv_)C^vCo%qi+22_4a?AiEU<#V0wAG7iSMgR#-aQcYW#v9#1K)p{1W#Wt^YVR+){ z%)^Y!xsfw8b`3=*iM#N|I>#M2Bp-7KXFc|re>k2+kAW1pxyOMGc;|0+IhZePl3O-| z{9;5Zgv8&l0ZciN^igKZ4)>@`q8Tj#QLZG{>%f64GVD(LkiIPTR1Fcu=DXnb*UN;# zRhhC!t(&r4g?7bf*Yt~k=Gy7p37VU?WQi%4x)xx0XE{sqeXaX-u07V$fieq{wMui2 zJ(=}?2;1gD&7cHU@^c_V9rb2b+Wao`UAzotsfo1fp-V*v>!z!ogg6SK8#K5d%mwz4 z54q;^FK!Kp7BJ~nB23oV=nQ<5$!nK~(W2`7bD2xqkZN856L!`}XDU|~1BBu8=v#sr z*z*h&7Cwlrr{QsoW=@nZjIdS0N7s;H$$c)=iZ8Lz7GxB>y9N-m93Kj=cr3 z<02Orsgq2B%yj$%@fZwtRWV)*9U|ycX4lXzcKzc+igr7eJ0WURdoD=4&k z0f0z|`n1b4CevOz@bg^kDaA7-H#2nTmrDMmgkJP*t+EJGT6ohEG(a>18_gV}e8{S5 zYSB7RohXL83~r6U$thKNc|Mgdz#^$;VDs4|2Q1#~j%qDs*Hk@2RTj&qGs%*#paWKY zM?RI3YVj#KBbGUC_eR(NL+&}Uhju}mU{JD%Lz-&Xj7v~(C6mnxkPk}P=xH1=?VN;X zS@s_NWcXp(kg^2#6U~AZR175oS=D@+$xEfAnj}S7e{9FsA!?S4SBTozx&a>{JMT(dslQui>!ii@Jd{Y3~ z*9Q(UMdvW@XhmV`YHMA%QUB3q_a;!g@X{kCX~Ij4#VQyln|A8XAUR025jO0wn4NQ2TBs<0TGTmToLOMW(QH@(601SWh{l4j574U2>6)X4LN<(c4XmaPg8463 zZpSB~Coq4{QFW$*|D1QwtwQtN0hbU~SD1Sl%pa*2ky3TNp*%jC8h{4d!?TRP>qW-# zHvOH`e#+SP!GqPI9o!QznFEcP82E~%a8eehh0#R2xVY*`D%VwimRZ?Y7xfbLZW>s2 zgpY=S{NMn<#nq&PWBuHtu_{r3o-3mB`O!j-nPjNccVtNB{NEES| zN!OwiMNcpW8)~o=i@X4aV4QUNIO%ztT}>HuqDXpco+JVo& z&8MY0OBC38qw&YC)+Ewx|7~>B@z@mNJHb8)q&C^;-l|B?hj`{?>CI}JmrmTk!tqsj zLzV|hzyl|-t)4$Lip_B(3WWNT&}~>9<+{vx)4}5K2B1*T>#z^r8|~ghqJTp)r~)bDA((JMIO%E^!78b+8NFl%&F&wL+kh6{ zpixD1)d5BsWIjZ*I`2srSLADl?;ZXi1b^_!z&E#Qjb?v%U-ecHXACKe}!doOZ9xV{E7UdvrKJtqN=96}}c02Z#5%=Bbnu+;Fdh%nZKjscue>a z^-tx%@F4&>#PiH*2dF>8`|>Q>M?W({q6O~*>j`|CYA*MK`b(!H1B_M!S{PhP$3S&X za8I*4sqc}1R>X#eG5(uiOQ2-5*akd>>^v=$AjQ;0-DJMXDP?26U{YS~hFue~3D-o{ zW`*Df?lmfcdbU-HrkJ1-Vj>Ye0Z#SEpu`=|brMjcae{%WrJibl63k|PKGlzp7X`|? zNEl6dk&<%DBurpGiq96ZPBsW^QOteW%Apr zTU&1ogY1@A16F1`AlZE%DI|P$3Yk|#bJ({a;mwp5t9@G+d1|Wf@Q4{FBp!GOkZfav zUB_Np`mnk=OQR0{GL~~QZ3*UV=_ue}YBNHJD$j1b5O0m>pD?tCh|JqhCGbArR7=xQ}gufR!h) zWGefklb^|cdwC-rT)6X!*XjcglQ%Ai=YZhkvjqB4-$@Ty8WN#Xr|gXcdAN310B4v2 zC0N~$Z*Er{gyH*aCP%xwW4{$d@w#)s**2quP0xW(83zY(4DyMN4GL zM5=iZp#-i!bj9;M_MU)N^{@Xv2`%}b$ z)_mL9y0{mBU!F7|eFEsvEiq+mwq5Ke&d!>@Ic6UlMmqBJX%W{q_a;)ViZ8Z5{AkxA z?k!mc=K~);&OnD(=Va`0uV9ME(}z#9Z-MCh5Rgt$M4f?}kAU6P602IFnn0avuuB42 zUl{#fb`>#El+kL@Di4OBB@ZUQHY_cvilt4Zt(oyuZ~v~{(H+V&ncXpxvqKz)2a0@P zU|A2J1x?~!;|qpwYej$MY6*3IDXB>dMvj)! z7wF{DC4m>Z;}dH8cV9Yw`~fmb{+(#Prv$oQGQi*5yy)6O$8=17?Y3(aY+%hT+@8^X zJZY1sUY)57gr=`jhZeoTMKa5*ihTdef~75jp~?87e`~fUC^&3I49cjF8C+Zi39Pq63mR%n^VbhV8o zmsZjbJLGfWd+&cg*9h^cM6`?neK~5ay4Qycx700Uh6q(lSx_ z4RA?lNTix>>$CH9AuS%(wf}E`Wf1Whh_rAf5X!2#3;g|iAD+$%LbkaV)YSB( z=@S}xp=SSHy(E;2ktKtKzxzpMk;_VZ4IZ%)@PX6|2m{u=VVPFYIvVde+PZ>%Xm38C zTHN0k$!xI+gF%?tu?&a}+~F;N29RG9jh7{@Y`G>1$HK2I2?ZW*=g|$f4~b^4$j-JB zK6lYi(D7)Nf|(207fX+mln&;*r(y5$%?m4mQozpvAk&;+gK;vJ?K#EGm5pt$n!)r? z4K`%ZXcY%yxt>p(q+_82Q3B&JW}~D5BCm1KhbS;{bC@kOVns^@W%zcdUlJ&(iaP}RMBbEeu%C)q=Q*m1 zz~uuNm4?11x3xQ?wn#Ry3Wbe*VV zE1^Tj-GxE0IEPIAZE7evSzVT5+j8%Cc6RLwa@DmZtLF_ryozp>_VPmFUp{b7>x2G# zFpI*7o~$VY#ya~3vnLnwpRo`WdEGR9+CplBp+vrfoy_cqv9%rgVSaDQj%w&)Zy(7yZ7#hT?gr*484 zR%Oh(tRVc85U9e-)n5wO0BHO|9=_RA2bm(nPZ;(>uC$1|hBsOqJ1AwlWgLfa-v9;d zNNb9F9Tx97wf^4iwXMBR?OZ|7HWg*ZOs*uMsl@M-H6+ncS>WBjtSeUTxO7R)F z!UL#a2=&HZE3(h@8rtJt$6d$A;O{sKM9Vy4YJkj{G{ zdn*oN308qGu3u&q2xMpVEee+cWR*|!qx9UXQqBOCU9-hg`D)XpOU;(A87K9F(SEPO z{Y>BXDrm=jYeS1*UpPre(Cs$F?*w)3B4uosF9ub3=d`;=WAw|g`RYlz0LBpOMF~`N z&HmQW>Gn)+);9ihiL^zp*L15w>2Sr_H2FgAx};I)7)=>DTRE7NN<`|u# z{Bx?I1LpnP)Kdnr<@N+0!K;+p~ zX}g@d%B^XsJfI3>x;XD6cBLSbn^WI8l+0<>Av-G<-n`qA zds+X%M6doKqX943g(EwqJ%{eU4s~sZcna9zK$I42YldE2u~%`fr9|#S*X-jEnc?+L z)!fVE7Ep)Daw^t2QZFg$xd|dGi^y&TH%9Y1~@*9_G|c^(yK zzdhJYJ6&Hf%K!&c{$y1{h$Y_75iccHK&*YDbPyYWQmpw17foAx@a!85xUF< zLmpxt?l^hw7XCi_8e_5xc_D*!Kc?NyTbM~uM`Rb1IbEl%i;b(^Q=}bU_2KDFyT?Oe zr?E_66i^2gEEY~=8o-Z2a7Z-s8rld40=)BUUGkvJ@HjfLcc@~;`X=rc*vepw8I=0Y z;-31Qt5@5S!A79It#N<8GrWorHF%UZ@7&b9^$#YE0=33RGIc<(>@m;$1Bd5na1w<# zVE!cw(kKJ#4QvmHNc)KyD#(v*!KE<60UuY|t1x~MeVH6;?CJ%ebayofYu+oM#pKWr z4WC(3%zre(l?VaTrCqxfzG$~U-gm@QNs$*Jw2@ccnAH{;9hC6>YR^_~i=aw1&hO-dOUX%ad?S@_J#SEv|J z7up^^>l#W%0Ro{ljy#rfQ<<9&ncqV6{10mP^EfYfC{=>!FyioW&x46nr5t1e*T*Y* z@?3qF=;fY&TO#zzLZ}TmR8b-5HW83AVDaOf}huAKq*+CFcG+l z_@Y~kMQZw0#-OuMf53Jz%^ry6liY0eBdq_4928}NF$eJa_^?xZj&PCk zSzYqZtlRS6tfXV?cn9AU`u3WE4akSB*$}B!-vlWyPmyTSHc7*rBI>ql`;Em;1fb{6 z0>0UFu!TG6UJlhZci5&rcmyKr6*|%&43vKZuWmAFgu&RvuGZN$Wl8sLqIjqBATh;j z|ISdwcL4oX^3|oHRPC#_o|XiB>VaZpn_wE#tW{Gv4>eHBR_pQzzeZ(`Q%_J0qM%ec zoL%+G!CZT4WJhqYdUV(NtI+QiF|%pO%B$yUMFDq_$rvPdTmaF2Ymp1TD)(hx(HcNc zXWwX#yc5z!n3BH5O2M}WQnxxh6#Sd|z~AGO*7Xn=&H@?3O?b3VMUWPzNhx{Yq2Pj63xW}}fSp?q24_!NGOMz%I zbnie{$kHn`sC`v)Cns6EL4ZkuYwmQbBCyw~w39aH1bJ8Ar0#g{EL(-oo788}Wt@0$ z_na?ByFGkW{J6^XKQ3zjNkKi5`8}%A2Ikzz%M@%L93ok+cbJSXu&p44MEk%3nj{an zBbrHhm0&AqFZ~g51}T|*7xm|6$x^^a=Nz{B>`G}ub7?%9YnO(|a@K$`Vcn(DVl1L2 z?M;Tz5B~slO611w+Jr)oux6r;7c1C+IGb}nZvCWB;5p9ClwTJip5u51H1*kcnBH1! z`d6Nc)=jl?qofIi*}B-CJP2_xRo2{&G&&tAZnOusWFdfIrH)1JR|dibU7t~EU8;{^ zcg$c49ola3YZM9wHveh&Nvo8ZYcfcIo-~c!KxgR*f5@x8hxybX%o?A^o*wB?nekxN z+-;mM+&XkCVt!k_U0oxl z&2#8hC*V~~WL}|-xlA3|Kr2T4lmdaX!XLTEgk_N1h4qJI6vT^T;70=c3mP>(uCF}j z@Gba3OJiOcx*gi+{?JbuEO)PBXD~%{B&pPZfb15k>bQIP0Nxa=F^019=nHjJs0L7e z0qpZIWw8-G%OT$i)g6U7|7hlHQjx9XYj_ub3)9i7-94f41X9hDw*ED=_22kj*k}lM zu&RE~t0KX7Y=d*slOZYn4{_dUqyOs;*1b~3AB<&{`w4&1GHg1K+=K$A6x8i5-GqSE z1eU=LY~4TY;x5L;6Jvzq-Wu9<742*ZX0+@WAkb;@r2Xnzc+8 zX)M91&p6+HqJb--@-%ORqcCI>HbYAp>GiVX`&!|fjn9Hnz-^Zc>W#r4Z3HtLaAU!L z1PIG-Zm@IROJvPfQ-@^IU7QDXI^3&ei&lB68)2|N1#PUTDMPc22hgda`P{d}WN?a< zLbG&s&6{G+^2S63(d418{>r$*$*0UFa!1ZkS~ zYthW*HsL;^;am-s;d+O54%+SNF<1z!mpz<8eL~h#R;NE4-a84L&K`%Sc>2-G4Nw0&qvU@X%E1(A z_;LqYMteaw3GfZz2y)-;Clhw``Op)7o#_Gex=s3vHZk?*>g-xsK0v8yUxhU^L9(2l zP<*zh=kC#^4X64x-;GVH&dT1Co-_XYDX*xdz>8fdYj8aY$iaMik~Fm2^#B)m&36dXAmj+RCKY-Z7s( z3v)w4@cub0cuzK3a=UW%``mzQH#2_E88)k12$BLoe}ueJEa*@3_k22(q%5iO`RckH zl_kGGojYkw6==~A=jqP0+qN1oSsQoPTvOBtf|suin0FlqIrO#E(DBCDl|Sk~scHv$ ze>;uv-<<=yVp35cU%-7sK-U)lXa1C1Cbk-jpkD{y-L9C#Mo?$_`;bnH7JULsu;Jc! zk0$PI6`2!3Ver(23Nj@ja!q!eHVvs?+R?kJ>(dLO2u>%d$2-tT>@$=QI*b0Uw_u$R zg>ppd%}%HCbogG$By0yM*(VR&6Q>=HV=_oZX{(q_SkF_Jdtu^Gyz@e5YgEQ({a0#a zSz6beo4wo2JKwN~d4-*7$bm++E~6{;FbV`f28LW!gFgc!hpE_zeavDit&*nU!i1rEY^` zHNq!G+!T+OTk4J+B+TlYM-zL&0_Rx9pY9LGfU{{ZlVdfNqZz0`4!3whG00dw)CGYP zjH&H-s5Mw~Txc~_#BazzOWv<#SKEvwK_dU6b{=3*X9TFkj_lfjkgz{jkK_EQ?>pbD zJ?i^Ww;FB(vM@yscXB2hnf_66WZpB9wtb{2ypiI1KL zjt?V`XSD5*t;V9ikl`9Uur=SV+}}67Q`z|W1BaI_xFUX&ef0vfNmmuoy(G#gfe0g} z8n_?=qCN8l0Y9GH1wmiUKMplwIp=5b#Wh{(4!M^m1u}G)PfoQk zU*P2A5tdyJHx*?dH-M)z!O$rA#5(v5Sb(QY{SH)QO8w^2L+T84WUY?1XQyZ%rupB9 zPX~|QU=2|$pLe}AYR{Se&H9HWxghKutl90W{D5>{k-TtqD5);Q_S5QE`?}7?v;B2d zx7Rd$6pll!Czjp})&TLNoNCtKUp^cxAn_8(G?bhIU%8nY(5f56?R)&&hya|F4EQtU zZ4#;;i#W~9>(z2g;kHKVf@5Nx`*3nj*AU9A8YV zehR0W4#!6!3$p8iJAM8jI^7ysoe5H=O4y|2l~|a?JuJZ%k&bY)@ujO6dNMO;*Dvtf zT`jvRYc}@+{C0WvxOKwiD+5L)KYH}|*h-1lVTYIfRmc`z{-4@Fzr1|(Z5XJi{6V+E zZe0y6rw$m73b=(lxzClsK4pQDQ5K^m{NlZB!ok()Ji*U%kwk(rTLAHk4=Q-B-^J7T zw#Sseu{caLSAGR;fDya0LJfv^kfjvo z(&dJ~jGDlO$qY7PFHZV`WAVZG2&fQ}VE`q|Sw~BYaWas8zxs@l5S z8q40Hj@})v=@59|E(!`MMv_o}+wOI|J9gh-)B^ zD1kQrJ}p1qh2-r%T(FmcfwuvLKfTbpEFX4y3>R2=vsO()uOQ0`=0% z@PYcEYB5#!N%-`p24MGzB5&ULQr4@JBTW}5$*)dktz9RenGH^6TNKN$b({7wJKR&` zdeDuCkD}w+)DzY3ihGJkNuhkHY!4_m9Ba4uibi8|DYRI=K(=AA({Ecp+~K}(%CPUj zr3ixxNsZ7~&AVn=MQ^C810_+L#BXEy+u5~upLx@R!s!n!E?*a5U3g$O3^q!_{{h%t z53w_kn_lyez-~BYe1u$}lbt2`JFt7MlzCNs9{m;9{S;xA^bmKN28N}BLzK@dK$fY; z-1*C>u_{5o$eZ!l1mR4By}78-0(nb4rR;#Y_3K^LoiMaMX0w#m?cCU?D1#bN@!86t zO8c#hj-|VQsJ2gzeQpq2k#nZ^NnJwWfl)sft@cb<; zubE9IHjX05jD7KWAS6(^j|;(2=$}{)B2*bH^j;X1K({*QMH;kyndISkE)4vh=7aNa zOLlWvd^W5~ap}GHcMADkvHHw*oT|9<(7*p^%+18Z6 zUdSg!%!hO{sRZr@bx!pR#4J8!OoNamU}yD3T%t?iq@2VQ+l0Q`MbQ*cG*r>oa|J;4 zar-2H$!X~@&%Nf;dn(trRP}oxYW!T-%O}8t?1ozAt`X*De~8AiZRo-9>A;;{VGor; zj`|k;#zp#J`))<~5``DG11R&s`%K9wHykMmxwJQ6n(AaS#?Y$gj93h&j*BXMJ>feti)9SaZTfmiF_kht2T zFjS0!N0sHdVZS1A2hlItM4SiWZn=K1rUl18-5Wo)138~JSWo+K!Qi3_ZD~Gg+Z7DR z4J2DAz-jye3uSU`QYH_>&mk|7nE*)D1+8nRSK zB6Onp5q*d*^^daDn32eG#nKC**AY$F@UGUFZuhQdq7vl(C;i%wv-`eq@B4AibIy65 zK(wHfRf9(vl~BefsP)l=&~zcGskyODMqg@r-PAsB=r_c~e7txvC@niN#NQSFkl*^$ zEl7>v;JRC*NLe>u{Fxd>aq@GGtzL&92RLAuy~Zv0UJEzUi$%QtIN6CCW&-J_1=pVA z&htEyJ$?RIo^ze9Xbt-P5*3pKTfx62L>dNB%Y%7q!(8MlLkQQZxxBF4AQTKY367;= zAATu*2gpKfghgXk^-}pD&b>y+onm`IV?Dwe)8a}Ip(laiBV{JgcMgnc3Ih)6-v0Z*I-05tvBE>``b~O3kx)K4x{DGl}}CZR7XCgYnC73!Xhz%mBuJ z0#RSLATIx4i?27+`Xgbvu5b89r{Go8?4*t!147t^7H!Qg$eSYSl+(U;_!9RCyTI`k z$GZf9Ez*XHBRGrUU~P#7lMg|Sh+!IVh4W!nK$gg7JOX~%vdnIC1$wIz=gt&Jw2|r? zgY`9d+2RjC*gPm3SxGwL#-Wwsgq+_CNFf`$r*%f9c7`G VNX;2xIPqlsMDLF@NQSwme*->+oZh z6g+Nx$dsuO)27du8$B;({>!n8UR%5*;q|4<*1oxJed1diHm1C{Wov3$`nDZAGe63b zf4nPqU*3LYenH{y4uA6Lk&@3oKYFU{%hPAd&z?JfxvIM6O6~8zzS^j3YHrbg``sVz zwBBvIXT0CuVX@l&{QVEz4|^WbfBEV06K6m3^ML!gJOrM9AF{tb*nfI1e|WB8!-sng z7rLLzV^|ivJpG4zJ^$i}F$-4<-}x|L(o1_sj(zpe$x991ljp3V0^j}ZZJ(eQ=31uE z?nit2WdGkDEazW(vcEsr|9Y+t!E>G-FnON-0#v~B(@qr%hI;*++gv)Hxt{4t!-vra zl{>6noO-UfJ=ggSWoUB6$$}Q9S~l=6F;&*uzQyNp@2~ISJ{^AymQ1F-G&y*%Ysq4Z zI%tu_zDDHLV=SF{`^V_xKGN`x`;4k*;J@Vdt=Z>Nc^n2lxTQBgVHuBAbg3A%PHP>a{52@bRFH46}F2yZH0Av4n zhb68887=+TTA>M$_v}o!*QLv>VOj3S{I5LwGaoea2hpBnn7WhrdagE8TF@_WVE)_E(Z;B{h%()UN57N%>g=wCjMP^1yFc92JmCV!|+$AAC6fKBYVmFU6bI`2h+nR-a%_vw4!G~ z>D>Cw>GY$`$_~l(b3M+)OVaJZJsj>aC>VZxQ1HnHqG9f!psyZHA-GgbIafgF-c#Jh z9v7H82L*$I(J}0p>w|(b8xq)g3HHE2!RyC4a!^3oh=!Tuz?M(@xv?IUaL8kyJmX9l zar+hIU%1TAo>sIY()r*nv5m+j##XDCsU`M7!8_FQ22<6bz#e55<)foXOD53}9Yt7X zFy(ZlRor*nD$dnL4+{1zG4ehVevA>dcu*ycs)I*^*%x+ooy@SJK7)eBKk$E~YCh#Z zw;|)C<+}$3Lq5`f=i~khqZ*F77T_6_#y*|$H52yn=1pi*h%`rm;s}#YYZ^MRqNts{ zNMO1)kU3|*7OYPWZ)I1cls&rYJd|qnT`+l5Rqeg)JFo57&|3Lq+>h^EYRe3LukbIj z&6+)^`7rsHA~7>n&3z{9lMM zdGAaY!IW7_T0}~I6my#DZ8A}x4+yw^jFx=Nal9_?l$ zvAm;MeV1Hw*{C))ko&w6h9tqh(;&^c?!In1(us2AgMzJSsJzuYC}_rt6(idu(Y@$p zG@p&M8hqGby1W4y#=g?}*yU)ibyjdEYO?1vg>2Qh7UD1ezNUs=qCAn_aprjD`5W(? zH|#jQVyj7JtVjIG@28WONU%M2EUfj7k-T>tOsvP^v8z0=iHcifO^vbMQAl`8eB=qv z4DJM)t|}nMNf34`bGnR4H7B2R&3~w-4l)7e#C(3FT-q|=D9luMEOPGW)bS|txmDC5 zvfNXjN-qs-!xJuGTv_5(we<4kJAeMVq<4Vvw8pTfW85}X1qPIJgy>yNG(@Dq|L^~n zJ4N;ckTA*o1Q|1>WKi(NWfk+jsw0v=6z3ua1(p{0#s=c?^+?CSG*7c==wtPgQT%P} ziX&G$iN7bA#N>jF-r-1gokd(YD5w@H;|WUq>YyO64G!D|FSe1L*-CCvwU=8y(3mxS zH)OmInsG)R2R<=W5yHO96b%YScIS5A#b3^Z@ZQf(F(zJOYMYa%xAvjf*%P8YsO2)6 zrWtt60bdyuC_{PgErWvAnPq(FWG7tn%ay!oP{4dhnvY=IOMh_jg#yNN=wkzfa~ET@ zU>$4C!S#cJjyd&LiTt_h;jDr|sa6}7TTKRS?71hI(TYdXYa4cn57sRxXO8L<+A{5v z3{641mVA>cyU@|I>xZiHq(?9QNtbf|(Y)^h|J>Dp31FOw?}IRE1?rkDx(|1>!DzW5 za4%7q{J*`P@iF++GmiY@39tj`B?lWgj|gYyxT7b#iL0>3qh@kAuSckLgMxz?B{eDU z;A5FYy2L6htlMD0M&qwCVyevieuz>>dLai8f5}9AGqaZtu#G6TB%S3a$k!WJwnc|Y zm&M9*=O(3zFNQuQoMlV_-DydvS5IID1 zDHeNh6G3Oz5h-Vx<&7j&$ShxNtjib_1Y}GnYf;Mt@Cm=wUBCOJX!=?z*SU(z9~8VV zZg*K6O)v|&O=y)PKiW{(QO*YMcAkZ2J0TBt&cCgF9)C`H;Hth}+@Z3lRp50q3?t=L z)+znX8ASUxjo7$&59%A6_yCc9Y`bRybHhe>F^wV*d8)aO^ox(Ms`F#dT%-Q%>4338 zsI}t#GS`fUWKDlxD_v$Dz^60mE*WpYs#Nw3S+uJj^Q#+mmW`w|Md&uiesvXM_qT}h zlf!6mjN0MyPUi-uf!g0`%~Lmf*ANF4er>{Aa4d$uOqGHIHv4M<}Ki4vBoB~!)yN*wTOwvB zP%%xWaP}3ZZFlO3VoGf>>NMU=t)B3YPteF?bP|8+M~zh!#>`n^)J|k>xMs65W}muR zWj|(iv`=md7c!MJX%n*ky-9W4C-2t`3fj*bol4r2N0^VHwWWt>qaF*AOv4x5;a}|F zZ?v+T>GDR0KclSYJ*f9dq;5<3TkH!=0QJF&6x-$qrA8rU;L4p*@g;-^`5^qT8iD z>|$Eg*KI@mz*JdMo5|eL8I-sM^GNRsYl}~(`kT7Em^L$}ES-0U zU1%wi1*UzNG5b&Qk2hbw`@si0KfV~8c;`t{sJOfr+}u?CJ|Y7V@HeB(>J9_M!uWOP zm_%4UbH#gi8T18w=r**bh`$+|d9i3a)hp$`ieEuVt>R`PCt1Rsn7d#_eB#M2b`A56 z?f4R-mDFvIvuK*s`A1Xp6!Vx0t7_k4lzb>SRXEN4@}!l{kz6&pRn%_dy}=s~Z=%G_ zh9VxJx{EK8<}Z*-sRwJM!t^W26Y288I&bQC#GbCvw;g1fxJVIB%~Dx6VP<__gQXaI z?QS(0&firBU0{P<@p$ar%?I^*bpZbIj?C1t5CYm*3M>&a?RN|X>Jg~<7;$MQd8yVO z2HAOgx24uT#Wh=TlL*zu$;D0Tsw|zUD0#+h$y9tDGm0{ ztB=*5)X4V_3Yv&35|!&?d;xW@>bhx_rQ7niW2b8r*aqNxe?A2bc#1d*_Ok z+Tq4Q0eFLva$*VJT9-Z9BD43qGWeU?;lHPmg6QH!&62rvcpfEoVhl|!hl_$Y^Da5? zq>^X}QRiq!uwl$5s_M0S(GOlVHiQc(wep_+waWqyJ*9PrgmnHU`FJ(yPO_4M*}#}V zLD?h~^O3r*7u;{?(`2go649`h7`&p6i}NNWCtE5Sen$*UT*!zfKb zU8W7HP@+NMO<~F>>L9tkMKbf=PRD3@VxuCE`r-JF3vy*s*Hn7+r5&kXrb&=n)kSeP z)^50$x%~R3xaF;tAILNpH($xwkZ9n2Ad?V~=~ACZ;j!Eo{CpN+IP>v{rr_j&w)hlk ztrg4RXUG#*(CZE!Kb;ZWHU4h=BJ-w<umM_*3b zHt)ALD52dKtTB%nMOT@F^`hKZv_;lQH0~ms4G`qV@Z)+EGw4((`FNkDw5m}Xau?ri zzLwE=MKY0&X%vSk?i?C|*Auge6azCi zh4(IVy(q7!R|l|}HdzPZ%w;OgCJ~eT$n@4-?d(UUVQi#@JfID`i@#_cr-)`>D01$A z2+$%`CQrQ0E=LCdR3K`1FfTaRQ`dQKcZ%oX z3LO;m#Y7!1L4GApHb!a@dlNEtDTRWE zA1V!i`2GrVQ`EQHwT)3G(I6Wf1U4riAyl(~kO%)Oz$F<{O`7 zCEN9uh=cruG-CXqAYGQHokyeg3LEL2HYo6$OL)tF>~20vG=Np5CeD3bQ6p5%}oE zhY+pV6|_uuPdl?Dk@*mOgfgV=Qo3TnJv=3~EWJx~_q~JqrkL2w>lYG!^5jQCa7%JF zLRuO*DDXGTA@?49sm`o#>X;A25E}7z{BAn6DS>{xBk~SVHKHu`RmspfS57ec& zUY0{<@kJXSD$ms&CHHLaQ_S4G=qf5 z+IZpj48(=uRosbatWU$dAhbVl1>xJ67bEP!uCaJ9cO+Uhj)g(W^Pm@5^nKsC=F2g2 zuzjzUU{%|4?K=M7!F#cP}Z)5rzT+7mtU^JaeFqgNuRQuFHb-}c1HIr#cQr#z=cet|n=g%g@ z=+FsRr#zu4`~|wUulY>+uI{8r5+2jk}7Ok7BpfD)H&tEfvR+H?Q4A=f?wLF#IZaP5Tm) zvXtUKJx2}b7Vc&h>5%v|a7d30JQS20|oA>T_CGpqGtR;5TwTS-% zf$YST@RbBuKvb<&*hJ)KWTuJ6h*m0jJHhh#{A`O4aH#quC7Rx=rkt zVWKX?qjW$+X%PKUt*AI!WzT-cOuv0JA*Zh{>9joIb@n7I$7IEQOsE(|G^9yFdcwV7 zwpt8%lBo>pdYiwAQcFxZnDyjKJN}MVp43i zg<6puThYePWS87kJP$Yv_bI-cpi(TFJ@HXC!ka}IwSnn&Cc`!e(-6Mbrisg%}kz zbE8lv+K<7A6l&)w3|;vB8K5B=zhz}T>40FbMk`RC08l&{_Wav+e&BF(AE4z`gCnRyWm61 zf{>_DHHd%1#fPnFPUE3RN1{-}pumGPSCW)e+A*h*tU;TkN>dHe;6n4zOZ_dQ#AZ|T zprA-Qk5QQsFMN)2wXxda1F^xih+a=xi;~h|>{?s8CbwzF;`5l3l?f*xOVl@s1@a$E zmMxA0Y*gw=c|{WDNNdNjKwT#pKKF0ntbJDPBo`O)3BneBKryr-)O2f z_AR%KlLYcNOM@x0P&@xVGZIgsRrUl|Fwu~}k9xSvSwV>`h9>g~Mo0VQr26pUAlWYd^9*D5BsDO>=k#1>S!d&U0JJSw?kSe&7ZZsS{zI?&N;h{po)8g z{nC#b?rXLj95KL?rO5qb&W+6HuE}f?r+OmWXQJL16dXXR41EtQqzD4;Yg%C^JHD0J zE>)7%jzTh(^Z|&X8twD668nkqiYOA0jgIh9lPyLioAsr_fCNjXGyP_1UoI_lo@%Z0 zK5NofzO~%yC`1F|vGRqSXqB*As7Hh3iS-z@M%unZpA1O0k_|Si!CN-WN6lxoGilWU ze8YvFt_hT8ALJ_r6-q7Jp3)?lO2_1979CqKc_GE;ez~D*+tHg<=aV<~bR-|o*pZ#R z!>fACAIMd>FL#z7&fg)ZPheO+qYdm7k}4qH#geltbdndT5~m}#E{W5?@CchtN)vUI z*{xGk)q{dmSV9DKP+rE5b=ZR`13$*J7ad1h#?VT3#-Jd-Gz!+}@+P94_yVa__Nl3U zCwwdCcSJ*cH8%cH*F;KLsCZ8CN2Io2@5sRd@Q5;Y4lOR!j$yY@QoWj)!snjAU!@Fr z{5(94xkky}rbisJkmH!zrMJ&8N~)^mmVEi@dv+*4!%aFQupzRBP5A$;<3A z?#czpM7ds58Hg*(u3Utu-QF z`3{%w>m>gtIxO$Uf-~6_Yiml|B!oM8n7)F8pFmWYPpb!RW7N_Pb}v^$n(qv&CX+9~3NOR;N-%J~*pMeGnaM((g)W!U7qsNsm&uO;^N_n38_! zCQ+x3pLKVxh*`5SIA?Bgcx%&#L}S(&`T55FL|Sr4uR8K^>5jQaw*CceLOS)%ERG~H9DW(tn0Rn5!%eiXUdl{&^jTa|Mrm=d z0Xp6%n{qjGxZ`uBxyhm2p-$(CTjFX_K7qu~5!z!urpq@`{599yE_@N(R};ENF^4+} zDg3B0KM=wAt9S7!luK7h>stt)x|qjMvyLsXhz_zJLk{MZbhz0h;wQ?*P$G+66N!fT z`NZj%1=<-xmwcK zNl9(}2V1_O4%pGV)R_7jXje;zRQY4w zhV$|`bGhD>hX%&4JHxEkuf9{g+YzuWJe(32Mcb1NI_EC!Hz#|tHr{CdVppcN>_X4_ zId7l7S(ZB1BsE$@?3ftmtyb-e_#50w9>F&<0WKNq$z6bWpW|}Y(JD4Nt8al-bHB=> zZoU?0>DHOrTb(QEQI5Xr<_9S@v3<&pGYnx7=fnrP=G&=oGcL5B1^Y^r7 z-}h2s#vLZoqWtlRAP~raF_5U*o=DGvPv&T(g)93&_a}YBhKOTD0v2xNR>A# zyy(#M5B0fB#By;Q>elkCyLI#NiR#(Rg=dV&q7>VjlZGe+Po6XTwHWK5G6#G0Ef< z3GwALr)H-nPo}!rvEubW$~u_kP#GoJB$ZSvAGH6P*}-gt)W2LY^DTGUy{~F5lVMAW zdd~C7fICbLNmD$7)HvY@l+mDInmd_;No(JufZS!^COJC8G4L}Svr_;CdxB56zuR2i z9OcXV15zp+6uc(_f<@MZJqLc~;ed&qtc_y`3TsFXpg+pvsw@u{B?3*!9kPy^yb4xI z_2a0-wYMF-!C5(H)wRnOCFWX+?9tF&yd)+uuW;JzD^=Q5w$FlKR` z_yW-wNLAIBqRdGv*+(e(;dEC1<5eQ#BR8Np6q5!kcF2|ecRX>(qeHWDe*-Rux=y5; zPPO;ax%J6`bj-mzx0lj!wNKMkh{7gh!69x-%CMJ>0nX_z&kU z^v0h4{^Ie|J@;y3jK*R^cOIGEc}|&QF-s)9fZ@FJ%c;DF{u=^Q04FSFcgdk^lSP;(52(`w*r2+b52W$=dEL?CGibT;t zwAR>wK!U>^09dbGZ7G53rrp!o!X#agAG4Jglkbg^ff6N*&17!7Mle+kA;EdovUbvW zhC9J7j3}|d$A7ZUI$8NhG3id-%Vqbo)vwp&uDW)uZSs|($NV0jX{Yx1JcDJ070Q~q zvlAJUS=_nExq&N_gz(o*Hda?^5Vy4BHMp##D~U8tQ4QlK0*6YOl& z-I+wXxI^g7z7vg#9_>o#bI~DPk9r#iejv~G>?*$a=_vkFuPYU!tOAAVHn4?5v+6_Z zUq12Z=KyWfJNBR>$Zc3I=0~O)fJk;I`5Aa9bI$T}-5i@{7;|*IX=U5v?$WM-n?H2? zrNwGUyj8dG1d5T-%akLVO1Z5 z{rEzwG?ZwNvI||P+-26-12W3C#U812MYF@W&+1U~jbNwxGFaAu>I_*RTu>0d&=s(a z_qz=tLVZ8O7LmV3*YF!CXP1-a)0j_EgUR>LUsEc*sW7DE$0xW49m=mc=7!JP_Ye)s z(I=-!^WkbRq_L}C@%qP?!jHep2hi*E_Jwq(b3us?_<)FF(p=6@=5|fk z^7Y(N-b3-nWQ5vUe6%f*N9E8iXZ7Uo?HVY5F_n-xKE3CTfi) zFUsu5`^(!*g3Zx9YI*-ItzhUPO8~V0KP!CxN%2F@M$IQBfRgNgk2dwSx_$#oAM=yU z0macMNR3J?M4@Cf8v_wOB0R2DJDtBXfacU8K&quOizp`f`fjLE_T1&CGRd7zA@h!f zcl#qkR-$a|YmZ#1QgjXZ!| z&T5u|EsHO}PU zfzRZs6cWYF9qeMpV8fKFa4#(+fjju|YJOa*6$-BeOZJ==Nd(nhpbbiHXBQb2Q}LI0 zJsqsvc}vve{LhB_EE{+6!5%J^;ew7{J<97GfX1 z$t)`BntY88D{nM(#@Imggf?LZ_-H0mSfAuz5>U(M;8^!7rpu2tDS}($Q>?^j`7z5D zySiyXmNiu;?j!u=St|s*I&BE;=idg^o%T#mWshleYPTW;csKqUh>u_#hdyvZME;|c z^p_^|myZ2!C!4Kjq~LNxfWX#UQgzZ|!j~|YJk_^J#^akA!fYzUM%S%?ghkB;M7{>I zRaCF`i+}kHQ`H#jaK-?tS#~rbf3C_7u6jUmlKcE(&&I8n-f^lfKiZZ3Y2Vt;#lSHP zt*>)e6R^_%vtl*6pZnLOdcU^F%Kjx$pyD_92UJXp=m1HraokS=X8bC6u;qN`z*LPZ z3`e*N@ev=MPc!+E=1)RoO=5(put^R>5UD49@Hy7&J*e#Xn(k&y$cM`#K)X{T&X1~2 zrPceR5pVnrn%ti$8`Zh(YC?fx(uO|~i|(%a*EEfgtMomgHH~C-dA%4?gX+}1I{^hs zmv}QAMOeyPNMX8SW=-n_959MRYkAINEKI&zN=F}5o$u{ftj?eLxcH-+rVTZBp4>=X zS$j9->;3w5cenp8^1Ev}Zoxp#%0a;&W`ekpfK2id$yaG~M_vDs-TikM&j9f(x!1F- zDzRJG;_w99y$*&wi_0TrE=Yb!J9%o`px}}bB2R~|F)QRuG40EHFFeD(O1p`cIX$R| z^`**nl9}4W&Y#<6;p<@dx^r-;YYmgrxr7+cq^zb&nhb!!uBRScsrXV}Vx4ka|9HW_ zs4M-q8tXI1!mVI^=9LnmaI7-600(eKEzk=2+ofKu?7}aZ2%9@T?^lPgVW*kP#+8?# zLa|_lrM|cEOp6_Dx)&>{(4+?`CRW{v?u^UcYFuuNJ|1gYeej3Su*B6@Ue`=@LgxRB z5R?Y0l7GzB;DheCGPM`@Qv>Lm+%>%hkl|j3JB$r^=;1$~Lh?*A{ofg|`#vD<=W&%6 zwSZ(ZOR2SuXccDnaJ_-A00A3d+%e5jhz=e0MAWW#JHM=Y^{~1GYEh#i#)z-Iz~4cD z=l9caHk;!0GMN+jUR6UBIG-|mG{%w zNoEOQnGMOrQjotZAgu38;>VzUDnFtT{_qyEkZiQ0oy7fElQXe{H*tr~Wvlyk;2y3q z{4KK9sLw{6(ag^~=*dn2_Z9gb){$ZXR>~on0qhF!KS+ye??!#!PquOK-XB`g(Q=h8 zh6D*3`}Q^X0L6D&WqI)%T(RsTYJC-DbM9p9luNIeOl1|+tuT+8h4`==sKnesK?0e! zDb*%c0t)*ZTGZEV0n)PHnR`niVwc~8JTaOv1mP+b>qyl94jl71)Lmvb zCC_6zW%M6fVI2B0Y|@Z)oi&KGio-hOo!0IGe2R6V$YhUkKH!R;r~~mN(D=DF@qY}d zErv{x&}(NhcC$Uk=4d?T2*d*^P2;sC3lJ+&pp9a78Jm9xrQPUwl(Hori4yCt8Venf=`>zs}5Op|rMtW5EuPK#3A%{I?LcO>96e^oRWnL@rXT*~iE9e28ba z*6naDf;oUpT{1?Vq)+yv41GijWoSNHo`bKmij*ai2*?#(%N};kDjXC*=jK{OVBp7EeeP-aZ8WaV^bZN65--{$Atv-7j>v*Q6sc}@ZBH~C(Advx}wXlb~7 za-;tP#h?IRk!vIL>O!D|MPUnFVu+9Le2LHJ%J~>PgE7hIh-OpOn^#r!CZ8Vk5@9cL zz053<($y%yq-jXOysqiAu$c(OKcZHiGiP8q{p!GKdt~FKj1tq>OiUSaEl;b&J)Q{J zXjR`Os1rN+@jLhsU=1OVz>}3hQj+%_)yoIhvIQpU68h&uL?e`hzMlM2pmh?_zle!% zAr}mcVfPZP6%YvCAr4?;`T4xzC*~Vqv~*koSi2j!>I^Vr1vRQXt%yc+gMwkuUNZi$ zlVo~aF%P?@->UPs8uGEgx`h@QvkXV6@?~^T`KfJ)KfcL1DrN26i8XECUrtK1vL`4a zhxkD1&)9JbUJMH`gb$#fzR<*rxx2WYiSuTt(J z3Tk9|;UKu6e#HEi13-x8$!d;aK1^?O$VVk-AH3a@x~}wxKbWTpJKdBG?(xjj`WFs8 zWqN*z<@p7o=n30^iy>V+4BAnAgKIv3B~oy|_@<&9{_d)y_-OB+B&z1Qa0zpKVa{Jf=(h7HGkPP8t!3_;#;zMgoe6qQ?XE-I!n14ZNRnx zwOs~T{QWGDnB2gu4jmHA`rndFSA1*oAv1b#l=ifaD7T7y|HLl3J6EG3FDGj(*G=B? zEFkz*Y+}@phb#t(g+7qNcO9~EJiwva`b zj{;${>C`+TZBuMZuVufwoSl7@ZvH`|k>@72Ii^sVm73hs^pfM}<*jeD;R`JG#H6n; zZTmKbJx^z=cbj9d=mjisK5hUzm@-F4Q{zM zm0%*eTSS5BAu;S&!a1Bf1N}5b&NYn5HGx6R#%9qz_2sN4Lwi+AmzX(C|LCx$+5=r; z_9Nz!OA598cC#TAp9!W8+L&w`(r&At1IQK3X2cmjDo%KJo6Rf(LE z*iLpJytm7>O7SgHEo?HiBTj;@)vtI}G@5DEsjD@6=c<^65MMO;SF}M)k;Rmw9*>7w zM+x~LpfAE0Lt~f!y&vc^D(=vQ7x+lk>-6c8eKpuf2q~}Nu}m{9P2_%0Zd140noBT| zgCCE_aB677AP=g&BPd5Mn*bp#tOudAY?AA3==OBvX(us7ZV*>3Vt(o?oydK*y>6`~ zOs13gGAZ1lGUg`XlM$OxAlo^P-BiKPhWs?zwH04RY1qK8deE=>?c`Z`xw9E;aTOlK z9cH~Q^0%-s06IEK3bm8nZcS9}=rCGFT&qYh#Q-b zud@1VK%IBz$1jCPV-_nSnF=%6f^`Pllr8AUdB-V@bwmxF1R5tHyTu|qSQ^Y7=Oebk zs!85^)|B2A#i%k*u+dD7`S^@bafl!rbwNaEc#RK&eBdjGz1Fn|{zQpwBH$(VFvnbz zfwi5-^qgI2F@?x?I6tMP!de(9-dDGd4l*{H{P8$ytxcSZFFXND!~og5jvUV})Qeg?h9`odp2=0L5B@;dj#_+QY%m>`mVWQeCkmwLOp=Qtd z%{FWpzWX8zdV`$G2G^VT8w>}c(&bcgEtR{F+NwT*ui!55)7elu3tT|^F&iF^Oc+n9?LfQ|+&!W94PKHN@I#ftwB?Cwe zF=E|7%sw{E?C^#uSwoo1OaDX5btASjf$9f&t;LQw>;KM;m6nvHb!BhgUKzP9}TY8 z!MuSd>^6gqfjtF+JScf`Yh996!z`;yD&H0!M0GoZ4iVhf);Qk>0dKh0muDiz7cAf%Q;`ZU$EyRBm%YZNG^*OndSHWEe2;3GA38s4d27 z@Cd7P%-ifsl(b0{x*=)fQX99(BHE)3eaJ^ZKlKmCK0LV?R{IEfH;qN|)5N|U}`xMH&@EFP9?$0ArA{`dy7G=!bWY_dcV%_e^~s?0#? zt-+AQ`N=Wsa4ph0F8~{T8fdJX#3<>FVnm6#gy2MWLQS;h0BfNPQMS- zw27Gl(-O7TDg{lB%;`=()PVT=NunSGAENZmRK`R(Y_qP>zGg>Xk41DKS$w!D2n_&1 z`l8pt>k-z`hpgWqg~aISNW%zR%6xvJK~7fH9<1})ezvC;sXpEf0Lf*eJ(FJ9Yk^;` z<&cjB67Pv})K%g=1UQ8bsTr%^^xFo21j=|nN1nRMWS7!$&h^!_)GnqoY{F)MGnD;6 zpiF_5{>+1iPdqGz0w~OKT_j#g79|>^H3hSoV2j2q+DDrAU^S`+2*xV=3JaPS{ydb7 z7qtR~k@sbw0v(>y%0Dmfw^W;`3W+zb!)i2kPg>*LV#MFcv>24hVayh*s>9QkS7Kk` zN|qn(eS>M+VN>nH=#Tl)54+~I^4=@VH+C#zGF{hT-vI>Z;r2vJ1RIcQR`->-;^n!{ zqfCrz8uTVOa&Vco7;Q$X-XyOC?~#mW$8e?4%w@FjUsDR5^LHq$iPY#EooAZd7dezUh%vipYGa3G%lordGB^B+FoYWz`~lUd5m1t^Tly3rGeZbV!P;osjBqwS-Ao!RLsxmZcTU6q))RDM zLB~MnGV0!;%CxItnkM9OYCY1CqT7YC0fzeUiQMnVG*MnD^0ah7!4f~=@9;4+(xNUV zt4z(?QyP(Bin;Ot-e>x5DrP;cFWxEYsIV!UOa&&t_>XtHK49ll>njwsq(A;{R~+*( zt!g3yYI;!-n7FqMR&KI~D_rp%_^MToc3<8n(JE7|WhX&HWDNgDvbxspUWW*k(4_WY zOjc9hr)QZR&bd@~3(~n$aZ5d%*ydGhOo*;>s(6}H?;oM%no|x zPgZrKV;sAgDKa|>JB)egR?VUUkQ5sf0Q0H6{L zJB@^NRvQJ6i@@J8PLiGcSG})?75!g$%0Ry}!dcsn))1GXiLbKDT=RbVj{gnuu7R1N zZ!xr!R(0QZ;ICEKP@0Z>&c8U4d-L!s%9)yF^Rtw zo6u(w+Wl>4fi?t2^o3+5r`24mm$q+2+CiYS*tJOB(wao0Eus!(v&4%o$*4{!C6jYKv6Y?QHN6d=Zu^?Jr1_wR9G12|F?R9IGZ5;ArkHDO%N*MOvbeU%%-2YwrvuC5*DSfdmK7vl*y_MOPP0O1xAAT$&t=B$(H-1j`1)^c`(vf+h_dh)CO25I5OV0IF82P#DTw@8(=(Uh+p&$r%wLNW=UfPwOY%&Cj8 z+I?NAx~uy&77lYwZVFj)5>`z5!;Kfq%S@cwzH#fx-CJe`zqBWt_}g9xixr#k2#6}h zkfhkCDmSZ_M^ei*oseK5&_Dt(m#kT=Or8qKpn>=P^c2KIvot?^LMy((5|-r(ZNjM4 zH{enUPEz?K8(qc!(YUj6&Rbu(652BtNdDlQZa?+-8A2f7T6j5O{QE^$?hxioQdB_UX+R{7d zRy0iR3w^sTf2CB_o+&>j-tZNpXX$!R%fYJ*5*{qlpe*%Z=trP2t=Ho-5nt_ExUX7`1-) z@fjKO1TMv|&|1t#w~ds~G9;Zq6^D?O3-5uDF!_9;}jtXI^uY88f`FK#UCmMw$UuAznCD^bcG6m`I zgj#3IQ$gJ&ZBTFcRHnx!Yxhh7Z&0Ks!W45A4ceL1l03`yP^XMLN2Z~EOTT9bC(aa| z&Df>RuhxuCb0VpCqBh?Z%Q9cLpK|XO@Yg*U{O?+X+<|bM$K%IcGU8LsqWfi6GEK=FQi7V zz)$xJGSWQ29lT}i8-(QqVG+Whs(63HW0FZ#+fn9|#7BTLsXHT~WCFxK3M5XoifE`q ztMqmYt%hW@VN_}hS`~hpuC=K5*R9Kh{bptzPqCQ%7^x*9CsS1*nG7Ppcoc0}js@Wo zD$KCIMibUxU6AnF;ib3hR#?(E$T@!xrtziXIwIt~`TJ_>G`h{u?r9B% z+BB9o0KzU+v2$FpQrciK7R6_M2c=f8)=IqT_`mp)5B_KYL{N%-_P{nWqvH>8x$Y##Wf zV*d@%~a~otoYmsRv~%lqP>Fjc4*`%~CZ;>R|VljZ2E% z)g8ANO(%20Cvl%>V|cwp#6&~Wenj7KdXDpby0(a)j_>{knm-pSt^?Anov8ru!e0?8 zpVMOUjh5{vLL`V>@03%|!MTX{9t2x5Ep7bRKPg&EU*wgrdDQp5PT<#acJoFe08enG zr>jShTZsJdP^#ph7K*Zl_fApWd(myGv3xTUt_|9NFXq1DgYbnElB10z8eT-xmWvCj z6!!r$5jTlCdabWX#z6b{D+(~o&}y--;(Ac>1m=nBwH`+$Y+j)CpoXz4TyDvSH>Gs8 za-TxC?JC7htXc_(P=}{AqJi6O9iei)#v8~h{dRw#$={_*^s?}W@L-Z4{Q1@zP5U>_ zN-PfxU^D0#JytF3`+oPCrPO(y&3TES1M1ad*f8oxn@%y37U@K}K>zXrInspI-i2Mp zenBPwj6?sp#nj((vwzsL>fiL9&?f3zOz(D9yL;i@1&}7dxq~*cV``nIr`u9EH#1(; z+LqYzef%_-m)VZG$aC@v3)ZOihPLEb<$hU>ikYU(t>}^~eoDNhnKd_~a_yqqHKE0^ z%hNU0m9gJ{U#08;%zh~4cjPZ_X@;f~Oyt&cE`$ZTXO5d=pjHr&hSsY^kBQo!`>!Y_ zf(?DhIGT1Tov1R}5yBLKw-n&9@OB;uVueM7WsJLPEd)ex8g^1w@I4gTMgbW_*j2Eh z9tv|mO#V&NE^+S@#b%=6RUEwUbKlv>_Hw6%PR-Fy#J9o@WTAYpxDlkMco-wI7?_pu zS>^az?(}2AOO86_jDb>GsB1_1twOuUId%ngt+r1@=^FX*w|9c=TvWjl5HWkL3sOPA z>B!~7nXfafX3;Cp=s|ggvi&{^bCXjF885m8q5?9K%>)Rkw*}gqxgSs4!o>Bp8xOz| zkN37}Lgcw`(Z+nm7=__VY|E#own2CKXOic(@l)!U<*q2k_s!PLcNJj@L%1*OZ5P)w z>mvSg)Sm|h(qGu>Fj38Tt_8eeK5xQ?E25cioG)@G(5=LN41&~qqRvpu2bZisyUgSM zM>GkWGG@_6TS8x`)i69QIp{XI6&BesXD&Uw6jK70XUM<0zxEtcw2b;e^^P-p(!Eiy zI{V)|*dcBmc)ATXv6i-iEqzsJ&U;y(t9f zSALslw?JR0(7Ax|rRN#U8YM4gA~3fe`@IUaUyY&pMuNpySdD^i9-F{=yI{wHCAX{R zYsWCI*J(t_ztDqJApmn*WdWGHtZ_i4+n(?iReJ3-Beia+`SH@3Gy>qCXH@r~uVe#L z>!Dl6d`5lg$4jp1@(SKt?2>hK%2hUDpWUjb51xK1t`rt(! zZPX!tcmQ47ECn|{N-~+zn+-*wtBF7y#1aSNgHJK)CiFS{jRC!qji{*2kN2v0R8ksv zFX>H6v%eH;LvUxq? zN71lhOm^_1+8QSJ!;5nLO6tesqbr^>iQ*UTIJcoIU4Y1LV+SOW?f}AOGsj)wJw%|w zmkEGKaanCoFpD|~=UZF>xsBXI)YLX2A^4VDv!==ANk_lkiv*z-zZ&C{O_7ZqXv1|- zstI9Nn<_r&1~4`&sM>}Q)4nJ7cmw_5kGt}&9I~a?#hjHR8(p4|S=N9u3pxy8lQ=JS z4R@LZ_p~1xq^A&#FT?gDy=I4se+iGJvYJtZXiR~I4Iz^NGDoF$5*>crY6>J8*I6IL zt)gm`=vUPM9@`E6_mdwUP3@?O+hAYy|75a%0!F@s3ALs+OPPpr`z5N#Y|zR4@V8-S zNHwHcZPZ#z|DL)z7oYCmS0S&kA$$I3E9V>1L>R~MGE*t@N=(C&^&$+TS_L7!*%fM$ zQND;_u2MpC%aRcqTW;*kKdB2{(Yv6|%v7=%X0fu`nx=y!rlI(!KhsJ7z|kG)c-n4f z-xGog^i{9!xO?&3J@;_W_j$hG-{*q+vg*j~5-Z3TwjOu*Hxrb<+kCw@cWc*>QCZy9 zT3vd$K%bw<)8^wDoV^q3cR|ou6>Woq*KbdqiYEn%!IXXpy45#3;DxU8tnefzo3?n!5y(_Ji zDs7*vN)b;iyrHMe+C$d_EUfsR?qq${Qw|ExrNWHii86J6l!cn-S)7@|KF-n0hAZeI z1aIsS8YaRXrEl+LQGPY;3vSXoUU?qrF4>b$s*DAkyOusJk2SsNl2UOaIY=h9`|E&7 z%4#EN>D(uDW$mr?PhND)uP?sT_@9!MO;&lDrR#SMG1 z_*x+wIyak??T_ZZPcyATT&Q`*F&^pt@{+2(CE3_cxPUA*Yc-41ut|21@9(z3$7_6^ zb-wwVxQ>5pG0&_rdV)w`=qfxqlCoLYE(unr$EKUE;eTYJkM95v z+kgeNyUbO;9sXrN9%DR1E;fpTDD0rB+12zZx<-uMA#5N&QRlWa)FSBkgvmH0mJE{y z8kimP7zT)I){r4_78cmhnFlQ_aBtvm(!y`z!v8)p(M(5zkTe2a^6sy-g%ib6{~AEW zTw<`h3sIuALJG%TGN!fZ3xmf(cS{#_2IwqsJc=ZIcVHs}K_Vu)$IxEWJxDZswqXf9 zJOiPvMG|s1+i67!j#9=a+5n{&Yh@5o_$hTtd5^F6P)y`O!ud;4-b%rX;-@iH3NO#K#Z!;&O?&Moac8wqU`k o9d%6RoP}dH?ipnZgSprIlu!OBH&otKPPdN#S=zA3IXyS_3%qr(ga7~l literal 0 HcmV?d00001 diff --git a/doc/python10/main.sgml b/doc/python10/main.sgml index 0708f306..ff1e3178 100644 --- a/doc/python10/main.sgml +++ b/doc/python10/main.sgml @@ -26,7 +26,7 @@ + %scons; diff --git a/doc/python10/node.eps b/doc/python10/node.eps new file mode 100644 index 00000000..995235d2 --- /dev/null +++ b/doc/python10/node.eps @@ -0,0 +1,351 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: build/doc/python10/node.fig +%%Creator: /usr/bin/fig2dev Version 3.2 Patchlevel 3d +%%CreationDate: Sun Jan 2 01:21:05 2005 +%%For: knight@casablanca.home.baldmt.com (Steven Knight) +%%BoundingBox: 0 0 452 362 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 362 moveto 0 0 lineto 452 0 lineto 452 362 lineto closepath clip newpath +0.7 414.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit + 0.06000 0.06000 sc +% +% Fig objects follow +% +% Polyline +7.500 slw +n 2700 1200 m 4500 1200 l 4500 1800 l 2700 1800 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +2925 1575 m +gs 1 -1 sc (Environment) col0 sh gr +% Polyline +n 2700 3600 m 4500 3600 l 4500 4200 l 2700 4200 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +3375 3975 m +gs 1 -1 sc (Node) col0 sh gr +% Polyline +n 5700 1800 m 6900 1800 l 6900 2400 l 5700 2400 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +5925 2175 m +gs 1 -1 sc (Walker) col0 sh gr +% Polyline +n 2100 2400 m 3300 2400 l 3300 3000 l 2100 3000 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +2325 2775 m +gs 1 -1 sc (Builder) col0 sh gr +% Polyline +n 3900 2400 m 5100 2400 l 5100 3000 l 3900 3000 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +4125 2775 m +gs 1 -1 sc (Scanner) col0 sh gr +% Polyline +n 2400 6300 m 3300 6300 l 3300 6900 l 2400 6900 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +2700 6675 m +gs 1 -1 sc (Dir) col0 sh gr +% Polyline +n 0 6300 m 900 6300 l 900 6900 l 0 6900 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +150 6675 m +gs 1 -1 sc (Entry) col0 sh gr +% Polyline +n 1200 6300 m 2100 6300 l 2100 6900 l 1200 6900 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +1425 6675 m +gs 1 -1 sc (File) col0 sh gr +% Polyline +n 1050 5100 m 2250 5100 l 2250 5700 l 1050 5700 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +1200 5475 m +gs 1 -1 sc (Node.FS) col0 sh gr +% Polyline +n 1650 5700 m 1575 5850 l 1725 5850 l + cp gs col0 s gr +% Polyline +n 450 6300 m 450 6000 l 2700 6000 l + 2700 6300 l gs col0 s gr +% Polyline +n 1650 6300 m + 1650 5850 l gs col0 s gr +% Polyline + [60] 0 sd +n 5100 6300 m 6300 6300 l 6300 6900 l 5100 6900 l + cp gs col0 s gr [] 0 sd +/Times-Roman ff 240.00 scf sf +5325 6675 m +gs 1 -1 sc (Record) col0 sh gr +% Polyline + [60] 0 sd +n 6600 6300 m 7500 6300 l 7500 6900 l 6600 6900 l + cp gs col0 s gr [] 0 sd +/Times-Roman ff 240.00 scf sf +6750 6675 m +gs 1 -1 sc (Field) col0 sh gr +% Polyline + [60] 0 sd +n 4950 5100 m 6150 5100 l 6150 5700 l 4950 5700 l + cp gs col0 s gr [] 0 sd +/Times-Roman ff 240.00 scf sf +5100 5475 m +gs 1 -1 sc (Node.DB) col0 sh gr +% Polyline +n 5550 5700 m 5475 5850 l 5625 5850 l + cp gs col0 s gr +% Polyline + [60] 0 sd +n 4350 6300 m 4350 6000 l 7050 6000 l + 7050 6300 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 5550 5850 m + 5550 6300 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3900 6300 m 4800 6300 l 4800 6900 l 3900 6900 l + cp gs col0 s gr [] 0 sd +/Times-Roman ff 240.00 scf sf +4050 6675 m +gs 1 -1 sc (Table) col0 sh gr +% Polyline +n 5700 3000 m 6900 3000 l 6900 3600 l 5700 3600 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +5850 3375 m +gs 1 -1 sc (Wrapper) col0 sh gr +% Polyline +n 900 1200 m 1800 1200 l 1800 1800 l 900 1800 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +1200 1575 m +gs 1 -1 sc (FS) col0 sh gr +% Polyline +n 3600 4200 m 3525 4350 l 3675 4350 l + cp gs col0 s gr +% Polyline +n 1800 5100 m 1800 4800 l 5550 4800 l + 5550 5100 l gs col0 s gr +% Polyline +n 3600 4800 m + 3600 4350 l gs col0 s gr +% Polyline +n 4200 1800 m 4160 1875 l 4200 1950 l 4240 1875 l + cp gs col0 s gr +% Polyline +n 3000 6150 m 2960 6225 l 3000 6300 l 3040 6225 l + cp gs col0 s gr +% Polyline +n 6300 3600 m 6260 3675 l 6300 3750 l 6340 3675 l + cp gs col0 s gr +% Polyline +n 6300 2400 m 6260 2475 l 6300 2550 l 6340 2475 l + cp gs col0 s gr +% Polyline +n 3000 4200 m 2960 4275 l 3000 4350 l 3040 4275 l + cp gs col0 s gr +% Polyline +n 4200 3450 m 4160 3525 l 4200 3600 l 4240 3525 l + cp gs col0 s gr +% Polyline +n 3000 3450 m 2960 3525 l 3000 3600 l 3040 3525 l + cp gs col0 s gr +% Polyline +gs clippath +2235 5370 m 2235 5430 l 2386 5430 l 2266 5400 l 2386 5370 l cp +eoclip +n 3000 6150 m 3000 5400 l + 2250 5400 l gs col0 s gr gr + +% arrowhead +n 2386 5370 m 2266 5400 l 2386 5430 l 2386 5370 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2715 3930 m 2715 3870 l 2564 3870 l 2684 3900 l 2564 3930 l cp +eoclip +n 3000 4350 m 3000 4500 l 1800 4500 l 1800 3900 l + 2700 3900 l gs col0 s gr gr + +% arrowhead +n 2564 3930 m 2684 3900 l 2564 3870 l 2564 3930 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4485 3870 m 4485 3930 l 4636 3930 l 4516 3900 l 4636 3870 l cp +eoclip +n 6300 3750 m 6300 3900 l + 4500 3900 l gs col0 s gr gr + +% arrowhead +n 4636 3870 m 4516 3900 l 4636 3930 l 4636 3870 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4230 2985 m 4170 2985 l 4170 3136 l 4200 3016 l 4230 3136 l cp +eoclip +n 4200 3450 m + 4200 3000 l gs col0 s gr gr + +% arrowhead +n 4230 3136 m 4200 3016 l 4170 3136 l 4230 3136 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3030 2985 m 2970 2985 l 2970 3136 l 3000 3016 l 3030 3136 l cp +eoclip +n 3000 3450 m + 3000 3000 l gs col0 s gr gr + +% arrowhead +n 3030 3136 m 3000 3016 l 2970 3136 l 3030 3136 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 3000 1800 m 2960 1875 l 3000 1950 l 3040 1875 l + cp gs col0 s gr +% Polyline +gs clippath +2970 2415 m 3030 2415 l 3030 2264 l 3000 2384 l 2970 2264 l cp +eoclip +n 3000 1950 m + 3000 2400 l gs col0 s gr gr + +% arrowhead +n 2970 2264 m 3000 2384 l 3030 2264 l 2970 2264 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4170 2415 m 4230 2415 l 4230 2264 l 4200 2384 l 4170 2264 l cp +eoclip +n 4200 1950 m + 4200 2400 l gs col0 s gr gr + +% arrowhead +n 4170 2264 m 4200 2384 l 4230 2264 l 4170 2264 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6270 3015 m 6330 3015 l 6330 2864 l 6300 2984 l 6270 2864 l cp +eoclip +n 6300 2550 m + 6300 3000 l gs col0 s gr gr + +% arrowhead +n 6270 2864 m 6300 2984 l 6330 2864 l 6270 2864 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4785 6570 m 4785 6630 l 4936 6630 l 4816 6600 l 4936 6570 l cp +eoclip +n 5100 6600 m + 4800 6600 l gs col0 s gr gr + +% arrowhead +n 4936 6570 m 4816 6600 l 4936 6630 l 4936 6570 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6285 6570 m 6285 6630 l 6436 6630 l 6316 6600 l 6436 6570 l cp +eoclip +n 6600 6600 m + 6300 6600 l gs col0 s gr gr + +% arrowhead +n 6436 6570 m 6316 6600 l 6436 6630 l 6436 6570 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 1350 1800 m 1310 1875 l 1350 1950 l 1390 1875 l + cp gs col0 s gr +% Polyline +gs clippath +1320 5115 m 1380 5115 l 1380 4964 l 1350 5084 l 1320 4964 l cp +eoclip +n 1350 1950 m + 1350 5100 l gs col0 s gr gr + +% arrowhead +n 1320 4964 m 1350 5084 l 1380 4964 l 1320 4964 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +n 1350 1200 m + 1350 900 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3600 1200 m + 3600 900 l gs col0 s gr [] 0 sd +$F2psEnd +rs diff --git a/doc/python10/node.jpg b/doc/python10/node.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98ceb5ebb4b0d4446372b7e73ba6cd17696bb798 GIT binary patch literal 61105 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 literal 0 HcmV?d00001 diff --git a/doc/python10/scons.mod b/doc/python10/scons.mod new file mode 100644 index 00000000..58a6576a --- /dev/null +++ b/doc/python10/scons.mod @@ -0,0 +1,428 @@ + + + + + + +Aegis"> +Ant"> +Autoconf"> +Automake"> +cc"> +Cons"> +cp"> +csh"> +gcc"> +Jam"> +jar"> +javac"> +javah"> +Make"> +Make++"> +Python"> +ranlib"> +rmic"> +SCons"> +scons"> +ScCons"> +tar"> +touch"> +zip"> + + + + +Action"> +ActionBase"> +CommandAction"> +FunctionAction"> +ListAction"> +Builder"> +BuilderBase"> +CompositeBuilder"> +MultiStepBuilder"> +Job"> +Jobs"> +Serial"> +Parallel"> +Node"> +Node.FS"> +Scanner"> +Sig"> +Signature"> +Taskmaster"> +TimeStamp"> +Walker"> +Wrapper"> + + + + + +--debug=explain"> +--implicit-cache"> +--implicit-deps-changed"> +--implicit-deps-unchanged"> +-Q"> + + + +implicit_cache"> +implicit_deps_changed"> +implicit_deps_unchanged"> + + + + + +build"> +Makefile"> +Makefiles"> +SConscript"> +SConstruct"> +Sconstruct"> +sconstruct"> +.sconsign"> +src"> + + + + + +Add"> +AddOptions"> +Alias"> +Aliases"> +Append"> +BoolOption"> +Build"> +CacheDir"> +Clean"> +Clone"> +Command"> +Configure"> +Copy"> +Default"> +DefaultRules"> +Depends"> +Dir"> +Entry"> +EnumOption"> +Environment"> +Export"> +File"> +Finish"> +GenerateHelpText"> +Help"> +Ignore"> +Import"> +Install"> +InstallAs"> +Link"> +ListOption"> +Local"> +Module"> +Objects"> +Options"> +PackageOption"> +PathOption"> +Precious"> +Prepend"> +Replace"> +Repository"> +Return"> +RuleSet"> +Salt"> +SetBuildSignatureType"> +SetContentSignatureType"> +SourceSignature"> +SourceSignatures"> +Split"> +TargetSignatures"> +Task"> + + +subst"> + + +Message"> +Result"> +CheckCHeader"> +CheckCXXHeader"> +CheckFunc"> +CheckHeader"> +CheckLib"> +CheckLibWithHeader"> +CheckType"> +TryAction"> +TryBuild"> +TryCompile"> +TryLink"> +TryRun"> + + +str"> +zipfile"> + + +Cache"> + + + + + +ARGUMENTS"> +BUILD_TARGETS"> +COMMAND_LINE_TARGETS"> +DEFAULT_TARGETS"> + + + + + +BUILDERMAP"> +BUILDERS"> +CC"> +CCFLAGS"> +CCCOM"> +COLOR"> +COLORS"> +CONFIG"> +CPPDEFINES"> +ENV"> +JAVACLASSDIR"> +LIBDIRPREFIX"> +LIBDIRSUFFIX"> +LIBLINKPREFIX"> +LIBLINKSUFFIX"> +LIBPATH"> +LIBS"> +LINK"> +LINKCOM"> +LINKFLAGS"> +RELEASE"> +RELEASE_BUILD"> +SCANNERMAP"> +SCANNERS"> +TARFLAGS"> +TARSUFFIX"> + + + + + +PATH"> +PYTHONPATH"> +SCONSFLAGS"> + + + + + +allowed_values"> +build_dir"> +map"> +ignorecase"> +options"> +exports"> +source"> +target"> + + + + + +all"> +none"> + + + + + +BuildDir"> +CFile"> +CXXFile"> +DVI"> +Jar"> +Java"> +JavaH"> +Library"> +Object"> +PCH"> +PDF"> +PostScript"> +Program"> +RES"> +RMIC"> +SharedLibrary"> +SharedObject"> +StaticLibrary"> +StaticObject"> +Tar"> +Zip"> + + +Make"> + + + + + +builder function"> +builder method"> + +Configure Contexts"> +configure context"> + +Construction Environment"> +Construction Environments"> +Construction environment"> +Construction environments"> +construction environment"> +construction environments"> + +Construction Variable"> +Construction Variables"> +Construction variable"> +Construction variables"> +construction variable"> +construction variables"> + +CPPPATH"> + +Dictionary"> + +Emitter"> +emitter"> +Generator"> +generator"> + +Nodes"> + +signature"> +build signature"> + +true"> +false"> + +typedef"> + + + +bar"> +common1.c"> +common2.c"> +custom.py"> +goodbye"> +goodbye.o"> +goodbye.obj"> +file.dll"> +file.in"> +file.lib"> +file.o"> +file.obj"> +file.out"> +foo"> +foo.o"> +foo.obj"> +hello"> +hello.c"> +hello.exe"> +hello.h"> +hello.o"> +hello.obj"> +libfile_a"> +libfile_so"> +new_hello"> +new_hello.exe"> +prog"> +prog1"> +prog2"> +prog.c"> +prog.exe"> +stdio.h"> + + + ++"> +#"> + + + +announce@scons.tigris.org"> +dev@scons.tigris.org"> +users@scons.tigris.org"> diff --git a/doc/python10/sig.eps b/doc/python10/sig.eps new file mode 100644 index 00000000..26aabaaf --- /dev/null +++ b/doc/python10/sig.eps @@ -0,0 +1,147 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: build/doc/python10/sig.fig +%%Creator: /usr/bin/fig2dev Version 3.2 Patchlevel 3d +%%CreationDate: Sun Jan 2 01:21:05 2005 +%%For: knight@casablanca.home.baldmt.com (Steven Knight) +%%BoundingBox: 0 0 308 128 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 128 moveto 0 0 lineto 308 0 lineto 308 128 lineto closepath clip newpath +-71.3 288.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit + 0.06000 0.06000 sc +% +% Fig objects follow +% +% Polyline +7.500 slw +n 1200 3000 m 2700 3000 l 2700 3600 l 1200 3600 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +1950 3375 m +gs 1 -1 sc (Taskmaster) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 3300 4200 m 4500 4200 l 4500 4800 l 3300 4800 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +3900 4575 m +gs 1 -1 sc (MD5) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 5100 4200 m 6300 4200 l 6300 4800 l 5100 4800 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +5700 4575 m +gs 1 -1 sc (TStamp) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 4200 3000 m 5400 3000 l 5400 3600 l 4200 3600 l + cp gs col0 s gr +/Times-Roman ff 240.00 scf sf +4800 3375 m +gs 1 -1 sc (Sig) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +n 2700 3300 m 2775 3340 l 2850 3300 l 2775 3260 l + cp gs col0 s gr +% Polyline +n 4800 3600 m 4725 3750 l 4875 3750 l + cp gs col0 s gr +% Polyline +n 3900 4200 m 3900 3900 l 5700 3900 l + 5700 4200 l gs col0 s gr +% Polyline +n 4800 3750 m + 4800 3900 l gs col0 s gr +% Polyline +gs clippath +4215 3330 m 4215 3270 l 4064 3270 l 4184 3300 l 4064 3330 l cp +eoclip +n 2850 3300 m + 4200 3300 l gs col0 s gr gr + +% arrowhead +n 4064 3330 m 4184 3300 l 4064 3270 l 4064 3330 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +n 1950 3000 m + 1950 2700 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4800 3000 m + 4800 2700 l gs col0 s gr [] 0 sd +$F2psEnd +rs diff --git a/doc/python10/sig.jpg b/doc/python10/sig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c7e0df3c31e27d99b8570c7cb2304230866f7ba GIT binary patch literal 13913 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 a)7Fw#M7NwbqIyu1WZMmw*F4nS`M&@SEo&|S literal 0 HcmV?d00001 diff --git a/doc/scons.mod b/doc/scons.mod index 897262dc..b8b64aa6 100644 --- a/doc/scons.mod +++ b/doc/scons.mod @@ -130,6 +130,7 @@ BoolOption"> Build"> CacheDir"> +Chmod"> Clean"> Clone"> Command"> @@ -137,15 +138,19 @@ Copy"> Default"> DefaultRules"> +Delete"> Depends"> Dir"> +Dump"> Entry"> EnumOption"> Environment"> +Execute"> Export"> File"> Finish"> GenerateHelpText"> +GetOption"> Help"> Ignore"> Import"> @@ -154,10 +159,13 @@ Link"> ListOption"> Local"> +Mkdir"> Module"> +Move"> Objects"> Options"> PackageOption"> +ParseConfig"> PathOption"> PathOption.PathAccept"> PathOption.PathExists"> @@ -178,6 +186,7 @@ Split"> TargetSignatures"> Task"> +Touch"> subst"> @@ -198,6 +207,7 @@ TryLink"> TryRun"> + str"> zipfile"> @@ -227,29 +237,12 @@ --> BUILDERMAP"> -BUILDERS"> -CC"> -CCFLAGS"> -CCCOM"> COLOR"> COLORS"> CONFIG"> -CPPDEFINES"> -ENV"> -JAVACLASSDIR"> -LIBDIRPREFIX"> -LIBDIRSUFFIX"> -LIBLINKPREFIX"> -LIBLINKSUFFIX"> -LIBPATH"> -LIBS"> -LINK"> -LINKCOM"> -LINKFLAGS"> RELEASE"> RELEASE_BUILD"> SCANNERMAP"> -SCANNERS"> TARFLAGS"> TARSUFFIX"> @@ -361,6 +354,9 @@ Emitter"> emitter"> + +factory"> + Generator"> generator"> diff --git a/doc/user/ENV.in b/doc/user/ENV.in index b1edd816..56d5901b 100644 --- a/doc/user/ENV.in +++ b/doc/user/ENV.in @@ -31,7 +31,7 @@ the same external environment that you used to execute &SCons;. Instead, it uses the dictionary - stored in the &ENV; construction variable + stored in the &cv-link-ENV; construction variable as the external environment for executing commands. @@ -62,7 +62,7 @@ If you want to execute any commands--compilers, linkers, etc.--that are not in these default locations, you need to set the &PATH; value - in the &ENV; dictionary + in the &cv-ENV; dictionary in your construction environment. @@ -82,14 +82,14 @@ - Assign a dictionary to the &ENV; + Assign a dictionary to the &cv-ENV; construction variable in this way completely resets the external environment so that the only variable that will be set when external commands are executed will be the &PATH; value. If you want to use the rest of - the values in &ENV; and only + the values in &cv-ENV; and only set the value of &PATH;, the most straightforward way is probably: @@ -146,7 +146,7 @@ - scons -Q + scons -Q --> diff --git a/doc/user/ENV.sgml b/doc/user/ENV.sgml index c2d72965..aa65ebd9 100644 --- a/doc/user/ENV.sgml +++ b/doc/user/ENV.sgml @@ -31,7 +31,7 @@ the same external environment that you used to execute &SCons;. Instead, it uses the dictionary - stored in the &ENV; construction variable + stored in the &cv-link-ENV; construction variable as the external environment for executing commands. @@ -62,7 +62,7 @@ If you want to execute any commands--compilers, linkers, etc.--that are not in these default locations, you need to set the &PATH; value - in the &ENV; dictionary + in the &cv-ENV; dictionary in your construction environment. @@ -82,14 +82,14 @@ - Assign a dictionary to the &ENV; + Assign a dictionary to the &cv-ENV; construction variable in this way completely resets the external environment so that the only variable that will be set when external commands are executed will be the &PATH; value. If you want to use the rest of - the values in &ENV; and only + the values in &cv-ENV; and only set the value of &PATH;, the most straightforward way is probably: @@ -146,7 +146,7 @@ - scons -Q + scons -Q --> diff --git a/doc/user/MANIFEST b/doc/user/MANIFEST index e2663931..3af2c9c2 100644 --- a/doc/user/MANIFEST +++ b/doc/user/MANIFEST @@ -1,6 +1,7 @@ actions.sgml alias.sgml ant.sgml +builders.sgml builders-built-in.sgml builders-commands.sgml builders-writing.sgml @@ -15,6 +16,7 @@ ENV.sgml environments.sgml errors.sgml example.sgml +factories.sgml help.sgml hierarchy.sgml install.sgml @@ -24,8 +26,10 @@ less-simple.sgml main.sgml make.sgml nodes.sgml +parseconfig.sgml precious.sgml preface.sgml +python.sgml repositories.sgml run.sgml scanners.sgml @@ -34,8 +38,10 @@ separate.sgml simple.sgml sourcecode.sgml tasks.sgml +tools.sgml troubleshoot.sgml variants.sgml +variables.sgml SCons-win32-install-1.jpg SCons-win32-install-2.jpg SCons-win32-install-3.jpg diff --git a/doc/user/alias.in b/doc/user/alias.in index d2344a2d..686c004f 100644 --- a/doc/user/alias.in +++ b/doc/user/alias.in @@ -50,7 +50,7 @@ - scons -Q install + scons -Q install @@ -95,8 +95,8 @@ - scons -Q install-bin - scons -Q install-lib - scons -Q -c __ROOT__/ - scons -Q install + scons -Q install-bin + scons -Q install-lib + scons -Q -c __ROOT__/ + scons -Q install diff --git a/doc/user/build-install.in b/doc/user/build-install.in index 0f63bd90..763c13e0 100644 --- a/doc/user/build-install.in +++ b/doc/user/build-install.in @@ -78,6 +78,12 @@ + + $ python Python 2.2.2 (#1, Feb 24 2003, 19:13:11) @@ -156,6 +162,7 @@ &SCons; comes in RPM (Red Hat Package Manager) format, pre-built and ready to install on Red Hat Linux, + Fedora Core, or any other Linux distribution that uses RPM. Your distribution may already have an &SCons; RPM built specifically for it; @@ -406,36 +413,6 @@ -
- Building and Installing &SCons; Without Administrative Privileges - - - - If you don't have the right privileges to install &SCons; - in a system location, - you can install it in a location of your choosing - by specifying the --prefix= option: - - - - - # python setup.py install --prefix=$HOME - - - - - This would install &SCons; in appropriate locations - relative to the user's $HOME directory, - the scons script in - $HOME/bin - and the build engine in - $HOME/lib/scons. - You may, of course, specify any other location you prefer. - - - -
- + $ python Python 2.2.2 (#1, Feb 24 2003, 19:13:11) @@ -156,6 +162,7 @@ &SCons; comes in RPM (Red Hat Package Manager) format, pre-built and ready to install on Red Hat Linux, + Fedora Core, or any other Linux distribution that uses RPM. Your distribution may already have an &SCons; RPM built specifically for it; @@ -406,36 +413,6 @@ -
- Building and Installing &SCons; Without Administrative Privileges - - - - If you don't have the right privileges to install &SCons; - in a system location, - you can install it in a location of your choosing - by specifying the --prefix= option: - - - - - # python setup.py install --prefix=$HOME - - - - - This would install &SCons; in appropriate locations - relative to the user's $HOME directory, - the scons script in - $HOME/bin - and the build engine in - $HOME/lib/scons. - You may, of course, specify any other location you prefer. - - - -
- + + + + + +This appendix contains descriptions of all of the +Builders that are potentially +available "out of the box" in this version of SCons. + + + + + +&builders-gen; + + diff --git a/doc/user/builders.sgml b/doc/user/builders.sgml new file mode 100644 index 00000000..2bc139d4 --- /dev/null +++ b/doc/user/builders.sgml @@ -0,0 +1,56 @@ + + + + + + +This appendix contains descriptions of all of the +Builders that are potentially +available "out of the box" in this version of SCons. + + + + + +&builders-gen; + + diff --git a/doc/user/caching.in b/doc/user/caching.in index 552f3c1b..0195c435 100644 --- a/doc/user/caching.in +++ b/doc/user/caching.in @@ -93,9 +93,9 @@ - scons -Q - scons -Q -c - scons -Q + scons -Q + scons -Q -c + scons -Q @@ -129,9 +129,9 @@ - scons -Q - scons -Q -c - scons -Q --cache-show + scons -Q + scons -Q -c + scons -Q --cache-show @@ -176,11 +176,11 @@ - scons -Q - scons -Q -c - scons -Q - scons -Q -c - scons -Q --cache-disable + scons -Q + scons -Q -c + scons -Q + scons -Q -c + scons -Q --cache-disable @@ -217,12 +217,12 @@ - scons -Q --cache-disable - scons -Q -c - scons -Q --cache-disable - scons -Q --cache-force - scons -Q -c - scons -Q + scons -Q --cache-disable + scons -Q -c + scons -Q --cache-disable + scons -Q --cache-force + scons -Q -c + scons -Q diff --git a/doc/user/command-line.in b/doc/user/command-line.in index f23755f3..b444d30f 100644 --- a/doc/user/command-line.in +++ b/doc/user/command-line.in @@ -78,9 +78,9 @@ - scons - export SCONSFLAGS="-Q" - scons + scons + export SCONSFLAGS="-Q" + scons @@ -147,8 +147,8 @@ - scons -Q - scons -Q bar + scons -Q + scons -Q bar @@ -209,9 +209,9 @@ - scons -Q - scons -Q - scons -Q goodbye + scons -Q + scons -Q + scons -Q goodbye @@ -226,7 +226,7 @@ - scons -Q . + scons -Q . @@ -285,8 +285,8 @@ - scons -Q - scons -Q . + scons -Q + scons -Q . @@ -327,9 +327,9 @@ - scons -Q - scons -Q - scons -Q . + scons -Q + scons -Q + scons -Q . @@ -363,8 +363,8 @@ - scons -Q - scons -Q . + scons -Q + scons -Q .
@@ -408,7 +408,7 @@ - scons + scons @@ -444,7 +444,7 @@ - scons + scons @@ -537,9 +537,9 @@ - scons -Q - scons -Q prog2 - scons -Q -c . + scons -Q + scons -Q prog2 + scons -Q -c .
@@ -587,7 +587,7 @@ - The following code sets the &CCFLAGS; construction + The following code sets the &cv-link-CCFLAGS; construction variable in response to the debug flag being set in the &ARGUMENTS; dictionary: @@ -616,10 +616,10 @@ - scons -Q debug=0 - scons -Q debug=0 - scons -Q debug=1 - scons -Q debug=1 + scons -Q debug=0 + scons -Q debug=0 + scons -Q debug=1 + scons -Q debug=1 @@ -668,7 +668,7 @@ to pass the value to the C compiler. Here's how you might do that by setting the appropriate value in a dictionary for the - &CPPDEFINES; construction variable: + &cv-link-CPPDEFINES; construction variable: @@ -718,7 +718,7 @@
- scons -Q RELEASE=1 + scons -Q RELEASE=1 @@ -763,7 +763,7 @@ - scons -Q -h + scons -Q -h @@ -835,7 +835,7 @@ - scons -Q + scons -Q @@ -872,7 +872,7 @@ - scons -Q + scons -Q @@ -940,11 +940,11 @@ - scons -Q RELEASE=yes foo.o + scons -Q RELEASE=yes foo.o - scons -Q RELEASE=t foo.o + scons -Q RELEASE=t foo.o @@ -969,11 +969,11 @@ - scons -Q RELEASE=no foo.o + scons -Q RELEASE=no foo.o - scons -Q RELEASE=f foo.o + scons -Q RELEASE=f foo.o @@ -996,7 +996,7 @@ - scons -Q RELEASE=bad_value foo.o + scons -Q RELEASE=bad_value foo.o @@ -1043,9 +1043,9 @@ - scons -Q COLOR=red foo.o - scons -Q COLOR=blue foo.o - scons -Q COLOR=green foo.o + scons -Q COLOR=red foo.o + scons -Q COLOR=blue foo.o + scons -Q COLOR=green foo.o @@ -1058,7 +1058,7 @@ - scons -Q COLOR=magenta foo.o + scons -Q COLOR=magenta foo.o @@ -1101,7 +1101,7 @@ - scons -Q COLOR=navy foo.o + scons -Q COLOR=navy foo.o @@ -1115,9 +1115,9 @@ - scons -Q COLOR=Red foo.o - scons -Q COLOR=BLUE foo.o - scons -Q COLOR=nAvY foo.o + scons -Q COLOR=Red foo.o + scons -Q COLOR=BLUE foo.o + scons -Q COLOR=nAvY foo.o @@ -1153,10 +1153,10 @@ - scons -Q COLOR=Red foo.o - scons -Q COLOR=BLUE foo.o - scons -Q COLOR=nAvY foo.o - scons -Q COLOR=green foo.o + scons -Q COLOR=Red foo.o + scons -Q COLOR=BLUE foo.o + scons -Q COLOR=nAvY foo.o + scons -Q COLOR=green foo.o @@ -1198,9 +1198,9 @@ - scons -Q COLOR=Red foo.o - scons -Q COLOR=nAvY foo.o - scons -Q COLOR=GREEN foo.o + scons -Q COLOR=Red foo.o + scons -Q COLOR=nAvY foo.o + scons -Q COLOR=GREEN foo.o @@ -1243,8 +1243,8 @@ - scons -Q COLORS=red,blue foo.o - scons -Q COLORS=blue,green,red foo.o + scons -Q COLORS=red,blue foo.o + scons -Q COLORS=blue,green,red foo.o @@ -1258,8 +1258,8 @@ - scons -Q COLORS=all foo.o - scons -Q COLORS=none foo.o + scons -Q COLORS=all foo.o + scons -Q COLORS=none foo.o @@ -1270,7 +1270,7 @@ - scons -Q COLORS=magenta foo.o + scons -Q COLORS=magenta foo.o @@ -1320,8 +1320,8 @@ - scons -Q foo.o - scons -Q CONFIG=__ROOT__/usr/local/etc/other_config foo.o + scons -Q foo.o + scons -Q CONFIG=__ROOT__/usr/local/etc/other_config foo.o @@ -1333,7 +1333,7 @@ - scons -Q CONFIG=__ROOT__/does/not/exist foo.o + scons -Q CONFIG=__ROOT__/does/not/exist foo.o @@ -1500,10 +1500,10 @@ - scons -Q foo.o - scons -Q PACKAGE=__ROOT__/usr/local/location foo.o - scons -Q PACKAGE=yes foo.o - scons -Q PACKAGE=no foo.o + scons -Q foo.o + scons -Q PACKAGE=__ROOT__/usr/local/location foo.o + scons -Q PACKAGE=yes foo.o + scons -Q PACKAGE=no foo.o diff --git a/doc/user/command-line.sgml b/doc/user/command-line.sgml index 70658e00..565d9f89 100644 --- a/doc/user/command-line.sgml +++ b/doc/user/command-line.sgml @@ -568,7 +568,7 @@ - The following code sets the &CCFLAGS; construction + The following code sets the &cv-link-CCFLAGS; construction variable in response to the debug flag being set in the &ARGUMENTS; dictionary: @@ -650,7 +650,7 @@ to pass the value to the C compiler. Here's how you might do that by setting the appropriate value in a dictionary for the - &CPPDEFINES; construction variable: + &cv-link-CPPDEFINES; construction variable: diff --git a/doc/user/depends.in b/doc/user/depends.in index ab422b69..02629245 100644 --- a/doc/user/depends.in +++ b/doc/user/depends.in @@ -67,8 +67,8 @@ operating system on which the build is performed (as reported by C - scons -Q - scons -Q + scons -Q + scons -Q @@ -83,8 +83,8 @@ operating system on which the build is performed (as reported by C - scons -Q hello - scons -Q hello + scons -Q hello + scons -Q hello @@ -132,9 +132,9 @@ operating system on which the build is performed (as reported by C - scons -Q hello - touch hello.c - scons -Q hello + scons -Q hello + touch hello.c + scons -Q hello @@ -154,9 +154,9 @@ operating system on which the build is performed (as reported by C - scons -Q hello - edit hello.c - scons -Q hello + scons -Q hello + edit hello.c + scons -Q hello @@ -209,9 +209,9 @@ operating system on which the build is performed (as reported by C - scons -Q hello - touch hello.c - scons -Q hello + scons -Q hello + touch hello.c + scons -Q hello @@ -252,9 +252,9 @@ operating system on which the build is performed (as reported by C - scons -Q hello - edit hello.c - scons -Q hello + scons -Q hello + edit hello.c + scons -Q hello @@ -339,9 +339,9 @@ operating system on which the build is performed (as reported by C - scons -Q hello - edit hello.c - scons -Q hello + scons -Q hello + edit hello.c + scons -Q hello @@ -364,7 +364,7 @@ operating system on which the build is performed (as reported by C
- Implicit Dependencies: The &CPPPATH; Construction Variable + Implicit Dependencies: The &cv-CPPPATH; Construction Variable @@ -415,7 +415,7 @@ operating system on which the build is performed (as reported by C - The &CPPPATH; value + The &cv-CPPPATH; value tells &SCons; to look in the current directory ('.') for any files included by C source files @@ -425,17 +425,17 @@ operating system on which the build is performed (as reported by C - scons -Q hello - scons -Q hello - edit hello.h - scons -Q hello + scons -Q hello + scons -Q hello + edit hello.h + scons -Q hello First, notice that &SCons; added the -I. argument - from the &CPPPATH; variable + from the &cv-CPPPATH; variable so that the compilation would find the &hello_h; file in the local directory. @@ -462,8 +462,8 @@ operating system on which the build is performed (as reported by C - Like the &LIBPATH; variable, - the &CPPPATH; variable + Like the &cv-LIBPATH; variable, + the &cv-CPPPATH; variable may be a list of directories, or a string separated by the system-specific path separate character @@ -490,7 +490,7 @@ operating system on which the build is performed (as reported by C - scons -Q hello + scons -Q hello @@ -500,7 +500,7 @@ operating system on which the build is performed (as reported by C - scons -Q hello.exe + scons -Q hello.exe
@@ -554,8 +554,8 @@ operating system on which the build is performed (as reported by C - scons -Q --implicit-cache hello - scons -Q hello + scons -Q --implicit-cache hello + scons -Q hello @@ -610,8 +610,8 @@ operating system on which the build is performed (as reported by C - scons -Q --implicit-deps-changed hello - scons -Q hello + scons -Q --implicit-deps-changed hello + scons -Q hello @@ -645,8 +645,8 @@ operating system on which the build is performed (as reported by C - scons -Q --implicit-deps-unchanged hello - scons -Q hello + scons -Q --implicit-deps-unchanged hello + scons -Q hello @@ -699,10 +699,10 @@ operating system on which the build is performed (as reported by C - scons -Q hello - scons -Q hello - edit hello.h - scons -Q hello + scons -Q hello + scons -Q hello + edit hello.h + scons -Q hello XXX THIS EXAMPLE SHOULD BE UP-TO-DATE! XXX --> diff --git a/doc/user/depends.sgml b/doc/user/depends.sgml index b3728852..3d740251 100644 --- a/doc/user/depends.sgml +++ b/doc/user/depends.sgml @@ -375,7 +375,7 @@ operating system on which the build is performed (as reported by C
- Implicit Dependencies: The &CPPPATH; Construction Variable + Implicit Dependencies: The &cv-CPPPATH; Construction Variable @@ -422,7 +422,7 @@ operating system on which the build is performed (as reported by C - The &CPPPATH; value + The &cv-CPPPATH; value tells &SCons; to look in the current directory ('.') for any files included by C source files @@ -448,7 +448,7 @@ operating system on which the build is performed (as reported by C-I. argument - from the &CPPPATH; variable + from the &cv-CPPPATH; variable so that the compilation would find the &hello_h; file in the local directory. @@ -475,8 +475,8 @@ operating system on which the build is performed (as reported by C - Like the &LIBPATH; variable, - the &CPPPATH; variable + Like the &cv-LIBPATH; variable, + the &cv-CPPPATH; variable may be a list of directories, or a string separated by the system-specific path separate character @@ -711,10 +711,10 @@ operating system on which the build is performed (as reported by C - scons -Q hello - scons -Q hello - edit hello.h - scons -Q hello + scons -Q hello + scons -Q hello + edit hello.h + scons -Q hello XXX THIS EXAMPLE SHOULD BE UP-TO-DATE! XXX --> diff --git a/doc/user/environments.in b/doc/user/environments.in index 47a3c444..586242c2 100644 --- a/doc/user/environments.in +++ b/doc/user/environments.in @@ -468,7 +468,8 @@ environment undisturbed. and further specifies that the -O2 (optimization level two) flag should be used when compiling the object file. - In other words, the explicit initializations of &CC; and &CCFLAGS; + In other words, the explicit initializations of + &cv-link-CC; and &cv-link-CCFLAGS; override the default values in the newly-created construction environment. So a run from this example would look like: @@ -476,7 +477,7 @@ environment undisturbed. - scons -Q + scons -Q
@@ -514,7 +515,7 @@ environment undisturbed. - scons -Q + scons -Q @@ -522,7 +523,7 @@ environment undisturbed. We can even use multiple construction environments to build multiple versions of a single program. If you do this by simply trying to use the - &Program; builder with both environments, though, + &b-link-Program; builder with both environments, though, like this: @@ -548,17 +549,17 @@ environment undisturbed. - scons -Q + scons -Q - This is because the two &Program; calls have + This is because the two &b-Program; calls have each implicitly told &SCons; to generate an object file named foo.o, - one with a &CCFLAGS; value of + one with a &cv-link-CCFLAGS; value of -O2 - and one with a &CCFLAGS; value of + and one with a &cv-link-CCFLAGS; value of -g. &SCons; can't just decide that one of them should take precedence over the other, @@ -568,7 +569,7 @@ environment undisturbed. that each environment compile foo.c to a separately-named object file - using the &Object; call, like so: + using the &b-link-Object; builder, like so: @@ -590,12 +591,12 @@ environment undisturbed. - Notice that each call to the &Object; builder + Notice that each call to the &b-Object; builder returns a value, an internal &SCons; object that represents the object file that will be built. We then use that object - as input to the &Program; builder. + as input to the &b-Program; builder. This avoids having to specify explicitly the object file name in multiple places, and makes for a compact, readable @@ -605,7 +606,7 @@ environment undisturbed. - scons -Q + scons -Q
@@ -633,10 +634,10 @@ environment undisturbed. to create three versions of a program, one optimized, one debug, and one with neither. We could do this by creating a "base" construction environment - that sets &CC; to &gcc;, + that sets &cv-link-CC; to &gcc;, and then creating two copies, - one which sets &CCFLAGS; for optimization - and the other which sets &CCFLAGS; for debugging: + one which sets &cv-link-CCFLAGS; for optimization + and the other which sets &cv-CCFLAGS; for debugging: @@ -666,7 +667,7 @@ environment undisturbed. - scons -Q + scons -Q
@@ -693,12 +694,12 @@ environment undisturbed. This example &SConstruct; file doesn't build anything, but because it's actually a Python script, - it will print the value of &CC; for us: + it will print the value of &cv-link-CC; for us:
- scons -Q + scons -Q @@ -729,7 +730,7 @@ environment undisturbed. - scons -Q + scons -Q @@ -739,7 +740,7 @@ environment undisturbed. - scons -Q + scons -Q @@ -775,7 +776,7 @@ environment undisturbed. the example from the previous section that used env['CC'] - to fetch the value of &CC; + to fetch the value of &cv-link-CC; could also be written as: @@ -794,7 +795,7 @@ environment undisturbed. re-expanded until there are no expansions left in the string. So a simple fetch of a value like - $CCCOM: + &cv-link-CCCOM;:
@@ -805,7 +806,7 @@ environment undisturbed. - Will print the unexpanded value of &CCCOM;, + Will print the unexpanded value of &cv-CCCOM;, showing us the construction variables that still need to be expanded: @@ -848,7 +849,7 @@ environment undisturbed. (Note that because we're not expanding this in the context of building something there are no target or source files - for $TARGET and $SOURCES to expand. + for &cv-link-TARGET; and &cv-link-SOURCES; to expand. @@ -895,7 +896,7 @@ environment undisturbed.
- scons -Q + scons -Q @@ -923,7 +924,7 @@ environment undisturbed. - scons -Q + scons -Q @@ -972,14 +973,14 @@ environment undisturbed. - scons + scons Because the replacement occurs while the &SConscript; files are being read, - the $CCFLAGS + the &cv-link-CCFLAGS; variable has already been set to -DDEFINE2 by the time the &foo_o; target is built, @@ -1021,7 +1022,7 @@ environment undisturbed. - scons -Q + scons -Q @@ -1046,7 +1047,7 @@ environment undisturbed. - scons -Q + scons -Q @@ -1081,7 +1082,7 @@ environment undisturbed.
- scons -Q + scons -Q @@ -1106,7 +1107,7 @@ environment undisturbed. - scons -Q + scons -Q diff --git a/doc/user/environments.sgml b/doc/user/environments.sgml index 1ff2fb35..14be5afd 100644 --- a/doc/user/environments.sgml +++ b/doc/user/environments.sgml @@ -463,7 +463,8 @@ environment undisturbed. and further specifies that the -O2 (optimization level two) flag should be used when compiling the object file. - In other words, the explicit initializations of &CC; and &CCFLAGS; + In other words, the explicit initializations of + &cv-link-CC; and &cv-link-CCFLAGS; override the default values in the newly-created construction environment. So a run from this example would look like: @@ -515,7 +516,7 @@ environment undisturbed. We can even use multiple construction environments to build multiple versions of a single program. If you do this by simply trying to use the - &Program; builder with both environments, though, + &b-link-Program; builder with both environments, though, like this:
@@ -544,12 +545,12 @@ environment undisturbed. - This is because the two &Program; calls have + This is because the two &b-Program; calls have each implicitly told &SCons; to generate an object file named foo.o, - one with a &CCFLAGS; value of + one with a &cv-link-CCFLAGS; value of -O2 - and one with a &CCFLAGS; value of + and one with a &cv-link-CCFLAGS; value of -g. &SCons; can't just decide that one of them should take precedence over the other, @@ -559,7 +560,7 @@ environment undisturbed. that each environment compile foo.c to a separately-named object file - using the &Object; call, like so: + using the &b-link-Object; builder, like so: @@ -576,12 +577,12 @@ environment undisturbed. - Notice that each call to the &Object; builder + Notice that each call to the &b-Object; builder returns a value, an internal &SCons; object that represents the object file that will be built. We then use that object - as input to the &Program; builder. + as input to the &b-Program; builder. This avoids having to specify explicitly the object file name in multiple places, and makes for a compact, readable @@ -623,10 +624,10 @@ environment undisturbed. to create three versions of a program, one optimized, one debug, and one with neither. We could do this by creating a "base" construction environment - that sets &CC; to &gcc;, + that sets &cv-link-CC; to &gcc;, and then creating two copies, - one which sets &CCFLAGS; for optimization - and the other which sets &CCFLAGS; for debugging: + one which sets &cv-link-CCFLAGS; for optimization + and the other which sets &cv-CCFLAGS; for debugging: @@ -682,7 +683,7 @@ environment undisturbed. This example &SConstruct; file doesn't build anything, but because it's actually a Python script, - it will print the value of &CC; for us: + it will print the value of &cv-link-CC; for us:
@@ -772,7 +773,7 @@ environment undisturbed. the example from the previous section that used env['CC'] - to fetch the value of &CC; + to fetch the value of &cv-link-CC; could also be written as:
@@ -791,7 +792,7 @@ environment undisturbed. re-expanded until there are no expansions left in the string. So a simple fetch of a value like - $CCCOM: + &cv-link-CCCOM;:
@@ -802,7 +803,7 @@ environment undisturbed. - Will print the unexpanded value of &CCCOM;, + Will print the unexpanded value of &cv-CCCOM;, showing us the construction variables that still need to be expanded: @@ -845,7 +846,7 @@ environment undisturbed. (Note that because we're not expanding this in the context of building something there are no target or source files - for $TARGET and $SOURCES to expand. + for &cv-link-TARGET; and &cv-link-SOURCES; to expand. @@ -975,7 +976,7 @@ environment undisturbed. Because the replacement occurs while the &SConscript; files are being read, - the $CCFLAGS + the &cv-link-CCFLAGS; variable has already been set to -DDEFINE2 by the time the &foo_o; target is built, diff --git a/doc/user/factories.in b/doc/user/factories.in new file mode 100644 index 00000000..95145d89 --- /dev/null +++ b/doc/user/factories.in @@ -0,0 +1,470 @@ + + + + + &SCons; provides a number of platform-independent functions, + called factories, + that perform common file system manipulations + like copying, moving or deleting files and directories, + or making directories. + These functions are factories + because they don't perform the action + at the time they're called, + they each return an &Action; object + that can be executed at the appropriate time. + + + +
+ Copying Files or Directories: The &Copy; Factory + + + + Suppose you want to arrange to make a copy of a file, + and the &Install; builder isn't appropriate + because it may make a hard link on POSIX systems. + One way would be to use the &Copy; action factory + in conjunction with the &Command; builder: + + + + + + Command("file.out", "file.in", Copy("$TARGET", "$SOURCE")) + + file.in + + + + + Notice that the action returned by the &Copy; factory + will expand the &cv-TARGET; and &cv-SOURCE; strings + at the time &file_out; is built, + and that the order of the arguments + is the same as that of a builder itself--that is, + target first, followed by source: + + + + + scons -Q + + + + + You can, of course, name a file explicitly + instead of using &cv-TARGET; or &cv-SOURCE;: + + + + + + Command("file.out", [], Copy("$TARGET", "file.in")) + + file.in + + + + + Which executes as: + + + + + scons -Q + + + + + The usefulness of the &Copy; factory + becomes more apparent when + you use it in a list of actions + passed to the &Command; builder. + For example, suppose you needed to run a + file through a utility that only modifies files in-place, + and can't "pipe" input to output. + One solution is to copy the source file + to a temporary file name, + run the utility, + and then copy the modified temporary file to the target, + which the &Copy; factory makes extremely easy: + + + + + + Command("file.out", "file.in", + [ + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Copy("$TARGET", "tempfile"), + ]) + + + env = DefaultEnvironment() + import os + env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd() + SConscript('S') + + file.in + + touch $* + + + + + + The output then looks like: + + + + + scons -Q + + +
+ +
+ Deleting Files or Directories: The &Delete; Factory + + + + If you need to delete a file, + then the &Delete; factory + can be used in much the same way as + the &Copy; factory. + For example, if we want to make sure that + the temporary file + in our last example doesn't exist before + we copy to it, + we could add &Delete; to the beginning + of the command list: + + + + + + Command("file.out", "file.in", + [ + Delete("tempfile"), + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Copy("$TARGET", "tempfile"), + ]) + + + env = DefaultEnvironment() + import os + env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd() + SConscript('S') + + file.in + + touch $* + + + + + + When then executes as follows: + + + + + scons -Q + + + + + Of course, like all of these &Action; factories, + the &Delete factory also expands + &cv-TARGET; and &cv-SOURCE; variables appropriately. + For example: + + + + + + Command("file.out", "file.in", + [ + Delete("$TARGET"), + Copy("$TARGET", "$SOURCE") + ]) + + file.in + + + + + Executes as: + + + + + scons -Q + + + + + (Note, however, that you typically don't need to + call the &Delete; factory explicitly in this way; + by default, &SCons; deletes its target(s) + for you before executing any action. + + + +
+ +
+ Moving (Renaming) Files or Directories: The &Move; Factory + + + + The &Move; factory + allows you to rename a file or directory. + For example, if we don't want to copy the temporary file, + we could: + + + + + + Command("file.out", "file.in", + [ + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Move("$TARGET", "tempfile"), + ]) + + + env = DefaultEnvironment() + import os + env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd() + SConscript('S') + + file.in + + touch $* + + + + + + Which would execute as: + + + + + scons -Q + + +
+ +
+ Updating the Modification Time of a File: The &Touch; Factory + + + + If you just need to update the + recorded modification time for a file, + use the &Touch; factory: + + + + + + Command("file.out", "file.in", + [ + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Move("$TARGET", "tempfile"), + ]) + + + env = DefaultEnvironment() + import os + env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd() + SConscript('S') + + file.in + + touch $* + + + + + + Which executes as: + + + + + scons -Q + + +
+ +
+ Creating a Directory: The &Mkdir; Factory + + + + If you need to create a directory, + use the &Mkdir; factory. + For example, if we need to process + a file in a temporary directory + in which the processing tool + will create other files that we don't care about, + you could: + + + + + + Command("file.out", "file.in", + [ + Delete("tempdir"), + Mkdir("tempdir"), + Copy("tempdir/${SOURCE.file}", "$SOURCE"), + "process tempdir", + Move("$TARGET", "tempdir/output_file"), + Delete("tempdir"), + ]) + + + env = DefaultEnvironment() + import os + env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd() + SConscript('S') + + file.in + + touch $* + + + + + + Which executes as: + + + + + scons -Q + + +
+ +
+ Changing File or Directory Permissions: The &Chmod; Factory + + + + To change permissions on a file or directory, + use the &Chmod; factory. + The permission argument uses POSIX-style + permission bits and should typically + be expressed as an octal, + not decimal, number: + + + + + + Command("file.out", "file.in", + [ + Copy("$TARGET", "$SOURCE"), + Chmod("$TARGET", 0755), + ]) + + file.in + + + + + Which executes: + + + + + scons -Q + + +
+ +
+ Executing an action immediately: the &Execute; Function + + + + We've been showing you how to use &Action; factories + in the &Command; function. + You can also execute an &Action; returned by a factory + (or actually, any &Action;) + at the time the &SConscript; file is read + by wrapping it up in the &Execute; function. + For example, if we need to make sure that + a directory exists before we build any targets, + + + + + + + Execute(Mkdir('__ROOT__/tmp/my_temp_directory')) + + + + + + Notice that this will + create the directory while + the &SConscript; file is being read: + + + + + scons + + + + + If you're familiar with Python, + you may wonder why you would want to use this + instead of just calling the native Python + os.mkdir() function. + The advantage here is that the &Mkdir; + action will behave appropriately if the user + specifies the &SCons; or + options--that is, + it will print the action but not actually + make the directory when is specified, + or make the directory but not print the action + when is specified. + + + +
diff --git a/doc/user/factories.sgml b/doc/user/factories.sgml new file mode 100644 index 00000000..b145ff2b --- /dev/null +++ b/doc/user/factories.sgml @@ -0,0 +1,427 @@ + + + + + &SCons; provides a number of platform-independent functions, + called factories, + that perform common file system manipulations + like copying, moving or deleting files and directories, + or making directories. + These functions are factories + because they don't perform the action + at the time they're called, + they each return an &Action; object + that can be executed at the appropriate time. + + + +
+ Copying Files or Directories: The &Copy; Factory + + + + Suppose you want to arrange to make a copy of a file, + and the &Install; builder isn't appropriate + because it may make a hard link on POSIX systems. + One way would be to use the &Copy; action factory + in conjunction with the &Command; builder: + + + + + Command("file.out", "file.in", Copy("$TARGET", "$SOURCE")) + + + + + Notice that the action returned by the &Copy; factory + will expand the &cv-TARGET; and &cv-SOURCE; strings + at the time &file_out; is built, + and that the order of the arguments + is the same as that of a builder itself--that is, + target first, followed by source: + + + + + % scons -Q + Copy("file.out", "file.in") + + + + + You can, of course, name a file explicitly + instead of using &cv-TARGET; or &cv-SOURCE;: + + + + + Command("file.out", [], Copy("$TARGET", "file.in")) + + + + + Which executes as: + + + + + % scons -Q + Copy("file.out", "file.in") + + + + + The usefulness of the &Copy; factory + becomes more apparent when + you use it in a list of actions + passed to the &Command; builder. + For example, suppose you needed to run a + file through a utility that only modifies files in-place, + and can't "pipe" input to output. + One solution is to copy the source file + to a temporary file name, + run the utility, + and then copy the modified temporary file to the target, + which the &Copy; factory makes extremely easy: + + + + + Command("file.out", "file.in", + [ + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Copy("$TARGET", "tempfile"), + ]) + + + + + The output then looks like: + + + + + % scons -Q + Copy("tempfile", "file.in") + modify tempfile + Copy("file.out", "tempfile") + + +
+ +
+ Deleting Files or Directories: The &Delete; Factory + + + + If you need to delete a file, + then the &Delete; factory + can be used in much the same way as + the &Copy; factory. + For example, if we want to make sure that + the temporary file + in our last example doesn't exist before + we copy to it, + we could add &Delete; to the beginning + of the command list: + + + + + Command("file.out", "file.in", + [ + Delete("tempfile"), + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Copy("$TARGET", "tempfile"), + ]) + + + + + When then executes as follows: + + + + + % scons -Q + Delete("tempfile") + Copy("tempfile", "file.in") + modify tempfile + Copy("file.out", "tempfile") + + + + + Of course, like all of these &Action; factories, + the &Delete; factory also expands + &cv-TARGET; and &cv-SOURCE; variables appropriately. + For example: + + + + + Command("file.out", "file.in", + [ + Delete("$TARGET"), + Copy("$TARGET", "$SOURCE") + ]) + + + + + Executes as: + + + + + % scons -Q + Delete("file.out") + Copy("file.out", "file.in") + + + + + (Note, however, that you typically don't need to + call the &Delete; factory explicitly in this way; + by default, &SCons; deletes its target(s) + for you before executing any action. + + + +
+ +
+ Moving (Renaming) Files or Directories: The &Move; Factory + + + + The &Move; factory + allows you to rename a file or directory. + For example, if we don't want to copy the temporary file, + we could: + + + + + Command("file.out", "file.in", + [ + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Move("$TARGET", "tempfile"), + ]) + + + + + Which would execute as: + + + + + % scons -Q + Copy("tempfile", "file.in") + modify tempfile + Move("file.out", "tempfile") + + +
+ +
+ Updating the Modification Time of a File: The &Touch; Factory + + + + If you just need to update the + recorded modification time for a file, + use the &Touch; factory: + + + + + Command("file.out", "file.in", + [ + Copy("tempfile", "$SOURCE"), + "modify tempfile", + Move("$TARGET", "tempfile"), + ]) + + + + + Which executes as: + + + + + % scons -Q + Copy("tempfile", "file.in") + modify tempfile + Move("file.out", "tempfile") + + +
+ +
+ Creating a Directory: The &Mkdir; Factory + + + + If you need to create a directory, + use the &Mkdir; factory. + For example, if we need to process + a file in a temporary directory + in which the processing tool + will create other files that we don't care about, + you could: + + + + + Command("file.out", "file.in", + [ + Delete("tempdir"), + Mkdir("tempdir"), + Copy("tempdir/${SOURCE.file}", "$SOURCE"), + "process tempdir", + Move("$TARGET", "tempdir/output_file"), + Delete("tempdir"), + ]) + + + + + Which executes as: + + + + + % scons -Q + Delete("tempdir") + Mkdir("tempdir") + Copy("tempdir/file.in", "file.in") + process tempdir + Move("file.out", "tempdir/output_file") + scons: *** [file.out] No such file or directory + + +
+ +
+ Changing File or Directory Permissions: The &Chmod; Factory + + + + To change permissions on a file or directory, + use the &Chmod; factory. + The permission argument uses POSIX-style + permission bits and should typically + be expressed as an octal, + not decimal, number: + + + + + Command("file.out", "file.in", + [ + Copy("$TARGET", "$SOURCE"), + Chmod("$TARGET", 0755), + ]) + + + + + Which executes: + + + + + % scons -Q + Copy("file.out", "file.in") + Chmod("file.out", 0755) + + +
+ +
+ Executing an action immediately: the &Execute; Function + + + + We've been showing you how to use &Action; factories + in the &Command; function. + You can also execute an &Action; returned by a factory + (or actually, any &Action;) + at the time the &SConscript; file is read + by wrapping it up in the &Execute; function. + For example, if we need to make sure that + a directory exists before we build any targets, + + + + + + Execute(Mkdir('/tmp/my_temp_directory')) + + + + + Notice that this will + create the directory while + the &SConscript; file is being read: + + + + + % scons + scons: Reading SConscript files ... + Mkdir("/tmp/my_temp_directory") + scons: done reading SConscript files. + scons: Building targets ... + scons: `.' is up to date. + scons: done building targets. + + + + + If you're familiar with Python, + you may wonder why you would want to use this + instead of just calling the native Python + os.mkdir() function. + The advantage here is that the &Mkdir; + action will behave appropriately if the user + specifies the &SCons; or + options--that is, + it will print the action but not actually + make the directory when is specified, + or make the directory but not print the action + when is specified. + + + +
diff --git a/doc/user/help.in b/doc/user/help.in index d4b2caa6..4356d18c 100644 --- a/doc/user/help.in +++ b/doc/user/help.in @@ -61,7 +61,66 @@
- scons -h + scons -h + + + + + The &SConscript; files may contain + multiple calls to the &Help; function, + in which case the specified text(s) + will be concatenated when displayed. + This allows you to split up the + help text across multiple &SConscript; files. + In this situation, the order in + which the &SConscript; files are called + will determine the order in which the &Help; functions are called, + which will determine the order in which + the various bits of text will get concatenated. + + + + + + Another use would be to make the help text conditional + on some variable. + For example, suppose you only want to display + a line about building a Windows-only + version of a program when actually + run on Windows. + The following &SConstruct; file: + + + + + + env = Environment() + + Help("\nType: 'scons program' to build the production program.\n") + + if env['PLATFORM'] == 'win32': + Help("\nType: 'scons windebug' to build the Windows debug version.\n") + + + + + + Will display the completely help text on Windows: + + + + + scons -h + + + + + But only show the relevant option on a Linux or UNIX system: + + + + + scons -h diff --git a/doc/user/help.sgml b/doc/user/help.sgml index 9db5bf09..ca44a40f 100644 --- a/doc/user/help.sgml +++ b/doc/user/help.sgml @@ -71,6 +71,77 @@ + The &SConscript; files may contain + multiple calls to the &Help; function, + in which case the specified text(s) + will be concatenated when displayed. + This allows you to split up the + help text across multiple &SConscript; files. + In this situation, the order in + which the &SConscript; files are called + will determine the order in which the &Help; functions are called, + which will determine the order in which + the various bits of text will get concatenated. + + + + + + Another use would be to make the help text conditional + on some variable. + For example, suppose you only want to display + a line about building a Windows-only + version of a program when actually + run on Windows. + The following &SConstruct; file: + + + + + env = Environment() + + Help("\nType: 'scons program' to build the production program.\n") + + if env['PLATFORM'] == 'win32': + Help("\nType: 'scons windebug' to build the Windows debug version.\n") + + + + + Will display the completely help text on Windows: + + + + + C:\>scons -h + scons: Reading SConscript files ... + scons: done reading SConscript files. + + Type: 'scons program' to build the production program. + + Type: 'scons windebug' to build the Windows debug version. + + Use scons -H for help about command-line options. + + + + + But only show the relevant option on a Linux or UNIX system: + + + + + % scons -h + scons: Reading SConscript files ... + scons: done reading SConscript files. + + Type: 'scons program' to build the production program. + + Use scons -H for help about command-line options. + + + + If there is no &Help; text in the &SConstruct; or &SConscript; files, &SCons; will revert to displaying its diff --git a/doc/user/hierarchy.in b/doc/user/hierarchy.in index 0c4563d4..355aca34 100644 --- a/doc/user/hierarchy.in +++ b/doc/user/hierarchy.in @@ -340,7 +340,7 @@ make no difference to the build. - scons -Q + scons -Q @@ -411,7 +411,7 @@ make no difference to the build. - scons -Q + scons -Q @@ -462,7 +462,7 @@ make no difference to the build. - scons -Q + scons -Q @@ -767,7 +767,7 @@ make no difference to the build. - scons -Q + scons -Q diff --git a/doc/user/install.in b/doc/user/install.in index dfbb822f..ac9510f2 100644 --- a/doc/user/install.in +++ b/doc/user/install.in @@ -62,8 +62,8 @@ - scons -Q - scons -Q __ROOT__/usr/bin + scons -Q + scons -Q __ROOT__/usr/bin @@ -101,8 +101,8 @@ - scons -Q - scons -Q install + scons -Q + scons -Q install
@@ -155,7 +155,7 @@ - scons -Q install + scons -Q install
@@ -194,7 +194,7 @@ - scons -Q install + scons -Q install @@ -241,7 +241,7 @@ - scons -Q install + scons -Q install diff --git a/doc/user/java.in b/doc/user/java.in index 66b9c867..9768dabc 100644 --- a/doc/user/java.in +++ b/doc/user/java.in @@ -38,7 +38,7 @@
- Building Java Class Files: the &Java; Builder + Building Java Class Files: the &b-Java; Builder @@ -49,7 +49,7 @@ to turn them into one or more .class files. In &SCons;, you do this - by giving the &Java; Builder + by giving the &b-link-Java; Builder a target directory in which to put the .class files, and a source directory that contains @@ -99,7 +99,7 @@ - scons -Q + scons -Q @@ -191,8 +191,8 @@ - scons -Q - scons -Q classes + scons -Q + scons -Q classes @@ -215,25 +215,25 @@ - scons -Q - scons -Q -c classes + scons -Q + scons -Q -c classes
- Building Java Archive (<filename>.jar</filename>) Files: the &Jar; Builder + Building Java Archive (<filename>.jar</filename>) Files: the &b-Jar; Builder After building the class files, it's common to collect them into a Java archive (.jar) file, - which you do by calling the &Jar; Builder method. + which you do by calling the &b-link-Jar; Builder method. If you want to just collect all of the class files within a subdirectory, you can just specify that subdirectory - as the &Jar; source: + as the &b-Jar; source: @@ -281,7 +281,7 @@ - scons -Q + scons -Q @@ -291,13 +291,13 @@ for multiple programs in one location, and only archive some of them in each .jar file, - you can pass the &Jar; builder a + you can pass the &b-Jar; builder a list of files as its source. It's extremely simple to create multiple .jar files this way, using the lists of target class files created - by calls to the &Java; builder - as sources to the various &Jar; calls: + by calls to the &b-link-Java; builder + as sources to the various &b-Jar; calls: @@ -357,19 +357,19 @@ - scons -Q + scons -Q
- Building C Header and Stub Files: the &JavaH; Builder + Building C Header and Stub Files: the &b-JavaH; Builder You can generate C header and source files for implementing native methods, - by using the &JavaH; Builder. + by using the &b-link-JavaH; Builder. There are several ways of using the &JavaH Builder. One typical invocation might look like: @@ -412,7 +412,7 @@ The source is a list of class files generated by the - call to the &Java; Builder, + call to the &b-link-Java; Builder, and the target is the output directory in which we want the C header files placed. The target @@ -422,7 +422,7 @@ - scons -Q + scons -Q @@ -447,15 +447,15 @@ Although it's more convenient to use the list of class files returned by - the &Java; Builder - as the source of a call to the &JavaH; Builder, + the &b-Java; Builder + as the source of a call to the &b-JavaH; Builder, you can specify the list of class files by hand, if you prefer. If you do, you need to set the - &JAVACLASSDIR; construction variable - when calling &JavaH;: + &cv-link-JAVACLASSDIR; construction variable + when calling &b-JavaH;: @@ -498,14 +498,14 @@ - The &JAVACLASSDIR; value then + The &cv-JAVACLASSDIR; value then gets converted into the when &SCons; runs &javah;: - scons -Q + scons -Q @@ -513,7 +513,7 @@ Lastly, if you don't want a separate header file generated for each source file, you can specify an explicit File Node - as the target of the &JavaH; Builder: + as the target of the &b-JavaH; Builder: @@ -554,7 +554,7 @@ Because &SCons; assumes by default - that the target of the &JavaH; builder is a directory, + that the target of the &b-JavaH; builder is a directory, you need to use the &File; function to make sure that &SCons; doesn't create a directory named native.h. @@ -565,20 +565,20 @@ - scons -Q + scons -Q
- Building RMI Stub and Skeleton Class Files: the &RMIC; Builder + Building RMI Stub and Skeleton Class Files: the &b-RMIC; Builder You can generate Remote Method Invocation stubs - by using the &RMIC; Builder. + by using the &b-link-RMIC; Builder. The source is a list of directories, - typically returned by a call to the &Java; Builder, + typically returned by a call to the &b-link-Java; Builder, and the target is an output directory where the _Stub.class and _Skel.class files will @@ -613,7 +613,7 @@ - As it did with the &JavaH; Builder, + As it did with the &b-link-JavaH; Builder, &SCons; remembers the class directory and passes it as the option to &rmic: @@ -621,7 +621,7 @@ - scons -Q + scons -Q diff --git a/doc/user/java.sgml b/doc/user/java.sgml index e3eee533..18769168 100644 --- a/doc/user/java.sgml +++ b/doc/user/java.sgml @@ -38,7 +38,7 @@
- Building Java Class Files: the &Java; Builder + Building Java Class Files: the &b-Java; Builder @@ -49,7 +49,7 @@ to turn them into one or more .class files. In &SCons;, you do this - by giving the &Java; Builder + by giving the &b-link-Java; Builder a target directory in which to put the .class files, and a source directory that contains @@ -158,18 +158,18 @@
- Building Java Archive (<filename>.jar</filename>) Files: the &Jar; Builder + Building Java Archive (<filename>.jar</filename>) Files: the &b-Jar; Builder After building the class files, it's common to collect them into a Java archive (.jar) file, - which you do by calling the &Jar; Builder method. + which you do by calling the &b-link-Jar; Builder method. If you want to just collect all of the class files within a subdirectory, you can just specify that subdirectory - as the &Jar; source: + as the &b-Jar; source: @@ -200,13 +200,13 @@ for multiple programs in one location, and only archive some of them in each .jar file, - you can pass the &Jar; builder a + you can pass the &b-Jar; builder a list of files as its source. It's extremely simple to create multiple .jar files this way, using the lists of target class files created - by calls to the &Java; builder - as sources to the various &Jar; calls: + by calls to the &b-link-Java; builder + as sources to the various &b-Jar; calls: @@ -238,13 +238,13 @@
- Building C Header and Stub Files: the &JavaH; Builder + Building C Header and Stub Files: the &b-JavaH; Builder You can generate C header and source files for implementing native methods, - by using the &JavaH; Builder. + by using the &b-link-JavaH; Builder. There are several ways of using the &JavaH; Builder. One typical invocation might look like: @@ -258,7 +258,7 @@ The source is a list of class files generated by the - call to the &Java; Builder, + call to the &b-link-Java; Builder, and the target is the output directory in which we want the C header files placed. The target @@ -295,15 +295,15 @@ Although it's more convenient to use the list of class files returned by - the &Java; Builder - as the source of a call to the &JavaH; Builder, + the &b-Java; Builder + as the source of a call to the &b-JavaH; Builder, you can specify the list of class files by hand, if you prefer. If you do, you need to set the - &JAVACLASSDIR; construction variable - when calling &JavaH;: + &cv-link-JAVACLASSDIR; construction variable + when calling &b-JavaH;: @@ -317,7 +317,7 @@ - The &JAVACLASSDIR; value then + The &cv-JAVACLASSDIR; value then gets converted into the when &SCons; runs &javah;: @@ -334,7 +334,7 @@ Lastly, if you don't want a separate header file generated for each source file, you can specify an explicit File Node - as the target of the &JavaH; Builder: + as the target of the &b-JavaH; Builder: @@ -346,7 +346,7 @@ Because &SCons; assumes by default - that the target of the &JavaH; builder is a directory, + that the target of the &b-JavaH; builder is a directory, you need to use the &File; function to make sure that &SCons; doesn't create a directory named native.h. @@ -365,14 +365,14 @@
- Building RMI Stub and Skeleton Class Files: the &RMIC; Builder + Building RMI Stub and Skeleton Class Files: the &b-RMIC; Builder You can generate Remote Method Invocation stubs - by using the &RMIC; Builder. + by using the &b-link-RMIC; Builder. The source is a list of directories, - typically returned by a call to the &Java; Builder, + typically returned by a call to the &b-link-Java; Builder, and the target is an output directory where the _Stub.class and _Skel.class files will @@ -387,7 +387,7 @@ - As it did with the &JavaH; Builder, + As it did with the &b-link-JavaH; Builder, &SCons; remembers the class directory and passes it as the option to &rmic;: diff --git a/doc/user/less-simple.in b/doc/user/less-simple.in index c0dafb10..ccc59b65 100644 --- a/doc/user/less-simple.in +++ b/doc/user/less-simple.in @@ -40,7 +40,7 @@ - You've seen that when you call the &Program; builder method, + You've seen that when you call the &b-link-Program; builder method, it builds the resulting program with the same base name as the source file. That is, the following call to build an @@ -91,7 +91,7 @@ - scons -Q + scons -Q @@ -102,7 +102,7 @@ - scons -Q + scons -Q
@@ -146,7 +146,7 @@
- scons -Q + scons -Q @@ -193,7 +193,7 @@ - scons -Q + scons -Q @@ -203,7 +203,7 @@ - scons -Q + scons -Q
@@ -220,7 +220,7 @@ - Program('hello', ['file1.c', 'file2']) + Program('hello', ['file1.c', 'file2.c']) @@ -351,13 +351,13 @@ Putting the call to the &Split; function - inside the Program call + inside the &b-Program; call can also be a little unwieldy. A more readable alternative is to assign the output from the &Split; call to a variable name, and then use the variable when calling the - Program function: + &b-Program; function: @@ -451,7 +451,7 @@ In order to compile multiple programs within the same &SConstruct; file, - simply call the Program method + simply call the &Program; method multiple times, once for each program you need to build: @@ -480,7 +480,7 @@ - scons -Q + scons -Q @@ -555,7 +555,7 @@ - scons -Q + scons -Q diff --git a/doc/user/less-simple.sgml b/doc/user/less-simple.sgml index d3a6edcd..1aa993d7 100644 --- a/doc/user/less-simple.sgml +++ b/doc/user/less-simple.sgml @@ -40,7 +40,7 @@ - You've seen that when you call the &Program; builder method, + You've seen that when you call the &b-link-Program; builder method, it builds the resulting program with the same base name as the source file. That is, the following call to build an @@ -209,7 +209,7 @@ - Program('hello', ['file1.c', 'file2']) + Program('hello', ['file1.c', 'file2.c']) @@ -340,13 +340,13 @@ Putting the call to the &Split; function - inside the Program call + inside the &b-Program; call can also be a little unwieldy. A more readable alternative is to assign the output from the &Split; call to a variable name, and then use the variable when calling the - Program function: + &b-Program; function: @@ -440,7 +440,7 @@ In order to compile multiple programs within the same &SConstruct; file, - simply call the Program method + simply call the &Program; method multiple times, once for each program you need to build: diff --git a/doc/user/libraries.in b/doc/user/libraries.in index 542cd134..e5368d17 100644 --- a/doc/user/libraries.in +++ b/doc/user/libraries.in @@ -37,8 +37,8 @@ - You build your own libraries by specifying &Library; - instead of &Program;: + You build your own libraries by specifying &b-link-Library; + instead of &b-link-Program;: @@ -67,7 +67,7 @@ - scons -Q + scons -Q @@ -78,7 +78,7 @@ - scons -Q + scons -Q @@ -94,14 +94,14 @@
- Building Static Libraries Explicitly: the &StaticLibrary; Builder + Building Static Libraries Explicitly: the &b-StaticLibrary; Builder - The &Library; function builds a traditional static library. + The &b-link-Library; function builds a traditional static library. If you want to be explicit about the type of library being built, - you can use the synonym &StaticLibrary; function - instead of &Library: + you can use the synonym &b-link-StaticLibrary; function + instead of &b-Library: @@ -114,20 +114,20 @@ There is no functional difference between the - &StaticLibrary; and &Library; functions. + &b-link-StaticLibrary; and &b-Library; functions.
- Building Shared (DLL) Libraries: the &SharedLibrary; Builder + Building Shared (DLL) Libraries: the &b-SharedLibrary; Builder If you want to build a shared library (on POSIX systems) or a DLL file (on Windows systems), - you use the &SharedLibrary; function: + you use the &b-link-SharedLibrary; function: @@ -153,7 +153,7 @@ - scons -Q + scons -Q @@ -163,7 +163,7 @@ - scons -Q + scons -Q @@ -188,10 +188,10 @@ Usually, you build a library because you want to link it with one or more programs. You link libraries with a program by specifying - the libraries in the &LIBS; construction variable, + the libraries in the &cv-link-LIBS; construction variable, and by specifying the directory in which the library will be found in the - &LIBPATH; construction variable: + &cv-link-LIBPATH; construction variable: @@ -231,7 +231,7 @@ - scons -Q + scons -Q @@ -242,7 +242,7 @@ - scons -Q + scons -Q @@ -288,7 +288,7 @@
- Finding Libraries: the &LIBPATH; Construction Variable + Finding Libraries: the &cv-LIBPATH; Construction Variable @@ -296,8 +296,8 @@ certain system-defined directories for libraries. &SCons; knows how to look for libraries in directories that you specify with the - &LIBPATH; construction variable. - &LIBPATH; consists of a list of + &cv-link-LIBPATH; construction variable. + &cv-LIBPATH; consists of a list of directory names, like so: @@ -356,7 +356,7 @@ - scons -Q + scons -Q @@ -367,7 +367,7 @@ - scons -Q + scons -Q diff --git a/doc/user/libraries.sgml b/doc/user/libraries.sgml index 8e25c9a9..aab30450 100644 --- a/doc/user/libraries.sgml +++ b/doc/user/libraries.sgml @@ -37,8 +37,8 @@ - You build your own libraries by specifying &Library; - instead of &Program;: + You build your own libraries by specifying &b-link-Library; + instead of &b-link-Program;: @@ -92,14 +92,14 @@
- Building Static Libraries Explicitly: the &StaticLibrary; Builder + Building Static Libraries Explicitly: the &b-StaticLibrary; Builder - The &Library; function builds a traditional static library. + The &b-link-Library; function builds a traditional static library. If you want to be explicit about the type of library being built, - you can use the synonym &StaticLibrary; function - instead of &Library;: + you can use the synonym &b-link-StaticLibrary; function + instead of &b-Library: @@ -110,20 +110,20 @@ There is no functional difference between the - &StaticLibrary; and &Library; functions. + &b-link-StaticLibrary; and &b-Library; functions.
- Building Shared (DLL) Libraries: the &SharedLibrary; Builder + Building Shared (DLL) Libraries: the &b-SharedLibrary; Builder If you want to build a shared library (on POSIX systems) or a DLL file (on Windows systems), - you use the &SharedLibrary; function: + you use the &b-link-SharedLibrary; function: @@ -157,6 +157,7 @@ cl /nologo /c f2.c /Fof2.obj cl /nologo /c f3.c /Fof3.obj link /nologo /dll /out:foo.dll /implib:foo.lib f1.obj f2.obj f3.obj + RegServerFunc(target, source, env) @@ -181,10 +182,10 @@ Usually, you build a library because you want to link it with one or more programs. You link libraries with a program by specifying - the libraries in the &LIBS; construction variable, + the libraries in the &cv-link-LIBS; construction variable, and by specifying the directory in which the library will be found in the - &LIBPATH; construction variable: + &cv-link-LIBPATH; construction variable: @@ -280,7 +281,7 @@
- Finding Libraries: the &LIBPATH; Construction Variable + Finding Libraries: the &cv-LIBPATH; Construction Variable @@ -288,8 +289,8 @@ certain system-defined directories for libraries. &SCons; knows how to look for libraries in directories that you specify with the - &LIBPATH; construction variable. - &LIBPATH; consists of a list of + &cv-link-LIBPATH; construction variable. + &cv-LIBPATH; consists of a list of directory names, like so: diff --git a/doc/user/main.in b/doc/user/main.in index 3e0e047c..a720915b 100644 --- a/doc/user/main.in +++ b/doc/user/main.in @@ -32,10 +32,20 @@ %scons; + + %builders-mod; + + + %tools-mod; + + + %variables-mod; + + @@ -48,6 +58,7 @@ + @@ -56,8 +67,10 @@ + + @@ -66,9 +79,15 @@ + + + + + + ]> @@ -137,6 +156,15 @@ &environments; + + Controlling the External Environment Used to Execute Build Commands &ENV_file; @@ -157,6 +185,11 @@ &install; + + Platform-Independent File System Manipulation + &factories; + + Preventing Removal of Targets: the &Precious; Function &precious; @@ -273,6 +306,21 @@ Tools() --> + + Construction Variables + &variables; + + + + Builders + &builders; + + + + Tools + &tools; + + Handling Common Tasks &tasks; @@ -280,6 +328,11 @@ + Controlling the External Environment Used to Execute Build Commands &ENV_file; @@ -157,6 +185,11 @@ &install; + + Platform-Independent File System Manipulation + &factories; + + Preventing Removal of Targets: the &Precious; Function &precious; @@ -273,6 +306,21 @@ Tools() --> + + Construction Variables + &variables; + + + + Builders + &builders; + + + + Tools + &tools; + + Handling Common Tasks &tasks; @@ -280,6 +328,11 @@ + + + + Configuring the right options to build programs to work with the + libraries--especially shared libraries--installed on a POSIX system + can be very complicated. + Various utilies with names that end in config + can return command-line options for the + GNU Compiler Collection + + + + + + &SCons; construction environments have a &ParseConfig; method + that executes a utility and configures + the appropriate construction variables + in the environment + based on the command-line options + returned by the specified command. + + + + + + + + env = Environment() + env.ParseConfig("pkg-config") + + + int f1() { } + + + int f2() { } + + + int f3() { } + + + + + + &SCons; will execute the specified command string + and XXX + + + + + scons -Q + + + + + XXX + + diff --git a/doc/user/parseconfig.sgml b/doc/user/parseconfig.sgml new file mode 100644 index 00000000..067ef375 --- /dev/null +++ b/doc/user/parseconfig.sgml @@ -0,0 +1,72 @@ + + + + + Configuring the right options to build programs to work with the + libraries--especially shared libraries--installed on a POSIX system + can be very complicated. + Various utilies with names that end in config + can return command-line options for the + GNU Compiler Collection + + + + + + &SCons; construction environments have a &ParseConfig; method + that executes a utility and configures + the appropriate construction variables + in the environment + based on the command-line options + returned by the specified command. + + + + + + + env = Environment() + env.ParseConfig("pkg-config") + + + + + &SCons; will execute the specified command string + and XXX + + + + + % scons -Q + scons: `.' is up to date. + Must specify package names on the command line + + + + + XXX + + diff --git a/doc/user/precious.in b/doc/user/precious.in index fb32f2bd..f5e000b0 100644 --- a/doc/user/precious.in +++ b/doc/user/precious.in @@ -79,7 +79,7 @@ which the C method is called. - scons -Q + scons -Q diff --git a/doc/user/preface.in b/doc/user/preface.in index 190dad13..9d0323e9 100644 --- a/doc/user/preface.in +++ b/doc/user/preface.in @@ -228,7 +228,8 @@ One word of warning as you read through this Guide: Like too much Open Source software out there, - the &SCons; documentation lags the available features. + the &SCons; documentation isn't always + kept up-to-date with the available features. In other words, there's a lot that &SCons; can do that isn't yet covered in this User's Guide. diff --git a/doc/user/preface.sgml b/doc/user/preface.sgml index dfececda..47dbd983 100644 --- a/doc/user/preface.sgml +++ b/doc/user/preface.sgml @@ -228,7 +228,8 @@ One word of warning as you read through this Guide: Like too much Open Source software out there, - the &SCons; documentation lags the available features. + the &SCons; documentation isn't always + kept up-to-date with the available features. In other words, there's a lot that &SCons; can do that isn't yet covered in this User's Guide. diff --git a/doc/user/python.in b/doc/user/python.in new file mode 100644 index 00000000..e2a7cdd0 --- /dev/null +++ b/doc/user/python.in @@ -0,0 +1,154 @@ + + + diff --git a/doc/user/python.sgml b/doc/user/python.sgml new file mode 100644 index 00000000..e2a7cdd0 --- /dev/null +++ b/doc/user/python.sgml @@ -0,0 +1,154 @@ + + + diff --git a/doc/user/repositories.in b/doc/user/repositories.in index 79d9a758..d2c92369 100644 --- a/doc/user/repositories.in +++ b/doc/user/repositories.in @@ -240,7 +240,7 @@ subdirectories under the repository tree. - scons -Q + scons -Q @@ -264,7 +264,7 @@ subdirectories under the repository tree. - scons -Q + scons -Q gcc -c /usr/repository1/hello.c -o hello.o gcc -o hello hello.o @@ -289,7 +289,7 @@ subdirectories under the repository tree. - scons -Q + scons -Q @@ -376,8 +376,8 @@ subdirectories under the repository tree. - cd /usr/repository1 - scons -Q + cd /usr/repository1 + scons -Q @@ -402,9 +402,9 @@ subdirectories under the repository tree. diff --git a/doc/user/repositories.sgml b/doc/user/repositories.sgml index e728bc4e..03928536 100644 --- a/doc/user/repositories.sgml +++ b/doc/user/repositories.sgml @@ -374,9 +374,9 @@ subdirectories under the repository tree. diff --git a/doc/user/scanners.in b/doc/user/scanners.in index 946c0580..a0029ef4 100644 --- a/doc/user/scanners.in +++ b/doc/user/scanners.in @@ -228,7 +228,7 @@ over the file scanning rather than being called for each input line: A list of directories that form the search path for included files for this scanner. - This is how &SCons; handles the &CPPPATH; and &LIBPATH; + This is how &SCons; handles the &cv-link-CPPPATH; and &cv-link-LIBPATH; variables. @@ -257,7 +257,7 @@ over the file scanning rather than being called for each input line: which typically takes an skeys argument to associate the type of file suffix with this scanner. The Scanner object must then be associated with the - &SCANNERS; construction variable of a construction environment, + &cv-link-SCANNERS; construction variable of a construction environment, typically by using the &Append; method: @@ -320,10 +320,10 @@ over the file scanning rather than being called for each input line: - scons -Q - edit other_file - scons -Q - scons -Q + scons -Q + edit other_file + scons -Q + scons -Q --> diff --git a/doc/user/scanners.sgml b/doc/user/scanners.sgml index 46323698..b4756c53 100644 --- a/doc/user/scanners.sgml +++ b/doc/user/scanners.sgml @@ -228,7 +228,7 @@ over the file scanning rather than being called for each input line: A list of directories that form the search path for included files for this scanner. - This is how &SCons; handles the &CPPPATH; and &LIBPATH; + This is how &SCons; handles the &cv-link-CPPPATH; and &cv-link-LIBPATH; variables. @@ -257,7 +257,7 @@ over the file scanning rather than being called for each input line: which typically takes an skeys argument to associate the type of file suffix with this scanner. The Scanner object must then be associated with the - &SCANNERS; construction variable of a construction environment, + &cv-link-SCANNERS; construction variable of a construction environment, typically by using the &Append; method: @@ -306,10 +306,10 @@ over the file scanning rather than being called for each input line: - scons -Q - edit other_file - scons -Q - scons -Q + scons -Q + edit other_file + scons -Q + scons -Q --> diff --git a/doc/user/sconf.in b/doc/user/sconf.in index 525b0fc4..14c10b7c 100644 --- a/doc/user/sconf.in +++ b/doc/user/sconf.in @@ -67,6 +67,28 @@ + &SCons; provides a number of basic checks, + as well as a mechanism for adding your own custom checks. + + + + + + Note that &SCons; uses its own dependency + mechanism to determine when a check + needs to be run--that is, + &SCons; does not run the checks + every time it is invoked, + but caches the values returned by previous checks + and uses the cached values unless something has changed. + This saves a tremendous amount + of developer time while working on + cross-platform build issues. + + + + + The next sections describe the basic checks that &SCons; supports, as well as how to add your own custom checks. @@ -229,14 +251,14 @@ - + env = Environment() conf = Configure(env) if not conf.CheckType('off_t', '#include &lt;sys/types.h&gt;\n'): print 'Did not find off_t typedef, assuming int' conf.env.Append(CCFLAGS = '-Doff_t=int') env = conf.Finish() - +
@@ -259,7 +281,7 @@ - + mylib_test_source_file = """ #include &lt;mylib.h&gt; int main(int argc, char **argv) @@ -274,7 +296,7 @@ result = context.TryLink(mylib_test_source_file, '.c') context.Result(result) return result - + @@ -336,7 +358,7 @@ - + mylib_test_source_file = """ #include &lt;mylib.h&gt; int main(int argc, char **argv) @@ -361,7 +383,7 @@ # We would then add actual calls like Program() to build # something using the "env" construction environment. - + @@ -396,3 +418,54 @@
+ +
+ Not Configuring When Cleaning Targets + + + + Using multi-platform configuration + as described in the previous sections + will run the configuration commands + even when invoking + scons -c + to clean targets: + + + + + % scons -Q -c + Checking for MyLibrary... ok + Removed foo.o + Removed foo + + + + + Although running the platform checks + when removing targets doesn't hurt anything, + it's usually unnecessary. + You can avoid this by using the + &GetOption(); method to + check whether the (clean) + option has been invoked on the command line: + + + + + env = Environment() + if not env.GetOption('clean'): + conf = Configure(env, custom_tests = {'CheckMyLibrary' : CheckMyLibrary}) + if not conf.CheckMyLibrary(): + print 'MyLibrary is not installed!' + Exit(1) + env = conf.Finish() + + + + % scons -Q -c + Removed foo.o + Removed foo + + +
diff --git a/doc/user/sconf.sgml b/doc/user/sconf.sgml index 2e2a698a..997c97d2 100644 --- a/doc/user/sconf.sgml +++ b/doc/user/sconf.sgml @@ -67,6 +67,28 @@ + &SCons; provides a number of basic checks, + as well as a mechanism for adding your own custom checks. + + + + + + Note that &SCons; uses its own dependency + mechanism to determine when a check + needs to be run--that is, + &SCons; does not run the checks + every time it is invoked, + but caches the values returned by previous checks + and uses the cached values unless something has changed. + This saves a tremendous amount + of developer time while working on + cross-platform build issues. + + + + + The next sections describe the basic checks that &SCons; supports, as well as how to add your own custom checks. @@ -396,3 +418,54 @@
+ +
+ Not Configuring When Cleaning Targets + + + + Using multi-platform configuration + as described in the previous sections + will run the configuration commands + even when invoking + scons -c + to clean targets: + + + + + % scons -Q -c + Checking for MyLibrary... ok + Removed foo.o + Removed foo + + + + + Although running the platform checks + when removing targets doesn't hurt anything, + it's usually unnecessary. + You can avoid this by using the + &GetOption;(); method to + check whether the (clean) + option has been invoked on the command line: + + + + + env = Environment() + if not env.GetOption('clean'): + conf = Configure(env, custom_tests = {'CheckMyLibrary' : CheckMyLibrary}) + if not conf.CheckMyLibrary(): + print 'MyLibrary is not installed!' + Exit(1) + env = conf.Finish() + + + + % scons -Q -c + Removed foo.o + Removed foo + + +
diff --git a/doc/user/separate.in b/doc/user/separate.in index d613f424..6d497a20 100644 --- a/doc/user/separate.in +++ b/doc/user/separate.in @@ -160,9 +160,9 @@ program using the F path name. - ls src - scons -Q - ls build + ls src + scons -Q + ls build @@ -357,9 +357,9 @@ program using the F path name. - ls src - scons -Q - ls build + ls src + scons -Q + ls build @@ -388,9 +388,9 @@ program using the F path name. - ls src - scons -Q - ls build + ls src + scons -Q + ls build @@ -439,9 +439,9 @@ program using the F path name. - ls src - scons -Q - ls build + ls src + scons -Q + ls build diff --git a/doc/user/simple.in b/doc/user/simple.in index 4ac6d332..57fdd3ad 100644 --- a/doc/user/simple.in +++ b/doc/user/simple.in @@ -77,7 +77,7 @@ and the input file from which you want it built (the hello.c file). - &Program; is a &builder_method;, + &b-link-Program; is a builder_method, a Python call that tells &SCons; that you want to build an executable program. @@ -92,7 +92,7 @@ - scons + scons @@ -103,7 +103,7 @@ - scons + scons @@ -147,10 +147,10 @@ - The &Program; builder method is only one of + The &b-link-Program; builder method is only one of many builder methods that &SCons; provides to build different types of files. - Another is the &Object; builder method, + Another is the &b-link-Object; builder method, which tells &SCons; to build an object file from the specified source file: @@ -173,7 +173,7 @@ - scons + scons @@ -184,7 +184,7 @@ - scons + scons @@ -195,8 +195,8 @@ &SCons; also makes building with Java extremely easy. - Unlike the &Program; and &Object; builder methods, - however, the &Java; builder method + Unlike the &b-link-Program; and &b-link-Object; builder methods, + however, the &b-link-Java; builder method requires that you specify the name of a destination directory in which you want the class files placed, @@ -231,7 +231,7 @@ - scons + scons @@ -272,8 +272,8 @@ - scons - scons -c + scons + scons -c @@ -283,8 +283,8 @@ - scons - scons -c + scons + scons -c @@ -378,7 +378,7 @@ which to do things. - In other words, when you call the &Program; builder + In other words, when you call the &b-link-Program; builder (or any other builder method), you're not telling &SCons; to build the program at the instant the builder method is called. @@ -396,7 +396,7 @@ &SCons; reflects this distinction between - calling a builder method like &Program;> + calling a builder method like &b-Program;> and actually building the program by printing the status messages that indicate when it's "just reading" the &SConstruct; file, @@ -415,7 +415,7 @@ Python has a print statement that prints a string of characters to the screen. If we put print statements around - our calls to the &Program; builder method: + our calls to the &b-Program; builder method: @@ -447,7 +447,7 @@ - scons + scons @@ -475,7 +475,7 @@ - scons + scons @@ -501,7 +501,7 @@ - scons -Q + scons -Q diff --git a/doc/user/simple.sgml b/doc/user/simple.sgml index b925d041..fc68d170 100644 --- a/doc/user/simple.sgml +++ b/doc/user/simple.sgml @@ -72,7 +72,7 @@ and the input file from which you want it built (the hello.c file). - &Program; is a &builder_method;, + &b-link-Program; is a builder_method, a Python call that tells &SCons; that you want to build an executable program. @@ -154,10 +154,10 @@ - The &Program; builder method is only one of + The &b-link-Program; builder method is only one of many builder methods that &SCons; provides to build different types of files. - Another is the &Object; builder method, + Another is the &b-link-Object; builder method, which tells &SCons; to build an object file from the specified source file: @@ -207,8 +207,8 @@ &SCons; also makes building with Java extremely easy. - Unlike the &Program; and &Object; builder methods, - however, the &Java; builder method + Unlike the &b-link-Program; and &b-link-Object; builder methods, + however, the &b-link-Java; builder method requires that you specify the name of a destination directory in which you want the class files placed, @@ -401,7 +401,7 @@ which to do things. - In other words, when you call the &Program; builder + In other words, when you call the &b-link-Program; builder (or any other builder method), you're not telling &SCons; to build the program at the instant the builder method is called. @@ -419,7 +419,7 @@ &SCons; reflects this distinction between - calling a builder method like &Program;> + calling a builder method like &b-Program;> and actually building the program by printing the status messages that indicate when it's "just reading" the &SConstruct; file, @@ -438,7 +438,7 @@ Python has a print statement that prints a string of characters to the screen. If we put print statements around - our calls to the &Program; builder method: + our calls to the &b-Program; builder method: diff --git a/doc/user/sourcecode.in b/doc/user/sourcecode.in index c40c5129..04c76d04 100644 --- a/doc/user/sourcecode.in +++ b/doc/user/sourcecode.in @@ -54,7 +54,7 @@ - scons -Q + scons -Q @@ -77,7 +77,7 @@ - scons -Q + scons -Q @@ -103,7 +103,7 @@ - scons -Q + scons -Q @@ -129,7 +129,7 @@ - scons -Q + scons -Q @@ -154,7 +154,7 @@ - scons -Q + scons -Q diff --git a/doc/user/sourcecode.sgml b/doc/user/sourcecode.sgml index daa9ad78..6ea0b21f 100644 --- a/doc/user/sourcecode.sgml +++ b/doc/user/sourcecode.sgml @@ -153,7 +153,7 @@ - scons -Q + scons -Q diff --git a/doc/user/tools.in b/doc/user/tools.in new file mode 100644 index 00000000..8eaa35ea --- /dev/null +++ b/doc/user/tools.in @@ -0,0 +1,38 @@ + + + + +This appendix contains descriptions of all of the +Tools that are +available "out of the box" in this version of SCons. + + + + + +&tools-gen; + + diff --git a/doc/user/tools.sgml b/doc/user/tools.sgml new file mode 100644 index 00000000..8eaa35ea --- /dev/null +++ b/doc/user/tools.sgml @@ -0,0 +1,38 @@ + + + + +This appendix contains descriptions of all of the +Tools that are +available "out of the box" in this version of SCons. + + + + + +&tools-gen; + + diff --git a/doc/user/troubleshoot.in b/doc/user/troubleshoot.in index e5c008d3..206e50e6 100644 --- a/doc/user/troubleshoot.in +++ b/doc/user/troubleshoot.in @@ -77,9 +77,9 @@ - scons -Q - scons -Q - scons -Q + scons -Q + scons -Q + scons -Q @@ -100,7 +100,7 @@ - scons -Q --debug=explain + scons -Q --debug=explain @@ -145,9 +145,9 @@ - scons -Q - edit file2.c - scons -Q --debug=explain + scons -Q + edit file2.c + scons -Q --debug=explain @@ -188,9 +188,121 @@ - scons -Q - edit hello.h - scons -Q --debug=explain + scons -Q + edit hello.h + scons -Q --debug=explain + + + + +
+ What's in That Construction Environment? the &Dump; Method + + + + When you create a construction environment, + &SCons; populates it + with construction variables that are set up + for various compilers, linkers and utilities + that it finds on your system. + Although this is usually helpful and what you want, + it might be frustrating if &SCons; + doesn't set certain variables that you + expect to be sit. + In situations like this, + it's sometimes helpful to use the + construction environment &Dump; method + to print all or some of + the construction variables. + Note that the &Dump; method + returns + the representation of the variables + in the environment + for you to print (or otherwise manipulate): + + + + + + env = Environment() + print env.Dump() + + + + + + On a POSIX system with gcc installed, + this might generate: + + + + + scons + + + + + On a Windows system with Visual C++ + the output might look like: + + + + + scons + + + + + The construction environments in these examples have + actually been restricted to just gcc and Visual C++, + respectively. + In a real-life situation, + the construction environments will + likely contain a great many more variables. + + + + + + To make it easier to see just what you're + interested in, + the &Dump; method allows you to + specify a specific constrcution variable + that you want to disply. + For example, + it's not unusual to want to verify + the external environment used to execute build commands, + to make sure that the PATH and other + environment variables are set up the way they should be. + You can do this as follows: + + + + + + env = Environment() + print env.Dump('ENV') + + + + + + Which might display the following when executed on a POSIX system: + + + + + scons + + + + + And the following when executed on a Windows system: + + + + + scons
diff --git a/doc/user/troubleshoot.sgml b/doc/user/troubleshoot.sgml index aee2aee6..5cd1c9e5 100644 --- a/doc/user/troubleshoot.sgml +++ b/doc/user/troubleshoot.sgml @@ -185,3 +185,276 @@
+ +
+ What's in That Construction Environment? the &Dump; Method + + + + When you create a construction environment, + &SCons; populates it + with construction variables that are set up + for various compilers, linkers and utilities + that it finds on your system. + Although this is usually helpful and what you want, + it might be frustrating if &SCons; + doesn't set certain variables that you + expect to be sit. + In situations like this, + it's sometimes helpful to use the + construction environment &Dump; method + to print all or some of + the construction variables. + Note that the &Dump; method + returns + the representation of the variables + in the environment + for you to print (or otherwise manipulate): + + + + + + + + On a POSIX system with gcc installed, + this might generate: + + + + + % scons + scons: Reading SConscript files ... + { 'BUILDERS': {}, + 'CPPSUFFIXES': [ '.c', + '.C', + '.cxx', + '.cpp', + '.c++', + '.cc', + '.h', + '.H', + '.hxx', + '.hpp', + '.hh', + '.F', + '.fpp', + '.FPP', + '.S', + '.spp', + '.SPP'], + 'DSUFFIXES': ['.d'], + 'Dir': <SCons.Defaults.Variable_Method_Caller instance at 0x829dcb4>, + 'ENV': {'PATH': '/usr/local/bin:/bin:/usr/bin'}, + 'ESCAPE': <function escape at 0x837d2a4>, + 'File': <SCons.Defaults.Variable_Method_Caller instance at 0x829e0fc>, + 'IDLSUFFIXES': ['.idl', '.IDL'], + 'INSTALL': <function copyFunc at 0x829db9c>, + 'LIBPREFIX': 'lib', + 'LIBPREFIXES': '$LIBPREFIX', + 'LIBSUFFIX': '.a', + 'LIBSUFFIXES': ['$LIBSUFFIX', '$SHLIBSUFFIX'], + 'OBJPREFIX': '', + 'OBJSUFFIX': '.o', + 'PDFPREFIX': '', + 'PDFSUFFIX': '.pdf', + 'PLATFORM': 'posix', + 'PROGPREFIX': '', + 'PROGSUFFIX': '', + 'PSPAWN': <function piped_env_spawn at 0x837d384>, + 'PSPREFIX': '', + 'PSSUFFIX': '.ps', + 'RDirs': <SCons.Defaults.Variable_Method_Caller instance at 0x829e46c>, + 'SCANNERS': [], + 'SHELL': 'sh', + 'SHLIBPREFIX': '$LIBPREFIX', + 'SHLIBSUFFIX': '.so', + 'SHOBJPREFIX': '$OBJPREFIX', + 'SHOBJSUFFIX': '$OBJSUFFIX', + 'SPAWN': <function spawnvpe_spawn at 0x8377fdc>, + 'TEMPFILE': <class SCons.Defaults.NullCmdGenerator at 0x829ddec>, + 'TOOLS': [], + '_CPPDEFFLAGS': '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}', + '_CPPINCFLAGS': '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET)} $)', + '_LIBDIRFLAGS': '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET)} $)', + '_LIBFLAGS': '${_concat(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, __env__)}', + '__RPATH': '$_RPATH', + '_concat': <function _concat at 0x829dc0c>, + '_defines': <function _defines at 0x829dc7c>, + '_stripixes': <function _stripixes at 0x829dc44>} + scons: done reading SConscript files. + scons: Building targets ... + scons: `.' is up to date. + scons: done building targets. + + + + + On a Windows system with Visual C++ + the output might look like: + + + + + C:\>scons + scons: Reading SConscript files ... + { 'BUILDERS': {'Object': <SCons.Memoize.MultiStepBuilder object at 0x83493e4>, 'SharedObject': <SCons.Memoize.MultiStepBuilder object at 0x8349fec>, 'StaticObject': <SCons.Memoize.MultiStepBuilder object at 0x83493e4>, 'PCH': <SCons.Memoize.BuilderBase object at 0x83418cc>, 'RES': <SCons.Memoize.BuilderBase object at 0x8367cec>}, + 'CC': 'cl', + 'CCCOM': <SCons.Memoize.FunctionAction object at 0x8340454>, + 'CCCOMFLAGS': '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET $CCPCHFLAGS $CCPDBFLAGS', + 'CCFLAGS': ['/nologo'], + 'CCPCHFLAGS': ['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}'], + 'CCPDBFLAGS': ['${(PDB and "/Z7") or ""}'], + 'CFILESUFFIX': '.c', + 'CPPDEFPREFIX': '/D', + 'CPPDEFSUFFIX': '', + 'CPPSUFFIXES': [ '.c', + '.C', + '.cxx', + '.cpp', + '.c++', + '.cc', + '.h', + '.H', + '.hxx', + '.hpp', + '.hh', + '.F', + '.fpp', + '.FPP', + '.S', + '.spp', + '.SPP'], + 'CXX': '$CC', + 'CXXCOM': '$CXX $CXXFLAGS $CCCOMFLAGS', + 'CXXFILESUFFIX': '.cc', + 'CXXFLAGS': ['$CCFLAGS', '$(', '/TP', '$)'], + 'DSUFFIXES': ['.d'], + 'Dir': <SCons.Defaults.Variable_Method_Caller instance at 0x829dcb4>, + 'ENV': { 'INCLUDE': 'C:\\Program Files\\Microsoft Visual Studio/VC98\\include', + 'LIB': 'C:\\Program Files\\Microsoft Visual Studio/VC98\\lib', + 'PATH': 'C:\\Program Files\\Microsoft Visual Studio\\Common\\tools\\WIN95;C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\bin;C:\\Program Files\\Microsoft Visual Studio\\Common\\tools;C:\\Program Files\\Microsoft Visual Studio/VC98\\bin', + 'PATHEXT': '.COM;.EXE;.BAT;.CMD'}, + 'ESCAPE': <function <lambda> at 0x82339ec>, + 'File': <SCons.Defaults.Variable_Method_Caller instance at 0x829e0fc>, + 'IDLSUFFIXES': ['.idl', '.IDL'], + 'INCPREFIX': '/I', + 'INCSUFFIX': '', + 'INSTALL': <function copyFunc at 0x829db9c>, + 'LIBPREFIX': '', + 'LIBPREFIXES': ['$LIBPREFIX'], + 'LIBSUFFIX': '.lib', + 'LIBSUFFIXES': ['$LIBSUFFIX'], + 'MAXLINELENGTH': 2048, + 'MSVS': {'VERSION': '6.0', 'VERSIONS': ['6.0']}, + 'MSVS_VERSION': '6.0', + 'OBJPREFIX': '', + 'OBJSUFFIX': '.obj', + 'PCHCOM': '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo${TARGETS[1]} /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS $PCHPDBFLAGS', + 'PCHPDBFLAGS': ['${(PDB and "/Yd") or ""}'], + 'PDFPREFIX': '', + 'PDFSUFFIX': '.pdf', + 'PLATFORM': 'win32', + 'PROGPREFIX': '', + 'PROGSUFFIX': '.exe', + 'PSPAWN': <function piped_spawn at 0x8372bc4>, + 'PSPREFIX': '', + 'PSSUFFIX': '.ps', + 'RC': 'rc', + 'RCCOM': '$RC $_CPPDEFFLAGS $_CPPINCFLAGS $RCFLAGS /fo$TARGET $SOURCES', + 'RCFLAGS': [], + 'RDirs': <SCons.Defaults.Variable_Method_Caller instance at 0x829e46c>, + 'SCANNERS': [], + 'SHCC': '$CC', + 'SHCCCOM': <SCons.Memoize.FunctionAction object at 0x83494bc>, + 'SHCCFLAGS': ['$CCFLAGS'], + 'SHCXX': '$CXX', + 'SHCXXCOM': '$SHCXX $SHCXXFLAGS $CCCOMFLAGS', + 'SHCXXFLAGS': ['$CXXFLAGS'], + 'SHELL': None, + 'SHLIBPREFIX': '', + 'SHLIBSUFFIX': '.dll', + 'SHOBJPREFIX': '$OBJPREFIX', + 'SHOBJSUFFIX': '$OBJSUFFIX', + 'SPAWN': <function spawn at 0x8374c34>, + 'STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME': 1, + 'TEMPFILE': <class SCons.Platform.win32.TempFileMunge at 0x835edc4>, + 'TOOLS': ['msvc'], + '_CPPDEFFLAGS': '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}', + '_CPPINCFLAGS': '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET)} $)', + '_LIBDIRFLAGS': '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET)} $)', + '_LIBFLAGS': '${_concat(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, __env__)}', + '_concat': <function _concat at 0x829dc0c>, + '_defines': <function _defines at 0x829dc7c>, + '_stripixes': <function _stripixes at 0x829dc44>} + scons: done reading SConscript files. + scons: Building targets ... + scons: `.' is up to date. + scons: done building targets. + + + + + The construction environments in these examples have + actually been restricted to just gcc and Visual C++, + respectively. + In a real-life situation, + the construction environments will + likely contain a great many more variables. + + + + + + To make it easier to see just what you're + interested in, + the &Dump; method allows you to + specify a specific constrcution variable + that you want to disply. + For example, + it's not unusual to want to verify + the external environment used to execute build commands, + to make sure that the PATH and other + environment variables are set up the way they should be. + You can do this as follows: + + + + + + + + Which might display the following when executed on a POSIX system: + + + + + % scons + scons: Reading SConscript files ... + {'PATH': '/usr/local/bin:/bin:/usr/bin'} + scons: done reading SConscript files. + scons: Building targets ... + scons: `.' is up to date. + scons: done building targets. + + + + + And the following when executed on a Windows system: + + + + + C:\>scons + scons: Reading SConscript files ... + { 'INCLUDE': 'C:\\Program Files\\Microsoft Visual Studio/VC98\\include', + 'LIB': 'C:\\Program Files\\Microsoft Visual Studio/VC98\\lib', + 'PATH': 'C:\\Program Files\\Microsoft Visual Studio\\Common\\tools\\WIN95;C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\bin;C:\\Program Files\\Microsoft Visual Studio\\Common\\tools;C:\\Program Files\\Microsoft Visual Studio/VC98\\bin', + 'PATHEXT': '.COM;.EXE;.BAT;.CMD'} + scons: done reading SConscript files. + scons: Building targets ... + scons: `.' is up to date. + scons: done building targets. + + +
diff --git a/doc/user/variables.in b/doc/user/variables.in new file mode 100644 index 00000000..70099969 --- /dev/null +++ b/doc/user/variables.in @@ -0,0 +1,56 @@ + + + + +This appendix contains descriptions of all of the +construction variables that are potentially +available "out of the box" in this version of SCons. +Whether or not setting a construction variable +in a construction environment +will actually have an effect depends on +whether any of the Tools and/or Builders +that use the variable have been +included in the construction environment. + + + + + +In this appendix, we have +appended the initial $ +(dollar sign) to the beginning of each +variable name when it appears in the text, +but left off the dollar sign +in the left-hand column +where the name appears for each entry. + + + + + +&variables-gen; + + diff --git a/doc/user/variables.sgml b/doc/user/variables.sgml new file mode 100644 index 00000000..70099969 --- /dev/null +++ b/doc/user/variables.sgml @@ -0,0 +1,56 @@ + + + + +This appendix contains descriptions of all of the +construction variables that are potentially +available "out of the box" in this version of SCons. +Whether or not setting a construction variable +in a construction environment +will actually have an effect depends on +whether any of the Tools and/or Builders +that use the variable have been +included in the construction environment. + + + + + +In this appendix, we have +appended the initial $ +(dollar sign) to the beginning of each +variable name when it appears in the text, +but left off the dollar sign +in the left-hand column +where the name appears for each entry. + + + + + +&variables-gen; + + diff --git a/doc/user/variants.in b/doc/user/variants.in index 82d938b9..2bdc3941 100644 --- a/doc/user/variants.in +++ b/doc/user/variants.in @@ -49,7 +49,8 @@ is pretty smart about rebuilding things when you change options. - The &BuildDir; function now gives us everything + The &build_dir; keyword argument of + the &SConscript; function provides everything we need to show how easy it is to create variant builds using &SCons;. Suppose, for example, that we want to @@ -79,11 +80,6 @@ is pretty smart about rebuilding things when you change options. Export('env') env.SConscript('src/SConscript', build_dir='build/$PLATFORM') - - # - #BuildDir("#build/$PLATFORM", 'src') - #SConscript("build/$PLATFORM/hello/SConscript") - #SConscript("build/$PLATFORM/world/SConscript") @@ -125,7 +121,7 @@ is pretty smart about rebuilding things when you change options. - scons -Q OS=linux + scons -Q OS=linux @@ -135,7 +131,7 @@ is pretty smart about rebuilding things when you change options. - scons -Q OS=windows + scons -Q OS=windows diff --git a/doc/user/variants.sgml b/doc/user/variants.sgml index 0ef7d1f4..57d96e02 100644 --- a/doc/user/variants.sgml +++ b/doc/user/variants.sgml @@ -49,7 +49,8 @@ is pretty smart about rebuilding things when you change options. - The &BuildDir; function now gives us everything + The &build_dir; keyword argument of + the &SConscript; function provides everything we need to show how easy it is to create variant builds using &SCons;. Suppose, for example, that we want to @@ -78,11 +79,6 @@ is pretty smart about rebuilding things when you change options. Export('env') env.SConscript('src/SConscript', build_dir='build/$PLATFORM') - - # - #BuildDir("#build/$PLATFORM", 'src') - #SConscript("build/$PLATFORM/hello/SConscript") - #SConscript("build/$PLATFORM/world/SConscript") @@ -132,7 +128,7 @@ is pretty smart about rebuilding things when you change options. - scons -Q + scons -Q --> diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 2dbb6bff..3acb1cce 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -15,6 +15,8 @@ RELEASE 0.97 - XXX - Fix Java parsing to avoid erroneously identifying a new array of class instances as an anonymous inner class. + - Fix a typo in the man page description of PathIsDirCreate. + From Chad Austin: - Allow Help() to be called multiple times, appending to the help @@ -207,6 +209,14 @@ RELEASE 0.97 - XXX a source_scanner keyword argument to Command() that can be set to DirScanner to get this behavior. + - Documentation changes: Explain that $CXXFLAGS contains $CCFLAGS + by default. Fix a bad target_factory example in the man page. + Add appendices to the User's Guide to cover the available Tools, + Builders and construction variables. Comment out the build of + the old Python 10 paper, which doesn't build on all systems and + is old enough at this point that it probably isn't worth the + effort to make it do so. + From Wayne Lee: - Avoid "maximum recursion limit" errors when removing $(-$) pairs @@ -294,6 +304,9 @@ RELEASE 0.97 - XXX - Supply a better error message when a construction variable expansion has an unknown attribute. + - Documentation changes: Update the man page to describe use of + filenames or Nodes in $LIBS. + From Chris Pawling: - Have the linkloc tool use $MSVS_VERSION to select the Microsoft @@ -419,6 +432,11 @@ RELEASE 0.97 - XXX - Add a PathAccept validator to the list of new canned PathOption validators. + From Jeff Squyres: + + - Documentation changes: Use $CPPDEFINES instead of $CCFLAGS in man + page examples. + From Levi Stephen: - Allow $JARCHDIR to be expanded to other construction variables. diff --git a/src/engine/MANIFEST-xml.in b/src/engine/MANIFEST-xml.in new file mode 100644 index 00000000..d8082c70 --- /dev/null +++ b/src/engine/MANIFEST-xml.in @@ -0,0 +1,86 @@ +SCons/Action.xml +SCons/Defaults.xml +SCons/Environment.xml +SCons/Platform/__init__.xml +SCons/Platform/posix.xml +SCons/Platform/win32.xml +SCons/Tool/386asm.xml +SCons/Tool/aixcc.xml +SCons/Tool/aixc++.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/BitKeeper.xml +SCons/Tool/cc.xml +SCons/Tool/cvf.xml +SCons/Tool/CVS.xml +SCons/Tool/c++.xml +SCons/Tool/default.xml +SCons/Tool/dmd.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/g77.xml +SCons/Tool/gas.xml +SCons/Tool/gcc.xml +SCons/Tool/gnulink.xml +SCons/Tool/gs.xml +SCons/Tool/g++.xml +SCons/Tool/hpcc.xml +SCons/Tool/hpc++.xml +SCons/Tool/hplink.xml +SCons/Tool/icc.xml +SCons/Tool/icl.xml +SCons/Tool/ifl.xml +SCons/Tool/ifort.xml +SCons/Tool/ilink32.xml +SCons/Tool/ilink.xml +SCons/Tool/__init__.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/linkloc.xml +SCons/Tool/link.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/msvc.xml +SCons/Tool/msvs.xml +SCons/Tool/mwcc.xml +SCons/Tool/mwld.xml +SCons/Tool/nasm.xml +SCons/Tool/pdflatex.xml +SCons/Tool/pdftex.xml +SCons/Tool/Perforce.xml +SCons/Tool/qt.xml +SCons/Tool/RCS.xml +SCons/Tool/rmic.xml +SCons/Tool/rpcgen.xml +SCons/Tool/SCCS.xml +SCons/Tool/sgiar.xml +SCons/Tool/sgicc.xml +SCons/Tool/sgic++.xml +SCons/Tool/sgilink.xml +SCons/Tool/Subversion.xml +SCons/Tool/sunar.xml +SCons/Tool/suncc.xml +SCons/Tool/sunc++.xml +SCons/Tool/sunlink.xml +SCons/Tool/swig.xml +SCons/Tool/tar.xml +SCons/Tool/tex.xml +SCons/Tool/tlib.xml +SCons/Tool/yacc.xml +SCons/Tool/zip.xml diff --git a/src/engine/SCons/Action.xml b/src/engine/SCons/Action.xml new file mode 100644 index 00000000..c2253184 --- /dev/null +++ b/src/engine/SCons/Action.xml @@ -0,0 +1,67 @@ + + + +A Python function used to print the command lines as they are executed +(assuming command printing is not disabled by the + +or + +options or their equivalents). +The function should take four arguments: +s, +the command being executed (a string), +target, +the target being built (file node, list, or string name(s)), +source, +the source(s) used (file node, list, or string name(s)), and +env, +the environment being used. + +The function must do the printing itself. The default implementation, +used if this variable is not set or is None, is: + +def print_cmd_line(s, target, source, env): + sys.stdout.write(s + "\n") + + +Here's an example of a more interesting function: + + +def print_cmd_line(s, target, source, env): + sys.stdout.write("Building %s -> %s...\n" % + (' and '.join([str(x) for x in source]), + ' and '.join([str(x) for x in target]))) +env=Environment(PRINT_CMD_LINE_FUNC=print_cmd_line) +env.Program('foo', 'foo.c') + + +This just prints "Building targetname from sourcename..." instead +of the actual commands. +Such a function could also log the actual commands to a log file, +for example. + + + + + +A command interpreter function that will be called to execute command line +strings. The function must expect the following arguments: + + +def spawn(shell, escape, cmd, args, env): + + +sh +is a string naming the shell program to use. +escape +is a function that can be called to escape shell special characters in +the command line. +cmd +is the path to the command to be executed. +args +is the arguments to the command. +env +is a dictionary of the environment variables +in which the command should be executed. + + diff --git a/src/engine/SCons/Defaults.py b/src/engine/SCons/Defaults.py index 8ade7923..44d10fa5 100644 --- a/src/engine/SCons/Defaults.py +++ b/src/engine/SCons/Defaults.py @@ -121,10 +121,6 @@ LinkAction = SCons.Action.Action("$LINKCOM", "$LINKCOMSTR") ShLinkAction = SCons.Action.Action("$SHLINKCOM", "$SHLINKCOMSTR") LdModuleLinkAction = SCons.Action.Action("$LDMODULECOM", "$LDMODULECOMSTR") -ArAction = SCons.Action.Action("$ARCOM", "$ARCOMSTR") - -LexAction = SCons.Action.Action("$LEXCOM", "$LEXCOMSTR") -YaccAction = SCons.Action.Action("$YACCCOM", "$YACCCOMSTR") def DVI(): """Common function to generate a DVI file Builder.""" diff --git a/src/engine/SCons/Defaults.xml b/src/engine/SCons/Defaults.xml new file mode 100644 index 00000000..8d90ce29 --- /dev/null +++ b/src/engine/SCons/Defaults.xml @@ -0,0 +1,471 @@ + + + +Builds a .dvi file +from a .tex, +.ltx or .latex input file. +If the source file suffix is .tex, +&scons; +will examine the contents of the file; +if the string +\documentclass +or +\documentstyle +is found, the file is assumed to be a LaTeX file and +the target is built by invoking the &cv-LATEXCOM; command line; +otherwise, the &cv-TEXCOM; command line is used. +If the file is a LaTeX file, +the +&b-DVI; +builder method will also examine the contents +of the +.aux +file +and invoke the &cv-BIBTEX; command line +if the string +bibdata +is found, +and will examine the contents +.log +file and re-run the &cv-LATEXCOM; command +if the log file says it is necessary. + +The suffix .dvi +(hard-coded within TeX itself) +is automatically added to the target +if it is not already present. +Examples: + + +# builds from aaa.tex +env.DVI(target = 'aaa.dvi', source = 'aaa.tex') +# builds bbb.dvi +env.DVI(target = 'bbb', source = 'bbb.ltx') +# builds from ccc.latex +env.DVI(target = 'ccc.dvi', source = 'ccc.latex') + + + + + + +Builds a .pdf file +from a .dvi input file +(or, by extension, a .tex, +.ltx, +or +.latex input file). +The suffix specified by the &cv-PDFSUFFIX; construction variable +(.pdf by default) +is added automatically to the target +if it is not already present. Example: + + +# builds from aaa.tex +env.PDF(target = 'aaa.pdf', source = 'aaa.tex') +# builds bbb.pdf from bbb.dvi +env.PDF(target = 'bbb', source = 'bbb.dvi') + + + + + + +A function used to produce variables like &cv-_CPPINCFLAGS;. It takes +four or five +arguments: a prefix to concatenate onto each element, a list of +elements, a suffix to concatenate onto each element, an environment +for variable interpolation, and an optional function that will be +called to transform the list before concatenation. + + +env['_CPPINCFLAGS'] = '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs)} $)', + + + + + + +A platform independent specification of C preprocessor definitions. +The definitions will be added to command lines +through the automatically-generated +&cv-_CPPDEFFLAGS; construction variable (see below), +which is constructed according to +the type of value of &cv-CPPDEFINES;: + +If &cv-CPPDEFINES; is a string, +the values of the +&cv-CPPDEFPREFIX; and &cv-CPPDEFSUFFIX; +construction variables +will be added to the beginning and end. + + +# Will add -Dxyz to POSIX compiler command lines, +# and /Dxyz to Microsoft Visual C++ command lines. +env = Environment(CPPDEFINES='xyz') + + +If &cv-CPPDEFINES; is a list, +the values of the +&cv-CPPDEFPREFIX; and &cv-CPPDEFSUFFIX; +construction variables +will be appended to the beginning and end +of each element in the list. +If any element is a list or tuple, +then the first item is the name being +defined and the second item is its value: + + +# Will add -DB=2 -DA to POSIX compiler command lines, +# and /DB=2 /DA to Microsoft Visual C++ command lines. +env = Environment(CPPDEFINES=[('B', 2), 'A']) + + +If &cv-CPPDEFINES; is a dictionary, +the values of the +&cv-CPPDEFPREFIX; and &cv-CPPDEFSUFFIX; +construction variables +will be appended to the beginning and end +of each item from the dictionary. +The key of each dictionary item +is a name being defined +to the dictionary item's corresponding value; +if the value is +None, +then the name is defined without an explicit value. +Note that the resulting flags are sorted by keyword +to ensure that the order of the options on the +command line is consistent each time +&scons; is run. + + +# Will add -DA -DB=2 to POSIX compiler command lines, +# and /DA /DB=2 to Microsoft Visual C++ command lines. +env = Environment(CPPDEFINES={'B':2, 'A':None}) + + + + + + +An automatically-generated construction variable +containing the C preprocessor command-line options +to define values. +The value of &cv-_CPPDEFFLAGS; is created +by appending &cv-CPPDEFPREFIX; and &cv-CPPDEFSUFFIX; +to the beginning and end +of each directory in &cv-CPPDEFINES;. + + + + + +The prefix used to specify preprocessor definitions +on the C compiler command line. +This will be appended to the beginning of each definition +in the &cv-CPPDEFINES; construction variable +when the &cv-_CPPDEFFLAGS; variable is automatically generated. + + + + + +The suffix used to specify preprocessor definitions +on the C compiler command line. +This will be appended to the end of each definition +in the &cv-CPPDEFINES; construction variable +when the &cv-_CPPDEFFLAGS; variable is automatically generated. + + + + + +An automatically-generated construction variable +containing the C preprocessor command-line options +for specifying directories to be searched for include files. +The value of &cv-_CPPINCFLAGS; is created +by appending &cv-INCPREFIX; and &cv-INCSUFFIX; +to the beginning and end +of each directory in &cv-CPPPATH;. + + + + + +The list of directories that the C preprocessor will search for include +directories. The C/C++ implicit dependency scanner will search these +directories for include files. Don't explicitly put include directory +arguments in CCFLAGS or CXXFLAGS because the result will be non-portable +and the directories will not be searched by the dependency scanner. Note: +directory names in CPPPATH will be looked-up relative to the SConscript +directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: + + +env = Environment(CPPPATH='#/include') + + +The directory look-up can also be forced using the +&Dir;() +function: + + +include = Dir('include') +env = Environment(CPPPATH=include) + + +The directory list will be added to command lines +through the automatically-generated +&cv-_CPPINCFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-INCPREFIX; and &cv-INCSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-CPPPATH;. +Any command lines you define that need +the CPPPATH directory list should +include &cv-_CPPINCFLAGS;: + + +env = Environment(CCCOM="my_compiler $_CPPINCFLAGS -c -o $TARGET $SOURCE") + + + + + + +The list of suffixes of files that will be scanned +for imported D package files. +The default list is: + + +['.d'] + + + + + + +The list of suffixes of files that will be scanned +for IDL implicit dependencies +(#include or import lines). +The default list is: + + +[".idl", ".IDL"] + + + + + + +The prefix used to specify an include directory on the C compiler command +line. +This will be appended to the beginning of each directory +in the &cv-CPPPATH; and &cv-FORTRANPATH; construction variables +when the &cv-_CPPINCFLAGS; and &cv-_FORTRANINCFLAGS; +variables are automatically generated. + + + + + +The suffix used to specify an include directory on the C compiler command +line. +This will be appended to the end of each directory +in the &cv-CPPPATH; and &cv-FORTRANPATH; construction variables +when the &cv-_CPPINCFLAGS; and &cv-_FORTRANINCFLAGS; +variables are automatically generated. + + + + + +A function to be called to install a file into a +destination file name. +The default function copies the file into the destination +(and sets the destination file's mode and permission bits +to match the source file's). +The function takes the following arguments: + + +def install(dest, source, env): + + +dest +is the path name of the destination file. +source +is the path name of the source file. +env +is the construction environment +(a dictionary of construction values) +in force for this file installation. + + + + + +An automatically-generated construction variable +containing the linker command-line options +for specifying directories to be searched for library. +The value of &cv-_LIBDIRFLAGS; is created +by appending &cv-LIBDIRPREFIX; and &cv-LIBDIRSUFFIX; +to the beginning and end +of each directory in &cv-LIBPATH;. + + + + + +The prefix used to specify a library directory on the linker command line. +This will be appended to the beginning of each directory +in the &cv-LIBPATH; construction variable +when the &cv-_LIBDIRFLAGS; variable is automatically generated. + + + + + +The suffix used to specify a library directory on the linker command line. +This will be appended to the end of each directory +in the &cv-LIBPATH; construction variable +when the &cv-_LIBDIRFLAGS; variable is automatically generated. + + + + + +An automatically-generated construction variable +containing the linker command-line options +for specifying libraries to be linked with the resulting target. +The value of &cv-_LIBFLAGS; is created +by appending &cv-LIBLINKPREFIX; and &cv-LIBLINKSUFFIX; +to the beginning and end +of each filename in &cv-LIBS;. + + + + + +The prefix used to specify a library to link on the linker command line. +This will be appended to the beginning of each library +in the &cv-LIBS; construction variable +when the &cv-_LIBFLAGS; variable is automatically generated. + + + + + +The suffix used to specify a library to link on the linker command line. +This will be appended to the end of each library +in the &cv-LIBS; construction variable +when the &cv-_LIBFLAGS; variable is automatically generated. + + + + + +The list of directories that will be searched for libraries. +The implicit dependency scanner will search these +directories for include files. Don't explicitly put include directory +arguments in &cv-LINKFLAGS; or &cv-SHLINKFLAGS; +because the result will be non-portable +and the directories will not be searched by the dependency scanner. Note: +directory names in LIBPATH will be looked-up relative to the SConscript +directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: + + +env = Environment(LIBPATH='#/libs') + + +The directory look-up can also be forced using the +&Dir;() +function: + + +libs = Dir('libs') +env = Environment(LIBPATH=libs) + + +The directory list will be added to command lines +through the automatically-generated +&cv-_LIBDIRFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-LIBDIRPREFIX; and &cv-LIBDIRSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-LIBPATH;. +Any command lines you define that need +the LIBPATH directory list should +include &cv-_LIBDIRFLAGS;: + + +env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE") + + + + + + +A list of one or more libraries +that will be linked with +any executable programs +created by this environment. + +The library list will be added to command lines +through the automatically-generated +&cv-_LIBFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-LIBLINKPREFIX; and &cv-LIBLINKSUFFIX; +construction variables +to the beginning and end +of each filename in &cv-LIBS;. +Any command lines you define that need +the LIBS library list should +include &cv-_LIBFLAGS;: + + +env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE") + + +If you add a +File +object to the +&cv-LIBS; +list, the name of that file will be added to +&cv-_LIBFLAGS;, +and thus the link line, as is, without +&cv-LIBLINKPREFIX; +or +&cv-LIBLINKSUFFIX;. +For example: + + +env.Append(LIBS=File('/tmp/mylib.so')) + + +In all cases, scons will add dependencies from the executable program to +all the libraries in this list. + + + + + +The prefix used for PDF file names. + + + + + +The suffix used for PDF file names. + + diff --git a/src/engine/SCons/Environment.xml b/src/engine/SCons/Environment.xml new file mode 100644 index 00000000..d41cdafb --- /dev/null +++ b/src/engine/SCons/Environment.xml @@ -0,0 +1,157 @@ + + + +A dictionary mapping the names of the builders +available through this environment +to underlying Builder objects. +Builders named +Alias, CFile, CXXFile, DVI, Library, Object, PDF, PostScript, and Program +are available by default. +If you initialize this variable when an +Environment is created: + + +env = Environment(BUILDERS = {'NewBuilder' : foo}) + + +the default Builders will no longer be available. +To use a new Builder object in addition to the default Builders, +add your new Builder object like this: + + +env = Environment() +env.Append(BUILDERS = {'NewBuilder' : foo}) + + +or this: + + +env = Environment() +env['BUILDERS]['NewBuilder'] = foo + + + + + + +A function that converts a file name into a Dir instance relative to the +target being built. + + + + + +A dictionary of environment variables +to use when invoking commands. When +&cv-ENV; is used in a command all list +values will be joined using the path separator and any other non-string +values will simply be coerced to a string. +Note that, by default, +&scons; +does +not +propagate the environment in force when you +execute +&scons; +to the commands used to build target files. +This is so that builds will be guaranteed +repeatable regardless of the environment +variables set at the time +&scons; +is invoked. + +If you want to propagate your +environment variables +to the commands executed +to build target files, +you must do so explicitly: + + +import os +env = Environment(ENV = os.environ) + + +Note that you can choose only to propagate +certain environment variables. +A common example is +the system +PATH +environment variable, +so that +&scons; +uses the same utilities +as the invoking shell (or other process): + + +import os +env = Environment(ENV = {'PATH' : os.environ['PATH']}) + + + + + + +A function that converts a file name into a File instance relative to the +target being built. + + + + + +A function that converts a file name into a list of Dir instances by +searching the repositories. + + + + + +A list of the available implicit dependency scanners. +New file scanners may be added by +appending to this list, +although the more flexible approach +is to associate scanners +with a specific Builder. +See the sections "Builder Objects" +and "Scanner Objects," +below, for more information. + + + + + +A reserved variable name +that may not be set or used in a construction environment. +(See "Variable Substitution," below.) + + + + + +A reserved variable name +that may not be set or used in a construction environment. +(See "Variable Substitution," below.) + + + + + +A reserved variable name +that may not be set or used in a construction environment. +(See "Variable Substitution," below.) + + + + + +A reserved variable name +that may not be set or used in a construction environment. +(See "Variable Substitution," below.) + + + + + +A list of the names of the Tool specifications +that are part of this construction environment. + + diff --git a/src/engine/SCons/Platform/__init__.xml b/src/engine/SCons/Platform/__init__.xml new file mode 100644 index 00000000..20ec83bd --- /dev/null +++ b/src/engine/SCons/Platform/__init__.xml @@ -0,0 +1,118 @@ + + + +A function that will be called to escape shell special characters in +command lines. The function should take one argument: the command line +string to escape; and should return the escaped command line. + + + + + +The prefix used for (static) library file names. +A default value is set for each platform +(posix, win32, os2, etc.), +but the value is overridden by individual tools +(ar, mslib, sgiar, sunar, tlib, etc.) +to reflect the names of the libraries they create. + + + + + +An array of legal prefixes for library file names. + + + + + +The suffix used for (static) library file names. +A default value is set for each platform +(posix, win32, os2, etc.), +but the value is overridden by individual tools +(ar, mslib, sgiar, sunar, tlib, etc.) +to reflect the names of the libraries they create. + + + + + +An array of legal suffixes for library file names. + + + + + +The prefix used for (static) object file names. + + + + + +The suffix used for (static) object file names. + + + + + +The name of the platform used to create the Environment. If no platform is +specified when the Environment is created, +&scons; +autodetects the platform. + + +env = Environment(tools = []) +if env['PLATFORM'] == 'cygwin': + Tool('mingw')(env) +else: + Tool('msvc')(env) + + + + + + +The prefix used for executable file names. + + + + + +The suffix used for executable file names. + + + + + +A string naming the shell program that will be passed to the +&cv-SPAWN; +function. +See the +&cv-SPAWN; +construction variable for more information. + + + + + +The prefix used for shared library file names. + + + + + +The suffix used for shared library file names. + + + + + +The prefix used for shared object file names. + + + + + +The suffix used for shared object file names. + + diff --git a/src/engine/SCons/Platform/posix.xml b/src/engine/SCons/Platform/posix.xml new file mode 100644 index 00000000..1a53c722 --- /dev/null +++ b/src/engine/SCons/Platform/posix.xml @@ -0,0 +1,45 @@ + + + +A list of paths to search for shared libraries when running programs. +Currently only used in the GNU linker (gnulink) and IRIX linker (sgilink). +Ignored on platforms and toolchains that don't support it. +Note that the paths added to RPATH +are not transformed by +&scons; +in any way: if you want an absolute +path, you must make it absolute yourself. + + + + + +An automatically-generated construction variable +containing the rpath flags to be used when linking +a program with shared libraries. +The value of &cv-_RPATH; is created +by appending &cv-RPATHPREFIX; and &cv-RPATHSUFFIX; +to the beginning and end +of each directory in &cv-RPATH;. + + + + + +The prefix used to specify a directory to be searched for +shared libraries when running programs. +This will be appended to the beginning of each directory +in the &cv-RPATH; construction variable +when the &cv-_RPATH; variable is automatically generated. + + + + + +The suffix used to specify a directory to be searched for +shared libraries when running programs. +This will be appended to the end of each directory +in the &cv-RPATH; construction variable +when the &cv-_RPATH; variable is automatically generated. + + diff --git a/src/engine/SCons/Platform/win32.xml b/src/engine/SCons/Platform/win32.xml new file mode 100644 index 00000000..c893f0c1 --- /dev/null +++ b/src/engine/SCons/Platform/win32.xml @@ -0,0 +1,9 @@ + + + +The maximum number of characters allowed on an external command line. +On Win32 systems, +link lines longer than this many characters +are linked via a temporary file name. + + diff --git a/src/engine/SCons/Tool/386asm.xml b/src/engine/SCons/Tool/386asm.xml new file mode 100644 index 00000000..2a9d9930 --- /dev/null +++ b/src/engine/SCons/Tool/386asm.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/BitKeeper.xml b/src/engine/SCons/Tool/BitKeeper.xml new file mode 100644 index 00000000..43841a02 --- /dev/null +++ b/src/engine/SCons/Tool/BitKeeper.xml @@ -0,0 +1,43 @@ + + + +XXX + + + + + +The BitKeeper executable. + + + + + +The command line for +fetching source files using BitKEeper. + + + + + +The string displayed when fetching +a source file using BitKeeper. +If this is not set, then &cv-BITKEEPERCOM; +(the command line) is displayed. + + + + + +The command (&cv-BITKEEPER;) and subcommand +for fetching source files using BitKeeper. + + + + + +Options that are passed to the BitKeeper +get +subcommand. + + diff --git a/src/engine/SCons/Tool/CVS.xml b/src/engine/SCons/Tool/CVS.xml new file mode 100644 index 00000000..9a072943 --- /dev/null +++ b/src/engine/SCons/Tool/CVS.xml @@ -0,0 +1,51 @@ + + + +XXX + + + + + +The CVS executable. + + + + + +Options that are passed to the CVS checkout subcommand. + + + + + +The command line used to +fetch source files from a CVS repository. + + + + + +The string displayed when fetching +a source file from a CVS repository. +If this is not set, then &cv-CVSCOM; +(the command line) is displayed. + + + + + +General options that are passed to CVS. +By default, this is set to +-d $CVSREPOSITORY +to specify from where the files must be fetched. + + + + + +The path to the CVS repository. +This is referenced in the default +&cv-CVSFLAGS; value. + + diff --git a/src/engine/SCons/Tool/Perforce.xml b/src/engine/SCons/Tool/Perforce.xml new file mode 100644 index 00000000..247330e8 --- /dev/null +++ b/src/engine/SCons/Tool/Perforce.xml @@ -0,0 +1,33 @@ + + + +XXX + + + + + +The Perforce executable. + + + + + +The command line used to +fetch source files from Perforce. + + + + + +The string displayed when +fetching a source file from Perforce. +If this is not set, then &cv-P4COM; (the command line) is displayed. + + + + + +General options that are passed to Perforce. + + diff --git a/src/engine/SCons/Tool/RCS.xml b/src/engine/SCons/Tool/RCS.xml new file mode 100644 index 00000000..40d972f3 --- /dev/null +++ b/src/engine/SCons/Tool/RCS.xml @@ -0,0 +1,46 @@ + + + +XXX + + + + + +The RCS executable. +Note that this variable is not actually used +for the command to fetch source files from RCS; +see the +&cv-RCS_CO; +construction variable, below. + + + + + +The RCS "checkout" executable, +used to fetch source files from RCS. + + + + + +The command line used to +fetch (checkout) source files from RCS. + + + + + +The string displayed when fetching +a source file from RCS. +If this is not set, then &cv-RCS_COCOM; +(the command line) is displayed. + + + + + +Options that are passed to the &cv-RCS_CO; command. + + diff --git a/src/engine/SCons/Tool/SCCS.xml b/src/engine/SCons/Tool/SCCS.xml new file mode 100644 index 00000000..08aa949d --- /dev/null +++ b/src/engine/SCons/Tool/SCCS.xml @@ -0,0 +1,43 @@ + + + +XXX + + + + + +The SCCS executable. + + + + + +The command line used to +fetch source files from SCCS. + + + + + +The string displayed when fetching +a source file from a CVS repository. +If this is not set, then &cv-SCCSCOM; +(the command line) is displayed. + + + + + +General options that are passed to SCCS. + + + + + +Options that are passed specifically to the SCCS "get" subcommand. +This can be set, for example, to + +to check out editable files from SCCS. + + diff --git a/src/engine/SCons/Tool/Subversion.xml b/src/engine/SCons/Tool/Subversion.xml new file mode 100644 index 00000000..e5560d1c --- /dev/null +++ b/src/engine/SCons/Tool/Subversion.xml @@ -0,0 +1,32 @@ + + + +XXX + + + + + + + + diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py index 7ef2ea0c..7010e1c5 100644 --- a/src/engine/SCons/Tool/__init__.py +++ b/src/engine/SCons/Tool/__init__.py @@ -161,8 +161,8 @@ def createStaticLibBuilder(env): try: static_lib = env['BUILDERS']['StaticLibrary'] except KeyError: - import SCons.Defaults - static_lib = SCons.Builder.Builder(action = SCons.Defaults.ArAction, + ar_action = SCons.Action.Action("$ARCOM", "$ARCOMSTR") + static_lib = SCons.Builder.Builder(action = ar_action, emitter = '$LIBEMITTER', prefix = '$LIBPREFIX', suffix = '$LIBSUFFIX', diff --git a/src/engine/SCons/Tool/__init__.xml b/src/engine/SCons/Tool/__init__.xml new file mode 100644 index 00000000..86b830c1 --- /dev/null +++ b/src/engine/SCons/Tool/__init__.xml @@ -0,0 +1,324 @@ + + + +Builds a C source file given a lex (.l) +or yacc (.y) input file. +The suffix specified by the &cv-CFILESUFFIX; construction variable +(.c by default) +is automatically added to the target +if it is not already present. Example: + + +# builds foo.c +env.CFile(target = 'foo.c', source = 'foo.l') +# builds bar.c +env.CFile(target = 'bar', source = 'bar.y') + + + + + + +Builds a C++ source file given a lex (.ll) +or yacc (.yy) +input file. +The suffix specified by the &cv-CXXFILESUFFIX; construction variable +(.cc by default) +is automatically added to the target +if it is not already present. Example: + + +# builds foo.cc +env.CXXFile(target = 'foo.cc', source = 'foo.ll') +# builds bar.cc +env.CXXFile(target = 'bar', source = 'bar.yy') + + + + + + +A synonym for the +&b-StaticLibrary; +builder method. + + + + + +A synonym for the +&b-StaticObject; +builder method. + + + + + +Builds an executable given one or more object files +or C, C++, D, or Fortran source files. +If any C, C++, D or Fortran source files are specified, +then they will be automatically +compiled to object files using the +&b-Object; +builder method; +see that builder method's description for +a list of legal source file suffixes +and how they are interpreted. +The target executable file prefix +(specified by the &cv-PROGPREFIX; construction variable; nothing by default) +and suffix +(specified by the &cv-PROGSUFFIX; construction variable; +by default, .exe on Windows systems, +nothing on POSIX systems) +are automatically added to the target if not already present. +Example: + + +env.Program(target = 'foo', source = ['foo.o', 'bar.c', 'baz.f']) + + + + + + +Builds a shared library +(.so on a POSIX system, +.dll on WIN32) +given one or more object files +or C, C++, D or Fortran source files. +If any source files are given, +then they will be automatically +compiled to object files. +The static library prefix and suffix (if any) +are automatically added to the target. +The target library file prefix +(specified by the &cv-SHLIBPREFIX; construction variable; +by default, lib on POSIX systems, +nothing on Windows systems) +and suffix +(specified by the &cv-SHLIBSUFFIX; construction variable; +by default, .dll on Windows systems, +.so on POSIX systems) +are automatically added to the target if not already present. +Example: + + +env.SharedLibrary(target = 'bar', source = ['bar.c', 'foo.o']) + + +On WIN32 systems, the +&b-SharedLibrary; +builder method will always build an import +(.lib) library +in addition to the shared (.dll) library, +adding a .lib library with the same basename +if there is not already a .lib file explicitly +listed in the targets. + +Any object files listed in the +source +must have been built for a shared library +(that is, using the +&b-SharedObject; +builder method). +&scons; +will raise an error if there is any mismatch. + +On WIN32 systems, specifying +register=1 +will cause the .dll to be +registered after it is built using REGSVR32. +The command that is run +("regsvr32" by default) is determined by &cv-REGSVR; construction +variable, and the flags passed are determined by &cv-REGSVRFLAGS;. By +default, &cv-REGSVRFLAGS; includes the option, +to prevent dialogs from popping +up and requiring user attention when it is run. If you change +&cv-REGSVRFLAGS;, be sure to include the option. +For example, + + +env.SharedLibrary(target = 'bar', + source = ['bar.cxx', 'foo.obj'], + register=1) + + +will register bar.dll as a COM object +when it is done linking it. + + + + + +Builds an object file for +inclusion in a shared library. +Source files must have one of the same set of extensions +specified above for the +&b-StaticObject; +builder method. +On some platforms building a shared object requires additional +compiler option +(e.g. for gcc) +in addition to those needed to build a +normal (static) object, but on some platforms there is no difference between a +shared object and a normal (static) one. When there is a difference, SCons +will only allow shared objects to be linked into a shared library, and will +use a different suffix for shared objects. On platforms where there is no +difference, SCons will allow both normal (static) +and shared objects to be linked into a +shared library, and will use the same suffix for shared and normal +(static) objects. +The target object file prefix +(specified by the &cv-SHOBJPREFIX; construction variable; +by default, the same as &cv-OBJPREFIX;) +and suffix +(specified by the &cv-SHOBJSUFFIX; construction variable) +are automatically added to the target if not already present. +Examples: + + +env.SharedObject(target = 'ddd', source = 'ddd.c') +env.SharedObject(target = 'eee.o', source = 'eee.cpp') +env.SharedObject(target = 'fff.obj', source = 'fff.for') + + + + + + +Builds a static library given one or more object files +or C, C++, D or Fortran source files. +If any source files are given, +then they will be automatically +compiled to object files. +The static library prefix and suffix (if any) +are automatically added to the target. +The target library file prefix +(specified by the &cv-LIBPREFIX; construction variable; +by default, lib on POSIX systems, +nothing on Windows systems) +and suffix +(specified by the &cv-LIBSUFFIX; construction variable; +by default, .lib on Windows systems, +.a on POSIX systems) +are automatically added to the target if not already present. +Example: + + +env.StaticLibrary(target = 'bar', source = ['bar.c', 'foo.o']) + + +Any object files listed in the +source +must have been built for a static library +(that is, using the +&b-StaticObject; +builder method). +&scons; +will raise an error if there is any mismatch. + + + + + +Builds a static object file +from one or more C, C++, D, or Fortran source files. +Source files must have one of the following extensions: + + + .asm assembly language file + .ASM assembly language file + .c C file + .C WIN32: C file + POSIX: C++ file + .cc C++ file + .cpp C++ file + .cxx C++ file + .cxx C++ file + .c++ C++ file + .C++ C++ file + .d D file + .f Fortran file + .F WIN32: Fortran file + POSIX: Fortran file + C pre-processor + .for Fortran file + .FOR Fortran file + .fpp Fortran file + C pre-processor + .FPP Fortran file + C pre-processor + .s assembly language file + .S WIN32: assembly language file + POSIX: assembly language file + C pre-processor + .spp assembly language file + C pre-processor + .SPP assembly language file + C pre-processor + + +The target object file prefix +(specified by the &cv-OBJPREFIX; construction variable; nothing by default) +and suffix +(specified by the &cv-OBJSUFFIX; construction variable; +.obj on Windows systems, +.o on POSIX systems) +are automatically added to the target if not already present. +Examples: + + +env.StaticObject(target = 'aaa', source = 'aaa.c') +env.StaticObject(target = 'bbb.o', source = 'bbb.c++') +env.StaticObject(target = 'ccc.obj', source = 'ccc.f') + + + + + + +The version number of the C compiler. +This may or may not be set, +depending on the specific C compiler being used. + + + + + +The suffix for C source files. +This is used by the internal CFile builder +when generating C files from Lex (.l) or YACC (.y) input files. +The default suffix, of course, is +.c +(lower case). +On case-insensitive systems (like Win32), +SCons also treats +.C +(upper case) files +as C files. + + + + + +The version number of the C++ compiler. +This may or may not be set, +depending on the specific C++ compiler being used. + + + + + +The suffix for C++ source files. +This is used by the internal CXXFile builder +when generating C++ files from Lex (.ll) or YACC (.yy) input files. +The default suffix is +.cc. +SCons also treats files with the suffixes +.cpp, +.cxx, +.c++, +and +.C++ +as C++ files. +On case-sensitive systems (Linux, UNIX, and other POSIX-alikes), +SCons also treats +.C +(upper case) files +as C++ files. + + diff --git a/src/engine/SCons/Tool/aixc++.xml b/src/engine/SCons/Tool/aixc++.xml new file mode 100644 index 00000000..d3867794 --- /dev/null +++ b/src/engine/SCons/Tool/aixc++.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/aixcc.xml b/src/engine/SCons/Tool/aixcc.xml new file mode 100644 index 00000000..cb27adb2 --- /dev/null +++ b/src/engine/SCons/Tool/aixcc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/aixf77.xml b/src/engine/SCons/Tool/aixf77.xml new file mode 100644 index 00000000..7e7988c4 --- /dev/null +++ b/src/engine/SCons/Tool/aixf77.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/aixlink.xml b/src/engine/SCons/Tool/aixlink.xml new file mode 100644 index 00000000..378dcbfa --- /dev/null +++ b/src/engine/SCons/Tool/aixlink.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/applelink.xml b/src/engine/SCons/Tool/applelink.xml new file mode 100644 index 00000000..d839be0d --- /dev/null +++ b/src/engine/SCons/Tool/applelink.xml @@ -0,0 +1,11 @@ + + + +On Mac OS X, +frameworks options to be added at +the end of a command +line building a loadable module. + + + + diff --git a/src/engine/SCons/Tool/ar.py b/src/engine/SCons/Tool/ar.py index ab232eeb..92cab59e 100644 --- a/src/engine/SCons/Tool/ar.py +++ b/src/engine/SCons/Tool/ar.py @@ -37,6 +37,7 @@ import SCons.Defaults import SCons.Tool import SCons.Util + def generate(env): """Add Builders and construction variables for ar to an Environment.""" SCons.Tool.createStaticLibBuilder(env) diff --git a/src/engine/SCons/Tool/ar.xml b/src/engine/SCons/Tool/ar.xml new file mode 100644 index 00000000..de3246f0 --- /dev/null +++ b/src/engine/SCons/Tool/ar.xml @@ -0,0 +1,48 @@ + + + +XXX + + + + + +The static library archiver. + + + + + +The command line used to generate a static library from object files. + + + + + +The string displayed when an object file +is generated from an assembly-language source file. +If this is not set, then &cv-ARCOM; (the command line) is displayed. + + +env = Environment(ARCOMSTR = "Archiving $TARGET") + + + + + + +General options passed to the static library archiver. + + + + + +The archive indexer. + + + + + +General options passed to the archive indexer. + + diff --git a/src/engine/SCons/Tool/as.xml b/src/engine/SCons/Tool/as.xml new file mode 100644 index 00000000..a9395dfd --- /dev/null +++ b/src/engine/SCons/Tool/as.xml @@ -0,0 +1,69 @@ + + + +XXX + + + + + +The assembler. + + + + + +The command line used to generate an object file +from an assembly-language source file. + + + + + +The string displayed when an object file +is generated from an assembly-language source file. +If this is not set, then &cv-ASCOM; (the command line) is displayed. + + +env = Environment(ASCOMSTR = "Assembling $TARGET") + + + + + + +General options passed to the assembler. + + + + + +The command line used to assemble an assembly-language +source file into an object file +after first running the file through the C preprocessor. +Any options specified in the &cv-ASFLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. + + + + + +The string displayed when an object file +is generated from an assembly-language source file +after first running the file through the C preprocessor. +If this is not set, then &cv-ASPPCOM; (the command line) is displayed. + + +env = Environment(ASPPCOMSTR = "Assembling $TARGET") + + + + + + +General options when an assembling an assembly-language +source file into an object file +after first running the file through the C preprocessor. +The default is to use the value of &cv-ASFLAGS;. + + diff --git a/src/engine/SCons/Tool/bcc32.xml b/src/engine/SCons/Tool/bcc32.xml new file mode 100644 index 00000000..ded614c6 --- /dev/null +++ b/src/engine/SCons/Tool/bcc32.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/c++.xml b/src/engine/SCons/Tool/c++.xml new file mode 100644 index 00000000..eaa8e6c8 --- /dev/null +++ b/src/engine/SCons/Tool/c++.xml @@ -0,0 +1,76 @@ + + + +XXX + + + + + +The C++ compiler. + + + + + +The command line used to compile a C++ source file to an object file. +Any options specified in the &cv-CXXFLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. + + + + + +The string displayed when a C++ source file +is compiled to a (static) object file. +If this is not set, then &cv-CXXCOM; (the command line) is displayed. + + +env = Environment(CXXCOMSTR = "Compiling static object $TARGET") + + + + + + +General options that are passed to the C++ compiler. +By default, this includes the value of &cv-CCFLAGS;, +so that setting &cv-CCFLAGS; affects both C and C++ compilation. +If you want to add C++-specific flags, +you must set or override the value of &cv-CXXFLAGS;. + + + + + +The C++ compiler used for generating shared-library objects. + + + + + +The command line used to compile a C++ source file +to a shared-library object file. +Any options specified in the &cv-SHCXXFLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. + + + + + +The string displayed when a C++ source file +is compiled to a shared object file. +If this is not set, then &cv-SHCXXCOM; (the command line) is displayed. + + +env = Environment(SHCXXCOMSTR = "Compiling shared object $TARGET") + + + + + + +Options that are passed to the C++ compiler +to generate shared-library objects. + + diff --git a/src/engine/SCons/Tool/cc.xml b/src/engine/SCons/Tool/cc.xml new file mode 100644 index 00000000..fb688ade --- /dev/null +++ b/src/engine/SCons/Tool/cc.xml @@ -0,0 +1,111 @@ + + + +XXX + + + + + +The C compiler. + + + + + +The command line used to compile a C source file to a (static) object file. +Any options specified in the &cv-CCFLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. + + + + + +The string displayed when a C source file +is compiled to a (static) object file. +If this is not set, then &cv-CCCOM; (the command line) is displayed. + + +env = Environment(CCCOMSTR = "Compiling static object $TARGET") + + + + + + +General options that are passed to the C compiler. + + + + + +User-specified C preprocessor options. +These will be included in any command that uses the C preprocessor, +including not just compilation of C and C++ source files +via the &cv-CCCOM;, &cv-SHCCCOM;, &cv-CXXCOM; and &cv-SHCXXCOM; command lines, +but also the &cv-FORTRANPPCOM;, &cv-SHFORTRANPPCOM;, +&cv-F77PPCOM; and &cv-SHF77PPCOM; command lines +used to compile a Fortran source file, +and the &cv-ASPPCOM; command line +used to assemble an assembly language source file, +after first running each file through the C preprocessor. +Note that this variable does +not +contain + +(or similar) include search path options +that scons generates automatically from &cv-CPPPATH;. +See &cv-link-_CPPINCFLAGS;, below, +for the variable that expands to those options. + + + + + +The list of suffixes of files that will be scanned +for C preprocessor implicit dependencies +(#include lines). +The default list is: + + +[".c", ".C", ".cxx", ".cpp", ".c++", ".cc", + ".h", ".H", ".hxx", ".hpp", ".hh", + ".F", ".fpp", ".FPP", + ".S", ".spp", ".SPP"] + + + + + + +The C compiler used for generating shared-library objects. + + + + + +The command line used to compile a C source file +to a shared-library object file. +Any options specified in the &cv-SHCCFLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. + + + + + +The string displayed when a C source file +is compiled to a shared object file. +If this is not set, then &cv-SHCCCOM; (the command line) is displayed. + + +env = Environment(SHCCCOMSTR = "Compiling shared object $TARGET") + + + + + + +Options that are passed to the C compiler +to generate shared-library objects. + + diff --git a/src/engine/SCons/Tool/cvf.xml b/src/engine/SCons/Tool/cvf.xml new file mode 100644 index 00000000..bd848aed --- /dev/null +++ b/src/engine/SCons/Tool/cvf.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/default.xml b/src/engine/SCons/Tool/default.xml new file mode 100644 index 00000000..371e5bc3 --- /dev/null +++ b/src/engine/SCons/Tool/default.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/dmd.xml b/src/engine/SCons/Tool/dmd.xml new file mode 100644 index 00000000..99ca8d9a --- /dev/null +++ b/src/engine/SCons/Tool/dmd.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/dvipdf.xml b/src/engine/SCons/Tool/dvipdf.xml new file mode 100644 index 00000000..fbb49333 --- /dev/null +++ b/src/engine/SCons/Tool/dvipdf.xml @@ -0,0 +1,38 @@ + + + +XXX + + + + + +The TeX DVI file to PDF file converter. + + + + + +General options passed to the TeX DVI file to PDF file converter. + + + + + +The command line used to convert TeX DVI files into a PDF file. + + + + + +The string displayed when a TeX DVI file +is converted into a PDF file. +If this is not set, then &cv-DVIPDFCOM; (the command line) is displayed. + + + + + +A deprecated synonym for &cv-DVIPDFCOM;. + + diff --git a/src/engine/SCons/Tool/dvips.xml b/src/engine/SCons/Tool/dvips.xml new file mode 100644 index 00000000..c2904697 --- /dev/null +++ b/src/engine/SCons/Tool/dvips.xml @@ -0,0 +1,66 @@ + + + +XXX + + + + + +Builds a .ps file +from a .dvi input file +(or, by extension, a .tex, +.ltx, +or +.latex input file). +The suffix specified by the &cv-PSSUFFIX; construction variable +(.ps by default) +is added automatically to the target +if it is not already present. Example: + + +# builds from aaa.tex +env.PostScript(target = 'aaa.ps', source = 'aaa.tex') +# builds bbb.ps from bbb.dvi +env.PostScript(target = 'bbb', source = 'bbb.dvi') + + + + + + +The TeX DVI file to PostScript converter. + + + + + +General options passed to the TeX DVI file to PostScript converter. + + + + + +The command line used to convert TeX DVI files into a PostScript file. + + + + + +The string displayed when a TeX DVI file +is converted into a PostScript file. +If this is not set, then &cv-PSCOM; (the command line) is displayed. + + + + + +The prefix used for PostScript file names. + + + + + +The prefix used for PostScript file names. + + diff --git a/src/engine/SCons/Tool/f77.xml b/src/engine/SCons/Tool/f77.xml new file mode 100644 index 00000000..caf959fd --- /dev/null +++ b/src/engine/SCons/Tool/f77.xml @@ -0,0 +1,196 @@ + + + +XXX + + + + + +The Fortran 77 compiler. +You should normally set the &cv-FORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-F77; if you need to use a specific compiler +or compiler version for Fortran 77 files. + + + + + +The command line used to compile a Fortran 77 source file to an object file. +You only need to set &cv-F77COM; if you need to use a specific +command line for Fortran 77 files. +You should normally set the &cv-FORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. + + + + + +The string displayed when a Fortran 77 source file +is compiled to an object file. +If this is not set, then &cv-F77COM; or &cv-FORTRANCOM; +(the command line) is displayed. + + + + + +General user-specified options that are passed to the Fortran 77 compiler. +Note that this variable does +not +contain + +(or similar) include search path options +that scons generates automatically from &cv-F77PATH;. +See +&cv-_F77INCFLAGS; +below, +for the variable that expands to those options. +You only need to set &cv-F77FLAGS; if you need to define specific +user options for Fortran 77 files. +You should normally set the &cv-FORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. + + + + + +An automatically-generated construction variable +containing the Fortran 77 compiler command-line options +for specifying directories to be searched for include files. +The value of &cv-_F77INCFLAGS; is created +by appending &cv-INCPREFIX; and &cv-INCSUFFIX; +to the beginning and end +of each directory in &cv-F77PATH;. + + + + + +The list of directories that the Fortran 77 compiler will search for include +directories. The implicit dependency scanner will search these +directories for include files. Don't explicitly put include directory +arguments in &cv-F77FLAGS; because the result will be non-portable +and the directories will not be searched by the dependency scanner. Note: +directory names in &cv-F77PATH; will be looked-up relative to the SConscript +directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: +You only need to set &cv-F77PATH; if you need to define a specific +include path for Fortran 77 files. +You should normally set the &cv-FORTRANPATH; variable, +which specifies the include path +for the default Fortran compiler +for all Fortran versions. + + +env = Environment(F77PATH='#/include') + + +The directory look-up can also be forced using the +&Dir;() +function: + + +include = Dir('include') +env = Environment(F77PATH=include) + + +The directory list will be added to command lines +through the automatically-generated +&cv-_F77INCFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-INCPREFIX; and &cv-INCSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-F77PATH;. +Any command lines you define that need +the F77PATH directory list should +include &cv-_F77INCFLAGS;: + + +env = Environment(F77COM="my_compiler $_F77INCFLAGS -c -o $TARGET $SOURCE") + + + + + + +The command line used to compile a Fortran 77 source file to an object file +after first running the file through the C preprocessor. +Any options specified in the &cv-F77FLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-F77PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 77 files. +You should normally set the &cv-FORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. + + + + + +The Fortran 77 compiler used for generating shared-library objects. +You should normally set the &cv-SHFORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-SHF77; if you need to use a specific compiler +or compiler version for Fortran 77 files. + + + + + +The command line used to compile a Fortran 77 source file +to a shared-library object file. +You only need to set &cv-SHF77COM; if you need to use a specific +command line for Fortran 77 files. +You should normally set the &cv-SHFORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. + + + + + +The string displayed when a Fortran 77 source file +is compiled to a shared-library object file. +If this is not set, then &cv-SHF77COM; or &cv-SHFORTRANCOM; +(the command line) is displayed. + + + + + +Options that are passed to the Fortran 77 compiler +to generated shared-library objects. +You only need to set &cv-SHF77FLAGS; if you need to define specific +user options for Fortran 77 files. +You should normally set the &cv-SHFORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. + + + + + +The command line used to compile a Fortran 77 source file to a +shared-library object file +after first running the file through the C preprocessor. +Any options specified in the &cv-SHF77FLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-SHF77PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 77 files. +You should normally set the &cv-SHFORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. + + diff --git a/src/engine/SCons/Tool/f90.xml b/src/engine/SCons/Tool/f90.xml new file mode 100644 index 00000000..b2f08576 --- /dev/null +++ b/src/engine/SCons/Tool/f90.xml @@ -0,0 +1,196 @@ + + + +XXX + + + + + +The Fortran 90 compiler. +You should normally set the &cv-FORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-F90; if you need to use a specific compiler +or compiler version for Fortran 90 files. + + + + + +The command line used to compile a Fortran 90 source file to an object file. +You only need to set &cv-F90COM; if you need to use a specific +command line for Fortran 90 files. +You should normally set the &cv-FORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. + + + + + +The string displayed when a Fortran 90 source file +is compiled to an object file. +If this is not set, then &cv-F90COM; or &cv-FORTRANCOM; +(the command line) is displayed. + + + + + +General user-specified options that are passed to the Fortran 90 compiler. +Note that this variable does +not +contain + +(or similar) include search path options +that scons generates automatically from &cv-F90PATH;. +See +&cv-_F90INCFLAGS; +below, +for the variable that expands to those options. +You only need to set &cv-F90FLAGS; if you need to define specific +user options for Fortran 90 files. +You should normally set the &cv-FORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. + + + + + +An automatically-generated construction variable +containing the Fortran 90 compiler command-line options +for specifying directories to be searched for include files. +The value of &cv-_F90INCFLAGS; is created +by appending &cv-INCPREFIX; and &cv-INCSUFFIX; +to the beginning and end +of each directory in &cv-F90PATH;. + + + + + +The list of directories that the Fortran 90 compiler will search for include +directories. The implicit dependency scanner will search these +directories for include files. Don't explicitly put include directory +arguments in &cv-F90FLAGS; because the result will be non-portable +and the directories will not be searched by the dependency scanner. Note: +directory names in &cv-F90PATH; will be looked-up relative to the SConscript +directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: +You only need to set &cv-F90PATH; if you need to define a specific +include path for Fortran 90 files. +You should normally set the &cv-FORTRANPATH; variable, +which specifies the include path +for the default Fortran compiler +for all Fortran versions. + + +env = Environment(F90PATH='#/include') + + +The directory look-up can also be forced using the +&Dir;() +function: + + +include = Dir('include') +env = Environment(F90PATH=include) + + +The directory list will be added to command lines +through the automatically-generated +&cv-_F90INCFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-INCPREFIX; and &cv-INCSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-F90PATH;. +Any command lines you define that need +the F90PATH directory list should +include &cv-_F90INCFLAGS;: + + +env = Environment(F90COM="my_compiler $_F90INCFLAGS -c -o $TARGET $SOURCE") + + + + + + +The command line used to compile a Fortran 90 source file to an object file +after first running the file through the C preprocessor. +Any options specified in the &cv-F90FLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-F90PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 90 files. +You should normally set the &cv-FORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. + + + + + +The Fortran 90 compiler used for generating shared-library objects. +You should normally set the &cv-SHFORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-SHF90; if you need to use a specific compiler +or compiler version for Fortran 90 files. + + + + + +The command line used to compile a Fortran 90 source file +to a shared-library object file. +You only need to set &cv-SHF90COM; if you need to use a specific +command line for Fortran 90 files. +You should normally set the &cv-SHFORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. + + + + + +The string displayed when a Fortran 90 source file +is compiled to a shared-library object file. +If this is not set, then &cv-SHF90COM; or &cv-SHFORTRANCOM; +(the command line) is displayed. + + + + + +Options that are passed to the Fortran 90 compiler +to generated shared-library objects. +You only need to set &cv-SHF90FLAGS; if you need to define specific +user options for Fortran 90 files. +You should normally set the &cv-SHFORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. + + + + + +The command line used to compile a Fortran 90 source file to a +shared-library object file +after first running the file through the C preprocessor. +Any options specified in the &cv-SHF90FLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-SHF90PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 90 files. +You should normally set the &cv-SHFORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. + + diff --git a/src/engine/SCons/Tool/f95.xml b/src/engine/SCons/Tool/f95.xml new file mode 100644 index 00000000..df744222 --- /dev/null +++ b/src/engine/SCons/Tool/f95.xml @@ -0,0 +1,196 @@ + + + +XXX + + + + + +The Fortran 95 compiler. +You should normally set the &cv-FORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-F95; if you need to use a specific compiler +or compiler version for Fortran 95 files. + + + + + +The command line used to compile a Fortran 95 source file to an object file. +You only need to set &cv-F95COM; if you need to use a specific +command line for Fortran 95 files. +You should normally set the &cv-FORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. + + + + + +The string displayed when a Fortran 95 source file +is compiled to an object file. +If this is not set, then &cv-F95COM; or &cv-FORTRANCOM; +(the command line) is displayed. + + + + + +General user-specified options that are passed to the Fortran 95 compiler. +Note that this variable does +not +contain + +(or similar) include search path options +that scons generates automatically from &cv-F95PATH;. +See +&cv-_F95INCFLAGS; +below, +for the variable that expands to those options. +You only need to set &cv-F95FLAGS; if you need to define specific +user options for Fortran 95 files. +You should normally set the &cv-FORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. + + + + + +An automatically-generated construction variable +containing the Fortran 95 compiler command-line options +for specifying directories to be searched for include files. +The value of &cv-_F95INCFLAGS; is created +by appending &cv-INCPREFIX; and &cv-INCSUFFIX; +to the beginning and end +of each directory in &cv-F95PATH;. + + + + + +The list of directories that the Fortran 95 compiler will search for include +directories. The implicit dependency scanner will search these +directories for include files. Don't explicitly put include directory +arguments in &cv-F95FLAGS; because the result will be non-portable +and the directories will not be searched by the dependency scanner. Note: +directory names in &cv-F95PATH; will be looked-up relative to the SConscript +directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: +You only need to set &cv-F95PATH; if you need to define a specific +include path for Fortran 95 files. +You should normally set the &cv-FORTRANPATH; variable, +which specifies the include path +for the default Fortran compiler +for all Fortran versions. + + +env = Environment(F95PATH='#/include') + + +The directory look-up can also be forced using the +&Dir;() +function: + + +include = Dir('include') +env = Environment(F95PATH=include) + + +The directory list will be added to command lines +through the automatically-generated +&cv-_F95INCFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-INCPREFIX; and &cv-INCSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-F95PATH;. +Any command lines you define that need +the F95PATH directory list should +include &cv-_F95INCFLAGS;: + + +env = Environment(F95COM="my_compiler $_F95INCFLAGS -c -o $TARGET $SOURCE") + + + + + + +The command line used to compile a Fortran 95 source file to an object file +after first running the file through the C preprocessor. +Any options specified in the &cv-F95FLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-F95PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 95 files. +You should normally set the &cv-FORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. + + + + + +The Fortran 95 compiler used for generating shared-library objects. +You should normally set the &cv-SHFORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-SHF95; if you need to use a specific compiler +or compiler version for Fortran 95 files. + + + + + +The command line used to compile a Fortran 95 source file +to a shared-library object file. +You only need to set &cv-SHF95COM; if you need to use a specific +command line for Fortran 95 files. +You should normally set the &cv-SHFORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. + + + + + +The string displayed when a Fortran 95 source file +is compiled to a shared-library object file. +If this is not set, then &cv-SHF95COM; or &cv-SHFORTRANCOM; +(the command line) is displayed. + + + + + +Options that are passed to the Fortran 95 compiler +to generated shared-library objects. +You only need to set &cv-SHF95FLAGS; if you need to define specific +user options for Fortran 95 files. +You should normally set the &cv-SHFORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. + + + + + +The command line used to compile a Fortran 95 source file to a +shared-library object file +after first running the file through the C preprocessor. +Any options specified in the &cv-SHF95FLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-SHF95PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 95 files. +You should normally set the &cv-SHFORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. + + diff --git a/src/engine/SCons/Tool/fortran.xml b/src/engine/SCons/Tool/fortran.xml new file mode 100644 index 00000000..4282f302 --- /dev/null +++ b/src/engine/SCons/Tool/fortran.xml @@ -0,0 +1,240 @@ + + + +XXX + + + + + +The default Fortran compiler +for all versions of Fortran. + + + + + +The command line used to compile a Fortran source file to an object file. +By default, any options specified +in the &cv-FORTRANFLAGS;, &cv-CPPFLAGS;, &cv-_CPPDEFFLAGS;, +&cv-_FORTRANMODFLAG;, and &cv-_FORTRANINCFLAGS; construction variables +are included on this command line. + + + + + +The string displayed when a Fortran source file +is compiled to an object file. +If this is not set, then &cv-FORTRANCOM; +(the command line) is displayed. + + + + + +General user-specified options that are passed to the Fortran compiler. +Note that this variable does +not +contain + +(or similar) include or module search path options +that scons generates automatically from &cv-FORTRANPATH;. +See +&cv-_FORTRANINCFLAGS; and &cv-_FORTRANMODFLAG;, +below, +for the variables that expand those options. + + + + + +An automatically-generated construction variable +containing the Fortran compiler command-line options +for specifying directories to be searched for include +files and module files. +The value of &cv-_FORTRANINCFLAGS; is created +by prepending/appending &cv-INCPREFIX; and &cv-INCSUFFIX; +to the beginning and end +of each directory in &cv-FORTRANPATH;. + + + + + +Directory location where the Fortran compiler should place +any module files it generates. This variable is empty, by default. Some +Fortran compilers will internally append this directory in the search path +for module files, as well + + + + + +The prefix used to specify a module directory on the Fortran compiler command +line. +This will be appended to the beginning of the directory +in the &cv-FORTRANMODDIR; construction variables +when the &cv-_FORTRANMODFLAG; variables is automatically generated. + + + + + +The suffix used to specify a module directory on the Fortran compiler command +line. +This will be appended to the beginning of the directory +in the &cv-FORTRANMODDIR; construction variables +when the &cv-_FORTRANMODFLAG; variables is automatically generated. + + + + + +An automatically-generated construction variable +containing the Fortran compiler command-line option +for specifying the directory location where the Fortran +compiler should place any module files that happen to get +generated during compilation. +The value of &cv-_FORTRANMODFLAG; is created +by prepending/appending &cv-FORTRANMODDIRPREFIX; and &cv-FORTRANMODDIRSUFFIX; +to the beginning and end of the directory in &cv-FORTRANMODDIR;. + + + + + +The module file prefix used by the Fortran compiler. SCons assumes that +the Fortran compiler follows the quasi-standard naming convention for +module files of +module_name.mod. +As a result, this variable is left empty, by default. For situations in +which the compiler does not necessarily follow the normal convention, +the user may use this variable. Its value will be appended to every +module file name as scons attempts to resolve dependencies. + + + + + +The module file suffix used by the Fortran compiler. SCons assumes that +the Fortran compiler follows the quasi-standard naming convention for +module files of +module_name.mod. +As a result, this variable is set to ".mod", by default. For situations +in which the compiler does not necessarily follow the normal convention, +the user may use this variable. Its value will be appended to every +module file name as scons attempts to resolve dependencies. + + + + + +The list of directories that the Fortran compiler will search for +include files and (for some compilers) module files. The Fortran implicit +dependency scanner will search these directories for include files (but +not module files since they are autogenerated and, as such, may not +actually exist at the time the scan takes place). Don't explicitly put +include directory arguments in FORTRANFLAGS because the result will be +non-portable and the directories will not be searched by the dependency +scanner. Note: directory names in FORTRANPATH will be looked-up relative +to the SConscript directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: + + +env = Environment(FORTRANPATH='#/include') + + +The directory look-up can also be forced using the +&Dir;() +function: + + +include = Dir('include') +env = Environment(FORTRANPATH=include) + + +The directory list will be added to command lines +through the automatically-generated +&cv-_FORTRANINCFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-INCPREFIX; and &cv-INCSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-FORTRANPATH;. +Any command lines you define that need +the FORTRANPATH directory list should +include &cv-_FORTRANINCFLAGS;: + + +env = Environment(FORTRANCOM="my_compiler $_FORTRANINCFLAGS -c -o $TARGET $SOURCE") + + + + + + +The command line used to compile a Fortran source file to an object file +after first running the file through the C preprocessor. +By default, any options specified in the &cv-FORTRANFLAGS;, &cv-CPPFLAGS;, +_CPPDEFFLAGS, &cv-_FORTRANMODFLAG;, and &cv-_FORTRANINCFLAGS; +construction variables are included on this command line. + + + + + +The list of suffixes of files that will be scanned +for Fortran implicit dependencies +(INCLUDE lines and USE statements). +The default list is: + + +[".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP", +".f77", ".F77", ".f90", ".F90", ".f95", ".F95"] + + + + + + +The default Fortran compiler used for generating shared-library objects. + + + + + +The command line used to compile a Fortran source file +to a shared-library object file. + + + + + +The string displayed when a Fortran source file +is compiled to a shared-library object file. +If this is not set, then &cv-SHFORTRANCOM; +(the command line) is displayed. + + + + + +Options that are passed to the Fortran compiler +to generate shared-library objects. + + + + + +The command line used to compile a Fortran source file to a +shared-library object file +after first running the file through the C preprocessor. +Any options specified +in the &cv-SHFORTRANFLAGS; and &cv-CPPFLAGS; construction variables +are included on this command line. + + diff --git a/src/engine/SCons/Tool/g++.xml b/src/engine/SCons/Tool/g++.xml new file mode 100644 index 00000000..b6fb5b07 --- /dev/null +++ b/src/engine/SCons/Tool/g++.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/g77.xml b/src/engine/SCons/Tool/g77.xml new file mode 100644 index 00000000..94f415a2 --- /dev/null +++ b/src/engine/SCons/Tool/g77.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/gas.xml b/src/engine/SCons/Tool/gas.xml new file mode 100644 index 00000000..29179e2b --- /dev/null +++ b/src/engine/SCons/Tool/gas.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/gcc.xml b/src/engine/SCons/Tool/gcc.xml new file mode 100644 index 00000000..51dac073 --- /dev/null +++ b/src/engine/SCons/Tool/gcc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/gnulink.xml b/src/engine/SCons/Tool/gnulink.xml new file mode 100644 index 00000000..d7c1a426 --- /dev/null +++ b/src/engine/SCons/Tool/gnulink.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/gs.xml b/src/engine/SCons/Tool/gs.xml new file mode 100644 index 00000000..377bfc34 --- /dev/null +++ b/src/engine/SCons/Tool/gs.xml @@ -0,0 +1,34 @@ + + + +XXX + + + + + +The Ghostscript program used to convert PostScript to PDF files. + + + + + +The Ghostscript command line used to convert PostScript to PDF files. + + + + + +The string displayed when +Ghostscript is used to convert +a PostScript file to a PDF file. +If this is not set, then &cv-GSCOM; (the command line) is displayed. + + + + + +General options passed to the Ghostscript program +when converting PostScript to PDF files. + + diff --git a/src/engine/SCons/Tool/hpc++.xml b/src/engine/SCons/Tool/hpc++.xml new file mode 100644 index 00000000..5c13718e --- /dev/null +++ b/src/engine/SCons/Tool/hpc++.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/hpcc.xml b/src/engine/SCons/Tool/hpcc.xml new file mode 100644 index 00000000..db2fccd6 --- /dev/null +++ b/src/engine/SCons/Tool/hpcc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/hplink.xml b/src/engine/SCons/Tool/hplink.xml new file mode 100644 index 00000000..71f5e225 --- /dev/null +++ b/src/engine/SCons/Tool/hplink.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/icc.xml b/src/engine/SCons/Tool/icc.xml new file mode 100644 index 00000000..a6fdea2d --- /dev/null +++ b/src/engine/SCons/Tool/icc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/icl.xml b/src/engine/SCons/Tool/icl.xml new file mode 100644 index 00000000..be20912c --- /dev/null +++ b/src/engine/SCons/Tool/icl.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/ifl.xml b/src/engine/SCons/Tool/ifl.xml new file mode 100644 index 00000000..34dfecb5 --- /dev/null +++ b/src/engine/SCons/Tool/ifl.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/ifort.xml b/src/engine/SCons/Tool/ifort.xml new file mode 100644 index 00000000..2cb889bd --- /dev/null +++ b/src/engine/SCons/Tool/ifort.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/ilink.xml b/src/engine/SCons/Tool/ilink.xml new file mode 100644 index 00000000..4f868833 --- /dev/null +++ b/src/engine/SCons/Tool/ilink.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/ilink32.xml b/src/engine/SCons/Tool/ilink32.xml new file mode 100644 index 00000000..0d62be49 --- /dev/null +++ b/src/engine/SCons/Tool/ilink32.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/intelc.xml b/src/engine/SCons/Tool/intelc.xml new file mode 100644 index 00000000..47cfbecb --- /dev/null +++ b/src/engine/SCons/Tool/intelc.xml @@ -0,0 +1,14 @@ + + + +XXX + + + + + +Set by the "intelc" Tool +to the major version number of the Intel C compiler +selected for use. + + diff --git a/src/engine/SCons/Tool/jar.xml b/src/engine/SCons/Tool/jar.xml new file mode 100644 index 00000000..b89468d9 --- /dev/null +++ b/src/engine/SCons/Tool/jar.xml @@ -0,0 +1,82 @@ + + + +XXX + + + + + +Builds a Java archive (.jar) file +from a source tree of .class files. +If the &cv-JARCHDIR; value is set, the +&jar; +command will change to the specified directory using the + +option. +If the contents any of the source files begin with the string +Manifest-Version, +the file is assumed to be a manifest +and is passed to the +&jar; +command with the + +option set. + + +env.Jar(target = 'foo.jar', source = 'classes') + + + + + + +The Java archive tool. + + + + + +The directory to which the Java archive tool should change +(using the + +option). + + + + + +The command line used to call the Java archive tool. + + + + + +The string displayed when the Java archive tool +is called +If this is not set, then &cv-JARCOM; (the command line) is displayed. + + +env = Environment(JARCOMSTR = "JARchiving $SOURCES into $TARGET") + + + + + + +General options passed to the Java archive tool. +By default this is set to + +to create the necessary +jar +file. + + + + + +The suffix for Java archives: +.jar +by default. + + diff --git a/src/engine/SCons/Tool/javac.xml b/src/engine/SCons/Tool/javac.xml new file mode 100644 index 00000000..9cd40b54 --- /dev/null +++ b/src/engine/SCons/Tool/javac.xml @@ -0,0 +1,109 @@ + + + +XXX + + + + + +Builds one or more Java class files +from one or more source trees of .java files. +The class files will be placed underneath +the specified target directory. +SCons will parse each source .java file +to find the classes +(including inner classes) +defined within that file, +and from that figure out the +target .class files that will be created. +SCons will also search each Java file +for the Java package name, +which it assumes can be found on a line +beginning with the string +package +in the first column; +the resulting .class files +will be placed in a directory reflecting +the specified package name. +For example, +the file +Foo.java +defining a single public +Foo +class and +containing a package name of +sub.dir +will generate a corresponding +sub/dir/Foo.class +class file. + +Example: + + +env.Java(target = 'classes', source = 'src') +env.Java(target = 'classes', source = ['src1', 'src2']) + + + + + + +The Java compiler. + + + + + +The command line used to compile a directory tree containing +Java source files to +corresponding Java class files. +Any options specified in the &cv-JAVACFLAGS; construction variable +are included on this command line. + + + + + +The string displayed when compiling +a directory tree of Java source files to +corresponding Java class files. +If this is not set, then &cv-JAVACCOM; (the command line) is displayed. + + +env = Environment(JAVACCOMSTR = "Compiling class files $TARGETS from $SOURCES") + + + + + + +General options that are passed to the Java compiler. + + + + + +The directory in which Java class files may be found. +This is stripped from the beginning of any Java .class +file names supplied to the +JavaH +builder. + + + + + +The suffix for Java class files; +.class +by default. + + + + + +The suffix for Java files; +.java +by default. + + diff --git a/src/engine/SCons/Tool/javah.xml b/src/engine/SCons/Tool/javah.xml new file mode 100644 index 00000000..76997840 --- /dev/null +++ b/src/engine/SCons/Tool/javah.xml @@ -0,0 +1,82 @@ + + + +XXX + + + + + +Builds C header and source files for +implementing Java native methods. +The target can be either a directory +in which the header files will be written, +or a header file name which +will contain all of the definitions. +The source can be either the names of .class files, +or the objects returned from the +&b-Java; +builder method. + +If the construction variable +&cv-JAVACLASSDIR; +is set, either in the environment +or in the call to the +&b-JavaH; +builder method itself, +then the value of the variable +will be stripped from the +beginning of any .class file names. + +Examples: + + +# builds java_native.h +classes = env.Java(target = 'classdir', source = 'src') +env.JavaH(target = 'java_native.h', source = classes) + +# builds include/package_foo.h and include/package_bar.h +env.JavaH(target = 'include', + source = ['package/foo.class', 'package/bar.class']) + +# builds export/foo.h and export/bar.h +env.JavaH(target = 'export', + source = ['classes/foo.class', 'classes/bar.class'], + JAVACLASSDIR = 'classes') + + + + + + +The Java generator for C header and stub files. + + + + + +The command line used to generate C header and stub files +from Java classes. +Any options specified in the &cv-JAVAHFLAGS; construction variable +are included on this command line. + + + + + +The string displayed when C header and stub files +are generated from Java classes. +If this is not set, then &cv-JAVAHCOM; (the command line) is displayed. + + +env = Environment(JAVAHCOMSTR = "Generating header/stub file(s) $TARGETS from $SOURCES") + + + + + + +General options passed to the C header and stub file generator +for Java classes. + + diff --git a/src/engine/SCons/Tool/latex.xml b/src/engine/SCons/Tool/latex.xml new file mode 100644 index 00000000..6a415f78 --- /dev/null +++ b/src/engine/SCons/Tool/latex.xml @@ -0,0 +1,36 @@ + + + +XXX + + + + + +The LaTeX structured formatter and typesetter. + + + + + +The command line used to call the LaTeX structured formatter and typesetter. + + + + + +The string displayed when calling +the LaTeX structured formatter and typesetter. +If this is not set, then &cv-LATEXCOM; (the command line) is displayed. + + +env = Environment(LATEXCOMSTR = "Building $TARGET from LaTeX input $SOURCES") + + + + + + +General options passed to the LaTeX structured formatter and typesetter. + + diff --git a/src/engine/SCons/Tool/lex.py b/src/engine/SCons/Tool/lex.py index 4a17faec..3331f6cc 100644 --- a/src/engine/SCons/Tool/lex.py +++ b/src/engine/SCons/Tool/lex.py @@ -33,17 +33,19 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" -import SCons.Defaults +import SCons.Action import SCons.Tool import SCons.Util +LexAction = SCons.Action.Action("$LEXCOM", "$LEXCOMSTR") + def generate(env): """Add Builders and construction variables for lex to an Environment.""" c_file, cxx_file = SCons.Tool.createCFileBuilders(env) - c_file.add_action('.l', SCons.Defaults.LexAction) - c_file.add_action('.lex', SCons.Defaults.LexAction) - cxx_file.add_action('.ll', SCons.Defaults.LexAction) + c_file.add_action('.l', LexAction) + c_file.add_action('.lex', LexAction) + cxx_file.add_action('.ll', LexAction) env['LEX'] = env.Detect('flex') or 'lex' env['LEXFLAGS'] = SCons.Util.CLVar('') diff --git a/src/engine/SCons/Tool/lex.xml b/src/engine/SCons/Tool/lex.xml new file mode 100644 index 00000000..3fb62e11 --- /dev/null +++ b/src/engine/SCons/Tool/lex.xml @@ -0,0 +1,37 @@ + + + +XXX + + + + + +The lexical analyzer generator. + + + + + +The command line used to call the lexical analyzer generator +to generate a source file. + + + + + +The string displayed when generating a source file +using the lexical analyzer generator. +If this is not set, then &cv-LEXCOM; (the command line) is displayed. + + +env = Environment(LEXCOMSTR = "Lex'ing $TARGET from $SOURCES") + + + + + + +General options passed to the lexical analyzer generator. + + diff --git a/src/engine/SCons/Tool/link.xml b/src/engine/SCons/Tool/link.xml new file mode 100644 index 00000000..420a5b70 --- /dev/null +++ b/src/engine/SCons/Tool/link.xml @@ -0,0 +1,146 @@ + + + +XXX + + + + + +The linker for building loadable modules. +By default, this is the same as &cv-SHLINK;. + + + + + +The command line for building loadable modules. +On Mac OS X, this uses the &cv-LDMODULE;, +&cv-LDMODULEFLAGS; and &cv-FRAMEWORKSFLAGS; variables. +On other systems, this is the same as &cv-SHLINK;. + + + + + +The string displayed when building loadable modules. +If this is not set, then &cv-LDMODULECOM; (the command line) is displayed. + + + + + +General user options passed to the linker for building loadable modules. + + + + + +The prefix used for loadable module file names. +On Mac OS X, this is null; +on other systems, this is +the same as &cv-SHLIBPREFIX;. + + + + + +The suffix used for loadable module file names. +On Mac OS X, this is null; +on other systems, this is +the same as $SHLIBSUFFIX. + + + + + +The linker. + + + + + +The command line used to link object files into an executable. + + + + + +The string displayed when object files +are linked into an executable. +If this is not set, then &cv-LINKCOM; (the command line) is displayed. + + +env = Environment(LINKCOMSTR = "Linking $TARGET") + + + + + + +General user options passed to the linker. +Note that this variable should +not +contain + +(or similar) options for linking with the libraries listed in &cv-LIBS;, +nor + +(or similar) library search path options +that scons generates automatically from &cv-LIBPATH;. +See +&cv-_LIBFLAGS; +above, +for the variable that expands to library-link options, +and +&cv-_LIBDIRFLAGS; +above, +for the variable that expands to library search path options. + + + + + +The linker for programs that use shared libraries. + + + + + +The command line used to link programs using shared libaries. + + + + + +The string displayed when programs using shared libraries are linked. +If this is not set, then &cv-SHLINKCOM; (the command line) is displayed. + + +env = Environment(SHLINKCOMSTR = "Linking shared $TARGET") + + + + + + +General user options passed to the linker for programs using shared libraries. +Note that this variable should +not +contain + +(or similar) options for linking with the libraries listed in &cv-LIBS;, +nor + +(or similar) include search path options +that scons generates automatically from &cv-LIBPATH;. +See +&cv-_LIBFLAGS; +above, +for the variable that expands to library-link options, +and +&cv-_LIBDIRFLAGS; +above, +for the variable that expands to library search path options. + + diff --git a/src/engine/SCons/Tool/linkloc.xml b/src/engine/SCons/Tool/linkloc.xml new file mode 100644 index 00000000..12a9d50e --- /dev/null +++ b/src/engine/SCons/Tool/linkloc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/m4.xml b/src/engine/SCons/Tool/m4.xml new file mode 100644 index 00000000..1f917703 --- /dev/null +++ b/src/engine/SCons/Tool/m4.xml @@ -0,0 +1,48 @@ + + + +XXX + + + + + +Builds an output file from an M4 input file. +This uses a default &cv-M4FLAGS; value of +, +which considers all warnings to be fatal +and stops on the first warning +when using the GNU version of m4. +Example: + + +env.M4(target = 'foo.c', source = 'foo.c.m4') + + + + + + +The M4 macro preprocessor. + + + + + +The command line used to pass files through the M4 macro preprocessor. + + + + + +The string displayed when +a file is passed through the M4 macro preprocessor. +If this is not set, then &cv-M4COM; (the command line) is displayed. + + + + + +General options passed to the M4 macro preprocessor. + + diff --git a/src/engine/SCons/Tool/masm.xml b/src/engine/SCons/Tool/masm.xml new file mode 100644 index 00000000..82c14cfd --- /dev/null +++ b/src/engine/SCons/Tool/masm.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/midl.xml b/src/engine/SCons/Tool/midl.xml new file mode 100644 index 00000000..4d5c7e0f --- /dev/null +++ b/src/engine/SCons/Tool/midl.xml @@ -0,0 +1,29 @@ + + + +XXX + + + + + +Builds a Windows type library (.tlb) +file from an input IDL file (.idl). +In addition, it will build the associated inteface stub and +proxy source files, +naming them according to the base name of the .idl file. +For example, + + +env.TypeLibrary(source="foo.idl") + + +Will create foo.tlb, +foo.h, +foo_i.c, +foo_p.c +and +foo_data.c +files. + + diff --git a/src/engine/SCons/Tool/mingw.xml b/src/engine/SCons/Tool/mingw.xml new file mode 100644 index 00000000..273a8612 --- /dev/null +++ b/src/engine/SCons/Tool/mingw.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/mslib.xml b/src/engine/SCons/Tool/mslib.xml new file mode 100644 index 00000000..7da4365e --- /dev/null +++ b/src/engine/SCons/Tool/mslib.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/mslink.xml b/src/engine/SCons/Tool/mslink.xml new file mode 100644 index 00000000..82249e7f --- /dev/null +++ b/src/engine/SCons/Tool/mslink.xml @@ -0,0 +1,105 @@ + + + +XXX + + + + + +When set to non-zero, +suppresses creation of a corresponding Win32 static import lib by the +SharedLibrary +builder when used with +MinGW, Microsoft Visual Studio or Metrowerks. +This also suppresses creation +of an export (.exp) file +when using Microsoft Visual Studio. + + + + + +The Microsoft Visual C++ PDB file that will store debugging information for +object files, shared libraries, and programs. This variable is ignored by +tools other than Microsoft Visual C++. +When this variable is +defined SCons will add options to the compiler and linker command line to +cause them to generate external debugging information, and will also set up the +dependencies for the PDB file. Example: + + +env['PDB'] = 'hello.pdb' + + + + + + +The program used on WIN32 systems +to register a newly-built DLL library +whenever the &b-SharedLibrary; builder +is passed a keyword argument of register=1. + + + + + +The command line used on WIN32 systems +to register a newly-built DLL library +whenever the &b-SharedLibrary; builder +is passed a keyword argument of register=1. + + + + + +The string displayed when registering a newly-built DLL file. +If this is not set, then &cv-REGSVRCOM; (the command line) is displayed. + + + + + +Flags passed to the DLL registration program +on WIN32 systems when a newly-built DLL library is registered. +By default, +this includes the +that prevents dialog boxes from popping up +and requiring user attention. + + + + + +When this is set to true, +a library build of a WIN32 shared library (.dll file) +will also build a corresponding .def file at the same time, +if a .def file is not already listed as a build target. +The default is 0 (do not build a .def file). + + + + + +The prefix used for WIN32 .def file names. + + + + + +The suffix used for WIN32 .def file names. + + + + + +XXX The prefix used for WIN32 .def file names. + + + + + +XXX The suffix used for WIN32 .def file names. + + diff --git a/src/engine/SCons/Tool/msvc.xml b/src/engine/SCons/Tool/msvc.xml new file mode 100644 index 00000000..426014b1 --- /dev/null +++ b/src/engine/SCons/Tool/msvc.xml @@ -0,0 +1,112 @@ + + + +XXX + + + + + +Builds a Microsoft Visual C++ precompiled header. +Calling this builder method +returns a list of two targets: the PCH as the first element, and the object +file as the second element. Normally the object file is ignored. +This builder method is only +provided when Microsoft Visual C++ is being used as the compiler. +The PCH builder method is generally used in +conjuction with the PCH construction variable to force object files to use +the precompiled header: + + +env['PCH'] = env.PCH('StdAfx.cpp')[0] + + + + + + +Builds a Microsoft Visual C++ resource file. +This builder method is only provided +when Microsoft Visual C++ or MinGW is being used as the compiler. The +.res +(or +.o +for MinGW) suffix is added to the target name if no other suffix is given. +The source +file is scanned for implicit dependencies as though it were a C file. Example: + + +env.RES('resource.rc') + + + + + + +The Microsoft Visual C++ precompiled header that will be used when compiling +object files. This variable is ignored by tools other than Microsoft Visual C++. +When this variable is +defined SCons will add options to the compiler command line to +cause it to use the precompiled header, and will also set up the +dependencies for the PCH file. Example: + + +env['PCH'] = 'StdAfx.pch' + + + + + + +The command line used by the +&b-PCH; +builder to generated a precompiled header. + + + + + +The string displayed when generating a precompiled header. +If this is not set, then &cv-PCHCOM; (the command line) is displayed. + + + + + +This variable specifies how much of a source file is precompiled. This +variable is ignored by tools other than Microsoft Visual C++, or when +the PCH variable is not being used. When this variable is define it +must be a string that is the name of the header that +is included at the end of the precompiled portion of the source files, or +the empty string if the "#pragma hrdstop" construct is being used: + + +env['PCHSTOP'] = 'StdAfx.h' + + + + + + +The resource compiler used by the RES builder. + + + + + +The command line used by the RES builder. + + + + + +The string displayed when invoking the resource compiler. +If this is not set, then &cv-RCCOM; (the command line) is displayed. + + + + + +The flags passed to the resource compiler by the RES builder. + + diff --git a/src/engine/SCons/Tool/msvs.xml b/src/engine/SCons/Tool/msvs.xml new file mode 100644 index 00000000..4103ce1e --- /dev/null +++ b/src/engine/SCons/Tool/msvs.xml @@ -0,0 +1,266 @@ + + + +XXX + + + + + +Builds Microsoft Visual Studio project files. +This builds a Visual Studio project file, based on the version of +Visual Studio that is configured (either the latest installed version, +or the version set by +&cv-MSVS_VERSION; +in the Environment constructor). +For VS 6, it will generate +.dsp +and +.dsw +files, for VS 7, it will +generate +.vcproj +and +.sln +files. + +It takes several lists of filenames to be placed into the project +file, currently these are limited to +srcs, +incs, +localincs, +resources, +and +misc. +These are pretty self explanatory, but it +should be noted that the srcs list +is NOT added to the &cv-SOURCES; +construction variable. This is because it represents a list of files +to be added to the project file, not the source used to build the +project file (in this case, the "source" is the &SConscript; file used +to call MSVSProject). + +In addition to these values (which are all optional, although not +specifying any of them results in an empty project file), the +following values must be specified: + +target: The name of the target +.dsp +or +.vcproj +file. The correct +suffix for the version of Visual Studio must be used, but the +&cv-MSVSPROJECTSUFFIX; +construction value +will be defined to the correct value (see example below). + +variant: The name of this particular variant. These are typically +things like "Debug" or "Release", but really can be anything you want. +Multiple calls to MSVSProject with different variants are allowed: all +variants will be added to the project file with their appropriate +build targets and sources. + +buildtarget: A list of SCons.Node.FS objects which is returned from +the command which builds the target. This is used to tell SCons what +to build when the 'build' button is pressed inside of the IDE. + +Example usage: + + +barsrcs = ['bar.cpp'], +barincs = ['bar.h'], +barlocalincs = ['StdAfx.h'] +barresources = ['bar.rc','resource.h'] +barmisc = ['bar_readme.txt'] + +dll = local.SharedLibrary(target = 'bar.dll', + source = barsrcs) + +local.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], + srcs = barsrcs, + incs = barincs, + localincs = barlocalincs, + resources = barresources, + misc = barmisc, + buildtarget = dll, + variant = 'Release') + + + + + + +When the Microsoft Visual Studio tools are initialized, they set up +this dictionary with the following keys: + +VERSION +the version of MSVS being used (can be set via +MSVS_VERSION) + +VERSIONS +the available versions of MSVS installed + +VCINSTALLDIR +installed directory of Visual C++ + +VSINSTALLDIR +installed directory of Visual Studio + +FRAMEWORKDIR +installed directory of the .NET framework + +FRAMEWORKVERSIONS +list of installed versions of the .NET framework, sorted latest to oldest. + +FRAMEWORKVERSION +latest installed version of the .NET framework + +FRAMEWORKSDKDIR +installed location of the .NET SDK. + +PLATFORMSDKDIR +installed location of the Platform SDK. + +PLATFORMSDK_MODULES +dictionary of installed Platform SDK modules, +where the dictionary keys are keywords for the various modules, and +the values are 2-tuples where the first is the release date, and the +second is the version number. + +If a value isn't set, it wasn't available in the registry. + + + + + +Tells the MS Visual Studio tools to use minimal INCLUDE, LIB, and PATH settings, +instead of the settings from the IDE. + +For Visual Studio, SCons will (by default) automatically determine +where MSVS is installed, and use the LIB, INCLUDE, and PATH variables +set by the IDE. You can override this behavior by setting these +variables after Environment initialization, or by setting +MSVS_IGNORE_IDE_PATHS = 1 +in the Environment initialization. +Specifying this will not leave these unset, but will set them to a +minimal set of paths needed to run the tools successfully. + +For VS6, the mininimal set is: + + INCLUDE:'VSDir\VC98\ATL\include;VSDir\VC98\MFC\include;VSDir\VC98\include' + LIB:'VSDir\VC98\MFC\lib;VSDir\VC98\lib' + PATH:'VSDir\Common\MSDev98\bin;VSDir\VC98\bin' + +For VS7, it is: + + INCLUDE:'VSDir\Vc7\atlmfc\include;VSDir\Vc7\include' + LIB:'VSDir\Vc7\atlmfc\lib;VSDir\Vc7\lib' + PATH:'VSDir\Common7\Tools\bin;VSDir\Common7\Tools;VSDir\Vc7\bin' + + +Where 'VSDir' is the installed location of Visual Studio. + + + + + +Tells the MS Visual Studio tool(s) to use +the MFC directories in its default paths +for compiling and linking. +Under MSVS version 6, +setting +MSVS_USE_MFC_DIRS +to a non-zero value +adds the +ATL\include +and +MFC\include +directories to +the default +INCLUDE +external environment variable, +and adds the +MFC\lib +directory to +the default +LIB +external environment variable. +Under MSVS version 7, +setting +MSVS_USE_MFC_DIRS +to a non-zero value +adds the +atlmfc\include +directory to the default +INCLUDE +external environment variable, +and adds the +atlmfc\lib +directory to the default +LIB +external environment variable. +The current default value is +1 +which means these directories +are added to the paths by default. +This default value is likely to change +in a future release, +so users who want the ATL and MFC +values included in their paths +are encouraged to enable the +MSVS_USE_MFC_DIRS +value explicitly +to avoid future incompatibility. +This variable has no effect if the +INCLUDE +or +LIB +environment variables are set explictly. + + + + + +Sets the preferred version of MSVS to use. + +SCons will (by default) select the latest version of MSVS +installed on your machine. So, if you have version 6 and version 7 +(MSVS .NET) installed, it will prefer version 7. You can override this by +specifying the +MSVS_VERSION +variable in the Environment initialization, setting it to the +appropriate version ('6.0' or '7.0', for example). +If the given version isn't installed, tool initialization will fail. + + + + + +The action used to generate Microsoft Visual Studio +project and solution files. + + + + + +The suffix used for Microsoft Visual Studio project (DSP) files. +The default value is +.vcproj +when using Visual Studio version 7.x (.NET), +and +.dsp +when using earlier versions of Visual Studio. + + + + + +The suffix used for Microsoft Visual Studio solution (DSW) files. +The default value is +.sln +when using Visual Studio version 7.x (.NET), +and +.dsw +when using earlier versions of Visual Studio. + + diff --git a/src/engine/SCons/Tool/mwcc.xml b/src/engine/SCons/Tool/mwcc.xml new file mode 100644 index 00000000..83eaab3f --- /dev/null +++ b/src/engine/SCons/Tool/mwcc.xml @@ -0,0 +1,20 @@ + + + +XXX + + + + + +The version number of the MetroWerks CodeWarrior C compiler +to be used. + + + + + +A list of installed versions of the MetroWerks CodeWarrior C compiler +on this system. + + diff --git a/src/engine/SCons/Tool/mwld.xml b/src/engine/SCons/Tool/mwld.xml new file mode 100644 index 00000000..ade98488 --- /dev/null +++ b/src/engine/SCons/Tool/mwld.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/nasm.xml b/src/engine/SCons/Tool/nasm.xml new file mode 100644 index 00000000..328386e2 --- /dev/null +++ b/src/engine/SCons/Tool/nasm.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/pdflatex.xml b/src/engine/SCons/Tool/pdflatex.xml new file mode 100644 index 00000000..78780798 --- /dev/null +++ b/src/engine/SCons/Tool/pdflatex.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/pdftex.xml b/src/engine/SCons/Tool/pdftex.xml new file mode 100644 index 00000000..701a2809 --- /dev/null +++ b/src/engine/SCons/Tool/pdftex.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/qt.xml b/src/engine/SCons/Tool/qt.xml new file mode 100644 index 00000000..b5335b61 --- /dev/null +++ b/src/engine/SCons/Tool/qt.xml @@ -0,0 +1,274 @@ + + + +XXX + + + + + +Builds an output file from a moc input file. Moc input files are either +header files or cxx files. This builder is only available after using the +tool 'qt'. See the &cv-QTDIR; variable for more information. +Example: + + +env.Moc('foo.h') # generates moc_foo.cc +env.Moc('foo.cpp') # generates foo.moc + + + + + + +Builds a header file, an implementation file and a moc file from an ui file. +and returns the corresponding nodes in the above order. +This builder is only available after using the tool 'qt'. Note: you can +specify .ui files directly as source +files to the &b-Program;, +&b-Library; and &b-SharedLibrary; builders +without using this builder. Using this builder lets you override the standard +naming conventions (be careful: prefixes are always prepended to names of +built files; if you don't want prefixes, you may set them to ``). +See the &cv-QTDIR; variable for more information. +Example: + + +env.Uic('foo.ui') # -> ['foo.h', 'uic_foo.cc', 'moc_foo.cc'] +env.Uic(target = Split('include/foo.h gen/uicfoo.cc gen/mocfoo.cc'), + source = 'foo.ui') # -> ['include/foo.h', 'gen/uicfoo.cc', 'gen/mocfoo.cc'] + + + + + + +The qt tool tries to take this from os.environ. +It also initializes all QT_* +construction variables listed below. +(Note that all paths are constructed +with python's os.path.join() method, +but are listed here with the '/' separator +for easier reading.) +In addition, the construction environment +variables &cv-CPPPATH;, &cv-LIBPATH; and &cv-LIBS; may be modified +and the variables +PROGEMITTER, SHLIBEMITTER and LIBEMITTER +are modified. Because the build-performance is affected when using this tool, +you have to explicitly specify it at Environment creation: + + +Environment(tools=['default','qt']) + + +The qt tool supports the following operations: + +.B Automatic moc file generation from header files. +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 builder method +.B Moc() + +.B Automatic moc file generation from cxx files. +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}basename${QT_MOCCXXSUFFIX}, by default +basename.moc. A warning is generated after building the moc file, if you +do not include the correct file. If you are using BuildDir, you may +need to specify duplicate=1. You can turn off automatic moc file generation +by setting QT_AUTOSCAN to 0. See also the corresponding builder method +.B Moc() + +.B Automatic handling of .ui files. +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 +implementation file and a moc file. Because there are also generated headers, +you may need to specify duplicate=1 in calls to BuildDir. See also the corresponding builder method +.B Uic() + + + + + +Turn off scanning for mocable files. Use the Moc Builder to explicitely +specify files to run moc on. + + + + + +The path where the qt binaries are installed. +The default value is '&cv-QTDIR;/bin'. + + + + + +The path where the qt header files are installed. +The default value is '&cv-QTDIR;/include'. +Note: If you set this variable to None, the tool won't change the &cv-CPPPATH; +construction variable. + + + + + +Prints lots of debugging information while scanning for moc files. + + + + + +Default value is 'qt'. You may want to set this to 'qt-mt'. Note: If you set +this variable to None, the tool won't change the &cv-LIBS; variable. + + + + + +The path where the qt libraries are installed. +The default value is '&cv-QTDIR;/lib'. +Note: If you set this variable to None, the tool won't change the &cv-LIBPATH; +construction variable. + + + + + +Default value is '&cv-QT_BINPATH;/bin/moc'. + + + + + +Default value is ''. Prefix for moc output files, when source is a cxx file. + + + + + +Default value is '.moc'. Suffix for moc output files, when source is a cxx +file. + + + + + +Default value is '-i'. These flags are passed to moc, when moccing a +cpp file. + + + + + +Command to generate a moc file from a cpp file. + + + + + +The string displayed when generating a moc file from a cpp file. +If this is not set, then &cv-QT_MOCFROMCXXCOM; (the command line) is displayed. + + + + + +Command to generate a moc file from a header. + + + + + +The string displayed when generating a moc file from a cpp file. +If this is not set, then &cv-QT_MOCFROMHCOM; (the command line) is displayed. + + + + + +Default value is ''. These flags are passed to moc, when moccing a header +file. + + + + + +Default value is 'moc_'. Prefix for moc output files, when source is a header. + + + + + +Default value is '&cv-CXXFILESUFFIX;'. Suffix for moc output files, when source is +a header. + + + + + +Default value is '&cv-QT_BINPATH;/uic'. + + + + + +Command to generate header files from .ui files. + + + + + +The string displayed when generating header files from .ui files. +If this is not set, then &cv-QT_UICCOM; (the command line) is displayed. + + + + + +Default value is ''. These flags are passed to uic, when creating a a h +file from a .ui file. + + + + + +Default value is ''. Prefix for uic generated header files. + + + + + +Default value is '.h'. Suffix for uic generated header files. + + + + + +Default value is ''. These flags are passed to uic, when creating a cxx +file from a .ui file. + + + + + +Default value is 'uic_'. Prefix for uic generated implementation files. + + + + + +Default value is '&cv-CXXFILESUFFIX;'. Suffix for uic generated implementation +files. + + + + + +Default value is '.ui'. Suffix of designer input files. + + diff --git a/src/engine/SCons/Tool/rmic.xml b/src/engine/SCons/Tool/rmic.xml new file mode 100644 index 00000000..390aaafa --- /dev/null +++ b/src/engine/SCons/Tool/rmic.xml @@ -0,0 +1,79 @@ + + + +XXX + + + + + +Builds stub and skeleton class files +for remote objects +from Java .class files. +The target is a directory +relative to which the stub +and skeleton class files will be written. +The source can be the names of .class files, +or the objects return from the +&b-Java; +builder method. + +If the construction variable +&cv-JAVACLASSDIR; +is set, either in the environment +or in the call to the +&b-RMIC; +builder method itself, +then the value of the variable +will be stripped from the +beginning of any .class +file names. + + +classes = env.Java(target = 'classdir', source = 'src') +env.RMIC(target = 'outdir1', source = classes) + +env.RMIC(target = 'outdir2', + source = ['package/foo.class', 'package/bar.class']) + +env.RMIC(target = 'outdir3', + source = ['classes/foo.class', 'classes/bar.class'], + JAVACLASSDIR = 'classes') + + + + + + +The Java RMI stub compiler. + + + + + +The command line used to compile stub +and skeleton class files +from Java classes that contain RMI implementations. +Any options specified in the &cv-RMICFLAGS; construction variable +are included on this command line. + + + + + +The string displayed when compiling +stub and skeleton class files +from Java classes that contain RMI implementations. +If this is not set, then &cv-RMICCOM; (the command line) is displayed. + + +env = Environment(RMICCOMSTR = "Generating stub/skeleton class files $TARGETS from $SOURCES") + + + + + + +General options passed to the Java RMI stub compiler. + + diff --git a/src/engine/SCons/Tool/rpcgen.xml b/src/engine/SCons/Tool/rpcgen.xml new file mode 100644 index 00000000..9fdf13e5 --- /dev/null +++ b/src/engine/SCons/Tool/rpcgen.xml @@ -0,0 +1,122 @@ + + + +XXX + + + + + +Generates an RPC client stub (_clnt.c) file +from a specified RPC (.x) source file. +Because rpcgen only builds output files +in the local directory, +the command will be executed +in the source file's directory by default. + + +# Builds src/rpcif_clnt.c +env.RPCGenClient('src/rpcif.x') + + + + + + +Generates an RPC header (.h) file +from a specified RPC (.x) source file. +Because rpcgen only builds output files +in the local directory, +the command will be executed +in the source file's directory by default. + + +# Builds src/rpcif.h +env.RPCGenHeader('src/rpcif.x') + + + + + + +Generates an RPC server-skeleton (_svc.c) file +from a specified RPC (.x) source file. +Because rpcgen only builds output files +in the local directory, +the command will be executed +in the source file's directory by default. + + +# Builds src/rpcif_svc.c +env.RPCGenClient('src/rpcif.x') + + + + + + +Generates an RPC XDR routine (_xdr.c) file +from a specified RPC (.x) source file. +Because rpcgen only builds output files +in the local directory, +the command will be executed +in the source file's directory by default. + + +# Builds src/rpcif_xdr.c +env.RPCGenClient('src/rpcif.x') + + + + + + +The RPC protocol compiler. + + + + + +Options passed to the RPC protocol compiler +when generating client side stubs. +These are in addition to any flags specified in the +&cv-RPCGENFLAGS; +construction variable. + + + + + +General options passed to the RPC protocol compiler. + + + + + +Options passed to the RPC protocol compiler +when generating a header file. +These are in addition to any flags specified in the +&cv-RPCGENFLAGS; +construction variable. + + + + + +Options passed to the RPC protocol compiler +when generating server side stubs. +These are in addition to any flags specified in the +&cv-RPCGENFLAGS; +construction variable. + + + + + +Options passed to the RPC protocol compiler +when generating XDR routines. +These are in addition to any flags specified in the +&cv-RPCGENFLAGS; +construction variable. + + diff --git a/src/engine/SCons/Tool/sgiar.xml b/src/engine/SCons/Tool/sgiar.xml new file mode 100644 index 00000000..cd1d4140 --- /dev/null +++ b/src/engine/SCons/Tool/sgiar.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/sgic++.xml b/src/engine/SCons/Tool/sgic++.xml new file mode 100644 index 00000000..318ebbf2 --- /dev/null +++ b/src/engine/SCons/Tool/sgic++.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/sgicc.xml b/src/engine/SCons/Tool/sgicc.xml new file mode 100644 index 00000000..bd752ec0 --- /dev/null +++ b/src/engine/SCons/Tool/sgicc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/sgilink.xml b/src/engine/SCons/Tool/sgilink.xml new file mode 100644 index 00000000..64eecb86 --- /dev/null +++ b/src/engine/SCons/Tool/sgilink.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/sunar.xml b/src/engine/SCons/Tool/sunar.xml new file mode 100644 index 00000000..b94443ca --- /dev/null +++ b/src/engine/SCons/Tool/sunar.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/sunc++.xml b/src/engine/SCons/Tool/sunc++.xml new file mode 100644 index 00000000..fcd6b0ae --- /dev/null +++ b/src/engine/SCons/Tool/sunc++.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/suncc.xml b/src/engine/SCons/Tool/suncc.xml new file mode 100644 index 00000000..ab86294d --- /dev/null +++ b/src/engine/SCons/Tool/suncc.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/sunlink.xml b/src/engine/SCons/Tool/sunlink.xml new file mode 100644 index 00000000..127651ee --- /dev/null +++ b/src/engine/SCons/Tool/sunlink.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/swig.xml b/src/engine/SCons/Tool/swig.xml new file mode 100644 index 00000000..5c08412b --- /dev/null +++ b/src/engine/SCons/Tool/swig.xml @@ -0,0 +1,80 @@ + + + +XXX + + + + + +The scripting language wrapper and interface generator. + + + + + +The suffix that will be used for intermediate C +source files generated by +the scripting language wrapper and interface generator. +The default value is +_wrap&cv-CFILESUFFIX;. +By default, this value is used whenever the + +option is +not +specified as part of the +&cv-SWIGFLAGS; +construction variable. + + + + + +The command line used to call +the scripting language wrapper and interface generator. + + + + + +The string displayed when calling +the scripting language wrapper and interface generator. +If this is not set, then &cv-SWIGCOM; (the command line) is displayed. + + + + + +The suffix that will be used for intermediate C++ +source files generated by +the scripting language wrapper and interface generator. +The default value is +_wrap&cv-CFILESUFFIX;. +By default, this value is used whenever the +-c++ +option is specified as part of the +&cv-SWIGFLAGS; +construction variable. + + + + + +General options passed to +the scripting language wrapper and interface generator. +This is where you should set +, +, +, +or whatever other options you want to specify to SWIG. +If you set the + +option in this variable, +&scons; +will, by default, +generate a C++ intermediate source file +with the extension that is specified as the +&cv-CXXFILESUFFIX; +variable. + + diff --git a/src/engine/SCons/Tool/tar.xml b/src/engine/SCons/Tool/tar.xml new file mode 100644 index 00000000..c00910a6 --- /dev/null +++ b/src/engine/SCons/Tool/tar.xml @@ -0,0 +1,75 @@ + + + +XXX + + + + + +Builds a tar archive of the specified files +and/or directories. +Unlike most builder methods, +the +&b-Tar; +builder method may be called multiple times +for a given target; +each additional call +adds to the list of entries +that will be built into the archive. + + +env.Tar('src.tar', 'src') + +# Create the stuff.tar file. +env.Tar('stuff', ['subdir1', 'subdir2']) +# Also add "another" to the stuff.tar file. +env.Tar('stuff', 'another') + +# Set TARFLAGS to create a gzip-filtered archive. +env = Environment(TARFLAGS = '-c -z') +env.Tar('foo.tar.gz', 'foo') + +# Also set the suffix to .tgz. +env = Environment(TARFLAGS = '-c -z', + TARSUFFIX = '.tgz') +env.Tar('foo') + + + + + + +The tar archiver. + + + + + +The command line used to call the tar archiver. + + + + + +The string displayed when archiving files +using the tar archiver. +If this is not set, then &cv-TARCOM; (the command line) is displayed. + + +env = Environment(TARCOMSTR = "Archiving $TARGET") + + + + + + +General options passed to the tar archiver. + + + + + +The suffix used for tar file names. + + diff --git a/src/engine/SCons/Tool/tex.xml b/src/engine/SCons/Tool/tex.xml new file mode 100644 index 00000000..4f690413 --- /dev/null +++ b/src/engine/SCons/Tool/tex.xml @@ -0,0 +1,70 @@ + + + +XXX + + + + + +The bibliography generator for the TeX formatter and typesetter and the +LaTeX structured formatter and typesetter. + + + + + +The command line used to call the bibliography generator for the +TeX formatter and typesetter and the LaTeX structured formatter and +typesetter. + + + + + +The string displayed when generating a bibliography +for TeX or LaTeX. +If this is not set, then &cv-BIBTEXCOM; (the command line) is displayed. + + +env = Environment(BIBTEXCOMSTR = "Generating bibliography $TARGET") + + + + + + +General options passed to the bibliography generator for the TeX formatter +and typesetter and the LaTeX structured formatter and typesetter. + + + + + +The TeX formatter and typesetter. + + + + + +The command line used to call the TeX formatter and typesetter. + + + + + +The string displayed when calling +the TeX formatter and typesetter. +If this is not set, then &cv-TEXCOM; (the command line) is displayed. + + +env = Environment(TEXCOMSTR = "Building $TARGET from TeX input $SOURCES") + + + + + + +General options passed to the TeX formatter and typesetter. + + diff --git a/src/engine/SCons/Tool/tlib.xml b/src/engine/SCons/Tool/tlib.xml new file mode 100644 index 00000000..03515685 --- /dev/null +++ b/src/engine/SCons/Tool/tlib.xml @@ -0,0 +1,6 @@ + + + +XXX + + diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index 2c93b7c5..da88aa22 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -39,6 +39,8 @@ import SCons.Defaults import SCons.Tool import SCons.Util +YaccAction = SCons.Action.Action("$YACCCOM", "$YACCCOMSTR") + def _yaccEmitter(target, source, env, ysuf, hsuf): # If -d is specified on the command line, yacc will emit a .h # or .hpp file as well as a .c or .cpp file, depending on whether @@ -60,9 +62,9 @@ def generate(env): """Add Builders and construction variables for yacc to an Environment.""" c_file, cxx_file = SCons.Tool.createCFileBuilders(env) - c_file.add_action('.y', SCons.Defaults.YaccAction) - c_file.add_action('.yacc', SCons.Defaults.YaccAction) - cxx_file.add_action('.yy', SCons.Defaults.YaccAction) + c_file.add_action('.y', YaccAction) + c_file.add_action('.yacc', YaccAction) + cxx_file.add_action('.yy', YaccAction) c_file.add_emitter('.y', yEmitter) c_file.add_emitter('.yacc', yEmitter) cxx_file.add_emitter('.yy', yyEmitter) diff --git a/src/engine/SCons/Tool/yacc.xml b/src/engine/SCons/Tool/yacc.xml new file mode 100644 index 00000000..59735af3 --- /dev/null +++ b/src/engine/SCons/Tool/yacc.xml @@ -0,0 +1,42 @@ + + + +XXX + + + + + +The parser generator. + + + + + +The command line used to call the parser generator +to generate a source file. + + + + + +The string displayed when generating a source file +using the parser generator. +If this is not set, then &cv-YACCCOM; (the command line) is displayed. + + +env = Environment(YACCCOMSTR = "Yacc'ing $TARGET from $SOURCES") + + + + + + +General options passed to the parser generator. +If &cv-YACCFLAGS; contains a option, +SCons assumes that the call will also create a .h file +(if the yacc source file ends in a .y suffix) +or a .hpp file +(if the yacc source file ends in a .yy suffix) + + diff --git a/src/engine/SCons/Tool/zip.xml b/src/engine/SCons/Tool/zip.xml new file mode 100644 index 00000000..4e33c158 --- /dev/null +++ b/src/engine/SCons/Tool/zip.xml @@ -0,0 +1,83 @@ + + + +XXX + + + + + +Builds a zip archive of the specified files +and/or directories. +Unlike most builder methods, +the +&b-Zip; +builder method may be called multiple times +for a given target; +each additional call +adds to the list of entries +that will be built into the archive. + + +env.Zip('src.zip', 'src') + +# Create the stuff.zip file. +env.Zip('stuff', ['subdir1', 'subdir2']) +# Also add "another" to the stuff.tar file. +env.Zip('stuff', 'another') + + + + + + +The zip compression and file packaging utility. + + + + + +The command line used to call the zip utility, +or the internal Python function used to create a +zip archive. + + + + + +The string displayed when archiving files +using the zip utility. +If this is not set, then &cv-ZIPCOM; +(the command line or internal Python function) is displayed. + + +env = Environment(ZIPCOMSTR = "Zipping $TARGET") + + + + + + +The +compression +flag +from the Python +zipfile +module used by the internal Python function +to control whether the zip archive +is compressed or not. +The default value is +zipfile.ZIP_DEFLATED, +which creates a compressed zip archive. +This value has no effect when using Python 1.5.2 +or if the +zipfile +module is otherwise unavailable. + + + + + +General options passed to the zip utility. + + diff --git a/src/test_copyrights.py b/src/test_copyrights.py index 1671dbd0..44dc8fa9 100644 --- a/src/test_copyrights.py +++ b/src/test_copyrights.py @@ -93,6 +93,7 @@ src_remove_list = [ 'gentoo', 'config', 'MANIFEST.in', + 'MANIFEST-xml.in', ] # XXX Remove '*-stamp' when we get rid of those. -- 2.26.2