diff options
Diffstat (limited to 'bin')
-rw-r--r-- | bin/docdiff | 4 | ||||
-rw-r--r-- | bin/docrun | 4 | ||||
-rw-r--r-- | bin/docupdate | 4 | ||||
-rw-r--r-- | bin/import-test.py | 4 | ||||
-rw-r--r-- | bin/linecount.py | 4 | ||||
-rw-r--r-- | bin/restore.sh | 26 | ||||
-rw-r--r-- | bin/scons-doc.py (renamed from bin/sconsoutput.py) | 151 | ||||
-rw-r--r-- | bin/scons_dev_master.py | 1 |
8 files changed, 120 insertions, 78 deletions
diff --git a/bin/docdiff b/bin/docdiff index c565a04..c7adb05 100644 --- a/bin/docdiff +++ b/bin/docdiff @@ -4,13 +4,13 @@ if test $# -eq 0; then for f in doc/user/*.in; do xml=doc/user/`basename $f .in`.xml echo $f: - python bin/sconsoutput.py $f | diff $DIFFFLAGS $xml - + python bin/scons-doc.py $f | diff $DIFFFLAGS $xml - done else for a in $*; do f=doc/user/$a.in xml=doc/user/$a.xml echo $f: - python bin/sconsoutput.py $f | diff $DIFFFLAGS $xml - + python bin/scons-doc.py $f | diff $DIFFFLAGS $xml - done fi @@ -4,13 +4,13 @@ if test $# -eq 0; then for f in doc/user/*.in; do xml=doc/user/`basename $f .in`.xml echo $f: - python bin/sconsoutput.py $f + python bin/scons-doc.py $f done else for a in $*; do f=doc/user/$a.in xml=doc/user/$a.xml echo $f: - python bin/sconsoutput.py $f + python bin/scons-doc.py $f done fi diff --git a/bin/docupdate b/bin/docupdate index 0e1631b..cd9b532 100644 --- a/bin/docupdate +++ b/bin/docupdate @@ -4,13 +4,13 @@ if test $# -eq 0; then for f in doc/user/*.in; do xml=doc/user/`basename $f .in`.xml echo $f: - python bin/sconsoutput.py $f > $xml + python bin/scons-doc.py $f > $xml done else for a in $*; do f=doc/user/$a.in xml=doc/user/$a.xml echo $f: - python bin/sconsoutput.py $f > $xml + python bin/scons-doc.py $f > $xml done fi diff --git a/bin/import-test.py b/bin/import-test.py index 473a7ed..e7d4db4 100644 --- a/bin/import-test.py +++ b/bin/import-test.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation +# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation # # tree2test.py - turn a directory tree into TestSCons code # @@ -25,7 +25,7 @@ # """ triple-quotes will need to have their contents edited by hand. # -__revision__ = "bin/import-test.py 4577 2009/12/27 19:44:43 scons" +__revision__ = "bin/import-test.py 4629 2010/01/17 22:23:21 scons" import os.path import sys diff --git a/bin/linecount.py b/bin/linecount.py index 359f642..aa0a8aa 100644 --- a/bin/linecount.py +++ b/bin/linecount.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation +# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation # # Count statistics about SCons test and source files. This must be run # against a fully-populated tree (for example, one that's been freshly @@ -23,7 +23,7 @@ # interesting one for most purposes. # -__revision__ = "bin/linecount.py 4577 2009/12/27 19:44:43 scons" +__revision__ = "bin/linecount.py 4629 2010/01/17 22:23:21 scons" import os.path import string diff --git a/bin/restore.sh b/bin/restore.sh index a5da9e8..0eec02f 100644 --- a/bin/restore.sh +++ b/bin/restore.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh # -# Simple hack script to restore __revision__, __COPYRIGHT_, 1.2.0.d20091224 +# Simple hack script to restore __revision__, __COPYRIGHT_, 1.2.0.d20100117 # and other similar variables to what gets checked in to source. This # comes in handy when people send in diffs based on the released source. # @@ -22,9 +22,9 @@ header() { for i in `find $DIRS -name '*.py'`; do header $i ed $i <<EOF -g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation/p +g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation/p w -/^__revision__ = /s/= .*/= "bin/restore.sh 4577 2009/12/27 19:44:43 scons"/p +/^__revision__ = /s/= .*/= "bin/restore.sh 4629 2010/01/17 22:23:21 scons"/p w q EOF @@ -33,9 +33,9 @@ done for i in `find $DIRS -name 'scons.bat'`; do header $i ed $i <<EOF -g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation/p +g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation/p w -/^@REM src\/script\/scons.bat/s/@REM .* knight/@REM bin/restore.sh 4577 2009/12/27 19:44:43 scons/p +/^@REM src\/script\/scons.bat/s/@REM .* knight/@REM bin/restore.sh 4629 2010/01/17 22:23:21 scons/p w q EOF @@ -44,13 +44,13 @@ done for i in `find $DIRS -name '__init__.py' -o -name 'scons.py' -o -name 'sconsign.py'`; do header $i ed $i <<EOF -/^__version__ = /s/= .*/= "1.2.0.d20091224"/p +/^__version__ = /s/= .*/= "1.2.0.d20100117"/p w -/^__build__ = /s/= .*/= "r4577[MODIFIED]"/p +/^__build__ = /s/= .*/= "r4629"/p w /^__buildsys__ = /s/= .*/= "scons-dev"/p w -/^__date__ = /s/= .*/= "2009/12/27 19:44:43"/p +/^__date__ = /s/= .*/= "2010/01/17 22:23:21"/p w /^__developer__ = /s/= .*/= "scons"/p w @@ -61,7 +61,7 @@ done for i in `find $DIRS -name 'setup.py'`; do header $i ed $i <<EOF -/^ *version = /s/= .*/= "1.2.0.d20091224",/p +/^ *version = /s/= .*/= "1.2.0.d20100117",/p w q EOF @@ -70,11 +70,11 @@ done for i in `find $DIRS -name '*.txt'`; do header $i ed $i <<EOF -g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation/p +g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation/p w -/# [^ ]* 0.96.[CD][0-9]* [0-9\/]* [0-9:]* knight$/s/.*/# bin/restore.sh 4577 2009/12/27 19:44:43 scons/p +/# [^ ]* 0.96.[CD][0-9]* [0-9\/]* [0-9:]* knight$/s/.*/# bin/restore.sh 4629 2010/01/17 22:23:21 scons/p w -/Version [0-9][0-9]*\.[0-9][0-9]*/s//Version 1.2.0.d20091224/p +/Version [0-9][0-9]*\.[0-9][0-9]*/s//Version 1.2.0.d20100117/p w q EOF @@ -83,7 +83,7 @@ done for i in `find $DIRS -name '*.xml'`; do header $i ed $i <<EOF -g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation/p +g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation/p w q EOF diff --git a/bin/sconsoutput.py b/bin/scons-doc.py index f99ec5a..e385b08 100644 --- a/bin/sconsoutput.py +++ b/bin/scons-doc.py @@ -1,7 +1,6 @@ -#!/usr/bin/env python2 - +#!/usr/bin/env python # -# Copyright (c) 2003 Steven Knight +# Copyright (c) 2010 The SCons Foundation # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the @@ -21,14 +20,11 @@ # 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. -# - -__revision__ = "/home/scons/sconsoutput/branch.0/baseline/src/sconsoutput.py 0.4.D001 2004/11/27 18:44:37 knight" # -# sconsoutput.py - an SGML preprocessor for capturing SCons output -# and inserting it into examples in our DocBook -# documentation +# scons-doc.py - an SGML preprocessor for capturing SCons output +# and inserting it into examples in our DocBook +# documentation # # This script looks for some SGML tags that describe SCons example # configurations and commands to execute in those configurations, and @@ -93,8 +89,8 @@ __revision__ = "/home/scons/sconsoutput/branch.0/baseline/src/sconsoutput.py 0.4 # can see if there are any problems executing the command. # +import optparse import os -import os.path import re import sgmllib import string @@ -426,7 +422,12 @@ def command_scons(args, c, test, dict): os.environ[key] = val test.run(interpreter = sys.executable, program = scons_py, - arguments = '-f - ' + string.join(args), + # We use ToolSurrogates to capture win32 output by "building" + # examples using a fake win32 tool chain. Suppress the + # warnings that come from the new revamped VS support so + # we can build doc on (Linux) systems that don't have + # Visual C installed. + arguments = '--warn=no-visual-c-missing -f - ' + string.join(args), chdir = test.workpath('WORK'), stdin = Stdin % dict) os.environ.update(save_vals) @@ -489,11 +490,15 @@ def command_ls(args, c, test, dict): else: return ls(test.workpath('WORK')) +def command_sleep(args, c, test, dict): + time.sleep(int(args[0])) + CommandDict = { 'scons' : command_scons, 'touch' : command_touch, 'edit' : command_edit, 'ls' : command_ls, + 'sleep' : command_sleep, } def ExecuteCommand(args, c, t, dict): @@ -513,10 +518,11 @@ class MySGML(sgmllib.SGMLParser): Note that this doesn't work with the 1.5.2 sgmllib module, because that didn't have the ability to work with ENTITY declarations. """ - def __init__(self): + def __init__(self, outfp): sgmllib.SGMLParser.__init__(self) self.examples = {} self.afunclist = [] + self.outfp = outfp # The first set of methods here essentially implement pass-through # handling of most of the stuff in an SGML file. We're really @@ -527,21 +533,21 @@ class MySGML(sgmllib.SGMLParser): try: f = self.afunclist[-1] except IndexError: - sys.stdout.write(data) + self.outfp.write(data) else: f(data) def handle_comment(self, data): - sys.stdout.write('<!--' + data + '-->') + self.outfp.write('<!--' + data + '-->') def handle_decl(self, data): - sys.stdout.write('<!' + data + '>') + self.outfp.write('<!' + data + '>') def unknown_starttag(self, tag, attrs): try: f = self.example.afunc except AttributeError: - f = sys.stdout.write + f = self.outfp.write if not attrs: f('<' + tag + '>') else: @@ -551,13 +557,13 @@ class MySGML(sgmllib.SGMLParser): f('>') def unknown_endtag(self, tag): - sys.stdout.write('</' + tag + '>') + self.outfp.write('</' + tag + '>') def unknown_entityref(self, ref): - sys.stdout.write('&' + ref + ';') + self.outfp.write('&' + ref + ';') def unknown_charref(self, ref): - sys.stdout.write('&#' + ref + ';') + self.outfp.write('&#' + ref + ';') # Here is where the heavy lifting begins. The following methods # handle the begin-end tags of our SCons examples. @@ -581,7 +587,7 @@ class MySGML(sgmllib.SGMLParser): e = self.e files = filter(lambda f: f.printme, e.files) if files: - sys.stdout.write('<programlisting>') + self.outfp.write('<programlisting>') for f in files: if f.printme: i = len(f.data) - 1 @@ -590,10 +596,10 @@ class MySGML(sgmllib.SGMLParser): output = string.replace(f.data[:i+1], '__ROOT__', '') output = string.replace(output, '<', '<') output = string.replace(output, '>', '>') - sys.stdout.write(output) + self.outfp.write(output) if e.data and e.data[0] == '\n': e.data = e.data[1:] - sys.stdout.write(e.data + '</programlisting>') + self.outfp.write(e.data + '</programlisting>') delattr(self, 'e') self.afunclist = self.afunclist[:-1] @@ -664,8 +670,8 @@ class MySGML(sgmllib.SGMLParser): def end_scons_example_file(self): f = self.f - sys.stdout.write('<programlisting>') - sys.stdout.write(f.data + '</programlisting>') + self.outfp.write('<programlisting>') + self.outfp.write(f.data + '</programlisting>') delattr(self, 'f') def start_scons_output(self, attrs): @@ -731,13 +737,32 @@ class MySGML(sgmllib.SGMLParser): while o.prefix[i-1] != '\n': i = i - 1 - sys.stdout.write('<screen>' + o.prefix[:i]) + self.outfp.write('<screen>' + o.prefix[:i]) p = o.prefix[i:] + # Regular expressions for making the doc output consistent, + # regardless of reported addresses or Python version. + + # Massage addresses in object repr strings to a constant. + address_re = re.compile(r' at 0x[0-9a-fA-F]*\>') + + # Massage file names in stack traces (sometimes reported as absolute + # paths) to a consistent relative path. + engine_re = re.compile(r' File ".*/src/engine/SCons/') + + # Python 2.5 changed the stack trace when the module is read + # from standard input from read "... line 7, in ?" to + # "... line 7, in <module>". + file_re = re.compile(r'^( *File ".*", line \d+, in) \?$', re.M) + + # Python 2.6 made UserList a new-style class, which changes the + # AttributeError message generated by our NodeList subclass. + nodelist_re = re.compile(r'(AttributeError:) NodeList instance (has no attribute \S+)') + for c in o.commandlist: - sys.stdout.write(p + Prompt[o.os]) + self.outfp.write(p + Prompt[o.os]) d = string.replace(c.data, '__ROOT__', '') - sys.stdout.write('<userinput>' + d + '</userinput>\n') + self.outfp.write('<userinput>' + d + '</userinput>\n') e = string.replace(c.data, '__ROOT__', t.workpath('ROOT')) args = string.split(e) @@ -748,14 +773,17 @@ class MySGML(sgmllib.SGMLParser): elif lines: content = string.join(lines, '\n' + p) if content: - content = re.sub(' at 0x[0-9a-fA-F]*\>', ' at 0x700000>', content) + content = address_re.sub(r' at 0x700000>', content) + content = engine_re.sub(r' File "bootstrap/src/engine/SCons/', content) + content = file_re.sub(r'\1 <module>', content) + content = nodelist_re.sub(r"\1 'NodeList' object \2", content) content = string.replace(content, '<', '<') content = string.replace(content, '>', '>') - sys.stdout.write(p + content + '\n') + self.outfp.write(p + content + '\n') if o.data[0] == '\n': o.data = o.data[1:] - sys.stdout.write(o.data + '</screen>') + self.outfp.write(o.data + '</screen>') delattr(self, 'o') self.afunclist = self.afunclist[:-1] @@ -786,39 +814,52 @@ class MySGML(sgmllib.SGMLParser): def end_sconstruct(self): f = self.f - sys.stdout.write('<programlisting>') + self.outfp.write('<programlisting>') output = string.replace(f.data, '__ROOT__', '') - sys.stdout.write(output + '</programlisting>') + self.outfp.write(output + '</programlisting>') delattr(self, 'f') self.afunclist = self.afunclist[:-1] -# The main portion of the program itself, short and simple. -try: - file = sys.argv[1] -except IndexError: - file = '-' +def process(filename): + if filename == '-': + f = sys.stdin + else: + try: + f = open(filename, 'r') + except EnvironmentError, e: + sys.stderr.write('%s: %s\n' % (filename, msg)) + return 1 -if file == '-': - f = sys.stdin -else: - try: - f = open(file, 'r') - except IOError, msg: - print file, ":", msg - sys.exit(1) + data = f.read() + if f is not sys.stdin: + f.close() -data = f.read() -if f is not sys.stdin: - f.close() + if data.startswith('<?xml '): + first_line, data = data.split('\n', 1) + sys.stdout.write(first_line + '\n') + + x = MySGML(sys.stdout) + for c in data: + x.feed(c) + x.close() + + return 0 + +def main(argv=None): + if argv is None: + argv = sys.argv + + parser = optparse.OptionParser() + opts, args = parser.parse_args(argv[1:]) + + if not args: + args = ['-'] -if data.startswith('<?xml '): - first_line, data = data.split('\n', 1) - sys.stdout.write(first_line + '\n') + for arg in args: + process(arg) -x = MySGML() -for c in data: - x.feed(c) -x.close() +if __name__ == "__main__": + sys.exit(main()) # Local Variables: # tab-width:4 diff --git a/bin/scons_dev_master.py b/bin/scons_dev_master.py index 5e8df41..4fa810d 100644 --- a/bin/scons_dev_master.py +++ b/bin/scons_dev_master.py @@ -79,6 +79,7 @@ TESTING_PACKAGES = [ 'sun-java6-jdk', 'swig', 'texlive-base-bin', + 'texlive-extra-utils', 'texlive-latex-base', 'texlive-latex-extra', 'zip', |