1 # vim: set filetype=python :
2 # arch-tag: general-purpose SCons build file for sgml-common
7 ############################################################
9 ############################################################
11 SConsignFile('.sconsign-master')
16 if not 'INDEXNODE' in d
:
17 d
['INDEXNODE'] = 'ch.index'
18 if not 'GTKIMGPATH' in d
:
19 d
['GTKIMGPATH'] = '/usr/share/gtk-doc/data'
20 if not 'PS2EPSI' in d
:
21 d
['PS2EPSI'] = '../sgml-common/ps2epsi'
24 while 'index/index.sgml' in l
:
25 l
.remove('index/index.sgml')
27 master
= d
['MASTERBASE']
28 mastersgml
= master
+ '.sgml'
29 sources
= [mastersgml
] + glob('*/*.sgml') + glob('*/*/*.sgml')
31 db2htmlcmd
= 'docbook-2-html -D $JADE ${HTMLARGS} ${SOURCE}'
32 db2htmlindexcmd
= 'docbook-2-html -D $JADE -O -V -O html-index ${HTMLARGS} ${SOURCE}'
34 ##################################################
36 ##################################################
37 def recursescan(scanner
, node
, env
):
38 result
= scanner(node
, env
)
42 retval
.extend(recursescan(scanner
, item
, env
))
45 SGML_includes_re
= re
.compile(r
'<!ENTITY[^>]+SYSTEM[^>]+"(.+)"', re
.M
)
46 def SGML_includes_scan(node
, env
, path
):
47 ret
= SGML_includes_re
.findall(node
.get_contents())
51 SGML_includes_scanner
= Scanner(name
= 'SGML_includes',
52 function
= SGML_includes_scan
, recursive
= 1, skeys
= ['.sgml', '.ent'])
54 SGML_image_pdf_re
= re
.compile(r
'<(graphic|imagedata).+?fileref="([^"]+\.pdf)"', re
.S
)
55 SGML_image_png_re
= re
.compile(r
'<(graphic|imagedata).+?fileref="([^"]+\.png)"', re
.S
)
56 def SGML_image_scanner(node
, env
, path
, arg
):
57 root
, ext
= os
.path
.splitext(str(node
))
58 contents
= node
.get_contents()
59 return SGML_includes_scan(node
, env
, path
) + \
60 [os
.getcwd() + '/' + x
[1] for x
in arg
.findall(contents
)]
62 SGML_pdf_scanner
= Scanner(name
= 'SGML_pdf',
63 function
= SGML_image_scanner
, argument
= SGML_image_pdf_re
,
65 SGML_png_scanner
= Scanner(name
= 'SGML_png',
66 function
= SGML_image_scanner
, argument
= SGML_image_png_re
,
69 ##################################################
71 ##################################################
74 Btxt
= Builder(action
="docbook2txt $SOURCE", src_suffix
='.sgml', suffix
='.txt')
77 Bpdf
= Builder(action
="docbook-2-pdf -D ${JADE} -q -O -V -O paper-size=Letter ${PDFARGS} ${SOURCE}",
78 src_suffix
='.sgml', suffix
='.pdf')
79 Bpdf2ps
= Builder(action
="pdftops ${SOURCE}", src_suffix
='.pdf', suffix
='.ps')
83 Bman
= Builder(action
="docbook2man $SOURCE", src_suffix
='.sgml', suffix
='.1')
86 Bhtml
= Builder(action
= [ \
87 'if test -d ${TARGET.dir} ; then rm -r ${TARGET.dir} ; fi',
88 'mkdir ${TARGET.dir}',
90 'mv ${MASTERBASE}-html/* ${TARGET.dir}/',
91 'rmdir ${MASTERBASE}-html',
92 'ln -s ${TOPNODE}.html ${TARGET.dir}/index.html',
93 'cp ${GTKIMGPATH}/*.png ${TARGET.dir}/'])
96 Bepip2png
= Builder(action
= 'gs -q -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ' +\
97 '-r90 -dBATCH -dNOPAUSE -dSAFER -sOutputFile=$TARGET ' + \
98 '-sDEVICE=png16m $SOURCE -c showpage', suffix
='.png', src_suffix
='.pngepi')
101 def getpagenumfromname(target
, source
, env
, for_signature
):
102 return re
.search('^.*_(\d+)\.(png){0,1}epi$', str(target
[0])).group(1)
103 d
['GETPAGE'] = getpagenumfromname
105 Aps2epi
= Action(['psselect -q ${GETPAGE} $SOURCE temp.ps',
106 'psresize -w ${WIDTH} -h ${HEIGHT} temp.ps temp2.ps',
107 '$PS2EPSI temp2.ps $TARGET',
108 'rm temp.ps temp2.ps'])
109 Bps2epi
= Builder(action
=Aps2epi
, src_suffix
='.ps', suffix
='.epi')
110 Bps2epip
= Builder(action
=Aps2epi
, src_suffix
='.ps', suffix
='.pngepi')
111 Bepi2pdf
= Builder(action
="epstopdf -o=${TARGET} ${SOURCE}", suffix
='.pdf',
115 Bplucker
= Builder(action
= 'plucker-build --bpp=4 --compression=zlib ' + \
116 '--doc-name="${MASTERBASE}" -H file:${SOURCE.abspath} -M 5 ' + \
117 '--maxheight=320 --maxwidth=310 --staybelow=file:`pwd`/${SOURCE.dir} ' + \
118 '--title="${MASTERBASE}" -p . -f ${MASTERBASE}')
120 ##################################################
122 ##################################################
124 env
.Append(BUILDERS
= {'Text': Btxt
, 'PDF2PS': Bpdf2ps
, 'PDF': Bpdf
, 'HTML': Bhtml
,
125 'Plucker': Bplucker
, 'PS2EPI': Bps2epi
, 'PS2EPIP': Bps2epip
,
126 'EPI2PDF': Bepi2pdf
, 'EPIP2PNG': Bepip2png
, 'MAN': Bman
})
128 #### INDEX GENERATION
130 Bindex
= Builder(action
= ['if test -d ${TARGET.dir} ; then rm -r ${TARGET.dir} ; fi',
131 "mkdir ${TARGET.dir}",
132 "collateindex.pl -i $INDEXNODE -N -o $TARGET",
134 "mv ${MASTERBASE}-html/HTML.index ${TARGET.dir}/",
135 "rm -r ${MASTERBASE}-html",
136 "collateindex.pl -i $INDEXNODE -g -o $TARGET ${TARGET.dir}/HTML.index"])
137 env
['BUILDERS']['Index'] = Bindex
138 index
= env
.Index('index/index.sgml', mastersgml
)
139 env
.Depends(index
, sources
)
140 env
.Clean(index
, 'index')
141 deps
= sources
+ [index
]
145 ##################################################
147 ###################################################
149 text
= env
.Text(mastersgml
)
150 env
.Depends(text
, deps
)
151 env
.Alias('text', text
)
154 pdfsgml
= File(mastersgml
)
155 pdf
= env
.PDF(pdfsgml
)
156 figsindoc
= [x
for x
in recursescan(SGML_pdf_scanner
, pdfsgml
, env
) if str(x
).endswith('.pdf')]
158 for file in figsindoc
:
159 pdfname
= re
.sub('_\d+\.pdf$', '.pdf', str(file))
160 if pdfname
== str(file):
161 # This is not a filename that fits our pattern; add unmodified.
164 psfile
= env
.PDF2PS(source
= pdfname
)
165 epifile
= env
.PS2EPI(str(file).replace(".pdf", ".epi"), psfile
,
166 WIDTH
='6.375in', HEIGHT
='8.25in')
167 epipdf
.append(env
.EPI2PDF(source
= epifile
))
169 env
.Depends(pdf
, deps
)
170 env
.Depends(pdf
, epipdf
)
171 env
.Alias('pdf', pdf
)
172 env
.Clean(pdf
, ['jadetex.cfg', '${MASTERBASE}.aux', '${MASTERBASE}.dvi',
173 '${MASTERBASE}.jtex', '${MASTERBASE}.log', '${MASTERBASE}.out',
177 ps
= env
.PDF2PS(source
= pdf
)
181 htmlsgml
= File(mastersgml
)
182 buildhtml
= env
.HTML('html/index.html', htmlsgml
)
183 figsindoc
= [x
for x
in recursescan(SGML_png_scanner
, htmlsgml
, env
) if str(x
).endswith('.png')]
185 for file in figsindoc
:
186 pdfname
= re
.sub('_\d+\.png$', '.pdf', str(file))
187 if pdfname
== str(file):
188 # This is not a filename that fits our pattern; add unmodified.
191 psfile
= env
.PDF2PS(source
= pdfname
)
192 epifile
= env
.PS2EPIP(str(file).replace(".png", ".pngepi"), psfile
,
193 WIDTH
='8.5in', HEIGHT
='11in')
194 epipng
.append(env
.EPIP2PNG(source
= epifile
))
196 env
.Depends(buildhtml
, epipng
)
197 env
.Depends(buildhtml
, deps
)
198 pnginstalls
= env
.InstallAs(['html/' + str(x
) for x
in epipng
], epipng
)
199 env
.Depends(pnginstalls
, buildhtml
)
200 html
= env
.Alias('html', buildhtml
)
201 html
= env
.Alias('html', pnginstalls
)
202 env
.Clean(buildhtml
, 'html')
205 plucker
= env
.Plucker(master
+ '.pdb', 'html/index.html')
206 env
.Alias('plucker', plucker
)