[Scons-users] Problems with a pseudo-builder

Marc Joliet marcec at gmx.de
Fri Jun 7 19:07:28 EDT 2013


OK, here's the follow up I promised.

Am Fri, 7 Jun 2013 21:24:09 +0200
schrieb Marc Joliet <marcec at gmx.de>:

[...]

> And in pseudo_builders.py I have:

>

> def doc_builder(env, target, source, *args, **kwargs):

> """

> A pseudo-builder for generating documentation via faust -mdoc.

>

> In addition to what the doc builder does, this pseudo-builder marks the

> mdoc directory for cleaning.

> """

>

> source = [env.File(s) for s in source]

> r = builders.doc(env, target, source, *args, **kwargs)

>

> for t, s in zip(r, source):

>

> # get a bunch of paths

> svg_dir = env.Dir(os.sep.join([t.abspath, "svg", "svg-01"]))

> process_svg = svg_dir.File("process.svg")

> process_pdf = svg_dir.File("process.pdf")

> s_basename = os.path.splitext(os.path.basename(s.path))[0]

> tex_path = env.File(os.sep.join([t.abspath, "tex", s_basename+".tex"]))

> pdf_path = env.File(os.sep.join([t.abspath, "pdf", s_basename+".pdf"]))

>

> print(pdf_path)

>

> # compile the LaTeX sources to PDF

> process_pdf = builders.cairosvg(env, process_pdf.abspath, process_svg.abspath)

> cur_pdf = env.PDF(pdf_path, tex_path)

>

> # set the dependencies straight

> env.Depends(process_pdf, t)

> env.Depends(cur_pdf, process_pdf)

>

> # the svg and pdf subdirectories change because of process_pdf and

> # cur_pdf, so make sure the *-mdoc directory ignores them

> env.Ignore(t, t.Dir("svg"))

> env.Ignore(t, t.Dir("pdf"))

>

> # make sure to clean up the documentation directory

> env.Clean(t, t.abspath)

>

> r.extend([cur_pdf, process_pdf])

>

> return r

[...]

So I made two changes and the pseudo-builder now looks like this:

def doc_builder(env, target, source, *args, **kwargs):
"""
A pseudo-builder for generating documentation via faust -mdoc.

In addition to what the doc builder does, this pseudo-builder marks the mdoc
directory for cleaning.
"""

source = [env.File(s) for s in source]
r = builders.doc(env, target, source, *args, **kwargs)

for t, s in zip(r, source):

# get a bunch of paths
svg_dir = env.Dir(os.sep.join([t.abspath, "svg", "svg-01"]))
process_svg = svg_dir.File("process.svg")
process_pdf = svg_dir.File("process.pdf")
s_basename = os.path.splitext(os.path.basename(s.path))[0]
tex_path = env.File(os.sep.join([t.abspath, "tex", s_basename+".tex"]))
pdf_path = env.File(os.sep.join([t.abspath, "tex", s_basename+".pdf"]))

print(pdf_path)

# compile the LaTeX sources to PDF
process_pdf = builders.cairosvg(env, process_pdf.abspath, process_svg.abspath)
cur_pdf = env.PDF(pdf_path, tex_path)

# the svg and pdf subdirectories change because of process_pdf and
# cur_pdf, so make sure the *-mdoc directory ignores them
env.Ignore(t, t.Dir("svg"))
env.Ignore(t, t.Dir("tex"))

# set the dependencies straight
env.Depends(process_svg, t)
env.Depends(cur_pdf, process_pdf)

# make sure to clean up the documentation directory
env.Clean(t, t.abspath)

r.extend([cur_pdf, process_pdf])

return r

The two changes I made are:

- the first env.Depends() now has process_svg (instead of process_pdf) depend on t
- pdf_path now resides in the same directory as the LaTeX source

The first change consistently moves the error when using "-j2" to the cur_pdf
object, i.e., process_pdf always builds and the error is now with cur_pdf. I
don't know *why* that should be the case, but that's what happens. The scons
output is thus always similar to:

$ scons -j2 rmfbs_sum-mdoc
scons: Reading SConscript files ...

scons: warning: QT4DIR variable is not defined, using moc executable as a hint (QT4DIR=/usr)
File "/home/marcec/.scons/site_scons/site_tools/qt4/__init__.py", line 384, in _detect
/home/marcec/programming/faust_rm_filter_bank/mdoc/mbstereophonyd_sum-mdoc/tex/mbstereophonyd_sum.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/mbstereophonyd_syn-mdoc/tex/mbstereophonyd_syn.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/mbstereophonys_sum-mdoc/tex/mbstereophonys_sum.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/mbstereophonys_syn-mdoc/tex/mbstereophonys_syn.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/rmfbd_sum-mdoc/tex/rmfbd_sum.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/rmfbd_syn-mdoc/tex/rmfbd_syn.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/rmfbs_sum-mdoc/tex/rmfbs_sum.pdf
/home/marcec/programming/faust_rm_filter_bank/mdoc/rmfbs_syn-mdoc/tex/rmfbs_syn.pdf
scons: done reading SConscript files.
scons: Building targets ...
/usr/bin/faust -t 4800 -vec -o /dev/null -mdoc src/rmfbs_sum.dsp
Move("mdoc/rmfbs_sum-mdoc", "src/rmfbs_sum-mdoc")
cairosvg --format=pdf -o mdoc/rmfbs_sum-mdoc/svg/svg-01/process.pdf mdoc/rmfbs_sum-mdoc/svg/svg-01/process.svg
scons: *** [mdoc/rmfbs_sum-mdoc/tex/rmfbs_sum.pdf] Source `mdoc/rmfbs_sum-mdoc/tex/rmfbs_sum.tex' not found, needed by target `mdoc/rmfbs_sum-mdoc/tex/rmfbs_sum.pdf'.
scons: building terminated because of errors.

The second change makes "-j1" work consistently (except again for the case with
an empty target argument; I also tried passing the source as a keyword argument
"source=dsp", in case there was an issue with it being wrapped in a
BuilderWrapper, but that changed nothing).

So as to why I had to make the second change above: that probably has to do
with the fact that $PDFTEXCOM et.al. use ${SOURCE.file} instead of $SOURCE. I
presume there is/was a reason for this (I couldn't find one when searching
through CHANGES.txt)?

And as to why PDF() still fails on the first run with "-j2"... I have no
idea :( .

At least I'm a little bit further than I was before.

There are some other issues I found with the tool that I will work on (to do
with the dsp source scanner and variant dirs with duplicate=False), but I don't
think they have anything to do with this.

Greetings,
--
Marc Joliet
--
"People who think they know everything really annoy those of us who know we
don't" - Bjarne Stroustrup
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
Url : http://four.pairlist.net/pipermail/scons-users/attachments/20130608/222dff17/attachment.pgp


More information about the Scons-users mailing list