Fix DVIPDF tests, refactor various TeX Tool modules.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 16 Dec 2005 12:16:00 +0000 (12:16 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 16 Dec 2005 12:16:00 +0000 (12:16 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1403 fdb21ef1-2011-0410-befe-b5e4ea1792b1

16 files changed:
src/engine/MANIFEST-xml.in
src/engine/MANIFEST.in
src/engine/SCons/Defaults.py
src/engine/SCons/Defaults.xml
src/engine/SCons/Tool/dvi.py [new file with mode: 0644]
src/engine/SCons/Tool/dvi.xml [new file with mode: 0644]
src/engine/SCons/Tool/dvipdf.py
src/engine/SCons/Tool/dvips.py
src/engine/SCons/Tool/gs.py
src/engine/SCons/Tool/latex.py
src/engine/SCons/Tool/pdf.py [new file with mode: 0644]
src/engine/SCons/Tool/pdf.xml [new file with mode: 0644]
src/engine/SCons/Tool/pdflatex.py
src/engine/SCons/Tool/pdftex.py
src/engine/SCons/Tool/tex.py
test/import.py

index e360a1af4b0bdf393c95cdacf9356387a9ad8dec..c43f21090c36b3879596dbfa153a7e0b5f673d33 100644 (file)
@@ -21,6 +21,7 @@ SCons/Tool/CVS.xml
 SCons/Tool/c++.xml
 SCons/Tool/default.xml
 SCons/Tool/dmd.xml
+SCons/Tool/dvi.xml
 SCons/Tool/dvipdf.xml
 SCons/Tool/dvips.xml
 SCons/Tool/f77.xml
@@ -62,6 +63,7 @@ SCons/Tool/msvs.xml
 SCons/Tool/mwcc.xml
 SCons/Tool/mwld.xml
 SCons/Tool/nasm.xml
+SCons/Tool/pdf.xml
 SCons/Tool/pdflatex.xml
 SCons/Tool/pdftex.xml
 SCons/Tool/Perforce.xml
index 3f33b58b68eb623fd66553ef67da176c95aee2be..9d6c9721c54a887c86723a426e6969600a01efc7 100644 (file)
@@ -70,6 +70,7 @@ SCons/Tool/cvf.py
 SCons/Tool/CVS.py
 SCons/Tool/dmd.py
 SCons/Tool/default.py
+SCons/Tool/dvi.py
 SCons/Tool/dvipdf.py
 SCons/Tool/dvips.py
 SCons/Tool/f77.py
@@ -111,6 +112,7 @@ SCons/Tool/msvs.py
 SCons/Tool/mwcc.py
 SCons/Tool/mwld.py
 SCons/Tool/nasm.py
+SCons/Tool/pdf.py
 SCons/Tool/pdflatex.py
 SCons/Tool/pdftex.py
 SCons/Tool/Perforce.py
index e51c870451622cf3b65045158a7207eb3a1434ac..6b9b11505d61ed9955e6b5a2129ce48c2c177751 100644 (file)
@@ -124,25 +124,6 @@ ShLinkAction = SCons.Action.Action("$SHLINKCOM", "$SHLINKCOMSTR")
 
 LdModuleLinkAction = SCons.Action.Action("$LDMODULECOM", "$LDMODULECOMSTR")
 
-def DVI():
-    """Common function to generate a DVI file Builder."""
-    return SCons.Builder.Builder(action = {},
-                                 source_scanner = LaTeXScan,
-                                 # The suffix is not configurable via a
-                                 # construction variable like $DVISUFFIX
-                                 # because the output file name is
-                                 # hard-coded within TeX.
-                                 suffix = '.dvi',
-                                 emitter = {})
-
-def PDF():
-    """A function for generating the PDF Builder."""
-    return SCons.Builder.Builder(action = { },
-                                 source_scanner = LaTeXScan,
-                                 prefix = '$PDFPREFIX',
-                                 suffix = '$PDFSUFFIX',
-                                 emitter = {})
-
 # Common tasks that we allow users to perform in platform-independent
 # ways by creating ActionFactory instances.
 ActionFactory = SCons.Action.ActionFactory
@@ -357,10 +338,6 @@ ConstructionEnvironment = {
     'DSUFFIXES'     : SCons.Tool.DSuffixes,
     'IDLSUFFIXES'   : SCons.Tool.IDLSuffixes,
     'LATEXSUFFIXES' : SCons.Tool.LaTeXSuffixes,
-    'PDFPREFIX'     : '',
-    'PDFSUFFIX'     : '.pdf',
-    'PSPREFIX'      : '',
-    'PSSUFFIX'      : '.ps',
     'ENV'           : {},
     'INSTALL'       : copyFunc,
     '_concat'       : _concat,
index 84dfe589bab195465131f8edd763c1f508b12617..fea7c0444d2dd7eb16e8657a0028cf2f5e1cceb7 100644 (file)
@@ -4,78 +4,6 @@ __COPYRIGHT__
 This file is processed by the bin/SConsDoc.py module.
 See its __doc__ string for a discussion of the format.
 -->
-<builder name="DVI">
-<summary>
-Builds a <filename>.dvi</filename> file
-from a <filename>.tex</filename>,
-<filename>.ltx</filename> or <filename>.latex</filename> input file.
-If the source file suffix is <filename>.tex</filename>,
-&scons;
-will examine the contents of the file;
-if the string
-<literal>\documentclass</literal>
-or
-<literal>\documentstyle</literal>
-is found, the file is assumed to be a LaTeX file and
-the target is built by invoking the &cv-LATEXCOM; command line;
-otherwise, the &cv-TEXCOM; command line is used.
-If the file is a LaTeX file,
-the
-&b-DVI;
-builder method will also examine the contents
-of the
-<filename>.aux</filename>
-file and invoke the &cv-BIBTEX; command line
-if the string
-<literal>bibdata</literal>
-is found,
-start &cv-MAKEINDEX; to generate an index if a
-<filename>.ind</filename>
-file is found
-and will examine the contents
-<filename>.log</filename>
-file and re-run the &cv-LATEXCOM; command
-if the log file says it is necessary.
-
-The suffix <filename>.dvi</filename>
-(hard-coded within TeX itself)
-is automatically added to the target
-if it is not already present.
-Examples:
-
-<example>
-# builds from aaa.tex
-env.DVI(target = 'aaa.dvi', source = 'aaa.tex')
-# builds bbb.dvi
-env.DVI(target = 'bbb', source = 'bbb.ltx')
-# builds from ccc.latex
-env.DVI(target = 'ccc.dvi', source = 'ccc.latex')
-</example>
-</summary>
-</builder>
-
-<builder name="PDF">
-<summary>
-Builds a <filename>.pdf</filename> file
-from a <filename>.dvi</filename> input file
-(or, by extension, a <filename>.tex</filename>,
-<filename>.ltx</filename>,
-or
-<filename>.latex</filename> input file).
-The suffix specified by the &cv-PDFSUFFIX; construction variable
-(<filename>.pdf</filename> by default)
-is added automatically to the target
-if it is not already present.  Example:
-
-<example>
-# builds from aaa.tex
-env.PDF(target = 'aaa.pdf', source = 'aaa.tex')
-# builds bbb.pdf from bbb.dvi
-env.PDF(target = 'bbb', source = 'bbb.dvi')
-</example>
-</summary>
-</builder>
-
 <cvar name ="_concat">
 <summary>
 A function used to produce variables like &cv-_CPPINCFLAGS;. It takes
@@ -536,18 +464,6 @@ all the libraries in this list.
 </summary>
 </cvar>
 
-<cvar name="PDFPREFIX">
-<summary>
-The prefix used for PDF file names.
-</summary>
-</cvar>
-
-<cvar name="PDFSUFFIX">
-<summary>
-The suffix used for PDF file names.
-</summary>
-</cvar>
-
 <cvar name="RDirs">
 <summary>
 A function that converts a string into a list of Dir instances by
diff --git a/src/engine/SCons/Tool/dvi.py b/src/engine/SCons/Tool/dvi.py
new file mode 100644 (file)
index 0000000..1be710c
--- /dev/null
@@ -0,0 +1,57 @@
+"""SCons.Tool.dvi
+
+Common DVI Builder definition for various other Tool modules that use it.
+
+"""
+
+#
+# __COPYRIGHT__
+#
+# 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.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import SCons.Builder
+import SCons.Tool
+
+DVIBuilder = None
+
+def generate(env):
+    try:
+        bld = env['BUILDERS']['DVI']
+    except KeyError:
+        global DVIBuilder
+
+        if DVIBuilder is None:
+            # The suffix is hard-coded to '.dvi', not configurable via a
+            # construction variable like $DVISUFFIX, because the output
+            # file name is hard-coded within TeX.
+            DVIBuilder = SCons.Builder.Builder(action = {},
+                                               source_scanner = SCons.Tool.LaTeXScanner,
+                                               suffix = '.dvi',
+                                               emitter = {})
+
+        env['BUILDERS']['DVI'] = DVIBuilder
+
+def exists(env):
+    # This only puts a skeleton Builder in place, so if someone
+    # references this Tool directly, it's always "available."
+    return 1
diff --git a/src/engine/SCons/Tool/dvi.xml b/src/engine/SCons/Tool/dvi.xml
new file mode 100644 (file)
index 0000000..9d3110e
--- /dev/null
@@ -0,0 +1,56 @@
+<!--
+__COPYRIGHT__
+
+This file is processed by the bin/SConsDoc.py module.
+See its __doc__ string for a discussion of the format.
+-->
+<builder name="DVI">
+<summary>
+Builds a <filename>.dvi</filename> file
+from a <filename>.tex</filename>,
+<filename>.ltx</filename> or <filename>.latex</filename> input file.
+If the source file suffix is <filename>.tex</filename>,
+&scons;
+will examine the contents of the file;
+if the string
+<literal>\documentclass</literal>
+or
+<literal>\documentstyle</literal>
+is found, the file is assumed to be a LaTeX file and
+the target is built by invoking the &cv-LATEXCOM; command line;
+otherwise, the &cv-TEXCOM; command line is used.
+If the file is a LaTeX file,
+the
+&b-DVI;
+builder method will also examine the contents
+of the
+<filename>.aux</filename>
+file and invoke the &cv-BIBTEX; command line
+if the string
+<literal>bibdata</literal>
+is found,
+start &cv-MAKEINDEX; to generate an index if a
+<filename>.ind</filename>
+file is found
+and will examine the contents
+<filename>.log</filename>
+file and re-run the &cv-LATEXCOM; command
+if the log file says it is necessary.
+
+The suffix <filename>.dvi</filename>
+(hard-coded within TeX itself)
+is automatically added to the target
+if it is not already present.
+Examples:
+
+<example>
+# builds from aaa.tex
+env.DVI(target = 'aaa.dvi', source = 'aaa.tex')
+# builds bbb.dvi
+env.DVI(target = 'bbb', source = 'bbb.ltx')
+# builds from ccc.latex
+env.DVI(target = 'ccc.dvi', source = 'ccc.latex')
+</example>
+</summary>
+</builder>
+
index 1ffb655cef22134473755c1cd473e86edb6defed..bade8ff22d12bead8690f00d2b19ed924f039c8b 100644 (file)
@@ -35,18 +35,34 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
 import SCons.Defaults
+import SCons.Tool.pdf
 import SCons.Util
 
-PDFAction = SCons.Action.Action('$DVIPDFCOM', '$DVIPDFCOMSTR')
+PDFAction = None
+
+def PDFEmitter(target, source, env):
+    """Strips any .aux or .log files from the input source list.
+    These are created by the TeX Builder that in all likelihood was
+    used to generate the .dvi file we're using as input, and we only
+    care about the .dvi file.
+    """
+    def strip_suffixes(n):
+        return not SCons.Util.splitext(str(n))[1] in ['.aux', '.log']
+    source = filter(strip_suffixes, source)
+    return (target, source)
 
 def generate(env):
     """Add Builders and construction variables for dvipdf to an Environment."""
-    try:
-        bld = env['BUILDERS']['PDF']
-    except KeyError:
-        bld = SCons.Defaults.PDF()
-        env['BUILDERS']['PDF'] = bld
+    global PDFAction
+    if PDFAction is None:
+        PDFAction = SCons.Action.Action('$DVIPDFCOM', '$DVIPDFCOMSTR')
+
+    import pdf
+    pdf.generate(env)
+
+    bld = env['BUILDERS']['PDF']
     bld.add_action('.dvi', PDFAction)
+    bld.add_emitter('.dvi', PDFEmitter)
 
     env['DVIPDF']      = 'dvipdf'
     env['DVIPDFFLAGS'] = SCons.Util.CLVar('')
index 02db5ca3e82cffce2018f638d6231a37d413b3e9..b987ea1219a8b3e14da002db7790c989572ee9bb 100644 (file)
@@ -35,24 +35,32 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
 import SCons.Builder
-import SCons.Defaults
 import SCons.Util
 
-PSAction = SCons.Action.Action('$PSCOM', '$PSCOMSTR')
-
-PostScript = SCons.Builder.Builder(action = PSAction,
-                                   prefix = '$PSPREFIX',
-                                   suffix = '$PSSUFFIX',
-                                   src_suffix = '.dvi',
-                                   src_builder = 'DVI')
+PSAction = None
+PSBuilder = None
 
 def generate(env):
     """Add Builders and construction variables for dvips to an Environment."""
-    env['BUILDERS']['PostScript'] = PostScript
+    global PSAction
+    if PSAction is None:
+        PSAction = SCons.Action.Action('$PSCOM', '$PSCOMSTR')
+
+    global PSBuilder
+    if PSBuilder is None:
+        PSBuilder = SCons.Builder.Builder(action = PSAction,
+                                          prefix = '$PSPREFIX',
+                                          suffix = '$PSSUFFIX',
+                                          src_suffix = '.dvi',
+                                          src_builder = 'DVI')
+
+    env['BUILDERS']['PostScript'] = PSBuilder
     
     env['DVIPS']      = 'dvips'
     env['DVIPSFLAGS'] = SCons.Util.CLVar('')
     env['PSCOM']      = '$DVIPS $DVIPSFLAGS -o $TARGET $SOURCE'
+    env['PSPREFIX'] = ''
+    env['PSSUFFIX'] = '.ps'
 
 def exists(env):
     return env.Detect('dvips')
index 7df110a7af0663af6ea0f819be5ab8f6a760d383..b8e9c6f94cce6a04e4145e0358a19031bbcbc7bf 100644 (file)
@@ -34,7 +34,6 @@ selection method.
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
-import SCons.Defaults
 import SCons.Platform
 import SCons.Util
 
@@ -48,17 +47,20 @@ elif platform == 'win32':
 else:
     gs = 'gs'
 
-GhostscriptAction = SCons.Action.Action('$GSCOM', '$GSCOMSTR')
+GhostscriptAction = None
 
 def generate(env):
     """Add Builders and construction variables for Ghostscript to an
     Environment."""
-    try:
-        bld = env['BUILDERS']['PDF']
-    except KeyError:
-        bld = SCons.Defaults.PDF()
-        env['BUILDERS']['PDF'] = bld
 
+    global GhostscriptAction
+    if GhostscriptAction is None:
+        GhostscriptAction = SCons.Action.Action('$GSCOM', '$GSCOMSTR')
+
+    import pdf
+    pdf.generate(env)
+
+    bld = env['BUILDERS']['PDF']
     bld.add_action('.ps', GhostscriptAction)
 
     env['GS']      = gs
index c77461b49d536770ba18a26ed24c2fe8d62c6d7f..5bd21d9fae96d278d27f5796a40cd60decb3a317 100644 (file)
@@ -40,7 +40,7 @@ import SCons.Util
 import SCons.Tool
 import SCons.Tool.tex
 
-LaTeXAction = SCons.Action.Action('$LATEXCOM', '$LATEXCOMSTR')
+LaTeXAction = None
 
 def LaTeXAuxFunction(target = None, source= None, env=None):
     SCons.Tool.tex.InternalLaTeXAuxAction( LaTeXAction, target, source, env )
@@ -49,13 +49,14 @@ LaTeXAuxAction = SCons.Action.Action(LaTeXAuxFunction, strfunction=None)
 
 def generate(env):
     """Add Builders and construction variables for LaTeX to an Environment."""
+    global LaTeXAction
+    if LaTeXAction is None:
+        LaTeXAction = SCons.Action.Action('$LATEXCOM', '$LATEXCOMSTR')
 
-    try:
-        bld = env['BUILDERS']['DVI']
-    except KeyError:
-        bld = SCons.Defaults.DVI()
-        env['BUILDERS']['DVI'] = bld
+    import dvi
+    dvi.generate(env)
 
+    bld = env['BUILDERS']['DVI']
     bld.add_action('.ltx', LaTeXAuxAction)
     bld.add_action('.latex', LaTeXAuxAction)
     bld.add_emitter('.ltx', SCons.Tool.tex.tex_emitter)
diff --git a/src/engine/SCons/Tool/pdf.py b/src/engine/SCons/Tool/pdf.py
new file mode 100644 (file)
index 0000000..b4bfc17
--- /dev/null
@@ -0,0 +1,56 @@
+"""SCons.Tool.pdf
+
+Common PDF Builder definition for various other Tool modules that use it.
+
+"""
+
+#
+# __COPYRIGHT__
+#
+# 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.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import SCons.Builder
+import SCons.Tool
+
+PDFBuilder = None
+
+def generate(env):
+    try:
+        bld = env['BUILDERS']['PDF']
+    except KeyError:
+        global PDFBuilder
+        if PDFBuilder is None:
+            PDFBuilder = SCons.Builder.Builder(action = {},
+                                               source_scanner = SCons.Tool.LaTeXScanner,
+                                               prefix = '$PDFPREFIX',
+                                               suffix = '$PDFSUFFIX',
+                                               emitter = {})
+        env['BUILDERS']['PDF'] = PDFBuilder
+
+    env['PDFPREFIX'] = ''
+    env['PDFSUFFIX'] = '.pdf'
+
+def exists(env):
+    # This only puts a skeleton Builder in place, so if someone
+    # references this Tool directly, it's always "available."
+    return 1
diff --git a/src/engine/SCons/Tool/pdf.xml b/src/engine/SCons/Tool/pdf.xml
new file mode 100644 (file)
index 0000000..3d64be2
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+__COPYRIGHT__
+
+This file is processed by the bin/SConsDoc.py module.
+See its __doc__ string for a discussion of the format.
+-->
+<builder name="PDF">
+<summary>
+Builds a <filename>.pdf</filename> file
+from a <filename>.dvi</filename> input file
+(or, by extension, a <filename>.tex</filename>,
+<filename>.ltx</filename>,
+or
+<filename>.latex</filename> input file).
+The suffix specified by the &cv-PDFSUFFIX; construction variable
+(<filename>.pdf</filename> by default)
+is added automatically to the target
+if it is not already present.  Example:
+
+<example>
+# builds from aaa.tex
+env.PDF(target = 'aaa.pdf', source = 'aaa.tex')
+# builds bbb.pdf from bbb.dvi
+env.PDF(target = 'bbb', source = 'bbb.dvi')
+</example>
+</summary>
+</builder>
+
+<cvar name="PDFPREFIX">
+<summary>
+The prefix used for PDF file names.
+</summary>
+</cvar>
+
+<cvar name="PDFSUFFIX">
+<summary>
+The suffix used for PDF file names.
+</summary>
+</cvar>
index 3b7ac4003bbf6eba5864afd5aae225280d6eca20..acf67b27bf0d3ea6fa3850efee6477004240f28d 100644 (file)
@@ -34,25 +34,32 @@ selection method.
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
-import SCons.Defaults
 import SCons.Util
+import SCons.Tool.pdf
 import SCons.Tool.tex
 
-PDFLaTeXAction = SCons.Action.Action('$PDFLATEXCOM', '$PDFLATEXCOMSTR')
+PDFLaTeXAction = None
 
 def PDFLaTeXAuxFunction(target = None, source= None, env=None):
     SCons.Tool.tex.InternalLaTeXAuxAction( PDFLaTeXAction, target, source, env )
 
-PDFLaTeXAuxAction = SCons.Action.Action(PDFLaTeXAuxFunction, strfunction=None)
+PDFLaTeXAuxAction = None
 
 def generate(env):
     """Add Builders and construction variables for pdflatex to an Environment."""
-    try:
-        bld = env['BUILDERS']['PDF']
-    except KeyError:
-        bld = SCons.Defaults.PDF()
-        env['BUILDERS']['PDF'] = bld
+    global PDFLaTeXAction
+    if PDFLaTeXAction is None:
+        PDFLaTeXAction = SCons.Action.Action('$PDFLATEXCOM', '$PDFLATEXCOMSTR')
 
+    global PDFLaTeXAuxAction
+    if PDFLaTeXAuxAction is None:
+        PDFLaTeXAuxAction = SCons.Action.Action(PDFLaTeXAuxFunction,
+                                                strfunction=None)
+
+    import pdf
+    pdf.generate(env)
+
+    bld = env['BUILDERS']['PDF']
     bld.add_action('.ltx', PDFLaTeXAuxAction)
     bld.add_action('.latex', PDFLaTeXAuxAction)
     bld.add_emitter('.ltx', SCons.Tool.tex.tex_emitter)
index a25f08bb6dc8a81638875701d75b5815c1441f24..075315d871290512006a4e24f78b24406b0abc9b 100644 (file)
@@ -34,15 +34,14 @@ selection method.
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
-import SCons.Defaults
 import SCons.Util
 import SCons.Tool.tex
 
-PDFTeXAction = SCons.Action.Action('$PDFTEXCOM', '$PDFTEXCOMSTR')
+PDFTeXAction = None
 
-# Define an action to build a latex file.  This action might be needed more
-# than once if we are dealing with labels and bibtex
-PDFLaTeXAction = SCons.Action.Action("$PDFLATEXCOM", "$PDFLATEXCOMSTR")
+# This action might be needed more than once if we are dealing with
+# labels and bibtex.
+PDFLaTeXAction = None
 
 def PDFLaTeXAuxAction(target = None, source= None, env=None):
     SCons.Tool.tex.InternalLaTeXAuxAction( PDFLaTeXAction, target, source, env )
@@ -57,17 +56,27 @@ def PDFTeXLaTeXFunction(target = None, source= None, env=None):
         PDFTeXAction(target,source,env)
     return 0
 
-PDFTeXLaTeXAction = SCons.Action.Action(PDFTeXLaTeXFunction,
-                                     strfunction=None)
+PDFTeXLaTeXAction = None
 
 def generate(env):
     """Add Builders and construction variables for pdftex to an Environment."""
-    try:
-        bld = env['BUILDERS']['PDF']
-    except KeyError:
-        bld = SCons.Defaults.PDF()
-        env['BUILDERS']['PDF'] = bld
+    global PDFTeXAction
+    if PDFTeXAction is None:
+        PDFTeXAction = SCons.Action.Action('$PDFTEXCOM', '$PDFTEXCOMSTR')
 
+    global PDFLaTeXAction
+    if PDFLaTeXAction is None:
+        PDFLaTeXAction = SCons.Action.Action("$PDFLATEXCOM", "$PDFLATEXCOMSTR")
+
+    global PDFTeXLaTeXAction
+    if PDFTeXLaTeXAction is None:
+        PDFTeXLaTeXAction = SCons.Action.Action(PDFTeXLaTeXFunction,
+                                                strfunction=None)
+
+    import pdf
+    pdf.generate(env)
+
+    bld = env['BUILDERS']['PDF']
     bld.add_action('.tex', PDFTeXLaTeXAction)
     bld.add_emitter('.tex', SCons.Tool.tex.tex_emitter)
 
index 8b80a0271fbfe67584a5dbff85b84ac4de120ba3..1ca40f2050f68d2fbb541d2ea10569d88a389bfb 100644 (file)
@@ -38,30 +38,28 @@ import re
 import string
 
 import SCons.Action
-import SCons.Defaults
 import SCons.Node
 import SCons.Node.FS
 import SCons.Util
 
-# Define an action to build a generic tex file.  This is sufficient for all
-# tex files.
-TeXAction = SCons.Action.Action("$TEXCOM", "$TEXCOMSTR")
+# An Action sufficient to build any generic tex file.
+TeXAction = None
 
-# Define an action to build a latex file.  This action might be needed more
-# than once if we are dealing with labels and bibtex
-LaTeXAction = SCons.Action.Action("$LATEXCOM", "$LATEXCOMSTR")
+# An action to build a latex file.  This action might be needed more
+# than once if we are dealing with labels and bibtex.
+LaTeXAction = None
 
-# Define an action to run BibTeX on a file.
-BibTeXAction = SCons.Action.Action("$BIBTEXCOM", "$BIBTEXCOMSTR")
+# An action to run BibTeX on a file.
+BibTeXAction = None
 
-# Define an action to run MakeIndex on a file.
-MakeIndexAction = SCons.Action.Action("$MAKEINDEXCOM", "$MAKEINDEXOMSTR")
+# An action to run MakeIndex on a file.
+MakeIndexAction = None
 
 def InternalLaTeXAuxAction(XXXLaTeXAction, target = None, source= None, env=None):
     """A builder for LaTeX files that checks the output in the aux file
     and decides how many times to use LaTeXAction, and BibTeXAction."""
-    # Get the base name of the target
-    basename, ext = os.path.splitext(str(target[0]))
+
+    basename, ext = SCons.Util.splitext(str(target[0]))
 
     # Run LaTeX once to generate a new aux file.
     XXXLaTeXAction(target,source,env)
@@ -121,21 +119,46 @@ def TeXLaTeXFunction(target = None, source= None, env=None):
         TeXAction(target,source,env)
     return 0
 
-def tex_emitter( target, source, env ):
-       target.append( os.path.splitext( SCons.Util.to_String(source[0]) )[0] + ".aux" )
-       target.append( os.path.splitext( SCons.Util.to_String(source[0]) )[0] + ".log" )
-       return (target, source)
+def tex_emitter(target, source, env):
+    base = SCons.Util.splitext(str(source[0]))[0]
+    target.append(base + '.aux')
+    target.append(base + '.log')
+    return (target, source)
 
-TeXLaTeXAction = SCons.Action.Action(TeXLaTeXFunction, strfunction=None)
+TeXLaTeXAction = None
 
 def generate(env):
     """Add Builders and construction variables for TeX to an Environment."""
-    try:
-        bld = env['BUILDERS']['DVI']
-    except KeyError:
-        bld = SCons.Defaults.DVI()
-        env['BUILDERS']['DVI'] = bld
 
+    # A generic tex file Action, sufficient for all tex files.
+    global TeXAction
+    if TeXAction is None:
+        TeXAction = SCons.Action.Action("$TEXCOM", "$TEXCOMSTR")
+
+    # An Action to build a latex file.  This might be needed more
+    # than once if we are dealing with labels and bibtex.
+    global LaTeXAction
+    if LaTeXAction is None:
+        LaTeXAction = SCons.Action.Action("$LATEXCOM", "$LATEXCOMSTR")
+
+    # Define an action to run BibTeX on a file.
+    global BibTeXAction
+    if BibTeXAction is None:
+        BibTeXAction = SCons.Action.Action("$BIBTEXCOM", "$BIBTEXCOMSTR")
+
+    # Define an action to run MakeIndex on a file.
+    global MakeIndexAction
+    if MakeIndexAction is None:
+        MakeIndexAction = SCons.Action.Action("$MAKEINDEXCOM", "$MAKEINDEXOMSTR")
+
+    global TeXLaTeXAction
+    if TeXLaTeXAction is None:
+        TeXLaTeXAction = SCons.Action.Action(TeXLaTeXFunction, strfunction=None)
+
+    import dvi
+    dvi.generate(env)
+
+    bld = env['BUILDERS']['DVI']
     bld.add_action('.tex', TeXLaTeXAction)
     bld.add_emitter('.tex', tex_emitter)
 
index 7bcc05895e7260ad3bf76a6eadb4437e98f00bcd..3663f535f0f79e3042fd1e8b8ffeea1cacca0f49 100644 (file)
@@ -70,6 +70,7 @@ tools = [
     'CVS',
     'default',
     'dmd',
+    'dvi',
     'dvipdf',
     'dvips',
     'f77',
@@ -110,6 +111,7 @@ tools = [
     'mwcc',
     'mwld',
     'nasm',
+    'pdf',
     'pdflatex',
     'pdftex',
     'Perforce',