root/livinglogic.python.www/site/m.py @ 390:b84ce0455172

Revision 390:b84ce0455172, 13.7 KB (checked in by Walter Doerwald <walter@…>, 13 years ago)

Make it work with the newest version of all modules.

  • Property exe set to *
Line 
1#!/usr/bin/env python
2
3from ll.xist import xsc
4
5import sys, os, os.path, errno, tempfile
6
7from ll import make, url
8from ll.xist import parsers, publishers
9from ll.xist.ns import text, doc, fo, specials, abbr, code, chars
10
11
12class Project(make.Project):
13    def create(self):
14        make.Project.create(self)
15        here = url.here()
16        root = url.root()
17        home = url.home()
18        srcdir = here
19        builddir = here/"../build/"
20        installdir = here/"../install/"
21        repositorydir = home
22        xistdir = url.firstdir([here/"../xist_src/", home/"LivingLogic/Python/xist/"])
23
24        build = self.add(make.PhonyAction(), "build")
25        install = self.add(make.PhonyAction(), "install")
26        clean = self.add(
27            make.PhonyAction("clean the build directory").addinputs(
28                make.alwaysaction / make.CommandAction("rm -rf %s" % (here/builddir).local())
29            ),
30            "clean"
31        )
32
33        installclean = self.add(
34            make.PhonyAction("clean the build and install directory").addinputs(
35                make.alwaysaction / make.CommandAction("rm -rf %s/*" % (here/installdir).local()),
36                clean
37            ),
38            "installclean"
39        )
40
41        namespaces = []
42        files = srcdir.files()
43
44        pixelfiles = [ file for file in xistdir.files() if file.ext=="gif" ]
45
46        class XISTFOAction(make.PipeAction):
47            def execute(self, project, data):
48                project.writestep("Wrapping input in fodoc")
49                return doc.fodoc(data)
50
51        copyextensions = {"gif": True, "jpg": True, "css": False, "js": False}
52        auxFiles = []
53        for id in files:
54            ext = id.ext
55            try:
56                aux = copyextensions[ext]
57            except KeyError:
58                continue
59            f1 = self.add(make.FileAction(here/srcdir/id))
60            f2 = self.add(f1 / make.FileAction(here/builddir/id))
61            f3 = self.add(f2 / make.FileAction(here/installdir/id) / make.ModeAction(here/installdir/id, 0644))
62            if aux:
63                auxFiles.append(f2)
64            build.addinputs(f2)
65            install.addinputs(f3)
66
67        for id in pixelfiles:
68            f1 = self.add(make.FileAction(here/xistdir/id))
69            f2 = self.add(f1 / make.FileAction(here/builddir/id))
70            f3 = self.add(f2 / make.FileAction(here/installdir/id) / make.ModeAction(here/installdir/id, 0644))
71            auxFiles.append(f2)
72            build.addinputs(f2)
73            install.addinputs(f3)
74
75        def makens(prefix, id):
76            f1 = self.add(make.FileAction(here/srcdir/id))
77            buildid = here/builddir/id
78            f2 = self.add(f1 / make.FileAction(buildid) / make.ImportAction(buildid) / make.XISTNSPrefixAction(prefix=prefix), buildid)
79            return f2
80
81        pyns = makens("py", "Python_xmlns.py")
82
83        xmlparser = parsers.Parser(prefixes=xsc.Prefixes([chars, abbr, doc, code, specials]))
84        publisher = publishers.Publisher(encoding="utf-8", xhtml=1)
85        fopublisher = publishers.Publisher(prefixes=xsc.Prefixes(fo=fo, doc=doc, specials=specials), prefixmode=2, encoding="utf-8", xhtml=2)
86
87        # These are now the real installed modules, but their source
88        mod_core = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/__init__.py"))
89        mod_xist = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/__init__.py"))
90        mod_xist_xsc = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/xsc.py"))
91        mod_xist_ns = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/__init__.py"))
92        mod_xist_ns_html = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/html.py"))
93        mod_xist_ns_xml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/xml.py"))
94        mod_xist_ns_wml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/wml.py"))
95        mod_xist_ns_ihtml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/ihtml.py"))
96        mod_xist_ns_docbook = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/docbook.py"))
97        mod_xist_ns_abbr = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/abbr.py"))
98        mod_xist_ns_cond = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/cond.py"))
99        mod_xist_ns_form = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/form.py"))
100        mod_xist_ns_php = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/php.py"))
101        mod_xist_ns_jsp = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/jsp.py"))
102        mod_xist_ns_meta = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/meta.py"))
103        mod_xist_ns_ruby = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/ruby.py"))
104        mod_xist_ns_specials = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/specials.py"))
105        mod_xist_ns_htmlspecials = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/htmlspecials.py"))
106        mod_xist_ns_strutshtml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/struts_html.py"))
107        mod_xist_ns_strutsconfig = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/struts_config.py"))
108        mod_xist_ns_doc = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/doc.py"))
109        mod_xist_ns_rng = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/rng.py"))
110        mod_xist_ns_kid = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/kid.py"))
111        mod_xist_ns_text = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/text.py"))
112        mod_xist_parsers = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/parsers.py"))
113        mod_xist_converters = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/converters.py"))
114        mod_xist_presenters = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/presenters.py"))
115        mod_xist_publishers = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/publishers.py"))
116        mod_xist_sims = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/sims.py"))
117        mod_xist_xfind = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/xfind.py"))
118        mod_misc = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/misc.py"))
119        mod_url = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/url.py"))
120        mod_make = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/make.py"))
121        mod_sisyphus = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/sisyphus.py"))
122        mod_toxic = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/toxic/src/ll/toxic.py"))
123        mod_orasql = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/orasql/src/ll/orasql/__init__.py"))
124        mod_color = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/color.py"))
125        mod_xpit = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/xpit.py"))
126
127        # Data for Additional dependencies (News & Install)
128        docdeps = {
129            "core/History": "LivingLogic/Python/core/NEWS.xml",
130            "core/OldHistory": "LivingLogic/Python/core/OLDNEWS.xml",
131            "core/Installation": "LivingLogic/Python/core/INSTALL.xml",
132            "core/Migration": "LivingLogic/Python/core/MIGRATION.xml",
133            "core/OldMigration": "LivingLogic/Python/core/OLDMIGRATION.xml",
134            "xist/History": "LivingLogic/xist/NEWS.xml",
135            "xist/Installation": "LivingLogic/xist/INSTALL.xml",
136            "xist/Howto": "LivingLogic/xist/HOWTO.xml",
137            "xist/Examples": "LivingLogic/xist/EXAMPLES.xml",
138            "xist/Migration": "LivingLogic/xist/MIGRATION.xml",
139            "url/Howto": "LivingLogic/Python/core/URL_HOWTO.xml",
140            "orasql/History": "LivingLogic/Python/orasql/NEWS.xml",
141            "orasql/Installation": "LivingLogic/Python/orasql/INSTALL.xml",
142            "toxic/History": "LivingLogic/Python/toxic/NEWS.xml",
143            "toxic/Installation": "LivingLogic/Python/toxic/INSTALL.xml",
144            "aplora/History": "LivingLogic/Python/aplora/NEWS.xml",
145            "aplora/Installation": "LivingLogic/Python/aplora/INSTALL.xml",
146        }
147
148        # Docstring and module source dependencies
149        moddeps = {
150            "core/index": (mod_core, mod_xist_ns_doc),
151            "url/index": (mod_url, mod_xist_ns_doc),
152            "make/index": (mod_make, mod_xist_ns_doc),
153            "sisyphus/index": (mod_sisyphus, mod_xist_ns_doc),
154            "misc/index": (mod_misc, mod_xist_ns_doc),
155            "color/index": (mod_color, mod_xist_ns_doc),
156            "xpit/index": (mod_xpit, mod_xist_ns_doc),
157            "xist/index": (mod_xist, mod_xist_ns_doc),
158            "xist/xsc/index": (mod_xist_xsc, mod_xist_ns_doc),
159            "xist/ns/index": (mod_xist_ns, mod_xist_ns_doc),
160            "xist/ns/html/index": (mod_xist_ns_html, mod_xist_ns_doc),
161            "xist/ns/xml/index": (mod_xist_ns_xml, mod_xist_ns_doc),
162            "xist/ns/wml/index": (mod_xist_ns_wml, mod_xist_ns_doc),
163            "xist/ns/ihtml/index": (mod_xist_ns_ihtml, mod_xist_ns_doc),
164            "xist/ns/docbook/index": (mod_xist_ns_docbook, mod_xist_ns_doc),
165            "xist/ns/abbr/index": (mod_xist_ns_abbr, mod_xist_ns_doc),
166            "xist/ns/cond/index": (mod_xist_ns_cond, mod_xist_ns_doc),
167            "xist/ns/form/index": (mod_xist_ns_form, mod_xist_ns_doc),
168            "xist/ns/php/index": (mod_xist_ns_php, mod_xist_ns_doc),
169            "xist/ns/jsp/index": (mod_xist_ns_jsp, mod_xist_ns_doc),
170            "xist/ns/meta/index": (mod_xist_ns_meta, mod_xist_ns_doc),
171            "xist/ns/ruby/index": (mod_xist_ns_ruby, mod_xist_ns_doc),
172            "xist/ns/specials/index": (mod_xist_ns_specials, mod_xist_ns_doc),
173            "xist/ns/htmlspecials/index": (mod_xist_ns_htmlspecials, mod_xist_ns_doc),
174            "xist/ns/struts_html/index": (mod_xist_ns_strutshtml, mod_xist_ns_doc),
175            "xist/ns/struts_config/index": (mod_xist_ns_strutsconfig, mod_xist_ns_doc),
176            "xist/ns/doc/index": (mod_xist_ns_doc, ),
177            "xist/ns/rng/index": (mod_xist_ns_rng, mod_xist_ns_doc),
178            "xist/ns/kid/index": (mod_xist_ns_kid, mod_xist_ns_doc),
179            "xist/parsers/index":  (mod_xist_parsers, mod_xist_ns_doc),
180            "xist/converters/index": (mod_xist_converters, mod_xist_ns_doc),
181            "xist/presenters/index": (mod_xist_presenters, mod_xist_ns_doc),
182            "xist/publishers/index":  (mod_xist_publishers, mod_xist_ns_doc),
183            "xist/sims/index":  (mod_xist_sims, mod_xist_ns_doc),
184            "xist/xfind/index":  (mod_xist_xfind, mod_xist_ns_doc),
185            "toxic/index": (mod_toxic, mod_xist_ns_doc),
186            "orasql/index": (mod_orasql, mod_xist_ns_doc),
187        }
188
189        for id in files:
190            ext = id.ext
191            if ext and ext.endswith("xsc"):
192                newid = id.withExt(ext[:-3])
193
194                base = id.withoutext().file
195                path = str(id.withoutext().path)
196
197                parser = xmlparser
198                f = self.add(make.FileAction(here/srcdir/id))
199
200                realf = f
201                if base in docdeps or path in moddeps:
202                    collect = make.CollectAction()
203                    if base in docdeps:
204                        collect.addinputs(make.FileAction(here/repositorydir/docdeps[base]))
205                    if path in moddeps:
206                        mods = moddeps[path]
207                        collect.addinputs(*mods)
208                        mod2 = self.add(mods[0] / make.FileAction(here/builddir/(path + "_module.py")))
209                        mod3 = self.add(mod2 / make.FileAction(here/installdir/(path + "_module.py")) / make.ModeAction(here/installdir/(path + "_module.py"), 0644))
210                        build.addinputs(mod2)
211                        install.addinputs(mod3)
212                    realf /= collect
213
214                f2 = self.add(
215                    realf /
216                    make.XISTParseAction(parser=parser, base=root/newid).addinputs(pyns) /
217                    make.CollectAction().addinputs(*auxFiles) /
218                    make.XISTConvertAction() /
219                    make.XISTPublishAction(publisher=publisher, base=root/newid) /
220                    make.FileAction(here/builddir/newid)
221                )
222                f3 = self.add(f2 / make.FileAction(here/installdir/newid))
223                build.addinputs(f2)
224                install.addinputs(f3)
225
226                # Build alternate versions of the page
227                # Source version of the page
228                pagesrcid = id
229                f2 = self.add(f / make.FileAction(here/builddir/pagesrcid))
230                f3 = self.add(f2 / make.FileAction(here/installdir/pagesrcid) / make.ModeAction(here/installdir/pagesrcid, 0644))
231                build.addinputs(f2)
232                install.addinputs(f3)
233
234                # Plain text version of the page
235                realf = f
236                if base in docdeps:
237                    collect = make.CollectAction()
238                    collect.addinputs(make.FileAction(here/repositorydir/docdeps[base]))
239                    realf /= collect
240
241                txtid = id.withext("txt")
242                t2 = self.add(
243                    realf /
244                    make.XISTParseAction(parser, root/txtid).addinputs(pyns, mod_xist_ns_text / make.ImportAction(mod_xist_ns_text.id)) /
245                    make.XISTConvertAction(target=text) /
246                    make.XISTTextAction() /
247                    make.FileAction(here/builddir/txtid)
248                )
249                t3 = self.add(
250                    t2 /
251                    make.FileAction(here/installdir/txtid) /
252                    make.ModeAction(here/installdir/txtid, 0644)
253                )
254                build.addinputs(t2)
255                install.addinputs(t3)
256
257                # XSL-FO version of the page
258                realf = f
259                if base in docdeps or path in moddeps:
260                    collect = make.CollectAction()
261                    if base in docdeps:
262                        collect.addinputs(make.FileAction(here/repositorydir/docdeps[base]))
263                    if path in moddeps:
264                        mods = moddeps[path]
265                        collect.addinputs(*mods)
266                    realf /= collect
267
268                foid = id.withext("fo")
269                fot2 = self.add(
270                    realf /
271                    make.XISTParseAction(parser, root/foid).addinputs(pyns, mod_xist_ns_doc / make.ImportAction(mod_xist_ns_doc.id)) /
272                    XISTFOAction() /
273                    make.XISTConvertAction(target=fo) /
274                    make.XISTPublishAction(fopublisher, root/foid) /
275                    make.FileAction(here/builddir/foid)
276                )
277
278                fot3 = self.add(
279                    fot2 /
280                    make.FileAction(here/installdir/foid) /
281                    make.ModeAction(here/installdir/foid, 0644)
282                )
283                build.addinputs(fot2)
284                install.addinputs(fot3)
285
286                # PDF version of the page
287                pdfid = id.withext("pdf")
288                t2 = self.add(
289                    fot2 /
290                    make.FOPAction() /
291                    make.FileAction(here/builddir/pdfid)
292                )
293                t3 = self.add(
294                    f2 /
295                    make.FileAction(here/installdir/pdfid) /
296                    make.ModeAction(here/installdir/pdfid, 0644)
297                )
298                build.addinputs(t2)
299                install.addinputs(t3)
300
301        self.writecreatedone()
302
303
304p = Project()
305
306
307if __name__=="__main__":
308    (options, args) = p.parseoptions()
309    if args:
310        p.create()
311        p.build(*args)
312else:
313    p.create()
Note: See TracBrowser for help on using the browser.