import os.path
import re
import string
+import shutil
import SCons.Action
import SCons.Node
"""A builder for LaTeX files that checks the output in the aux file
and decides how many times to use LaTeXAction, and BibTeXAction."""
+ # This routine is called with two actions. In this file for DVI builds
+ # with LaTeXAction and from the pdflatex.py with PDFLaTeXAction
+ # set this up now for the case where the user requests a different extension
+ # for the target filename
+ if (XXXLaTeXAction == LaTeXAction):
+ callerSuffix = ".dvi"
+ else:
+ callerSuffix = env['PDFSUFFIX']
+
basename = SCons.Util.splitext(str(source[0]))[0]
basedir = os.path.split(str(source[0]))[0]
basefile = os.path.split(str(basename))[1]
abspath = os.path.abspath(basedir)
targetbase = SCons.Util.splitext(str(target[0]))[0]
+ targetext = os.path.splitext(str(target[0]))[1]
targetdir = os.path.split(str(target[0]))[0]
# Not sure if these environment changes should go here or make the
texinputs_save = modify_env_var(env, 'TEXINPUTS', abspath)
bibinputs_save = modify_env_var(env, 'BIBINPUTS', abspath)
bstinputs_save = modify_env_var(env, 'BSTINPUTS', abspath)
- texpicts_save = modify_env_var(env, 'TEXPICTS', abspath)
+ texpicts_save = modify_env_var(env, 'TEXPICTS', abspath)
# Create these file names with the target directory since they will
# be made there. That's because the *COM variables have the cd
if os.path.exists(tocfilename):
tocContents = open(tocfilename, "rb").read()
+ # generate the file name that latex will generate
+ resultfilename = os.path.join(targetdir, basefile + targetext)
+
# Run LaTeX once to generate a new aux file and log file.
result = XXXLaTeXAction(target, source, env)
if result != 0:
if result != 0:
return result
+ # rename Latex's output to what the target name is
+ if not (str(target[0]) == resultfilename and os.path.exists(resultfilename)):
+ if os.path.exists(resultfilename):
+ print "move %s to %s" % (resultfilename, str(target[0]), )
+ shutil.move(resultfilename,str(target[0]))
+ # if the user gave some other extension try PDFSUFFIX and then .dvi
+ # not sure how to tell if we got here from a PDF or DVI builder.
+ else:
+ resultfilename = os.path.splitext(resultfilename)[0] + callerSuffix
+ if os.path.exists(resultfilename):
+ print "move %s to %s" % (resultfilename, str(target[0]), )
+ shutil.move(resultfilename,str(target[0]))
+
env['ENV']['TEXINPUTS'] = texinputs_save
env['ENV']['BIBINPUTS'] = bibinputs_save
env['ENV']['BSTINPUTS'] = bibinputs_save
--- /dev/null
+#!/usr/bin/env python
+#
+# __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__"
+
+"""
+Validate that we can rename the output from latex to the
+target name provided by the user.
+"""
+
+import os
+import os.path
+import string
+import sys
+import TestSCons
+
+_python_ = TestSCons._python_
+
+test = TestSCons.TestSCons()
+
+latex = test.where_is('latex')
+
+if not latex:
+ test.skip_test('could not find latex; skipping test\n')
+
+test.write('SConstruct', """
+import os
+ENV = { 'PATH' : os.environ['PATH'],
+ 'TEXINPUTS' : [ 'subdir', os.environ.get('TEXINPUTS', '') ] }
+foo = Environment(ENV = ENV)
+foo.DVI(target = 'foobar.dvi', source = 'foo.ltx')
+foo.PDF(target = 'bar.xyz', source = 'bar.ltx')
+""" % locals())
+
+test.write('foo.ltx', r"""
+\documentclass{letter}
+\begin{document}
+This is the foo.ltx file.
+\end{document}
+""")
+
+test.write('bar.ltx', r"""
+\documentclass{letter}
+\begin{document}
+This is the bar.ltx file.
+\end{document}
+""")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_exist('foobar.dvi')
+test.must_not_exist('foo.dvi')
+
+test.must_exist('bar.xyz')
+test.must_not_exist('bar.pdf')
+
+test.pass_test()