Commits

Anonymous committed f4e050e

Add a TeX emitter to cover removal of .aux and .log files. (Joel B. Mohler)

Comments (0)

Files changed (10)

     when it's necessary, to call $MAKEINDEX when it's necessary, and to
     call $TEX or $LATEX multiple times to handle undefined references.
 
+  - Add an emitter to the various TeX builders so that the generated
+    .aux and .log files also get deleted by the -c option.
+
   From Elliot Murphy:
 
   - Enhance the tests to guarantee persistence of ListOption

src/engine/SCons/Defaults.py

                                  # construction variable like $DVISUFFIX
                                  # because the output file name is
                                  # hard-coded within TeX.
-                                 suffix = '.dvi')
+                                 suffix = '.dvi',
+                                 emitter = {})
 
 def PDF():
     """A function for generating the PDF Builder."""
     return SCons.Builder.Builder(action = { },
                                  source_scanner = LaTeXScan,
                                  prefix = '$PDFPREFIX',
-                                 suffix = '$PDFSUFFIX')
+                                 suffix = '$PDFSUFFIX',
+                                 emitter = {})
 
 # Common tasks that we allow users to perform in platform-independent
 # ways by creating ActionFactory instances.

src/engine/SCons/Tool/latex.py

 
     bld.add_action('.ltx', LaTeXAuxAction)
     bld.add_action('.latex', LaTeXAuxAction)
+    bld.add_emitter('.ltx', SCons.Tool.tex.tex_emitter)
+    bld.add_emitter('.latex', SCons.Tool.tex.tex_emitter)
 
     env['LATEX']        = 'latex'
     env['LATEXFLAGS']   = SCons.Util.CLVar('')

src/engine/SCons/Tool/pdflatex.py

 
     bld.add_action('.ltx', PDFLaTeXAuxAction)
     bld.add_action('.latex', PDFLaTeXAuxAction)
+    bld.add_emitter('.ltx', SCons.Tool.tex.tex_emitter)
+    bld.add_emitter('.latex', SCons.Tool.tex.tex_emitter)
 
     env['PDFLATEX']      = 'pdflatex'
     env['PDFLATEXFLAGS'] = SCons.Util.CLVar('')

src/engine/SCons/Tool/pdftex.py

         env['BUILDERS']['PDF'] = bld
 
     bld.add_action('.tex', PDFTeXLaTeXAction)
+    bld.add_emitter('.tex', SCons.Tool.tex.tex_emitter)
 
     env['PDFTEX']      = 'pdftex'
     env['PDFTEXFLAGS'] = SCons.Util.CLVar('')

src/engine/SCons/Tool/tex.py

         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)
+
 TeXLaTeXAction = SCons.Action.Action(TeXLaTeXFunction, strfunction=None)
 
 def generate(env):
         env['BUILDERS']['DVI'] = bld
 
     bld.add_action('.tex', TeXLaTeXAction)
+    bld.add_emitter('.tex', tex_emitter)
 
     env['TEX']      = 'tex'
     env['TEXFLAGS'] = SCons.Util.CLVar('')

test/TEX/LATEX.py

 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+"""
+Validate that we can set the LATEX string to our own utility, that
+the produced .dvi, .aux and .log files get removed by the -c option,
+and that we can use this to wrap calls to the real latex utility.
+"""
+
 import os
 import os.path
 import string
 import os
 base_name = os.path.splitext(sys.argv[1])[0]
 infile = open(sys.argv[1], 'rb')
-out_file = open(base_name+'.dvi', 'wb')
+dvi_file = open(base_name+'.dvi', 'wb')
+aux_file = open(base_name+'.aux', 'wb')
+log_file = open(base_name+'.log', 'wb')
 for l in infile.readlines():
     if l[0] != '\\':
-        out_file.write(l)
+        dvi_file.write(l)
+        aux_file.write(l)
+        log_file.write(l)
 sys.exit(0)
 """)
 
 \end
 """)
 
-test.run(arguments = '.', stderr = None)
+test.run(arguments = '.')
 
