Correct $SOURCES on TeX command lines. (Sanjoy Mahajan) Add scanning of LaTeX files...
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 6 Nov 2005 17:03:25 +0000 (17:03 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 6 Nov 2005 17:03:25 +0000 (17:03 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1383 fdb21ef1-2011-0410-befe-b5e4ea1792b1

16 files changed:
doc/man/scons.1
src/CHANGES.txt
src/engine/MANIFEST.in
src/engine/SCons/Defaults.py
src/engine/SCons/Defaults.xml
src/engine/SCons/Scanner/LaTeX.py [new file with mode: 0644]
src/engine/SCons/Scanner/LaTeXTests.py [new file with mode: 0644]
src/engine/SCons/Tool/__init__.py
src/engine/SCons/Tool/dvips.py
src/engine/SCons/Tool/latex.py
src/engine/SCons/Tool/latex.xml
src/engine/SCons/Tool/pdflatex.py
src/engine/SCons/Tool/pdftex.py
src/engine/SCons/Tool/tex.py
src/engine/SCons/Tool/tex.xml
test/TEX/LATEX.py

index d2e69fd522934b2d157e7f56d06df9d419f5d6f7..5249f7509d79c9f849baf53217b6ef3b5829332e 100644 (file)
@@ -1572,11 +1572,14 @@ the
 .B DVI
 builder method will also examine the contents
 of the
-.B .aux file
-and invoke the $BIBTEX command line
+.B .aux
+file and invoke the $BIBTEX command line
 if the string
 .B bibdata
 is found,
+start $MAKEINDEX to generate an index if a
+.B .ind
+file is found
 and will examine the contents
 .B .log
 file and re-run the $LATEXCOM command
@@ -6199,6 +6202,16 @@ env = Environment(LATEXCOMSTR = "Building $TARGET from LaTeX input $SOURCES")
 .IP LATEXFLAGS
 General options passed to the LaTeX structured formatter and typesetter.
 
+.IP LATEXSUFFIXES
+The list of suffixes of files that will be scanned
+for LaTeX implicit dependencies
+(\\include or \\import files).
+The default list is:
+
+.ES
+[".tex", ".ltx", ".latex"]
+.EE
+
 .IP LDMODULE
 The linker for building loadable modules.
 By default, this is the same as $SHLINK.
@@ -6450,6 +6463,25 @@ The string displayed when
 a file is passed through the M4 macro preprocessor.
 If this is not set, then $M4COM (the command line) is displayed.
 
+.IP MAKEINDEX
+The makeindex generator for the TeX formatter and typesetter and the
+LaTeX structured formatter and typesetter.
+
+.IP MAKEINDEXCOM
+The command line used to call the makeindex generator for the
+TeX formatter and typesetter and the LaTeX structured formatter and
+typesetter.
+
+.IP MAKEINDEXCOMSTR
+The string displayed when calling the makeindex generator for the
+TeX formatter and typesetter
+and the LaTeX structured formatter and typesetter.
+If this is not set, then $MAKEINDEXCOM (the command line) is displayed.
+
+.IP MAKEINDEXFLAGS
+General options passed to the makeindex generator for the TeX formatter
+and typesetter and the LaTeX structured formatter and typesetter.
+
 .IP MAXLINELENGTH
 The maximum number of characters allowed on an external command line.
 On Win32 systems,
@@ -7648,6 +7680,12 @@ env = Environment(TEXCOMSTR = "Building $TARGET from TeX input $SOURCES")
 .IP TEXFLAGS
 General options passed to the TeX formatter and typesetter.
 
+.IP TEXINPUTS
+List of directories that the LaTeX programm will search
+for include directories.
+The LaTeX implicit dependency scanner will search these
+directories for \include and \import files.
+
 .IP TOOLS
 A list of the names of the Tool specifications
 that are part of this construction environment.
index ff46247c469bd223ebb6d8c7cf0098e356e5c41c..8bf385ffa8b80f20574c8b50de54df17ce9ac828 100644 (file)
@@ -99,6 +99,15 @@ RELEASE 0.97 - XXX
   - Remove unneceesary (and incorrect) SCons.Util strings on some function
     calls in SCons.Util.
 
+  From August Hörandl:
+
+  - Add a scanner for \include and \import files, with support for
+    searching a directory list in $TEXINPUTS (imported from the external
+    environment).
+
+  - Support $MAKEINDEX, $MAKEINDEXCOM, $MAKEINDEXCOMSTR and
+    $MAKEINDEXFLAGS for generating indices from .idx files.
+
   From Stephen Kennedy:
 
   - Speed up writing the .sconsign file at the end of a run by only
@@ -382,6 +391,8 @@ RELEASE 0.97 - XXX
 
   From Sanjoy Mahajan:
 
+  - Correct TeX-related command lines to just $SOURCE, not $SOURCES
+
   - Fix a bad use of Copy() in an example in the man page, and a
     bad regular expression example in the man page and User's Guide.
 
index 17839eaf32e13771d3ecd51eade9e3f616916e3c..3f33b58b68eb623fd66553ef67da176c95aee2be 100644 (file)
@@ -41,6 +41,7 @@ SCons/Scanner/D.py
 SCons/Scanner/Dir.py
 SCons/Scanner/Fortran.py
 SCons/Scanner/IDL.py
+SCons/Scanner/LaTeX.py
 SCons/Scanner/Prog.py
 SCons/SConf.py
 SCons/SConsign.py
index b7453d6211dff38ee5c239ae09c2cd78f9a86d3d..b5e09b34fd034af7842de54b113c49ea585fa416 100644 (file)
@@ -100,6 +100,7 @@ SharedCheck = SCons.Action.Action(SharedFlagChecker, None)
 # transition period.
 CScan = SCons.Tool.CScanner
 DScan = SCons.Tool.DScanner
+LaTeXScan = SCons.Tool.LaTeXScanner
 ObjSourceScan = SCons.Tool.SourceFileScanner
 ProgScan = SCons.Tool.ProgramScanner
 
@@ -126,6 +127,7 @@ 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
@@ -135,6 +137,7 @@ def DVI():
 def PDF():
     """A function for generating the PDF Builder."""
     return SCons.Builder.Builder(action = { },
+                                 source_scanner = LaTeXScan,
                                  prefix = '$PDFPREFIX',
                                  suffix = '$PDFSUFFIX')
 
@@ -351,6 +354,7 @@ ConstructionEnvironment = {
     'CPPSUFFIXES'   : SCons.Tool.CSuffixes,
     'DSUFFIXES'     : SCons.Tool.DSuffixes,
     'IDLSUFFIXES'   : SCons.Tool.IDLSuffixes,
+    'LATEXSUFFIXES' : SCons.Tool.LaTeXSuffixes,
     'PDFPREFIX'     : '',
     'PDFSUFFIX'     : '.pdf',
     'PSPREFIX'      : '',
index 56957aa69bbb78ef6800336da13441432ab341ad..1720aaa4100e8f4e6fb284389febe5ddbfa154ea 100644 (file)
@@ -20,11 +20,13 @@ the
 builder method will also examine the contents
 of the
 <filename>.aux</filename>
-file
-and invoke the &cv-BIBTEX; command line
+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
@@ -352,6 +354,19 @@ in force for this file installation.
 </summary>
 </cvar>
 
+<cvar name="LATEXSUFFIXES">
+<summary>
+The list of suffixes of files that will be scanned
+for LaTeX implicit dependencies
+(<literal>\include</literal> or <literal>\import</literal> files).
+The default list is:
+
+<example>
+[".tex", ".ltx", ".latex"]
+</example>
+</summary>
+</cvar>
+
 <cvar name="_LIBDIRFLAGS">
 <summary>
 An automatically-generated construction variable
diff --git a/src/engine/SCons/Scanner/LaTeX.py b/src/engine/SCons/Scanner/LaTeX.py
new file mode 100644 (file)
index 0000000..9451023
--- /dev/null
@@ -0,0 +1,51 @@
+"""SCons.Scanner.LaTeX
+
+This module implements the dependency scanner for LaTeX code. 
+
+"""
+
+#
+# Copyright (c) 2005 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.
+#
+
+__revision__ = ""
+
+
+import SCons.Scanner
+
+def LaTeXScanner(fs = SCons.Node.FS.default_fs):
+    """Return a prototype Scanner instance for scanning LaTeX source files"""
+    ds = LaTeX(name = "LaTeXScanner",
+           suffixes =  '$LATEXSUFFIXES',
+           path_variable = 'TEXINPUTS',
+           regex = '\\\\(include|input){([^}]*)}',
+           recursive = 0)
+    return ds
+
+class LaTeX(SCons.Scanner.Classic):
+    def find_include(self, include, source_dir, path):
+        if callable(path): path=path()
+        # find (2nd result reg expr) + extension
+        # print 'looking for latex includes: ' + include[1]
+        i = SCons.Node.FS.find_file(include[1] + '.tex',
+                                    (source_dir,) + path)
+        return i, include
diff --git a/src/engine/SCons/Scanner/LaTeXTests.py b/src/engine/SCons/Scanner/LaTeXTests.py
new file mode 100644 (file)
index 0000000..3fc121c
--- /dev/null
@@ -0,0 +1,134 @@
+#
+# Copyright (c) 2005 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.
+#
+
+__revision__ = ""
+
+import os.path
+import string
+import sys
+import types
+import unittest
+import UserDict
+
+import TestCmd
+import SCons.Node.FS
+import SCons.Scanner.LaTeX
+
+test = TestCmd.TestCmd(workdir = '')
+
+test.write('test1.latex',"""
+\include{inc1}
+\input{inc2}
+""")
+test.write('test2.latex',"""
+\include{inc1}
+\include{inc3}
+""")
+
+test.subdir('subdir')
+
+test.write('inc1.tex',"\n")
+test.write('inc2.tex',"\n")
+test.write([ 'subdir', 'inc3.tex'], "\n")
+
+# define some helpers:
+#   copied from CTest.py
+class DummyEnvironment(UserDict.UserDict):
+    def __init__(self, **kw):
+        UserDict.UserDict.__init__(self)
+        self.data.update(kw)
+        self.fs = SCons.Node.FS.FS(test.workpath(''))
+
+    def Dictionary(self, *args):
+        return self.data
+
+    def subst(self, strSubst):
+        if strSubst[0] == '$':
+            return self.data[strSubst[1:]]
+        return strSubst
+
+    def subst_list(self, strSubst):
+        if strSubst[0] == '$':
+            return [self.data[strSubst[1:]]]
+        return [[strSubst]]
+
+    def subst_path(self, path, target=None, source=None):
+        if type(path) != type([]):
+            path = [path]
+        return map(self.subst, path)
+
+    def get_calculator(self):
+        return None
+
+    def get_factory(self, factory):
+        return factory or self.fs.File
+
+    def Dir(self, filename):
+        return self.fs.Dir(filename)
+
+    def File(self, filename):
+        return self.fs.File(filename)
+
+if os.path.normcase('foo') == os.path.normcase('FOO'):
+    my_normpath = os.path.normcase
+else:
+    my_normpath = os.path.normpath
+
+def deps_match(self, deps, headers):
+    global my_normpath
+    scanned = map(my_normpath, map(str, deps))
+    expect = map(my_normpath, headers)
+    self.failUnless(scanned == expect, "expect %s != scanned %s" % (expect, scanned))
+
+
+class LaTeXScannerTestCase1(unittest.TestCase):
+    def runTest(self):
+        env = DummyEnvironment()
+        s = SCons.Scanner.LaTeX.LaTeXScanner()
+        path = s.path(env)
+        deps = s(env.File('test1.latex'), env, path)
+        headers = ['inc1.tex', 'inc2.tex']
+        deps_match(self, deps, headers)
+
+class LaTeXScannerTestCase2(unittest.TestCase):
+     def runTest(self):
+         env = DummyEnvironment(TEXINPUTS=[test.workpath("subdir")])
+         s = SCons.Scanner.LaTeX.LaTeXScanner()
+         path = s.path(env)
+         deps = s(env.File('test2.latex'), env, path)
+         headers = ['inc1.tex', 'subdir/inc3.tex']
+         deps_match(self, deps, headers)
+
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(LaTeXScannerTestCase1())
+    suite.addTest(LaTeXScannerTestCase2())
+    return suite
+
+if __name__ == "__main__":
+    runner = unittest.TextTestRunner()
+    result = runner.run(suite())
+    if not result.wasSuccessful():
+        sys.exit(1)
+
index 94fe121fa7a17fa71dcc551b7798f05e7913f3bf..528ee4d16cf726306d1f957275d35bd114c8b94d 100644 (file)
@@ -45,10 +45,12 @@ import SCons.Errors
 import SCons.Scanner
 import SCons.Scanner.C
 import SCons.Scanner.D
+import SCons.Scanner.LaTeX
 import SCons.Scanner.Prog
 
 CScanner = SCons.Scanner.C.CScanner()
 DScanner = SCons.Scanner.D.DScanner()
+LaTeXScanner = SCons.Scanner.LaTeX.LaTeXScanner()
 ProgramScanner = SCons.Scanner.Prog.ProgramScanner()
 SourceFileScanner = SCons.Scanner.Scanner({}, name='SourceFileScanner')
 
@@ -62,12 +64,17 @@ DSuffixes = ['.d']
 
 IDLSuffixes = [".idl", ".IDL"]
 
+LaTeXSuffixes = [".tex", ".ltx", ".latex"]
+
 for suffix in CSuffixes:
     SourceFileScanner.add_scanner(suffix, CScanner)
 
 for suffix in DSuffixes:
     SourceFileScanner.add_scanner(suffix, DScanner)
 
+for suffix in LaTeXSuffixes:
+     SourceFileScanner.add_scanner(suffix, LaTeXScanner)
+
 class Tool:
     def __init__(self, name, toolpath=[], **kw):
         self.name = name
index d2debf0cfd1b1e6bb6feebdc21245a9d91602c69..02db5ca3e82cffce2018f638d6231a37d413b3e9 100644 (file)
@@ -52,7 +52,7 @@ def generate(env):
     
     env['DVIPS']      = 'dvips'
     env['DVIPSFLAGS'] = SCons.Util.CLVar('')
-    env['PSCOM']      = '$DVIPS $DVIPSFLAGS -o $TARGET $SOURCES'
+    env['PSCOM']      = '$DVIPS $DVIPSFLAGS -o $TARGET $SOURCE'
 
 def exists(env):
     return env.Detect('dvips')
index f182b3596319c9f4e683d627325fe19f310ffd3a..7f1668114637e0f481d1eae1902ac0139996ab84 100644 (file)
@@ -35,7 +35,9 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
 import SCons.Defaults
+import SCons.Scanner.LaTeX
 import SCons.Util
+import SCons.Tool
 
 LaTeXAction = SCons.Action.Action('$LATEXCOM', '$LATEXCOMSTR')
 
@@ -48,8 +50,8 @@ def generate(env):
         bld = SCons.Defaults.DVI()
         env['BUILDERS']['DVI'] = bld
         
-    bld.add_action('.ltx', LaTeXAction)
-    bld.add_action('.latex', LaTeXAction)
+    for suffix in SCons.Tool.LaTeXSuffixes:
+        bld.add_action(suffix, LaTeXAction)
 
     env['LATEX']      = 'latex'
     env['LATEXFLAGS'] = SCons.Util.CLVar('')
index 6a415f7841b005fdfee41904757a9f7b81c19d48..58a4df51356df691760df4ef6dceb08261e581e8 100644 (file)
@@ -34,3 +34,13 @@ env = Environment(LATEXCOMSTR = "Building $TARGET from LaTeX input $SOURCES")
 General options passed to the LaTeX structured formatter and typesetter.
 </summary>
 </cvar>
+
+<cvar name="TEXINPUTS">
+<summary>
+List of directories that the LaTeX programm will search
+for include directories.
+The LaTeX implicit dependency scanner will search these
+directories for \include and \import files.
+</summary>
+</cvar>
+
index 57c6e2deb4938c82d7d7ae978fde7281e596f43c..3af09ed1fdf07a9a804b92801e072821ab37b796 100644 (file)
@@ -52,7 +52,7 @@ def generate(env):
 
     env['PDFLATEX']      = 'pdflatex'
     env['PDFLATEXFLAGS'] = SCons.Util.CLVar('')
-    env['PDFLATEXCOM']   = '$PDFLATEX $PDFLATEXFLAGS $SOURCES $TARGET'
+    env['PDFLATEXCOM']   = '$PDFLATEX $PDFLATEXFLAGS $SOURCE'
 
 def exists(env):
     return env.Detect('pdflatex')
index 366151e61140123cbd7eb82fe25b1e122f98892d..92a622a944b6109e8baeaf90f79c7ca3e92d421b 100644 (file)
@@ -51,7 +51,7 @@ def generate(env):
 
     env['PDFTEX']      = 'pdftex'
     env['PDFTEXFLAGS'] = SCons.Util.CLVar('')
-    env['PDFTEXCOM']   = '$PDFTEX $PDFTEXFLAGS $SOURCES $TARGET'
+    env['PDFTEXCOM']   = '$PDFTEX $PDFTEXFLAGS $SOURCE'
 
 def exists(env):
     return env.Detect('pdftex')
index adb6c06ec287f6e6ea8163b1ca87b3d8efb16b2f..40a821198168dc5e3c103f3774e1ca22d3bfb6de 100644 (file)
@@ -54,6 +54,9 @@ LaTeXAction = SCons.Action.Action("$LATEXCOM", "$LATEXCOMSTR")
 # Define an action to run BibTeX on a file.
 BibTeXAction = SCons.Action.Action("$BIBTEXCOM", "$BIBTEXCOMSTR")
 
+# Define an action to run MakeIndex on a file.
+MakeIndexAction = SCons.Action.Action("$MAKEINDEXCOM", "$MAKEINDEXOMSTR")
+
 def LaTeXAuxAction(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."""
@@ -66,6 +69,14 @@ def LaTeXAuxAction(target = None, source= None, env=None):
     if string.find(content, "bibdata") != -1:
         bibfile = env.fs.File(basename)
         BibTeXAction(None,bibfile,env)
+    # Now if makeindex will need to be run.
+    idxfilename = basename + ".idx"
+    if os.path.exists(idxfilename):
+        idxfile = env.fs.File(basename)
+        # TODO: if ( idxfile has changed) ...
+        MakeIndexAction(None,idxfile,env)
+        LaTeXAction(target,source,env)
+        
     # Now check if latex needs to be run yet again.
     for trial in range(3):
         content = open(basename + ".log","rb").read()
@@ -109,17 +120,21 @@ def generate(env):
 
     env['TEX']      = 'tex'
     env['TEXFLAGS'] = SCons.Util.CLVar('')
-    env['TEXCOM']   = '$TEX $TEXFLAGS $SOURCES'
+    env['TEXCOM']   = '$TEX $TEXFLAGS $SOURCE'
 
     # Duplicate from latex.py.  If latex.py goes away, then this is still OK.
     env['LATEX']      = 'latex'
     env['LATEXFLAGS'] = SCons.Util.CLVar('')
-    env['LATEXCOM']   = '$LATEX $LATEXFLAGS $SOURCES'
+    env['LATEXCOM']   = '$LATEX $LATEXFLAGS $SOURCE'
 
     env['BIBTEX']      = 'bibtex'
     env['BIBTEXFLAGS'] = SCons.Util.CLVar('')
-    env['BIBTEXCOM']   = '$BIBTEX $BIBTEXFLAGS $SOURCES'
+    env['BIBTEXCOM']   = '$BIBTEX $BIBTEXFLAGS $SOURCE'
 
+    env['MAKEINDEX']      = 'makeindex'
+    env['MAKEINDEXFLAGS'] = SCons.Util.CLVar('')
+    env['MAKEINDEXCOM']   = '$MAKEINDEX $MAKEINDEXFLAGS $SOURCES'
 
+    
 def exists(env):
     return env.Detect('tex')
index 4f690413ffed0313d93f794db2991e263fa80866..df7196e2055d2ebd8efa4c64b172a444df92479f 100644 (file)
@@ -39,6 +39,37 @@ and typesetter and the LaTeX structured formatter and typesetter.
 </summary>
 </cvar>
 
+<cvar name="MAKEINDEX">
+<summary>
+The makeindex generator for the TeX formatter and typesetter and the
+LaTeX structured formatter and typesetter.
+</summary>
+</cvar>
+
+<cvar name="MAKEINDEXCOM">
+<summary>
+The command line used to call the makeindex generator for the
+TeX formatter and typesetter and the LaTeX structured formatter and
+typesetter.
+</summary>
+</cvar>
+
+<cvar name="MAKEINDEXCOMSTR">
+<summary>
+The string displayed when calling the makeindex generator for the
+TeX formatter and typesetter
+and the LaTeX structured formatter and typesetter.
+If this is not set, then &cv-MAKEINDEXCOM; (the command line) is displayed.
+</summary>
+</cvar>
+
+<cvar name="MAKEINDEXFLAGS">
+<summary>
+General options passed to the makeindex generator for the TeX formatter
+and typesetter and the LaTeX structured formatter and typesetter.
+</summary>
+</cvar>
+
 <cvar name="TEX">
 <summary>
 The TeX formatter and typesetter.
index 4f19bc16ab06197b9e0ca6c10a5b7a610034ae50..a9530fc86ffdb7c38c128d02108a51034335de85 100644 (file)
@@ -83,12 +83,19 @@ os.system(string.join(sys.argv[1:], " "))
 
     test.write('SConstruct', """
 import os
-ENV = { 'PATH' : os.environ['PATH'] }
+ENV = { 'PATH' : os.environ['PATH'],
+        'TEXINPUTS' : [ 'subdir', os.environ.get('TEXINPUTS', '') ] }
 foo = Environment(ENV = ENV)
 latex = foo.Dictionary('LATEX')
-bar = Environment(ENV = ENV, LATEX = r'%s wrapper.py ' + latex)
+makeindex = foo.Dictionary('MAKEINDEX')
+bar = Environment(ENV = ENV,
+                  LATEX = r'%s wrapper.py ' + latex,
+                  MAKEINDEX =  r' wrapper.py ' + makeindex)
 foo.DVI(target = 'foo.dvi', source = 'foo.ltx')
 bar.DVI(target = 'bar', source = 'bar.latex')
+
+bar.DVI(target = 'makeindex', source = 'makeindex.tex')
+foo.DVI(target = 'latexi', source = 'latexi.tex')
 """ % python)
 
     latex = r"""
@@ -96,22 +103,64 @@ bar.DVI(target = 'bar', source = 'bar.latex')
 \begin{document}
 This is the %s LaTeX file.
 \end{document}
+"""
+
+    makeindex =  r"""
+\documentclass{letter}
+\usepackage{makeidx}
+\makeindex
+\begin{document}
+\index{info}
+This is the %s LaTeX file.
+\printindex{}
+\end{document}
+"""
+
+    latex1 = r"""
+\documentclass{letter}
+\usepackage{makeidx}
+\makeindex
+\begin{document}
+\index{info}
+This is the %s LaTeX file.
+
+It has an Index and includes another file.
+\include{latexincludefile}
+\end{document}
+"""
+
+    latex2 = r"""
+\index{include}
+This is the include file.
+\printindex{}
 """
 
     test.write('foo.ltx', latex % 'foo.ltx')
 
     test.write('bar.latex', latex % 'bar.latex')
 
-    test.run(arguments = 'foo.dvi', stderr = None)
+    test.write('makeindex.tex',  makeindex % 'makeindex.tex');
+    test.write('makeindex.idx',  '');
 
-    test.fail_test(os.path.exists(test.workpath('wrapper.out')))
+    test.subdir('subdir')
+    test.write('latexi.tex',  latex1 % 'latexi.tex');
+    test.write([ 'subdir', 'latexincludefile.tex'], latex2)
 
+    test.run(arguments = 'foo.dvi', stderr = None)
+    test.fail_test(os.path.exists(test.workpath('wrapper.out')))
     test.fail_test(not os.path.exists(test.workpath('foo.dvi')))
 
     test.run(arguments = 'bar.dvi', stderr = None)
+    test.fail_test(test.read('wrapper.out') != "wrapper.py\n")
+    test.fail_test(not os.path.exists(test.workpath('bar.dvi')))
 
+    test.run(arguments = 'makeindex.dvi', stderr = None)
     test.fail_test(test.read('wrapper.out') != "wrapper.py\n")
 
-    test.fail_test(not os.path.exists(test.workpath('bar.dvi')))
+    test.run(arguments = 'latexi.dvi', stderr = None)
+    test.fail_test(not os.path.exists(test.workpath('latexi.dvi')))
+    test.fail_test(not os.path.exists(test.workpath('latexi.ind')))
+
+
 
 test.pass_test()