This patch removes setting the variable TEXPICTS in the tex tools and
authormanagan <managan@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 30 Sep 2008 22:54:35 +0000 (22:54 +0000)
committermanagan <managan@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 30 Sep 2008 22:54:35 +0000 (22:54 +0000)
sets it in tee dvi2ps and dvipdf tools where it is needed. This means that we
can reset it to the original value at the end of the tool.

This is done by storing the .tex source file's path in the
.dvi file's Node .attribute slot and retrieving it in the dvi2ps and dvipdf
tools from the source.

I also updated the list of graphics extensions in the Latex scanner

I set up one function that gets called to run either dvi2ps or dvipdf
after setting TEXPICTS.

git-svn-id: http://scons.tigris.org/svn/scons/trunk@3523 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/engine/SCons/Scanner/LaTeX.py
src/engine/SCons/Tool/dvipdf.py
src/engine/SCons/Tool/dvips.py
src/engine/SCons/Tool/tex.py

index 9fbbae5a262929fa9225d4b7b4efaaba79f1d691..96398415a12611430ab3e3e5b01ecb00cac78a6b 100644 (file)
@@ -53,7 +53,7 @@ def PDFLaTeXScanner():
     ds = LaTeX(name = "PDFLaTeXScanner",
                suffixes =  '$LATEXSUFFIXES',
                # in the search order, see below in LaTeX class docstring
-               graphics_extensions = ['.png', '.pdf', '.jpg', '.tif'],
+               graphics_extensions = ['.pdf', '.png', '.jpg', '.gif', '.tif'],
                recursive = 0)
     return ds
 
@@ -86,7 +86,7 @@ class LaTeX(SCons.Scanner.Base):
     Another difference is that the search path is determined by the type
     of the file being searched:
     env['TEXINPUTS'] for "input" and "include" keywords
-    env['TEXPICTS'] for "includegraphics" keyword
+    env['TEXINPUTS'] for "includegraphics" keyword
     env['BIBINPUTS'] for "bibliography" keyword
     env['BSTINPUTS'] for "bibliographystyle" keyword
 
@@ -103,7 +103,7 @@ class LaTeX(SCons.Scanner.Base):
 
     def __init__(self, name, suffixes, graphics_extensions, *args, **kw):
 
-        regex = '\\\\(include|includegraphics(?:\[[^\]]+\])?|input|bibliography|usepackage){([^}]*)}'
+        regex = '^[^%]*\\\\(include|includegraphics(?:\[[^\]]+\])?|input|bibliography|usepackage){([^}]*)}'
         self.cre = re.compile(regex, re.M)
         self.graphics_extensions = graphics_extensions
 
index 179159ed0a334c69b585769e6f2315e50347a192..05c92511683462311f3824d7ea2bf12c4a400351 100644 (file)
@@ -36,9 +36,50 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 import SCons.Action
 import SCons.Defaults
 import SCons.Tool.pdf
+import SCons.Tool.tex
 import SCons.Util
 
+_null = SCons.Tool.tex._Null
+
+def DviPdfPsFunction(XXXDviAction, target = None, source= None, env=None):
+    """A builder for DVI files that sets the TEXPICTS environment
+       variable before running dvi2ps or dvipdf."""
+
+    try:
+        abspath = source[0].attributes.path
+    except AttributeError :
+        abspath =  ''
+
+    saved_env = {}
+    saved_env['TEXPICTS'] = SCons.Tool.tex.modify_env_var(env, 'TEXPICTS', abspath)
+
+    result = XXXDviAction(target, source, env)
+
+    if saved_env['TEXPICTS'] is _null:
+        try:
+            env['ENV'].pop('TEXPICTS')
+        except KeyError:
+            pass # was never set
+    else:
+        env['ENV']['TEXPICTS'] = saved_env['TEXPICTS']
+
+    return result
+
+def DviPdfFunction(target = None, source= None, env=None):
+    result = DviPdfPsFunction(PDFAction,target,source,env)
+    return result
+
+def DviPdfStrFunction(target = None, source= None, env=None):
+    """A strfunction for dvipdf that returns the appropriate
+    command string for the no_exec options."""
+    if env.GetOption("no_exec"):
+        result = env.subst('$DVIPDFCOM',0,target,source)
+    else:
+        result = ''
+    return result
+
 PDFAction = None
+DVIPDFAction = None
 
 def PDFEmitter(target, source, env):
     """Strips any .aux or .log files from the input source list.
@@ -57,11 +98,15 @@ def generate(env):
     if PDFAction is None:
         PDFAction = SCons.Action.Action('$DVIPDFCOM', '$DVIPDFCOMSTR')
 
+    global DVIPDFAction
+    if DVIPDFAction is None:
+        DVIPDFAction = SCons.Action.Action(DviPdfFunction, strfunction = DviPdfStrFunction)
+
     import pdf
     pdf.generate(env)
 
     bld = env['BUILDERS']['PDF']
-    bld.add_action('.dvi', PDFAction)
+    bld.add_action('.dvi', DVIPDFAction)
     bld.add_emitter('.dvi', PDFEmitter)
 
     env['DVIPDF']      = 'dvipdf'
index ec95f16c063acad238e76e800191df8051d33ff3..120a12afc774e72ef6eacb31766e6d61c36ca13b 100644 (file)
@@ -35,9 +35,24 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Action
 import SCons.Builder
+import SCons.Tool.dvipdf
 import SCons.Util
 
+def DviPsFunction(target = None, source= None, env=None):
+    result = SCons.Tool.dvipdf.DviPdfPsFunction(PSAction,target,source,env)
+    return result
+
+def DviPsStrFunction(target = None, source= None, env=None):
+    """A strfunction for dvipdf that returns the appropriate
+    command string for the no_exec options."""
+    if env.GetOption("no_exec"):
+        result = env.subst('$PSCOM',0,target,source)
+    else:
+        result = ''
+    return result
+
 PSAction = None
+DVIPSAction = None
 PSBuilder = None
 
 def generate(env):
@@ -46,6 +61,10 @@ def generate(env):
     if PSAction is None:
         PSAction = SCons.Action.Action('$PSCOM', '$PSCOMSTR')
 
+    global DVIPSAction
+    if DVIPSAction is None:
+        DVIPSAction = SCons.Action.Action(DviPsFunction, strfunction = DviPsStrFunction)
+
     global PSBuilder
     if PSBuilder is None:
         PSBuilder = SCons.Builder.Builder(action = PSAction,
index 3e577fb95e0e309955dbad5639a8ef3ad3338e57..43df235e72173ace6fa3d998865208d1c7345acf 100644 (file)
@@ -171,7 +171,7 @@ def InternalLaTeXAuxAction(XXXLaTeXAction, target = None, source= None, env=None
     for var in SCons.Scanner.LaTeX.LaTeX.env_variables:
         saved_env[var] = modify_env_var(env, var, abspath)
 
-    # Create base file names with the target directory since the auxiliary files
+    # Create base file names with the target directory since the auxiliary files
     # will be made there.   That's because the *COM variables have the cd
     # command in the prolog. We check
     # for the existence of files before opening them--even ones like the
@@ -395,6 +395,10 @@ def tex_emitter(target, source, env):
     targetbase = SCons.Util.splitext(str(target[0]))[0]
     basename = SCons.Util.splitext(str(source[0]))[0]
     basefile = os.path.split(str(basename))[1]
+    
+    basedir = os.path.split(str(source[0]))[0]
+    abspath = os.path.abspath(basedir)
+    target[0].attributes.path = abspath
 
     #
     # file names we will make use of in searching the sources and log file