-test.fail_test(test.read('test1.dvi') != "This is a .ltx test.\n")
+test.must_match('test1.dvi', "This is a .ltx test.\n")
+test.must_match('test1.aux', "This is a .ltx test.\n")
+test.must_match('test1.log', "This is a .ltx test.\n")
 
-test.fail_test(test.read('test2.dvi') != "This is a .latex test.\n")
+test.must_match('test2.dvi', "This is a .latex test.\n")
+test.must_match('test2.aux', "This is a .latex test.\n")
+test.must_match('test2.log', "This is a .latex test.\n")
+
+test.run(arguments = '-c .')
+
+test.must_not_exist('test1.dvi')
+test.must_not_exist('test1.aux')
+test.must_not_exist('test1.log')
+
+test.must_not_exist('test2.dvi')
+test.must_not_exist('test2.aux')
+test.must_not_exist('test2.log')
 
 
 
 
     test.write('bar.latex', latex % 'bar.latex')
 
-    test.write('makeindex.tex',  makeindex % 'makeindex.tex');
-    test.write('makeindex.idx',  '');
+    test.write('makeindex.tex',  makeindex % 'makeindex.tex')
+    test.write('makeindex.idx',  '')
 
     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.must_not_exist('wrapper.out')
+    test.must_exist('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.must_match('wrapper.out', "wrapper.py\n")
+    test.must_exist('bar.dvi')
 
     test.run(arguments = 'makeindex.dvi', stderr = None)
-    test.fail_test(test.read('wrapper.out') != "wrapper.py\n")
+    test.must_match('wrapper.out', "wrapper.py\n")
 
     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.must_exist('latexi.dvi')
+    test.must_exist('latexi.ind')
 
 
 

test/TEX/PDFLATEX.py

 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+"""
+Validate that we can set the PDFLATEX string to our own utility, that
+the produced .dvi, .aux and .log files get removed by the -c option,
+and that we can use this to wrap calls to the real latex utility.
+"""
+
 import os
 import os.path
 import string
 import os
 base_name = os.path.splitext(sys.argv[1])[0]
 infile = open(sys.argv[1], 'rb')
-out_file = open(base_name+'.pdf', 'wb')
+pdf_file = open(base_name+'.pdf', 'wb')
+aux_file = open(base_name+'.aux', 'wb')
+log_file = open(base_name+'.log', 'wb')
 for l in infile.readlines():
     if l[0] != '\\':
-        out_file.write(l)
+        pdf_file.write(l)
+        aux_file.write(l)
+        log_file.write(l)
 sys.exit(0)
 """)
 
 \end
 """)
 
-test.run(arguments = '.', stderr = None)
+test.run(arguments = '.')
 
-test.fail_test(not os.path.exists(test.workpath('test1.pdf')))
+test.must_exist('test1.pdf')
+test.must_exist('test1.aux')
+test.must_exist('test1.log')
 
-test.fail_test(not os.path.exists(test.workpath('test2.pdf')))
+test.must_exist('test2.pdf')
+test.must_exist('test2.aux')
+test.must_exist('test2.log')
+
+test.run(arguments = '-c .')
+
+test.must_not_exist('test1.pdf')
+test.must_not_exist('test1.aux')
+test.must_not_exist('test1.log')
+
+test.must_not_exist('test2.pdf')
+test.must_not_exist('test2.aux')
+test.must_not_exist('test2.log')
 
 
 
 
     test.run(arguments = 'foo.pdf', stderr = None)
 
-    test.fail_test(os.path.exists(test.workpath('wrapper.out')))
+    test.must_not_exist('wrapper.out')
 
-    test.fail_test(not os.path.exists(test.workpath('foo.pdf')))
+    test.must_exist('foo.pdf')
 
     test.run(arguments = 'bar.pdf', stderr = None)
 
-    test.fail_test(test.read('wrapper.out') != "wrapper.py\n")
+    test.must_match('wrapper.out', "wrapper.py\n")
 
-    test.fail_test(not os.path.exists(test.workpath('bar.pdf')))
+    test.must_exist('bar.pdf')
 
 test.pass_test()

