Add vcs-load-dirs project to thirdparty directory.
[Melange.git] / thirdparty / vcs-load-dirs / docs / sgml-common / SConstruct
blobfbf3417948dae527b8f8d4c265373b20cd12ac6d
1 # vim: set filetype=python :
2 # arch-tag: general-purpose SCons build file for sgml-common
4 from glob import glob
5 import os, re
7 ############################################################
8 # Setup
9 ############################################################
11 SConsignFile('.sconsign-master')
12 #Import('env')
13 d = env.Dictionary()
14 if not 'JADE' in d:
15 d['JADE'] = 'jade'
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'
23 def removeindex(l):
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')
30 removeindex(sources)
31 db2htmlcmd = 'docbook-2-html -D $JADE ${HTMLARGS} ${SOURCE}'
32 db2htmlindexcmd = 'docbook-2-html -D $JADE -O -V -O html-index ${HTMLARGS} ${SOURCE}'
34 ##################################################
35 # SCANNERS
36 ##################################################
37 def recursescan(scanner, node, env):
38 result = scanner(node, env)
39 retval = []
40 for item in result:
41 retval.append(item)
42 retval.extend(recursescan(scanner, item, env))
43 return retval
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())
48 removeindex(ret)
49 return ret
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,
64 recursive = 1)
65 SGML_png_scanner = Scanner(name = 'SGML_png',
66 function = SGML_image_scanner, argument = SGML_image_png_re,
67 recursive = 1)
69 ##################################################
70 # BUILDERS
71 ##################################################
73 #### PLAIN TEXT
74 Btxt = Builder(action="docbook2txt $SOURCE", src_suffix='.sgml', suffix='.txt')
76 #### PDF / POSTSCRIPT
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')
81 #### MAN PAGES
82 # FIXME: test this
83 Bman = Builder(action="docbook2man $SOURCE", src_suffix='.sgml', suffix='.1')
85 #### HTML
86 Bhtml = Builder(action = [ \
87 'if test -d ${TARGET.dir} ; then rm -r ${TARGET.dir} ; fi',
88 'mkdir ${TARGET.dir}',
89 db2htmlcmd,
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}/'])
95 #### PNG
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')
100 #### EPI from PS
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',
112 src_suffix='.epi')
114 #### PLUCKER
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 ##################################################
121 # General setup
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
129 if 'DOINDEX' in d:
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",
133 db2htmlindexcmd,
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]
142 else:
143 deps = sources
145 ##################################################
146 # BUILD RULES
147 ###################################################
148 # Text
149 text = env.Text(mastersgml)
150 env.Depends(text, deps)
151 env.Alias('text', text)
153 # PDF
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')]
157 epipdf = []
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.
162 epipdf.append(file)
163 continue
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',
174 'jade-out.fot'])
176 # PS
177 ps = env.PDF2PS(source = pdf)
178 env.Alias('ps', ps)
180 # HTML
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')]
184 epipng = []
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.
189 epipng.append(file)
190 continue
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')
204 # Plucker
205 plucker = env.Plucker(master + '.pdb', 'html/index.html')
206 env.Alias('plucker', plucker)
208 env.Default(html)