How to I get scons to invoke an external script?

saffsd picture saffsd · Apr 8, 2009 · Viewed 9.2k times · Source

I'm trying to use scons to build a latex document. In particular, I want to get scons to invoke a python program that generates a file containing a table that is \input{} into the main document. I've looked over the scons documentation but it is not immediately clear to me what I need to do.

What I wish to achieve is essentially what you would get with this makefile:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

How can I express this in scons?

Answer

Hexagon picture Hexagon · Apr 8, 2009

Something along these lines should do -

env.Command ('document.tex', '', 'python table_generator.py')
env.PDF ('document.pdf', 'document.tex')

It declares that 'document.tex' is generated by calling the Python script, and requests a PDF document to be created from this generatd 'document.tex' file.

Note that this is in spirit only. It may require some tweaking. In particular, I'm not certain what kind of semantics you would want for the generation of 'document.tex' - should it be generated every time? Only when it doesn't exist? When some other file changes? (you would want to add this dependency as the second argument to Command() that case).

In addition, the output of Command() can be used as input to PDF() if desired. For clarity, I didn't do that.