test/TEX/PDFTEX.py

 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+"""
+Validate that we can set the PDFTEX string to our own utility, that
+the produced .dvi, .aux and .log files get removed by the -c option,
+and that we can use this to wrap calls to the real latex utility.
+"""
+
 import os
 import os.path
 import string
 import os
 base_name = os.path.splitext(sys.argv[1])[0]
 infile = open(sys.argv[1], 'rb')
-out_file = open(base_name+'.pdf', 'wb')
+pdf_file = open(base_name+'.pdf', 'wb')
+aux_file = open(base_name+'.aux', 'wb')
+log_file = open(base_name+'.log', 'wb')
 for l in infile.readlines():
     if l[0] != '\\':
-        out_file.write(l)
+        pdf_file.write(l)
+        aux_file.write(l)
+        log_file.write(l)
 sys.exit(0)
 """)
 
 \end
 """)
 
-test.run(arguments = 'test.pdf', stderr = None)
+test.run(arguments = 'test.pdf')
 
-test.fail_test(not os.path.exists(test.workpath('test.pdf')))
+test.must_exist('test.pdf')
+test.must_exist('test.aux')
+test.must_exist('test.log')
+
+test.run(arguments = '-c test.pdf')
+
+test.must_not_exist('test.pdf')
+test.must_not_exist('test.aux')
+test.must_not_exist('test.log')
 
 
 
 
     test.run(arguments = 'foo.pdf', stderr = None)
 
-    test.fail_test(os.path.exists(test.workpath('wrapper.out')))
+    test.must_not_exist('wrapper.out')
 
-    test.fail_test(not os.path.exists(test.workpath('foo.pdf')))
+    test.must_exist('foo.pdf')
 
     test.run(arguments = 'bar.pdf', stderr = None)
 
-    test.fail_test(not os.path.exists(test.workpath('wrapper.out')))
+    test.must_exist('wrapper.out')
 
-    test.fail_test(not os.path.exists(test.workpath('bar.pdf')))
+    test.must_exist('bar.pdf')
 
 test.pass_test()
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+"""
+Validate that we can set the TEX string to our own utility, that
+the produced .dvi, .aux and .log files get removed by the -c option,
+and that we can use this to wrap calls to the real latex utility.
+"""
+
 import os
 import os.path
 import string
 import os
 base_name = os.path.splitext(sys.argv[1])[0]
 infile = open(sys.argv[1], 'rb')
-out_file = open(base_name+'.dvi', 'wb')
+dvi_file = open(base_name+'.dvi', 'wb')
+aux_file = open(base_name+'.aux', 'wb')
+log_file = open(base_name+'.log', 'wb')
 for l in infile.readlines():
     if l[0] != '\\':
-        out_file.write(l)
+        dvi_file.write(l)
+        aux_file.write(l)
+        log_file.write(l)
 sys.exit(0)
 """)
 
 \end
 """)
 
-test.run(arguments = 'test.dvi', stderr = None)
+test.run(arguments = 'test.dvi')
 
-test.fail_test(test.read('test.dvi') != "This is a test.\n")
+test.must_match('test.dvi', "This is a test.\n")
+test.must_match('test.aux', "This is a test.\n")
+test.must_match('test.log', "This is a test.\n")
+
+test.run(arguments = '-c test.dvi')
+
+test.must_not_exist('test.dvi')
+test.must_not_exist('test.aux')
+test.must_not_exist('test.log')
 
 
 
     test.write('test.bib', bib)
 
     test.run(arguments = 'foo.dvi foo-latex.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.fail_test(not os.path.exists(test.workpath('foo-latex.dvi')))
+    test.must_not_exist('wrapper.out')
+    test.must_exist('foo.dvi')
+    test.must_exist('foo-latex.dvi')
 
     test.run(arguments = 'bar.dvi bar-latex.dvi', stderr = None)
-    test.fail_test(not os.path.exists(test.workpath('wrapper.out')))
-    test.fail_test(not os.path.exists(test.workpath('bar.dvi')))
-    test.fail_test(not os.path.exists(test.workpath('bar-latex.dvi')))
+    test.must_exist('wrapper.out')
+    test.must_exist('bar.dvi')
+    test.must_exist('bar-latex.dvi')
 
     test.run(stderr = None)
     output_lines = string.split(test.stdout(), '\n')