diff options
Diffstat (limited to 'doc/python10')
30 files changed, 4379 insertions, 0 deletions
diff --git a/doc/python10/MANIFEST b/doc/python10/MANIFEST new file mode 100644 index 0000000..5703e36 --- /dev/null +++ b/doc/python10/MANIFEST @@ -0,0 +1,14 @@ +# We don't use a wildcard for the XML files +# here, because it would pull in the created +# ones as well... +abstract.xml +acks.xml +*.fig +copyright.xml +design.xml +future.xml +install.xml +intro.xml +main.xml +process.xml +summary.xml diff --git a/doc/python10/SConstruct b/doc/python10/SConstruct new file mode 100644 index 0000000..c59b61d --- /dev/null +++ b/doc/python10/SConstruct @@ -0,0 +1,46 @@ +# +# SConstruct file for building SCons documentation. +# + +# +# Copyright (c) 2001 - 2014 The SCons Foundation +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import os + +env = Environment(ENV={'PATH' : os.environ['PATH']}, + tools=['docbook'], + toolpath=['../../src/engine/SCons/Tool']) + +has_pdf = False +if (env.WhereIs('fop') or + env.WhereIs('xep')): + has_pdf = True + +# +# Create document +# +env.DocbookXInclude('python10_xi.xml', 'main.xml') +env.DocbookXslt('python10.xml', 'python10_xi.xml', + xsl='../xslt/to_docbook.xslt') +env.DocbookHtml('python10.html','python10.xml') +if has_pdf: + env.DocbookPdf('python10.pdf','python10.xml') diff --git a/doc/python10/abstract.xml b/doc/python10/abstract.xml new file mode 100644 index 0000000..0c38537 --- /dev/null +++ b/doc/python10/abstract.xml @@ -0,0 +1,69 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<abstract xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + &SCons; is a software construction tool (build tool, or make tool) + implemented in Python, which uses Python scripts as "configuration + files" for software builds. Based on the design which won the + Software Carpentry build tool competition, &SCons; solves a number of + problems associated with other build tools, especially including the + classic and ubiquitous &Make; itself. + +</para> + +<para> + + Distinctive features of &SCons; include: a modular design that + lends itself to being embedded in other applications; a global + view of all dependencies in the source tree; an improved model for + parallel (<option>-j</option>) builds; automatic scanning of files for + dependencies; use of MD5 signatures for deciding whether a file + is up-to-date; use of traditional file timestamps instead of + MD5 signatures available as an option; + use of Python functions or objects to build target files; easy user + extensibility. + +</para> + +<para> + + This paper discusses the goals of the &SCons; project, gives an overview + of the design of &SCons; itself, describes the development process used, + and discusses future plans and directions for the tool. + +</para> + +</abstract> diff --git a/doc/python10/acks.xml b/doc/python10/acks.xml new file mode 100644 index 0000000..1451eef --- /dev/null +++ b/doc/python10/acks.xml @@ -0,0 +1,66 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-acks" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Acknowledgements</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + First, many thanks to the great group of developers who dove in right + from the beginning and have contributed the code and ideas to make + &SCons; a success: Chad Austin, Charles Crain, Steve Leblanc, and + Anthony Roach. Thanks also to those on the scons-devel mailing list + who have contributed greatly to the discussion, notably including + David Abrahams, Trent Mick, and Steven Shaw. + +</para> + +<para> + + &SCons; would not exist today without the pioneering work of Bob + Sidebotham on the original &Cons; tool, and without Greg Wilson's + having started the Software Carpentry contest. + +</para> + +<para> + + Thanks also to Peter Miller for: Aegis; the testing discipline that it + enforces, without which creating a stable but flexible tool would be + impossible; the "Recursive Make Considered Harmful" paper which led me + to experiment with &Cons; in the first place. + +</para> + +</section> diff --git a/doc/python10/arch.fig b/doc/python10/arch.fig new file mode 100644 index 0000000..ae20bd4 --- /dev/null +++ b/doc/python10/arch.fig @@ -0,0 +1,35 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 3825 2775 4650 3300 +4 0 0 50 0 14 20 0.0000 4 135 825 3825 2925 scons\001 +4 0 0 50 0 0 20 0.0000 4 255 690 3825 3225 Script\001 +-6 +6 3600 4200 7200 5400 +6 4200 4650 6675 4950 +4 0 0 50 0 0 20 0.0000 4 255 1515 5100 4875 Build Engine\001 +4 0 0 50 0 14 20 0.0000 4 165 825 4200 4875 SCons\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3600 4200 7200 4200 7200 5400 3600 5400 3600 4200 +-6 +6 4725 3825 6150 4050 +4 0 0 50 0 14 20 0.0000 4 165 825 4725 4050 SCons\001 +4 0 0 50 0 0 20 0.0000 4 195 465 5625 4050 API\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3600 2400 3600 2400 3600 2400 3600 2400 3600 2400 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3600 2400 4800 2400 4800 3600 3600 3600 3600 2400 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3600 3600 7200 3600 7200 4200 3600 4200 3600 3600 +2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 + 6000 3600 7200 3600 7200 2400 6000 2400 6000 3600 +4 0 0 50 0 1 20 0.0000 4 210 570 6300 2925 other\001 +4 0 0 50 0 1 20 0.0000 4 270 975 6150 3225 interface\001 diff --git a/doc/python10/arch.jpg b/doc/python10/arch.jpg Binary files differnew file mode 100644 index 0000000..4e69437 --- /dev/null +++ b/doc/python10/arch.jpg diff --git a/doc/python10/arch.svg b/doc/python10/arch.svg new file mode 100644 index 0000000..df3a8c0 --- /dev/null +++ b/doc/python10/arch.svg @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="744.09448" + height="1052.3622" + id="svg2"> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1"> + <g + transform="matrix(0.07440476,0,0,0.07440476,-26.785704,242.18362)" + id="g3017" + style="fill:none;stroke-width:0.025in"> + <rect + width="3600" + height="1200" + rx="0" + x="3600" + y="4200" + id="rect3019" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="0" + height="0" + rx="0" + x="3600" + y="2400" + id="rect3021" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="1200" + rx="0" + x="3600" + y="2400" + id="rect3023" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="3600" + height="600" + rx="0" + x="3600" + y="3600" + id="rect3025" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="1200" + rx="0" + x="6000" + y="2400" + id="rect3027" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" /> + <text + x="3825" + y="2925" + id="text3029" + xml:space="preserve" + style="font-size:240px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">scons</text> + <text + x="3825" + y="3225" + id="text3031" + xml:space="preserve" + style="font-size:240px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Script</text> + <text + x="5100" + y="4875" + id="text3033" + xml:space="preserve" + style="font-size:240px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Build Engine</text> + <text + x="4200" + y="4875" + id="text3035" + xml:space="preserve" + style="font-size:240px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">SCons</text> + <text + x="4725" + y="4050" + id="text3037" + xml:space="preserve" + style="font-size:240px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">SCons</text> + <text + x="5625" + y="4050" + id="text3039" + xml:space="preserve" + style="font-size:240px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">API</text> + <text + x="6300" + y="2925" + id="text3041" + xml:space="preserve" + style="font-size:240px;font-style:italic;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">other</text> + <text + x="6150" + y="3225" + id="text3043" + xml:space="preserve" + style="font-size:240px;font-style:italic;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">interface</text> + </g> + </g> +</svg> diff --git a/doc/python10/builder.fig b/doc/python10/builder.fig new file mode 100644 index 0000000..75e5ec0 --- /dev/null +++ b/doc/python10/builder.fig @@ -0,0 +1,128 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 2700 1200 4500 1800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 1200 4500 1200 4500 1800 2700 1800 2700 1200 +4 0 0 50 0 0 16 0.0000 4 165 1290 2925 1575 Environment\001 +-6 +6 2700 2400 4500 3000 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 2400 4500 2400 4500 3000 2700 3000 2700 2400 +4 1 0 50 0 0 16 0.0000 4 225 1620 3600 2775 BuilderWrapper\001 +-6 +6 2700 3600 4500 4200 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 3600 4500 3600 4500 4200 2700 4200 2700 3600 +4 1 0 50 0 0 16 0.0000 4 165 1215 3600 3975 BuilderBase\001 +-6 +6 8400 3600 9900 4200 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 8400 3600 9900 3600 9900 4200 8400 4200 8400 3600 +4 1 0 50 0 0 16 0.0000 4 165 1140 9150 3975 ActionBase\001 +-6 +6 3900 4800 5400 5700 +6 4050 4950 5250 5475 +4 1 0 50 0 0 16 0.0000 4 225 1140 4650 5175 MultiStep-\001 +4 1 0 50 0 0 16 0.0000 4 165 750 4650 5460 Builder\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3900 4800 5400 4800 5400 5700 3900 5700 3900 4800 +-6 +6 1800 4800 3300 5700 +6 1950 4950 3150 5475 +4 1 0 50 0 0 16 0.0000 4 225 1200 2550 5175 Composite-\001 +4 1 0 50 0 0 16 0.0000 4 165 750 2550 5460 Builder\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1800 4800 3300 4800 3300 5700 1800 5700 1800 4800 +-6 +6 6300 4800 7800 5700 +6 6525 4950 7575 5475 +4 1 0 50 0 0 16 0.0000 4 165 1020 7050 5175 Command\001 +4 1 0 50 0 0 16 0.0000 4 165 675 7050 5460 Action\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 6300 4800 7800 4800 7800 5700 6300 5700 6300 4800 +-6 +6 8400 4800 9900 5700 +6 8700 4950 9600 5475 +4 1 0 50 0 0 16 0.0000 4 165 675 9150 5460 Action\001 +4 1 0 50 0 0 16 0.0000 4 165 870 9150 5175 Function\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 8400 4800 9900 4800 9900 5700 8400 5700 8400 4800 +-6 +6 10500 4800 12000 5700 +6 10875 4950 11625 5475 +4 1 0 50 0 0 16 0.0000 4 165 390 11250 5175 List\001 +4 1 0 50 0 0 16 0.0000 4 165 675 11250 5460 Action\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 10500 4800 12000 4800 12000 5700 10500 5700 10500 4800 +-6 +6 900 2400 2100 3000 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 900 2400 2100 2400 2100 3000 900 3000 900 2400 +4 1 0 50 0 0 16 0.0000 4 165 525 1500 2775 Node\001 +-6 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 3600 4200 3525 4350 3675 4350 3600 4200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 3150 4800 3150 4500 4050 4500 4050 4800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 3600 4350 3600 4500 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 9150 4200 9075 4350 9225 4350 9150 4200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 7050 4800 7050 4500 10950 4500 10950 4800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 9150 4350 9150 4800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 11550 4650 11550 3900 9900 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4650 3900 8400 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3900 2250 3900 1800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3300 1950 3300 2400 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 3150 3600 3600 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4350 4650 4350 4200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2850 4650 2850 4200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 1500 3150 1500 3900 2700 3900 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 4650 3900 4575 3860 4500 3900 4575 3940 4650 3900 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 1500 3000 1460 3075 1500 3150 1540 3075 1500 3000 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3600 3000 3560 3075 3600 3150 3640 3075 3600 3000 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3300 1800 3260 1875 3300 1950 3340 1875 3300 1800 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3900 2250 3860 2325 3900 2400 3940 2325 3900 2250 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 4350 4650 4310 4725 4350 4800 4390 4725 4350 4650 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 2850 4650 2810 4725 2850 4800 2890 4725 2850 4650 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 11550 4650 11510 4725 11550 4800 11590 4725 11550 4650 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 3600 1200 3600 900 diff --git a/doc/python10/builder.jpg b/doc/python10/builder.jpg Binary files differnew file mode 100644 index 0000000..e9085e8 --- /dev/null +++ b/doc/python10/builder.jpg diff --git a/doc/python10/builder.svg b/doc/python10/builder.svg new file mode 100644 index 0000000..5648dd6 --- /dev/null +++ b/doc/python10/builder.svg @@ -0,0 +1,330 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="744.09448" + height="1052.3622" + id="svg2"> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1"> + <g + transform="matrix(0.07462687,0,0,0.07462687,-106.34331,286.09351)" + id="g3006" + style="fill:none;stroke-width:0.025in"> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="1200" + id="rect3008" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="2400" + id="rect3010" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="3600" + id="rect3012" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="600" + rx="0" + x="8400" + y="3600" + id="rect3014" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="900" + rx="0" + x="3900" + y="4800" + id="rect3016" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="900" + rx="0" + x="1800" + y="4800" + id="rect3018" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="900" + rx="0" + x="6300" + y="4800" + id="rect3020" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="900" + rx="0" + x="8400" + y="4800" + id="rect3022" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="900" + rx="0" + x="10500" + y="4800" + id="rect3024" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="900" + y="2400" + id="rect3026" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3600,4200 3600,4200 3525,4350 3675,4350 " + id="polygon3028" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3030" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3150,4800 3150,4500 4050,4500 4050,4800 " /> + <polyline + id="polyline3032" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3600,4350 3600,4500 " /> + <polygon + points="9150,4200 9150,4200 9075,4350 9225,4350 " + id="polygon3034" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3036" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="7050,4800 7050,4500 10950,4500 10950,4800 " /> + <polyline + id="polyline3038" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="9150,4350 9150,4800 " /> + <polyline + id="polyline3040" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="11550,4650 11550,3900 10019,3900 " /> + <polygon + points="10021,3870 10021,3870 9901,3900 10021,3930 " + id="polygon3042" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3044" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4650,3900 8280,3900 " /> + <polygon + points="8279,3930 8279,3930 8399,3900 8279,3870 " + id="polygon3046" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3048" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3900,2250 3900,1919 " /> + <polygon + points="3930,1921 3930,1921 3900,1801 3870,1921 " + id="polygon3050" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3052" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3300,1950 3300,2280 " /> + <polygon + points="3270,2279 3270,2279 3300,2399 3330,2279 " + id="polygon3054" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3056" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3600,3150 3600,3480 " /> + <polygon + points="3570,3479 3570,3479 3600,3599 3630,3479 " + id="polygon3058" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3060" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4350,4650 4350,4319 " /> + <polygon + points="4380,4321 4380,4321 4350,4201 4320,4321 " + id="polygon3062" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3064" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="2850,4650 2850,4319 " /> + <polygon + points="2880,4321 2880,4321 2850,4201 2820,4321 " + id="polygon3066" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3068" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1500,3150 1500,3900 2580,3900 " /> + <polygon + points="2579,3930 2579,3930 2699,3900 2579,3870 " + id="polygon3070" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polygon + points="4575,3940 4650,3900 4650,3900 4575,3860 4500,3900 " + id="polygon3072" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="1540,3075 1500,3000 1500,3000 1460,3075 1500,3150 " + id="polygon3074" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3640,3075 3600,3000 3600,3000 3560,3075 3600,3150 " + id="polygon3076" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3340,1875 3300,1800 3300,1800 3260,1875 3300,1950 " + id="polygon3078" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3940,2325 3900,2250 3900,2250 3860,2325 3900,2400 " + id="polygon3080" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="4390,4725 4350,4650 4350,4650 4310,4725 4350,4800 " + id="polygon3082" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="2890,4725 2850,4650 2850,4650 2810,4725 2850,4800 " + id="polygon3084" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="11590,4725 11550,4650 11550,4650 11510,4725 11550,4800 " + id="polygon3086" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3088" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="3600,1200 3600,900 " /> + <text + x="2925" + y="1575" + id="text3090" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Environment</text> + <text + x="3600" + y="2775" + id="text3092" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">BuilderWrapper</text> + <text + x="3600" + y="3975" + id="text3094" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">BuilderBase</text> + <text + x="9150" + y="3975" + id="text3096" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">ActionBase</text> + <text + x="4650" + y="5175" + id="text3098" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">MultiStep-</text> + <text + x="4650" + y="5460" + id="text3100" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Builder</text> + <text + x="2550" + y="5175" + id="text3102" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Composite-</text> + <text + x="2550" + y="5460" + id="text3104" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Builder</text> + <text + x="7050" + y="5175" + id="text3106" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Command</text> + <text + x="7050" + y="5460" + id="text3108" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Action</text> + <text + x="9150" + y="5460" + id="text3110" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Action</text> + <text + x="9150" + y="5175" + id="text3112" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Function</text> + <text + x="11250" + y="5175" + id="text3114" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">List</text> + <text + x="11250" + y="5460" + id="text3116" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Action</text> + <text + x="1500" + y="2775" + id="text3118" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Node</text> + </g> + </g> +</svg> diff --git a/doc/python10/copyright.xml b/doc/python10/copyright.xml new file mode 100644 index 0000000..74672a6 --- /dev/null +++ b/doc/python10/copyright.xml @@ -0,0 +1,44 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<legalnotice xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<blockquote> + <para> + + Copyright (c) 2001, 2002 Steven Knight + + </para> +</blockquote> + +</legalnotice> diff --git a/doc/python10/design.xml b/doc/python10/design.xml new file mode 100644 index 0000000..376e7f4 --- /dev/null +++ b/doc/python10/design.xml @@ -0,0 +1,925 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-design" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Architecture</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + The &SCons; architecture consists of three layers: + +</para> + +<figure> +<title>&SCons; architecture</title> +<mediaobject> + <imageobject> + <imagedata fileref="arch.svg" align="center" scale="50"/> + </imageobject> + <imageobject> + <imagedata fileref="arch.jpg" align="center"/> + </imageobject> +</mediaobject> +</figure> + +<itemizedlist> + + <listitem> + <para> + + The &SCons; <emphasis>Build Engine</emphasis>, a package of Python + modules that handle dependency management and updating out-of-date + objects. + + </para> + </listitem> + + <listitem> + <para> + + The &SCons; <emphasis>API</emphasis> (applications programming + interface) between the Build Engine + and the user interface. + + </para> + </listitem> + + <listitem> + <para> + + The &scons; <emphasis>script</emphasis> itself (note lower case + <emphasis>sc</emphasis>), which is the pre-provided interface to + the Build Engine. + + </para> + </listitem> + +</itemizedlist> + +<para> + + Notice that this architecture separates the internal workings of + &SCons; (the Build Engine) from the + external user interface. The benefit is that the &SCons; Build Engine + can be imported into any other software package written in Python + to support a variety of user interfaces—or, to look at it + in reverse, other software interfaces can use the &SCons; Build + Engine to manage dependencies between their objects. + +</para> + +<para> + + Because the + &SCons; package itself is modular, only those parts of the package + relevant to the embedding interface need be imported; for example, + a utility that wants to use only file timestamps for checking + whether a file is up-to-date + need not import the MD5 signature module. + +</para> + +<section> + <title>The &SCons; Build Engine</title> + + <para> + + The Build Engine is a package of Python modules that + form the heart of &SCons;. + + The Build Engine can be broadly divided into five + architectural subsystems, each responsible + for a crucial part of &SCons; functionality: + + </para> + + <itemizedlist> + + <listitem> + <para> + + A <emphasis>node</emphasis> subsystem, responsible for managing + the files (or other objects) to be built, and the dependency + relationships between them. + + </para> + </listitem> + + <listitem> + <para> + + A <emphasis>scanner</emphasis> subsystem, responsible for + scanning various file types for implicit dependencies. + + </para> + </listitem> + + <listitem> + <para> + + A <emphasis>signature</emphasis> subsystem, responsible for + deciding whether a given file (or other object) requires + rebuilding. + + </para> + </listitem> + + <listitem> + <para> + + A <emphasis>builder</emphasis> subsystem, responsible for + actually executing the necessary command or function to + build a file (or other object). + + </para> + </listitem> + + <listitem> + <para> + + A <emphasis>job/task</emphasis> subsystem, responsible for + handling parallelization of builds. + + </para> + </listitem> + + </itemizedlist> + + <para> + + The rest of this section will provide a high-level overview of the + class structure of each of these Build Engine subsystems. + + </para> + + <section> + <title>Node Subsystem</title> + + <para> + + The node subsystem of the Build Engine is + responsible for managing the knowledge in &SCons; of + the relationships among the external objects + (files) it is responsible for updating. + The most important of these relationships is + the dependency relationship between various &Node; objects, + which &SCons; uses to determine the order + in which builds should be performed. + + </para> + + <figure> + <title>Node subsystem</title> + <mediaobject> + <imageobject> + <imagedata fileref="node.svg" align="center" scale="50"/> + </imageobject> + <imageobject> + <imagedata fileref="node.jpg" align="center"/> + </imageobject> + </mediaobject> + </figure> + + <para> + + The &scons; script (or other + user interface) + tells the Build Engine + about dependencies + through its &consenv; API. + The Build Engine also discovers + dependencies automatically through the use of &Scanner; objects. + + </para> + + <para> + + Subclasses of the &Node; class maintain additional + relationships that reflect the real-world + existence of these objects. + For example, the &Node_FS; subclass + is responsible for managing a + representation of the directory hierarchy + of a file system. + + </para> + + <para> + + A &Walker; class is used by other subsystems + to walk the dependency tree maintained by the &Node; class. + The &Walker; class maintains a stack of &Node; objects + visited during its depth-first traversal of the + dependency tree, + and uses an intermediate node &Wrapper; class + to maintain state information about a + &Node; object's dependencies. + + </para> + + </section> + + <section> + <title>Scanner Subsystem</title> + + <para> + + The scanner subsystem is responsible for maintaining + objects that can scan the contents of a &Node;'s + for implicit dependencies. + + </para> + + <figure> + <title>Scanner subsystem</title> + <mediaobject> + <imageobject> + <imagedata fileref="scanner.svg" align="center" scale="50"/> + </imageobject> + <imageobject> + <imagedata fileref="scanner.jpg" align="center"/> + </imageobject> + </mediaobject> + </figure> + + <para> + + In practice, a given &Scanner; subclass object + functions as a prototype, + returning clones of itself + depending on the &consenv; + values governing how the &Node; + should be scanned. + + </para> + + </section> + + <section> + <title>Signature Subsystem</title> + + <para> + + The signature subsystem is responsible for computing + signature information for &Node; objects. + The signature subsystem in &SCons; + supports multiple ways to + determine whether a &Node; is up-to-date + by using an abstract &Sig; class + as a strategy wrapper: + + </para> + + <figure> + <title>Signature subsystem</title> + <mediaobject> + <imageobject> + <imagedata fileref="sig.svg" align="center" scale="50"/> + </imageobject> + <imageobject> + <imagedata fileref="sig.jpg" align="center"/> + </imageobject> + </mediaobject> + </figure> + + <para> + + By default, &SCons; tracks dependencies by computing and + maintaining MD5 signatures for the contents of each source file + (or other object). The signature of a <emphasis>derived</emphasis> + file consists of the aggregate of the signatures of all the source + files <emphasis>plus</emphasis> the command-line string used to + build the file. These signatures are stored in a &sconsign; file + in each directory. + + </para> + + <para> + + If the contents of any of the source files changes, the change to its + MD5 signature is propogated to the signature of the derived file(s). The + simple fact that the new signature does not match the stored signature + indicates that the derived file is not up to date and must be rebuilt. + + </para> + + <para> + + A separate &TimeStamp; subclass of the &Sig; class supports + the use of traditional file timestamps for + deciding whether files are up-to-date. + + </para> + + </section> + + <section> + <title>Builder Subsystem</title> + + <para> + + The &SCons; Build Engine records how out-of-date files + (or other objects) should be rebuilt in &Builder; objects, + maintained by the builder subsystem: + + </para> + + <figure> + <title>Builder subsystem</title> + <mediaobject> + <imageobject> + <imagedata fileref="builder.svg" align="center" scale="50"/> + </imageobject> + <imageobject> + <imagedata fileref="builder.jpg" align="center"/> + </imageobject> + </mediaobject> + </figure> + + <para> + + The actual underlying class name is &BuilderBase;, + and there are subclasses that can encapsulate + multiple &Builder; objects for special purposes. + One subclass + (&CompositeBuilder;) + selects an appropriate encapsulated &Builder; + based on the file suffix of the target object. + The other + (&MultiStepBuilder;). + can chain together multiple + &Builder; objects, + for example, + to build an executable program from a source file + through an implicit intermediate object file. + + </para> + + <para> + + A &BuilderBase; object has an associated + &ActionBase; object + responsible for actually executing + the appropriate steps + to update the target file. + There are three subclasses, + one for externally executable commands + (&CommandAction;), + one for Python functions + (&FunctionAction;), + and one for lists of + multiple &Action; objects + (&ListAction;). + + </para> + + </section> + + <section> + <title>Job/Task Subsystem</title> + + <para> + + &SCons; supports parallel builds with a thread-based tasking + model, managed by the job/task subsystem. + + </para> + + <figure> + <title>Job/Task subsystem</title> + <mediaobject> + <imageobject> + <imagedata fileref="job-task.svg" align="center" scale="50"/> + </imageobject> + <imageobject> + <imagedata fileref="job-task.jpg" align="center"/> + </imageobject> + </mediaobject> + </figure> + + <para> + + Instead of performing an outer-loop recursive descent + of the dependency tree and then forking a task when it finds a + file that needs updating, &SCons; starts as many threads as are + requested, each thread managed by the &Jobs; class. + As a performance optimization, + the &Jobs; class maintains an internal + distinction between + &Serial; and &Parallel; + build jobs, + so that serial builds + don't pay any performance penalty + by using a multi-threaded implementation + written for &Parallel; builds. + + </para> + + <para> + + Each &Jobs; object, running in its own thread, + then requests a &Task; from a central &Taskmaster;, + which is responsible + for handing out available &Task; objects for (re-)building + out-of-date nodes. A condition variable + makes sure that the &Jobs; objects + query the &Taskmaster; one at a time. + + </para> + + <para> + + The &Taskmaster; uses the node subsystem's + &Walker; class to walk the dependency tree, + and the &Sig; class to use the + appropriate method + of deciding if a &Node; is up-to-date. + + </para> + + <para> + + This scheme has many advantages over the standard &Make; + implementation of <option>-j</option>. + Effective use of <option>-j</option> is difficult + with the usual recursive use of Make, + because the number of jobs started by <option>-j</option> multiply + at each level of the source tree. + This makes the actual number of jobs + executed at any moment very dependent on the size and layout of + the tree. &SCons;, in contrast, starts only as many jobs as are + requested, and keeps them constantly busy (excepting jobs that + block waiting for their dependency files to finish building). + + </para> + + </section> + +</section> + +<section> + <title>The &SCons; API</title> + + <para> + + This section provides an overview of the &SCons; interface. The + complete interface specification is both more detailed and flexible + than this overview. + + </para> + + <section> + <title>&ConsVars;</title> + + <para> + + In &SCons;, a &consenv; is an object through which an external + interface (such as the &scons; script) communicates dependency + information to the &SCons; Build Engine. + + </para> + + <para> + + A construction environment is implemented as a dictionary + containing: + + </para> + + <itemizedlist> + + <listitem> + <para> + + construction variables, string values that are substituted + into command lines or used by builder functions; + + </para> + </listitem> + + <listitem> + <para> + + one or more &Builder; objects that can be invoked to update a + file or other object; + + </para> + </listitem> + + <listitem> + <para> + + one or more &Scanner; objects that can be used to + scan a file automatically for dependencies (such as + files specified on <literal>#include</literal> lines). + + </para> + </listitem> + + </itemizedlist> + + <para> + + &Consenvs; are instantiated as follows: + + </para> + + <programlisting> +env = Environment() +env_debug = Environment(CCFLAGS = '-g') + </programlisting> + + </section> + + <section> + <title>&Builder; Objects</title> + + <para> + + An &SCons; &Builder; object encapsulates information about how to + build a specific type of file: an executable program, an object + file, a library, etc. A &Builder; object is associated with a + file through an associated &consenv; method and later invoked to + actually build the file. The &Builder; object will typically use + construction variables (such as <literal>CCFLAGS</literal>, <literal>LIBPATH</literal>) to influence + the specific build execution. + + </para> + + <para> + + &Builder; objects are instantiated as follows: + + </para> + + <programlisting> +bld = Builder(name = 'Program', action = "$CC -o $TARGET $SOURCES") + </programlisting> + + <para> + + In the above example, the <literal>action</literal> is a + command-line string in which the Build Engine will + interpolate the values of construction + variables before execution. The actual + <literal>action</literal> specified, though, + may be a function: + + </para> + + <programlisting> + def update(dest): + # [code to update the object] + return 0 + + bld = Builder(name = 'Program', function = update) + </programlisting> + + <para> + + Or a callable Python object (or class): + + </para> + + <programlisting> + class class_a: + def __call__(self, kw): + # build the desired object + return 0 + + builder = SCons.Builder.Builder(action = class_a()) + </programlisting> + + <para> + + A &Builder; object may have the <literal>prefix</literal> and + <literal>suffix</literal> of its target file type specified + as keyword arguments at instantiation. Additionally, the + suffix of the <emphasis>source files</emphasis> used by this + &Builder; to build its target files may be specified using the + <literal>src_suffix</literal> keyword argument: + + </para> + + <programlisting> +bld_lib = Builder(name = 'Library', action = "$AR r $TARGET $SOURCES", + prefix = 'lib', suffix = '.a', src_suffix = '.o') + </programlisting> + + <para> + + The specified <literal>prefix</literal> and + <literal>suffix</literal> will be appended to the name of any + target file built by this &Builder; object, if they are not + already part of the file name. The <literal>src_suffix</literal> + is used by the &SCons; Build Engine to chain together + multiple &Builder; objects to create, + for example, a library from the original source + files without having to specify the + intermediate <literal>.o</literal> files. + + </para> + + <para> + + &Builder; objects are associated with a &consenv; through a + &consvar; named <literal>BUILDERS</literal>, a list of the &Builder; objects that + will be available for execution through the &consenv;: + + </para> + + <programlisting> +env = Environment(BUILDERS = [ Object, Library, WebPage, Program ]) + </programlisting> + + </section> + + <section> + <title>&Scanner; Objects</title> + + <para> + + &Scanner; objects perform automatic checking for dependencies + by scanning the contents of files. The canonical + example is scanning a C source file or header file for + files specified on <literal>#include</literal> lines. + + </para> + + <para> + + A &Scanner; object is instantiated as follows: + + </para> + + <programlisting> + def c_scan(contents): + # scan contents of file + return # list of files found + + c_scanner = Scanner(name = 'CScan', function = c_scan, + argument = None, + skeys = ['.c', '.C', '.h', '.H') + </programlisting> + + <para> + + The <literal>skeys</literal> argument specifies a list of file + suffixes for file types that this &Scanner; knows how to scan. + + </para> + + <para> + + &Scanner; objects are associated with a &consenv; through a + &consvar; named <literal>SCANNERS</literal>, a list of the &Scanner; objects that + will be available through the &consenv;: + + </para> + + <programlisting> +env = Environment(SCANNERS = [ CScan, M4Scan ]) + </programlisting> + + <para> + + For utilities that will build files with a variety of file + suffixes, or which require unusual scanning rules, a &Scanner; + object may be associated explicitly with a &Builder; object as + follows: + + </para> + + <programlisting> + def tool_scan(contents): + # scan contents of file + return # list of files found + + tool_scanner = Scanner(name = 'TScan', function = tool_scan) + + bld = Builder(name = 'Tool', scanner = tool_scanner) + </programlisting> + + </section> + + <section> + <title>&BuildDir;</title> + + <para> + + &SCons; supports a flexible mechanism for building target + files in a separate build directory from the source files. + The &BuildDir; syntax is straightforward: + + </para> + + <programlisting> +BuildDir(source = 'src', build = 'bld') + </programlisting> + + <para> + + By + default, source files are linked or copied into the build + directory, because exactly replicating the source directory + is sometimes necessary for certain combinations of use of + <literal>#include "..."</literal> and <option>-I</option> search + paths. + + An option exists to specify that only output files should be placed in + the build directory: + + </para> + + <programlisting> +BuildDir(source = 'src', build = 'bld', no_sources = 1) + </programlisting> + + </section> + + <section> + <title>&Repository;</title> + + <para> + + &SCons; supports the ability to search a list of code repositories + for source files and derived files. This works much like + &Make;'s <varname>VPATH</varname> feature, as implemented in + recent versions of GNU &Make;. + (The POSIX standard for &Make; specifies slightly + different behavior for <varname>VPATH</varname>.) + The syntax is: + + </para> + + <programlisting> +Repository('/home/source/1.1', '/home/source/1.0') + </programlisting> + + <para> + + A command-line <option>-Y</option> option exists to allow + repositories to be specified on the command line, or in the + &SCONSFLAGS; environment variable (not construction variable!). + This avoids a chicken-and-egg situation and allows the top-level + &SConstruct; file to be found in a repository as well. + + </para> + + </section> + + <section> + <title>&Cache;</title> + + <para> + + &SCons; supports a way for developers to share derived files. Again, the + syntax is straightforward: + + </para> + + <programlisting> +Cache('/var/build.cache/i386') + </programlisting> + + <para> + + Copies of any derived files built will be placed in the specified + directory with their MD5 signature. If another build results in an + out-of-date derived file with the same signature, the derived file + will be copied from the cache instead of being rebuilt. + + </para> + + </section> + +</section> + +<section> + <title>The &scons; Script</title> + + <para> + + The &scons; script provides an interface + that looks roughly equivalent to the + classic &Make; utility—that is, execution from the command + line, and dependency information read from configuration files. + + </para> + + <para> + + The most noticeable difference between &scons; and &Make;, or most + other build tools, is that the configuration files are actually + Python scripts, generically called "SConscripts" (although the + top-level "Makefile" is named &SConstruct;). Users do not have to + learn a new language syntax, but instead configure dependency + information by making direct calls to the Python API of the + &SCons; Build Engine. Here is an example &SConstruct; file which + builds a program in side-by-side normal and debug versions: + + </para> + + <programlisting> + env = Environment() + debug = env.Copy(CCFLAGS = '-g') + + source_files = ['f1.c', 'f2.c', 'f3.c'] + + env.Program(target = 'foo', sources = source_files) + debug.Program(target = 'foo-debug', sources = source_files) + </programlisting> + + <para> + + Notice the fact that this file is a Python script, which allows us + to define and re-use an array that lists the source files. + + </para> + + <para> + + Because quoting individul strings in long + lists of files can get tedious and error-prone, the &SCons; + methods support a short-cut of listing multiple files in a single + string, separated by white space. + This would change + the assignment in the above example to a more easily-readable: + + </para> + + <programlisting> +source_files = 'f1.c f2.c f3.c' + </programlisting> + + <para> + + The mechanism to establish hierarchical builds is to "include" any + subsidiary configuration files in the build by listing them explicitly + in a call to the &SConscript; function: + + </para> + + <programlisting> +SConscript('src/SConscript', 'lib/SConscript') + </programlisting> + + <para> + + By convention, configuration files in subdirectories are named + &SConscript;. + + </para> + + <para> + + The &scons; script has intentionally been made to look, from + the outside, as much like &Make; as is practical. To this + end, the &scons; script supports all of the same command-line + options supported by GNU &Make;: <option>-f</option> FILE, + <option>-j</option>, <option>-k</option>, <option>-s</option>, + etc. For compatibility, &scons; ignores those GNU &Make; options + that don't make sense for the &SCons; architecture, such as + <option>-b</option>, <option>-m</option>, <option>-S</option>, + and <option>-t</option>. The + intention is that, given an equivalent &SConstruct; file for a + &Makefile;, a user could use &SCons; as a drop-in replacement for + &Make;. Additional command-line options are, where possible, taken + from the Perl &Cons; utility on which the &SCons; design is based. + + </para> + +</section> + +</section> diff --git a/doc/python10/future.xml b/doc/python10/future.xml new file mode 100644 index 0000000..2356cac --- /dev/null +++ b/doc/python10/future.xml @@ -0,0 +1,209 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-future" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Future Directions</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + There are a number of things we would like to do to continue to + improve &SCons; in the future. + +</para> + +<section> + <title>Distutils Cooperation</title> + + <para> + + There is a certain amount of overlap between what &SCons; does + to search out and make use of various compilers on a system, and + the impressively complete job that the Distutils do of describing + much the same thing. Collaborating to provide some sort of common + interface between the two tools would benefit both tools. + + </para> + +</section> + +<section> + <title>Additional Builder Support</title> + + <para> + + Adding additional builders would broaden the + potential user base. In rough order of importance: + + </para> + + <variablelist> + + <varlistentry> + <term>Java</term> + <listitem> + <para> + + Given the popularity of Java, support for it would greatly + increase the appeal of &SCons; in the large community of Java + users. + + </para> + + <para> + + Good support for Java is, however, a tricky + proposition. Because the Java compiler can make decisions + about compiling other files based on what classes it finds + in a file, it behaves "unpredictably" from the point of + view of an outside build tool like &SCons; or &Make;. Some + sort of sophisticated scanning of Java source code to + identify what other classes are likely to be compiled + would be an obvious first step, but notice that here + &SCons; would be scanning the file to find additional + targets to be built. This is the inverse of the sort of + <literal>#include</literal> scanning performed + for C files, in which &SCons; is looking for additional + <emphasis>dependencies</emphasis>. + + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Documentation toolchains</term> + <listitem> + <para> + + A number of early adopters + are using &SCons; to + build documents + from TeX or DocBook source files. + Built-in support for + various documentation toolchains + would be an obvious boon + for many people. + + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term>C#</term> + <listitem> + <para> + + The reality is that anything that Microsoft does will doubtless + have a wide audience. Turning &SCons;' back on that would be + cutting off its nose to spite its face. + + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Fortran</term> + <listitem> + <para> + + Despite the fact that &SCons; is no longer directly + associated with Software Carpentry, it still shares the + same goal: to make programming easier for more than just + programmers. To that end, good Fortran support would + help a great many physical scientists and other computer + <emphasis>users</emphasis> out there who still rely on Fortran + for a great deal of their work. + + </para> + </listitem> + </varlistentry> + + </variablelist> + +</section> + +<section> + <title>Database Interface</title> + + <para> + + The Nodes in an &SCons; dependency graph aren't only restricted to + files. Creating an interface to mSQL or MySQL databases would allow + the possibility of updating external files in response to changes in + database fields, or vice versa. This could be handy, for example, + for generating a cache of static web pages from a database that only + need re-generating when the appropriate database objects change. + + </para> + +</section> + +<section> + <title>Tool Integration</title> + + <para> + + &SCons; should work well with as many popular Integrated Development + Environments (IDEs) and tool chains as possible: Komodo, Microsoft + Visual Studio, ClearCase, etc. Suggestions for additional tools are + welcome. + + </para> + +</section> + +<section> + <title>Makefile Interface</title> + + <para> + + Because the &SCons; Build Engine can be embedded in any Python + interface, there isn't any technical reason why a &Makefile; + interpreter couldn't be written in Python and use the &SCons; Build + Engine for its dependency analysis. + + </para> + + <para> + + Proof-of-concept for the idea already exists. Gary Holt's + <literal>make++</literal> (also known as <literal>makepp</literal>) + is a Perl implementation of just such a &Makefile; interpreter. It + could possible serve as a model for a Python version, in much the + same way the &Cons; design served as the prototype for &SCons;. + + </para> + +</section> + +</section> diff --git a/doc/python10/install.xml b/doc/python10/install.xml new file mode 100644 index 0000000..cc95c82 --- /dev/null +++ b/doc/python10/install.xml @@ -0,0 +1,218 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-install" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Installation</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + Initial installation of a new utility provides the first, lasting + impression of how well the software is likely to perform. From the + start, &SCons; has made clean installation a priority. + +</para> + +<section> + <title>Version Control</title> + + <para> + + Distributing an application like &SCons; that depends + on a package normally found in a library poses a + problem. If the &scons; script and the &SCons; Build Engine + are installed separately, it could be easy + to introduce a version mismatch between the Build Engine + installed in + <filename>/usr/lib/python*/site-packages</filename> + and the &scons; script installed in + <filename>/usr/bin</filename>. + Such a mismatch + could possible mean exceptions that prevent builds, or even worse, + silently unreliable builds. + + </para> + + <para> + + To reduce the possibility of a version mismatch, + the &scons; script looks first for its + imported modules in <filename>/usr/lib/scons-{version}/</filename>, + then in <filename>/usr/lib/scons/</filename>, + and then in the normal &PYTHONPATH; locations, + including <filename>/usr/lib/python*/site-packages</filename>). + Searching in a version-specific library directory first + makes it convenient to install and use multiple + side-by-side versions of &SCons;, + which is sometimes important + when verifying that a new version does not introduce any + errors into the local build process. + Searching next in an &SCons;-specific library directory + makes it convenient for other software to find + the &SCons; Build Engine without having to worry about + installing separate copies for + multiple versions of Python. + + </para> + +</section> + +<section> + <title>Packages</title> + + <para> + + &SCons; is currently distributed in the following packages: + + </para> + + <table> + <title></title> + <tgroup cols="2"> + <tbody> + + <row valign="top"> + <entry> + <literal>scons-</literal><emphasis>version</emphasis><literal>.tar.gz</literal> + </entry> + <entry><para> + + The traditional <literal>.tar.gz</literal> file, + installable by running <filename>setup.py</filename>. + + </para></entry> + </row> + + <row valign="top"> + <entry> + <literal>scons-</literal><emphasis>version</emphasis><literal>.noarch.rpm</literal> + </entry> + <entry><para> + + An RPM file for typical installation. + + </para></entry> + </row> + + <row valign="top"> + <entry> + <literal>scons-</literal><emphasis>version</emphasis><literal>_all.deb</literal> + </entry> + <entry><para> + + A Debian package. + + </para></entry> + </row> + + <row valign="top"> + <entry> + <literal>scons-</literal><emphasis>version</emphasis><literal>.win32.exe</literal> + </entry> + <entry><para> + + A Windows installer. + + </para></entry> + </row> + + <row valign="top"> + <entry> + <literal>scons-</literal><emphasis>version</emphasis><literal>.src.rpm</literal> + </entry> + <entry><para> + + A source RPM file. + + </para></entry> + </row> + + <row valign="top"> + <entry> + <literal>scons-src-</literal><emphasis>version</emphasis><literal>.tar.gz</literal> + </entry> + <entry><para> + + A tarball of the &SCons; source tree, + including the full set of regression tests. + + </para></entry> + </row> + + </tbody> + </tgroup> + </table> + + <para> + + Like other software written in Python, &SCons; benefits greatly from + the tremendous effort put into the <literal>distutils</literal> by + Greg Ward and others. These take care of 90% of the work by making + it almost trivial to generate the appropriate RPM files, Debian + packages, and Windows installer. + + </para> + +</section> + +<section> + <title>Default Builder Objects</title> + + <para> + + As part of the installation process, &SCons; runs a set of scripts + that look for popular compilers and other tools and set up + appropriate default &Builder; objects for the tools found. These + &Builder; objects are then used to initialize the default &consenv; + values. + + </para> + +</section> + +<section> + <title>Default Scanner Objects</title> + + <para> + + Additionally, &SCons; comes with a stock set of &Scanner; objects + for the various file types that it supports out of the box. Any + unusal &Scanner; objects required for a specific tool will be + detected at installation time and associated with the appropriate + &Builder; object for the tool. + + </para> + +</section> + +</section> diff --git a/doc/python10/intro.xml b/doc/python10/intro.xml new file mode 100644 index 0000000..27e8cb4 --- /dev/null +++ b/doc/python10/intro.xml @@ -0,0 +1,251 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-intro" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Introduction</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + More than twenty years after its creation, the classic UNIX &Make; + utility and its descendants are still the dominant way in which + software is built. &Make; has maintained this position despite the + fact that the intervening years have revealed many + shortcomings of the &Make; model for building software: + +</para> + +<itemizedlist> + + <listitem> + <para> + + The use of timestamps to decide when a file has been updated is + imprecise and prone to error, especially across distributed file + systems such as NFS. + + </para> + </listitem> + + <listitem> + <para> + + Builds of typical large software systems still take hours, if not + days, despite the tremendous advances in CPU and disk speeds over + recent years. + + </para> + </listitem> + + <listitem> + <para> + + &Make; maintains static definitions of dependencies in its + &Makefiles;. Much effort has been put into + utilities (<application>mkdepend</application>, <application>gcc + -M</application>) and schemes (<filename>Makefile.d</filename> + files) to try to keep &Makefile; dependencies up-to-date, + but these only confirm that &Make;'s static dependencies are + inherently fragile. + + </para> + </listitem> + + <listitem> + <para> + + The standard recursive use of &Make; for build hierarchies leads + to incomplete dependency graphs, which must be overcome by + manually changing the order in which directories are built, or + through the use of multiple build passes. + + </para> + </listitem> + +</itemizedlist> + +<para> + + One need only look at the plethora of helper and wrapper utilities + (automake, easymake, imake, jmake, makeLib, maketool, mkmed, shake, + SMake, TMAKE) and complete alternatives to &Make; (Ant, bake, bau, + bras, Cake, Cons, Cook, Jam, jmk, jus, makeme, mash, MK, nmake, Odin, + VMake) that have been created over the years to realize that vanilla + &Make; is not satisfying everyone's build requirements. So why Yet + Another build tool? + +</para> + +<section> + <title>Enter Software Carpentry</title> + + <para> + + Most of the build tools just mentioned + were written by programmers and for + programmers. The fact that most programmer-friendly + utilities do a poor job of fulfilling the needs + of non-programmers prompted Greg Wilson to + organize the Software Carpentry competition in January 2000. + Software Carpentry was an + open design contest with the express goal of producing a set of + next-generation utilities, including a build tool, that would be + accessible + not only to + programmers + but also to computer <emphasis>users</emphasis> + such as physical scientists. + + </para> + + <para> + + The key to this usability would be that all of + these utilities, including the build tool, would be + written in Python. + This provided the catalyst for actually + pursuing an idea + that had been floating around one of the more + intriguing &Make; alternatives, + a Perl utility called &Cons;. + What if the friendlier syntax of Python + could be married to the + architectural advantages of &Cons;? + + </para> + + <para> + + The resulting merged design, at that time named &ScCons;, + won the Software Carpentry build tool competition. CodeSourcery (by + then the administrators of the competition) ultimately decided not to + fund development of the build tool, but the seed had been planted and the + design had taken root. + + </para> + +</section> + +<section> + <title>Cons</title> + + <para> + + It helps to know something about &Cons;. + &Cons; was first released in 1996 by Bob Sidebotham, + then an employee of Fore Systems, + and it has a number of + distinctive features that set it apart from most &Make;-alikes: + + </para> + + <itemizedlist> + + <listitem> + <para> + + &Cons; "configuration files" are not Yet Another + invented mini-language, but are actually <emphasis>Perl + scripts</emphasis>, which means the full power and flexibility of + a real scripting language can be applied to build problems. + + </para> + </listitem> + + <listitem> + <para> + + &Cons; builds everything from a single process at the top of the + source tree, with a global view of the dependencies. + + </para> + </listitem> + + <listitem> + <para> + + &Cons; scans files automatically for dependencies such as + files specified on <literal>#include</literal> lines. + + </para> + </listitem> + + <listitem> + <para> + + &Cons; decides if a file was out-of-date by using MD5 checksums of + the contents of files, not timestamps. + + </para> + </listitem> + + </itemizedlist> + + <para> + + Despite all of these intriguing architectural features, the great + strength of &Cons;—being written in Perl—was also one of + its weaknesses, turning away many potential users due to the + (real or perceived) steep learning curve of Perl. + + </para> + +</section> + +<section> + <title>&SCons;</title> + + <para> + + Through the &ScCons; contest entry, + &SCons; is the direct descendant of the &Cons; architecture, + and is currently + under active, supported development with a growing body of + users. Its first release was 13 December 2001, under the simple and + non-restrictive MIT license, and from the outset, the goal of the + members of the &SCons; project has been to deliver a stable, reliable + tool that can be used for industrial-strength software builds. + + </para> + + <para> + + The rest of this paper will give an overview of the &SCons; design + (including its architecture and interface), describe the development + methodology used, and discuss future directions for &SCons;. + + </para> + +</section> + +</section> diff --git a/doc/python10/job-task.fig b/doc/python10/job-task.fig new file mode 100644 index 0000000..6febd97 --- /dev/null +++ b/doc/python10/job-task.fig @@ -0,0 +1,90 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 4200 3900 5100 4500 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 4200 3900 5100 3900 5100 4500 4200 4500 4200 3900 +4 1 0 50 0 0 16 0.0000 4 165 465 4650 4275 Task\001 +-6 +6 4200 5100 5100 5700 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 4200 5100 5100 5100 5100 5700 4200 5700 4200 5100 +4 1 0 50 0 0 16 0.0000 4 165 525 4650 5475 Node\001 +-6 +6 6300 2100 7200 2700 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 6300 2100 7200 2100 7200 2700 6300 2700 6300 2100 +4 1 0 50 0 0 16 0.0000 4 225 330 6750 2475 Sig\001 +-6 +6 6300 3300 7500 3900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 6300 3300 7500 3300 7500 3900 6300 3900 6300 3300 +4 1 0 50 0 0 16 0.0000 4 165 735 6900 3675 Walker\001 +-6 +6 4200 2100 5700 2700 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 4200 2100 5700 2100 5700 2700 4200 2700 4200 2100 +4 1 0 50 0 0 16 0.0000 4 165 1155 4950 2475 TaskMaster\001 +-6 +6 2400 3300 3600 3900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2400 3300 3600 3300 3600 3900 2400 3900 2400 3300 +4 1 0 50 0 0 16 0.0000 4 165 765 3000 3675 Parallel\001 +-6 +6 600 3300 1800 3900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 600 3300 1800 3300 1800 3900 600 3900 600 3300 +4 1 0 50 0 0 16 0.0000 4 165 585 1200 3675 Serial\001 +-6 +6 1200 2100 3000 2700 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1200 2100 3000 2100 3000 2700 1200 2700 1200 2100 +4 1 0 50 0 0 17 0.0000 4 165 420 2099 2475 Jobs\001 +-6 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 2700 2700 2660 2775 2700 2850 2740 2775 2700 2700 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 5700 2400 5775 2440 5850 2400 5775 2360 5700 2400 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 5400 2700 5360 2775 5400 2850 5440 2775 5400 2700 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 4650 2700 4610 2775 4650 2850 4690 2775 4650 2700 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 1500 2700 1460 2775 1500 2850 1540 2775 1500 2700 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 4650 4500 4610 4575 4650 4650 4690 4575 4650 4500 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1500 2850 1500 3300 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2700 2850 2700 3300 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4650 2850 4650 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4650 4650 4650 5100 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 5400 2850 5400 3600 6300 3600 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5850 2400 6300 2400 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3000 2400 3075 2440 3150 2400 3075 2360 3000 2400 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3150 2400 4200 2400 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 2100 2100 2100 1800 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 4950 2100 4950 1800 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 6750 2100 6750 1800 diff --git a/doc/python10/job-task.jpg b/doc/python10/job-task.jpg Binary files differnew file mode 100644 index 0000000..ff3ded0 --- /dev/null +++ b/doc/python10/job-task.jpg diff --git a/doc/python10/job-task.svg b/doc/python10/job-task.svg new file mode 100644 index 0000000..dc5fc20 --- /dev/null +++ b/doc/python10/job-task.svg @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="744.09448" + height="1052.3622" + id="svg2"> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1"> + <g + transform="matrix(0.07538995,0,0,0.07538995,69.670703,249.64987)" + id="g3223" + style="fill:none;stroke-width:0.025in"> + <rect + width="900" + height="600" + rx="0" + x="4200" + y="3900" + id="rect3225" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="4200" + y="5100" + id="rect3227" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="6300" + y="2100" + id="rect3229" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="6300" + y="3300" + id="rect3231" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1500" + height="600" + rx="0" + x="4200" + y="2100" + id="rect3233" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="2400" + y="3300" + id="rect3235" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="600" + y="3300" + id="rect3237" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="1200" + y="2100" + id="rect3239" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="2740,2775 2700,2700 2700,2700 2660,2775 2700,2850 " + id="polygon3241" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="5775,2360 5700,2400 5700,2400 5775,2440 5850,2400 " + id="polygon3243" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="5440,2775 5400,2700 5400,2700 5360,2775 5400,2850 " + id="polygon3245" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="4690,2775 4650,2700 4650,2700 4610,2775 4650,2850 " + id="polygon3247" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="1540,2775 1500,2700 1500,2700 1460,2775 1500,2850 " + id="polygon3249" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="4690,4575 4650,4500 4650,4500 4610,4575 4650,4650 " + id="polygon3251" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3253" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1500,2850 1500,3180 " /> + <polygon + points="1470,3179 1470,3179 1500,3299 1530,3179 " + id="polygon3255" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3257" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="2700,2850 2700,3180 " /> + <polygon + points="2670,3179 2670,3179 2700,3299 2730,3179 " + id="polygon3259" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3261" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4650,2850 4650,3780 " /> + <polygon + points="4620,3779 4620,3779 4650,3899 4680,3779 " + id="polygon3263" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3265" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4650,4650 4650,4980 " /> + <polygon + points="4620,4979 4620,4979 4650,5099 4680,4979 " + id="polygon3267" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3269" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="5400,2850 5400,3600 6180,3600 " /> + <polygon + points="6179,3630 6179,3630 6299,3600 6179,3570 " + id="polygon3271" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3273" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="5850,2400 6180,2400 " /> + <polygon + points="6179,2430 6179,2430 6299,2400 6179,2370 " + id="polygon3275" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polygon + points="3075,2360 3000,2400 3000,2400 3075,2440 3150,2400 " + id="polygon3277" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3279" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3150,2400 4080,2400 " /> + <polygon + points="4079,2430 4079,2430 4199,2400 4079,2370 " + id="polygon3281" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3283" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="2100,2100 2100,1800 " /> + <polyline + id="polyline3285" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="4950,2100 4950,1800 " /> + <polyline + id="polyline3287" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="6750,2100 6750,1800 " /> + <text + x="4650" + y="4275" + id="text3289" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Task</text> + <text + x="4650" + y="5475" + id="text3291" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Node</text> + <text + x="6750" + y="2475" + id="text3293" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Sig</text> + <text + x="6900" + y="3675" + id="text3295" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Walker</text> + <text + x="4950" + y="2475" + id="text3297" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">TaskMaster</text> + <text + x="3000" + y="3675" + id="text3299" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Parallel</text> + <text + x="1200" + y="3675" + id="text3301" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Serial</text> + <text + x="2099" + y="2475" + id="text3303" + xml:space="preserve" + style="font-size:204px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Jobs</text> + </g> + </g> +</svg> diff --git a/doc/python10/main.xml b/doc/python10/main.xml new file mode 100644 index 0000000..dbcd482 --- /dev/null +++ b/doc/python10/main.xml @@ -0,0 +1,178 @@ +<?xml version="1.0"?> + +<!DOCTYPE sconsdoc [ + + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; + +]> + +<article xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + + <articleinfo> + <title>SCons Design and Implementation</title> + + <author> + <firstname>Steven</firstname> + <surname>Knight</surname> + </author> + + <copyright> + <year>2001</year> + <year>2014</year> + <holder>The SCons Foundation</holder> + </copyright> + + <pubdate>2002</pubdate> + + <confgroup> + <confdates>4-7 February 2002</confdates> + <conftitle>The Tenth International Python Conference</conftitle> + <address>Alexandria, Virginia</address> + </confgroup> + + <revhistory> + <revision> + <revnumber>0.2</revnumber> + <date>16 December 2001</date> + <revremark>Internal re-review.</revremark> + </revision> + <revision> + <revnumber>0.1</revnumber> + <date>8 October 2001</date> + <revremark>Submitted for Python10 conference.</revremark> + </revision> + </revhistory> + + </articleinfo> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="abstract.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="intro.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="design.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="install.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="process.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="future.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="summary.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="acks.xml"/> + + <!-- + <section id="sect-refs"> + <title>References</title> + <para> + </para> + </section> + --> + + <bibliography id="sect-refs"> + <title>References</title> + + <biblioentry> + <abbrev>1</abbrev> + <authorgroup> + <author><firstname>Stuart I.</firstname><surname>Feldman</surname></author> + </authorgroup> + <copyright> + <year>Aug 1978</year> + </copyright> + <publisher> + <publishername>Bell Laboratories</publishername> + </publisher> + <title>Make - A Program for Maintaining Computer Programs</title> + </biblioentry> + + <biblioentry> + <abbrev>2</abbrev> + <authorgroup> + <author><firstname>Peter</firstname><surname>Miller</surname></author> + </authorgroup> + <copyright> + <year>1997</year> + <holder>Peter Miller</holder> + </copyright> + <title>Recursive Make Considered Harmful</title> + <!--http://www.pcug.org.au/~millerp/rmch/recu-make-cons-harm.html--> + </biblioentry> + + <biblioentry> + <abbrev>3</abbrev> + <authorgroup> + <author><firstname>Andrew</firstname><surname>Oram</surname></author> + <author><firstname>Steve</firstname><surname>Talbott</surname></author> + </authorgroup> + <copyright> + <year>1986</year> + <year>1991</year> + <holder>O'Reilly & Associates, Inc.</holder> + </copyright> + <publisher> + <publishername>O'Reilly & Associates, Inc.</publishername> + </publisher> + <title>Managing Projects with Make, 2nd Ed.</title> + </biblioentry> + + <biblioentry> + <abbrev>4</abbrev> + <authorgroup> + <author><firstname>Richard M.</firstname><surname>Stallman</surname></author> + <author><firstname>Roland</firstname><surname>McGrath</surname></author> + </authorgroup> + <copyright> + <year>1988</year> + <year>'89</year> + <year>'90</year> + <year>'91</year> + <year>'92</year> + <year>'93</year> + <year>'94</year> + <year>'95</year> + <year>'96</year> + <year>'97</year> + <year>'98</year> + <year>'99</year> + <year>2000</year> + <holder>Free Software Foundation, Inc.</holder> + </copyright> + <publisher> + <publishername>Free Software Foundation, Inc.</publishername> + </publisher> + <title>GNU Make</title> + <subtitle>A Program for Directing Recompilation</subtitle> + </biblioentry> + + </bibliography> + +</article> diff --git a/doc/python10/node.fig b/doc/python10/node.fig new file mode 100644 index 0000000..3c40f07 --- /dev/null +++ b/doc/python10/node.fig @@ -0,0 +1,165 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 2700 1200 4500 1800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 1200 4500 1200 4500 1800 2700 1800 2700 1200 +4 0 0 50 0 0 16 0.0000 4 165 1290 2925 1575 Environment\001 +-6 +6 2700 3600 4500 4200 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 3600 4500 3600 4500 4200 2700 4200 2700 3600 +4 0 0 50 0 0 16 0.0000 4 165 525 3375 3975 Node\001 +-6 +6 5700 1800 6900 2400 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 5700 1800 6900 1800 6900 2400 5700 2400 5700 1800 +4 0 0 50 0 0 16 0.0000 4 165 735 5925 2175 Walker\001 +-6 +6 2100 2400 3300 3000 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2100 2400 3300 2400 3300 3000 2100 3000 2100 2400 +4 0 0 50 0 0 16 0.0000 4 165 750 2325 2775 Builder\001 +-6 +6 3900 2400 5100 3000 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3900 2400 5100 2400 5100 3000 3900 3000 3900 2400 +4 0 0 50 0 0 16 0.0000 4 165 780 4125 2775 Scanner\001 +-6 +6 0 5100 3300 6900 +6 2400 6300 3300 6900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2400 6300 3300 6300 3300 6900 2400 6900 2400 6300 +4 0 0 50 0 0 16 0.0000 4 165 345 2700 6675 Dir\001 +-6 +6 0 6300 900 6900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 0 6300 900 6300 900 6900 0 6900 0 6300 +4 0 0 50 0 0 16 0.0000 4 225 555 150 6675 Entry\001 +-6 +6 1200 6300 2100 6900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1200 6300 2100 6300 2100 6900 1200 6900 1200 6300 +4 0 0 50 0 0 16 0.0000 4 165 390 1425 6675 File\001 +-6 +6 1050 5100 2250 5700 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1050 5100 2250 5100 2250 5700 1050 5700 1050 5100 +4 0 0 50 0 0 16 0.0000 4 165 855 1200 5475 Node.FS\001 +-6 +6 450 5700 2700 6300 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 1650 5700 1575 5850 1725 5850 1650 5700 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 450 6300 450 6000 2700 6000 2700 6300 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 1650 6300 1650 5850 +-6 +-6 +6 3900 5100 7500 6900 +6 5100 6300 6300 6900 +2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 + 5100 6300 6300 6300 6300 6900 5100 6900 5100 6300 +4 0 0 50 0 0 16 0.0000 4 165 705 5325 6675 Record\001 +-6 +6 6600 6300 7500 6900 +2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 + 6600 6300 7500 6300 7500 6900 6600 6900 6600 6300 +4 0 0 50 0 0 16 0.0000 4 165 510 6750 6675 Field\001 +-6 +6 4950 5100 6150 5700 +2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 + 4950 5100 6150 5100 6150 5700 4950 5700 4950 5100 +4 0 0 50 0 0 16 0.0000 4 165 930 5100 5475 Node.DB\001 +-6 +6 4350 5700 7050 6300 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 5550 5700 5475 5850 5625 5850 5550 5700 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4 + 4350 6300 4350 6000 7050 6000 7050 6300 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 5550 5850 5550 6300 +-6 +6 3900 6300 4800 6900 +2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 + 3900 6300 4800 6300 4800 6900 3900 6900 3900 6300 +4 0 0 50 0 0 16 0.0000 4 165 555 4050 6675 Table\001 +-6 +-6 +6 5700 3000 6900 3600 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 5700 3000 6900 3000 6900 3600 5700 3600 5700 3000 +4 0 0 50 0 0 16 0.0000 4 225 870 5850 3375 Wrapper\001 +-6 +6 900 1200 1800 1800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 900 1200 1800 1200 1800 1800 900 1800 900 1200 +4 0 0 50 0 0 16 0.0000 4 165 270 1200 1575 FS\001 +-6 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 3600 4200 3525 4350 3675 4350 3600 4200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 1800 5100 1800 4800 5550 4800 5550 5100 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 3600 4800 3600 4350 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 4200 1800 4160 1875 4200 1950 4240 1875 4200 1800 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3000 6150 2960 6225 3000 6300 3040 6225 3000 6150 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 6300 3600 6260 3675 6300 3750 6340 3675 6300 3600 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 6300 2400 6260 2475 6300 2550 6340 2475 6300 2400 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3000 4200 2960 4275 3000 4350 3040 4275 3000 4200 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 4200 3450 4160 3525 4200 3600 4240 3525 4200 3450 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3000 3450 2960 3525 3000 3600 3040 3525 3000 3450 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 3 + 1 1 1.00 60.00 120.00 + 3000 6150 3000 5400 2250 5400 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 5 + 1 1 1.00 60.00 120.00 + 3000 4350 3000 4500 1800 4500 1800 3900 2700 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 3 + 1 1 1.00 60.00 120.00 + 6300 3750 6300 3900 4500 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4200 3450 4200 3000 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3000 3450 3000 3000 +2 3 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 3000 1800 2960 1875 3000 1950 3040 1875 3000 1800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3000 1950 3000 2400 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4200 1950 4200 2400 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 6300 2550 6300 3000 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 5100 6600 4800 6600 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 6600 6600 6300 6600 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 1350 1800 1310 1875 1350 1950 1390 1875 1350 1800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 1350 1950 1350 5100 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 1350 1200 1350 900 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 3600 1200 3600 900 diff --git a/doc/python10/node.jpg b/doc/python10/node.jpg Binary files differnew file mode 100644 index 0000000..98ceb5e --- /dev/null +++ b/doc/python10/node.jpg diff --git a/doc/python10/node.svg b/doc/python10/node.svg new file mode 100644 index 0000000..66b6c8a --- /dev/null +++ b/doc/python10/node.svg @@ -0,0 +1,414 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="744.09448" + height="1052.3622" + id="svg2"> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1"> + <g + transform="matrix(0.0747012,0,0,0.0747012,94.8705,241.0275)" + id="g3392" + style="fill:none;stroke-width:0.025in"> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="1200" + id="rect3394" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="3600" + id="rect3396" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="5700" + y="1800" + id="rect3398" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="2100" + y="2400" + id="rect3400" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="3900" + y="2400" + id="rect3402" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="2400" + y="6300" + id="rect3404" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="0" + y="6300" + id="rect3406" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="1200" + y="6300" + id="rect3408" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="1050" + y="5100" + id="rect3410" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="1650,5700 1650,5700 1575,5850 1725,5850 " + id="polygon3412" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3414" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="450,6300 450,6000 2700,6000 2700,6300 " /> + <polyline + id="polyline3416" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1650,6300 1650,5850 " /> + <rect + width="1200" + height="600" + rx="0" + x="5100" + y="6300" + id="rect3418" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" /> + <rect + width="900" + height="600" + rx="0" + x="6600" + y="6300" + id="rect3420" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" /> + <rect + width="1200" + height="600" + rx="0" + x="4950" + y="5100" + id="rect3422" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" /> + <polygon + points="5550,5700 5550,5700 5475,5850 5625,5850 " + id="polygon3424" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3426" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="4350,6300 4350,6000 7050,6000 7050,6300 " /> + <polyline + id="polyline3428" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="5550,5850 5550,6300 " /> + <rect + width="900" + height="600" + rx="0" + x="3900" + y="6300" + id="rect3430" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" /> + <rect + width="1200" + height="600" + rx="0" + x="5700" + y="3000" + id="rect3432" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="900" + y="1200" + id="rect3434" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3600,4200 3600,4200 3525,4350 3675,4350 " + id="polygon3436" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3438" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1800,5100 1800,4800 5550,4800 5550,5100 " /> + <polyline + id="polyline3440" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3600,4800 3600,4350 " /> + <polygon + points="4240,1875 4200,1800 4200,1800 4160,1875 4200,1950 " + id="polygon3442" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3040,6225 3000,6150 3000,6150 2960,6225 3000,6300 " + id="polygon3444" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="6340,3675 6300,3600 6300,3600 6260,3675 6300,3750 " + id="polygon3446" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="6340,2475 6300,2400 6300,2400 6260,2475 6300,2550 " + id="polygon3448" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3040,4275 3000,4200 3000,4200 2960,4275 3000,4350 " + id="polygon3450" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="4240,3525 4200,3450 4200,3450 4160,3525 4200,3600 " + id="polygon3452" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3040,3525 3000,3450 3000,3450 2960,3525 3000,3600 " + id="polygon3454" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3456" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3000,6150 3000,5400 2369,5400 " /> + <polygon + points="2371,5370 2371,5370 2251,5400 2371,5430 " + id="polygon3458" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3460" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3000,4350 3000,4500 1800,4500 1800,3900 2580,3900 " /> + <polygon + points="2579,3930 2579,3930 2699,3900 2579,3870 " + id="polygon3462" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3464" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="6300,3750 6300,3900 4619,3900 " /> + <polygon + points="4621,3870 4621,3870 4501,3900 4621,3930 " + id="polygon3466" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3468" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4200,3450 4200,3119 " /> + <polygon + points="4230,3121 4230,3121 4200,3001 4170,3121 " + id="polygon3470" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3472" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3000,3450 3000,3119 " /> + <polygon + points="3030,3121 3030,3121 3000,3001 2970,3121 " + id="polygon3474" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polygon + points="3040,1875 3000,1800 3000,1800 2960,1875 3000,1950 " + id="polygon3476" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3478" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3000,1950 3000,2280 " /> + <polygon + points="2970,2279 2970,2279 3000,2399 3030,2279 " + id="polygon3480" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3482" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4200,1950 4200,2280 " /> + <polygon + points="4170,2279 4170,2279 4200,2399 4230,2279 " + id="polygon3484" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3486" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="6300,2550 6300,2880 " /> + <polygon + points="6270,2879 6270,2879 6300,2999 6330,2879 " + id="polygon3488" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3490" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="5100,6600 4919,6600 " /> + <polygon + points="4921,6570 4921,6570 4801,6600 4921,6630 " + id="polygon3492" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3494" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="6600,6600 6419,6600 " /> + <polygon + points="6421,6570 6421,6570 6301,6600 6421,6630 " + id="polygon3496" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polygon + points="1390,1875 1350,1800 1350,1800 1310,1875 1350,1950 " + id="polygon3498" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3500" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1350,1950 1350,4980 " /> + <polygon + points="1320,4979 1320,4979 1350,5099 1380,4979 " + id="polygon3502" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3504" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="1350,1200 1350,900 " /> + <polyline + id="polyline3506" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="3600,1200 3600,900 " /> + <text + x="2925" + y="1575" + id="text3508" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Environment</text> + <text + x="3375" + y="3975" + id="text3510" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Node</text> + <text + x="5925" + y="2175" + id="text3512" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Walker</text> + <text + x="2325" + y="2775" + id="text3514" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Builder</text> + <text + x="4125" + y="2775" + id="text3516" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Scanner</text> + <text + x="2700" + y="6675" + id="text3518" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Dir</text> + <text + x="150" + y="6675" + id="text3520" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Entry</text> + <text + x="1425" + y="6675" + id="text3522" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">File</text> + <text + x="1200" + y="5475" + id="text3524" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Node.FS</text> + <text + x="5325" + y="6675" + id="text3526" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Record</text> + <text + x="6750" + y="6675" + id="text3528" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Field</text> + <text + x="5100" + y="5475" + id="text3530" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Node.DB</text> + <text + x="4050" + y="6675" + id="text3532" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Table</text> + <text + x="5850" + y="3375" + id="text3534" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Wrapper</text> + <text + x="1200" + y="1575" + id="text3536" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">FS</text> + </g> + </g> +</svg> diff --git a/doc/python10/process.xml b/doc/python10/process.xml new file mode 100644 index 0000000..671dc14 --- /dev/null +++ b/doc/python10/process.xml @@ -0,0 +1,392 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-process" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Development Process</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + +<para> + + The &SCons; project has paid particular attention from day one to the + development process. One of the first internal documents produced was + a set of Developer's Guidelines to provide a loose framework for what + we were trying to accomplish and how we would go about accomplishing + it. These Guidelines cover things like: + +</para> + +<itemizedlist> + + <listitem> + <para> + + &SCons; will be written to Python version 2.7 (to ensure + usability by a wide install base). + + </para> + </listitem> + + <listitem> + <para> + + How &SCons; is be tested: which infrastructure modules to use, + what platforms to test on, etc. + + </para> + </listitem> + + <listitem> + <para> + + Expectations for developers (subscribe to the mailing list, + encouraged to register at SourceForge). + + </para> + </listitem> + + <listitem> + <para> + + Brief outline of how to use the change management systems (Aegis and + CVS) for &SCons; development;. + + </para> + </listitem> + +</itemizedlist> + +<para> + + Establishing these guidelines up front had two purposes: 1) + Demonstrate the seriousness of the project to anyone wondering about + joining the effort; 2) Give potential developers an idea up front as + to whether their development style would mesh with the rest of the + project. + +</para> + +<section> + <title>Aegis</title> + + <para> + + One of the most important aspects of the &SCons; development process + is the use of Peter Miller's Aegis change management system. I + had been using Aegis for personal projects for several years, and + found its development methodology vastly improved the quality of my + programming. I was consequently committed to using it for &SCons; + development. + + </para> + + <para> + + Aegis provides a number of things, including: + + </para> + + <itemizedlist> + + <listitem> + <para> + + A flexible source code control and branching model. + + </para> + </listitem> + + <listitem> + <para> + + A defined process with separate development, review and + integration steps. + + </para> + </listitem> + + <listitem> + <para> + + A distributed development model based on distribution of atomic + change sets. + + </para> + </listitem> + + </itemizedlist> + + <para> + + The single most important reason for using Aegis, however, is its + management of automated tests as part of the development process. + + </para> + +</section> + +<section> + <title>Testing, Testing, Testing</title> + + <para> + + The &SCons; project has made extensive use of automated tests from day + one, taking inspiration mostly from Aegis, partly from the eXtreme + Programming model, and with a little home-brew scripting for glue. + + </para> + + <section> + <title>Testing Criteria</title> + + <para> + + The underlying criteria for testing changes to the &SCons; code + are taken from Aegis: + + </para> + + <itemizedlist> + + <listitem> + <para> + + Every change must have one or more new or modified tests + checked in along with the code. + + </para> + </listitem> + + <listitem> + <para> + + The new code being checked in must pass all of the new and/or + modified tests. + + </para> + </listitem> + + <listitem> + <para> + + The <emphasis>old</emphasis>, already checked-in code in must + <emphasis>fail</emphasis> all of the new and/or modified + tests. + + </para> + </listitem> + + <listitem> + <para> + + The new code being checked in must pass all unmodified, + already checked-in tests. + + </para> + </listitem> + + </itemizedlist> + + <para> + + In practice, these restrictions can be overridden as necessary--for + example, when changing comments or documentation. + + </para> + + <para> + + The criterion that surprises many people is having the old code + fail the tests in the change. This makes sure that the new tests + or modified tests really do exercise the bug fix or feature being + added by the change. + + </para> + + <para> + + Together, these criteria ensure that every newly checked-in + version &SCons; conforms to defined behavior, as defined by + the tests. Whenever a bug is found, its fix is checked in with + a new or modified test that guarantees the bug will not recur + in the future. We have already built up a regression test base + of almost 90 tests that cover the vast majority of &SCons;' + functionality. + + </para> + + </section> + + <section> + <title>Testing Infrastructure</title> + + <para> + + Testing standards are no good if they're too much of a burden for + developers, who will at best work around or ignore the testing + requirements, or at worst stop contributing code and go join a + project that's more fun. To this end, good testing infrastructure + that makes it easy to write tests is crucial. + + </para> + + <para> + + &SCons; development uses two development methodologies, one for + the individual modules in the build engine, and the other for + end-to-end tests of the &SCons; script. + + </para> + + <para> + + For the build engine modules, we use PyUnit. Every change to a + build engine module must have a change to its corresponding unit + tests, which live side-by-side in a separate file that imports + module. As we build up a large body of unit tests, this ensures + that the build engine will perform correctly whenever someone uses + it in some application other than the &SCons; script itself. + + </para> + + <para> + + For end-to-end script tests, we have developed two modules to make + writing tests easy. The first, <filename>TestCmd.py</filename>, + is a generic module for + testing commands or scripts (in any language, not just Python). + + The second module, <filename>TestScons.py</filename>, + is a subclass of the generic + <filename>TestCmd.py</filename> module. + <filename>TestScons.py</filename> + takes care of initialization and + displaying error conditions + specific to testing &SCons;. + + </para> + + <para> + + In practice, simple tests only + need to initialize a test object, use the object to write some + input files, run &SCons;, and then check whatever criteria + determine whether the test passed or failed. A complete test of + the &Program; method, for example, looks like this: + + </para> + + <programlisting> + test = TestSCons.TestSCons() + + test.write('SConstruct', + """env = Environment() + env.Program(target = 'foo', source = 'foo.c') + """) + + test.write('foo.c', + """ + int + main(int argc, char *argv[]) + { + argv[argc++] = "-"; /* dummy use of args */ + printf("foo.c successfully compiled\\n"); + exit (0); + } + """) + + test.run(arguments = 'foo') # runs SCons + + test.run(program = test.workpath('foo')) + + test.fail_test(test.stdout() != "foo.c successfully compiled\n") + + test.pass_test() + </programlisting> + + </section> + +</section> + +<section> + <title>SourceForge</title> + + <para> + + Registration of the &SCons; project was approved at SourceForge on + 29 June 2001. Within a week, the initial code base was checked in, + mailing lists were created, and the web site was set up. We started + making use of the task-list manager to track what we had to finish + for initial release. + + </para> + + <para> + + The obvious complication was how to use + structured testing methodology of Aegis when SourceForge uses + CVS for source control. Not using the SourceForge CVS tree would + have had two significant disadvantages: one, missing out on the + archiving and central location in the event of disaster; two, people + coming to the SourceForge project page wouldn't be able to browse + the source. The latter was particularly important in + the early stages of development, in order to avoid any impression + that this was Yet Another Project that starts with a bang and then + dwindles as the initial enthusiasm starts to wear off. + + </para> + + <para> + + The solution was to use the SourceForge CVS repository for read-only + access to the source. &SCons; developers are welcome to use CVS for + their development, but the changes are <emphasis>not</emphasis> + committed to the SourceForge repository. Instead, patches are sent + to the integrator for processing through Aegis. When the change + has been integrated into the Aegis repository, a home-brew + script translates the Aegis change into a virtual shell script + of commands that copy the necessary files from Aegis and check them + in to CVS at SourceForge. + + </para> + + <para> + + (In practice, write access is not actually disabled for registered + developers, but if they do make any changes directly at SourceForge, + they can be overwritten at the next Aegis update.) + + </para> + +</section> + +</section> diff --git a/doc/python10/scanner.fig b/doc/python10/scanner.fig new file mode 100644 index 0000000..01488e8 --- /dev/null +++ b/doc/python10/scanner.fig @@ -0,0 +1,57 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 2700 5400 4500 6000 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 5400 4500 5400 4500 6000 2700 6000 2700 5400 +4 0 0 50 0 0 16 0.0000 4 225 1245 3000 5775 ProgScanner\001 +-6 +6 2700 4200 4500 4800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 4200 4500 4200 4500 4800 2700 4800 2700 4200 +4 0 0 50 0 0 16 0.0000 4 165 780 3225 4575 Scanner\001 +-6 +6 2700 3000 4500 3600 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2700 3000 4500 3000 4500 3600 2700 3600 2700 3000 +4 0 0 50 0 0 16 0.0000 4 165 1290 2925 3375 Environment\001 +-6 +6 5100 5400 6900 6000 +2 2 1 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 5100 5400 6900 5400 6900 6000 5100 6000 5100 5400 +4 0 0 50 0 0 16 0.0000 4 165 1200 5400 5775 JavaScanner\001 +-6 +6 300 5400 2100 6000 +2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 300 5400 2100 5400 2100 6000 300 6000 300 5400 +4 0 0 50 0 0 16 0.0000 4 165 945 750 5775 CScanner\001 +-6 +6 600 3300 1500 3900 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 600 3300 1500 3300 1500 3900 600 3900 600 3300 +4 0 0 50 0 0 16 0.0000 4 165 525 825 3675 Node\001 +-6 +2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4 + 1200 5400 1200 5100 6000 5100 6000 5400 +2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 3600 4950 3600 5400 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 3600 4800 3525 4950 3675 4950 3600 4800 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 3600 3600 3560 3675 3600 3750 3640 3675 3600 3600 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 1050 3900 1010 3975 1050 4050 1090 3975 1050 3900 +2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 1050 4050 1050 4500 2700 4500 +2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 3750 3600 4200 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 3600 3000 3600 2700 diff --git a/doc/python10/scanner.jpg b/doc/python10/scanner.jpg Binary files differnew file mode 100644 index 0000000..08e5dcb --- /dev/null +++ b/doc/python10/scanner.jpg diff --git a/doc/python10/scanner.svg b/doc/python10/scanner.svg new file mode 100644 index 0000000..6fcb0e3 --- /dev/null +++ b/doc/python10/scanner.svg @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="744.09448" + height="1052.3622" + id="svg2"> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1"> + <g + transform="matrix(0.07472826,0,0,0.07472826,105.97826,207.29425)" + id="g3657" + style="fill:none;stroke-width:0.025in"> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="5400" + id="rect3659" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="4200" + id="rect3661" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="2700" + y="3000" + id="rect3663" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1800" + height="600" + rx="0" + x="5100" + y="5400" + id="rect3665" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" /> + <rect + width="1800" + height="600" + rx="0" + x="300" + y="5400" + id="rect3667" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="900" + height="600" + rx="0" + x="600" + y="3300" + id="rect3669" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3671" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1200,5400 1200,5100 6000,5100 6000,5400 " /> + <polyline + id="polyline3673" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3600,4950 3600,5400 " /> + <polygon + points="3600,4800 3600,4800 3525,4950 3675,4950 " + id="polygon3675" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="3640,3675 3600,3600 3600,3600 3560,3675 3600,3750 " + id="polygon3677" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="1090,3975 1050,3900 1050,3900 1010,3975 1050,4050 " + id="polygon3679" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3681" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="1050,4050 1050,4500 2580,4500 " /> + <polygon + points="2579,4530 2579,4530 2699,4500 2579,4470 " + id="polygon3683" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3685" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3600,3750 3600,4080 " /> + <polygon + points="3570,4079 3570,4079 3600,4199 3630,4079 " + id="polygon3687" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3689" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="3600,3000 3600,2700 " /> + <text + x="3000" + y="5775" + id="text3691" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">ProgScanner</text> + <text + x="3225" + y="4575" + id="text3693" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Scanner</text> + <text + x="2925" + y="3375" + id="text3695" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Environment</text> + <text + x="5400" + y="5775" + id="text3697" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">JavaScanner</text> + <text + x="750" + y="5775" + id="text3699" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">CScanner</text> + <text + x="825" + y="3675" + id="text3701" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;font-family:Times">Node</text> + </g> + </g> +</svg> diff --git a/doc/python10/sig.fig b/doc/python10/sig.fig new file mode 100644 index 0000000..823d59e --- /dev/null +++ b/doc/python10/sig.fig @@ -0,0 +1,44 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1200 3000 2700 3600 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1200 3000 2700 3000 2700 3600 1200 3600 1200 3000 +4 1 0 50 0 0 16 0.0000 4 165 1125 1950 3375 Taskmaster\001 +-6 +6 3300 4200 4500 4800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3300 4200 4500 4200 4500 4800 3300 4800 3300 4200 +4 1 0 50 0 0 16 0.0000 4 165 525 3900 4575 MD5\001 +-6 +6 5100 4200 6300 4800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 5100 4200 6300 4200 6300 4800 5100 4800 5100 4200 +4 1 0 50 0 0 16 0.0000 4 225 780 5700 4575 TStamp\001 +-6 +6 4200 3000 5400 3600 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 4200 3000 5400 3000 5400 3600 4200 3600 4200 3000 +4 1 0 50 0 0 16 0.0000 4 225 330 4800 3375 Sig\001 +-6 +2 3 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 + 2700 3300 2775 3340 2850 3300 2775 3260 2700 3300 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 4800 3600 4725 3750 4875 3750 4800 3600 +2 1 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 4 + 3900 4200 3900 3900 5700 3900 5700 4200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 4800 3750 4800 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2850 3300 4200 3300 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 1950 3000 1950 2700 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 + 4800 3000 4800 2700 diff --git a/doc/python10/sig.jpg b/doc/python10/sig.jpg Binary files differnew file mode 100644 index 0000000..0c7e0df --- /dev/null +++ b/doc/python10/sig.jpg diff --git a/doc/python10/sig.svg b/doc/python10/sig.svg new file mode 100644 index 0000000..09e2719 --- /dev/null +++ b/doc/python10/sig.svg @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="744.09448" + height="1052.3622" + id="svg2"> + <defs + id="defs4" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1"> + <g + transform="matrix(0.07552694,0,0,0.07552694,91.773975,249.13616)" + id="g3772" + style="fill:none;stroke-width:0.025in"> + <rect + width="1500" + height="600" + rx="0" + x="1200" + y="3000" + id="rect3774" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="3300" + y="4200" + id="rect3776" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="5100" + y="4200" + id="rect3778" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <rect + width="1200" + height="600" + rx="0" + x="4200" + y="3000" + id="rect3780" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="2775,3260 2700,3300 2700,3300 2775,3340 2850,3300 " + id="polygon3782" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polygon + points="4800,3600 4800,3600 4725,3750 4875,3750 " + id="polygon3784" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" /> + <polyline + id="polyline3786" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="3900,4200 3900,3900 5700,3900 5700,4200 " /> + <polyline + id="polyline3788" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="4800,3750 4800,3900 " /> + <polyline + id="polyline3790" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter" + points="2850,3300 4080,3300 " /> + <polygon + points="4079,3330 4079,3330 4199,3300 4079,3270 " + id="polygon3792" + style="fill:#000000;stroke:#000000;stroke-width:7;stroke-miterlimit:8" /> + <polyline + id="polyline3794" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="1950,3000 1950,2700 " /> + <polyline + id="polyline3796" + style="stroke:#000000;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:40, 40" + points="4800,3000 4800,2700 " /> + <text + x="1950" + y="3375" + id="text3798" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Taskmaster</text> + <text + x="3900" + y="4575" + id="text3800" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">MD5</text> + <text + x="5700" + y="4575" + id="text3802" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">TStamp</text> + <text + x="4800" + y="3375" + id="text3804" + xml:space="preserve" + style="font-size:192px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;font-family:Times">Sig</text> + </g> + </g> +</svg> diff --git a/doc/python10/summary.xml b/doc/python10/summary.xml new file mode 100644 index 0000000..e3eee53 --- /dev/null +++ b/doc/python10/summary.xml @@ -0,0 +1,52 @@ +<?xml version='1.0'?> +<!DOCTYPE sconsdoc [ + <!ENTITY % scons SYSTEM "../scons.mod"> + %scons; +]> + +<section id="sect-summary" + xmlns="http://www.scons.org/dbxsd/v1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> +<title>Summary</title> + +<!-- + + Copyright (c) 2001 - 2014 The SCons Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--> + + <para> + + This paper has introduced &SCons;, a next-generation build tool + with a modular, embeddable architecture and a direct Python + interface. &SCons; has a global view of the dependencies in a source + tree, uses MD5 signatures to decide if derived files are out of date, + and automatically scans files for dependencies, all of which make &SCons; + builds exceptionally reliable. The &SCons; development methodology has + been described, notable for its emphasis on automated regression + testing to ensure a robust and reliable tool from day one. Several + future directions for &SCons; have also been discussed. + + </para> + +</section> |
