root/livinglogic.python.www/site/m.py @ 425:d6908263a954

Revision 425:d6908263a954, 14.1 KB (checked in by Walter Doerwald <walter@…>, 13 years ago)

Docstring dependency.

  • 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 str(file).startswith("px/") and 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(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(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.ModuleAction() / 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 not the real installed modules, but their source
88        file_core = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/__init__.py"))
89        file_xist = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/__init__.py"))
90        file_xist_xsc = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/xsc.py"))
91        file_xist_ns = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/__init__.py"))
92        file_xist_ns_html = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/html.py"))
93        file_xist_ns_xml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/xml.py"))
94        file_xist_ns_wml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/wml.py"))
95        file_xist_ns_ihtml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/ihtml.py"))
96        file_xist_ns_docbook = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/docbook.py"))
97        file_xist_ns_abbr = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/abbr.py"))
98        file_xist_ns_cond = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/cond.py"))
99        file_xist_ns_form = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/form.py"))
100        file_xist_ns_php = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/php.py"))
101        file_xist_ns_jsp = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/jsp.py"))
102        file_xist_ns_meta = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/meta.py"))
103        file_xist_ns_ruby = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/ruby.py"))
104        file_xist_ns_specials = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/specials.py"))
105        file_xist_ns_htmlspecials = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/htmlspecials.py"))
106        file_xist_ns_strutshtml = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/struts_html.py"))
107        file_xist_ns_strutsconfig = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/struts_config.py"))
108        file_xist_ns_doc = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/doc.py"))
109        file_xist_ns_rng = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/rng.py"))
110        file_xist_ns_kid = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/kid.py"))
111        file_xist_ns_detox = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/detox.py"))
112        file_xist_ns_text = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/ns/text.py"))
113        file_xist_parsers = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/parsers.py"))
114        file_xist_converters = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/converters.py"))
115        file_xist_presenters = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/presenters.py"))
116        file_xist_publishers = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/publishers.py"))
117        file_xist_sims = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/sims.py"))
118        file_xist_xfind = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/xist/src/ll/xist/xfind.py"))
119        file_misc = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/misc.py"))
120        file_url = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/url.py"))
121        file_make = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/make.py"))
122        file_sisyphus = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/sisyphus.py"))
123        file_daemon = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/daemon.py"))
124        file_toxic = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/toxic/src/ll/toxic.py"))
125        file_orasql = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/orasql/src/ll/orasql/__init__.py"))
126        file_color = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/color.py"))
127        file_xpit = self.add(make.FileAction(here/repositorydir/"LivingLogic/Python/core/src/ll/xpit.py"))
128
129        mod_xist_ns_text = file_xist_ns_text / make.ModuleAction()
130        mod_xist_ns_doc = file_xist_ns_doc / make.ModuleAction()
131
132        # Data for Additional dependencies (News & Install)
133        docdeps = {
134            "core/History": "LivingLogic/Python/core/NEWS.xml",
135            "core/OldHistory": "LivingLogic/Python/core/OLDNEWS.xml",
136            "core/Installation": "LivingLogic/Python/core/INSTALL.xml",
137            "core/Migration": "LivingLogic/Python/core/MIGRATION.xml",
138            "core/OldMigration": "LivingLogic/Python/core/OLDMIGRATION.xml",
139            "xist/History": "LivingLogic/Python/xist/NEWS.xml",
140            "xist/Installation": "LivingLogic/Python/xist/INSTALL.xml",
141            "xist/Howto": "LivingLogic/Python/xist/HOWTO.xml",
142            "xist/Examples": "LivingLogic/Python/xist/EXAMPLES.xml",
143            "xist/Migration": "LivingLogic/Python/xist/MIGRATION.xml",
144            "url/Howto": "LivingLogic/Python/core/URL_HOWTO.xml",
145            "orasql/History": "LivingLogic/Python/orasql/NEWS.xml",
146            "orasql/Installation": "LivingLogic/Python/orasql/INSTALL.xml",
147            "toxic/History": "LivingLogic/Python/toxic/NEWS.xml",
148            "toxic/Installation": "LivingLogic/Python/toxic/INSTALL.xml",
149            "aplora/History": "LivingLogic/Python/aplora/NEWS.xml",
150            "aplora/Installation": "LivingLogic/Python/aplora/INSTALL.xml",
151        }
152
153        # Docstring and module source dependencies
154        moddeps = {
155            "core/index": (file_core, file_xist_ns_doc),
156            "url/index": (file_url, file_xist_ns_doc),
157            "make/index": (file_make, file_xist_ns_doc),
158            "sisyphus/index": (file_sisyphus, file_xist_ns_doc),
159            "daemon/index": (file_daemon, file_xist_ns_doc),
160            "misc/index": (file_misc, file_xist_ns_doc),
161            "color/index": (file_color, file_xist_ns_doc),
162            "xpit/index": (file_xpit, file_xist_ns_doc),
163            "xist/index": (file_xist, file_xist_ns_doc),
164            "xist/xsc/index": (file_xist_xsc, file_xist_ns_doc),
165            "xist/ns/index": (file_xist_ns, file_xist_ns_doc),
166            "xist/ns/html/index": (file_xist_ns_html, file_xist_ns_doc),
167            "xist/ns/xml/index": (file_xist_ns_xml, file_xist_ns_doc),
168            "xist/ns/wml/index": (file_xist_ns_wml, file_xist_ns_doc),
169            "xist/ns/ihtml/index": (file_xist_ns_ihtml, file_xist_ns_doc),
170            "xist/ns/docbook/index": (file_xist_ns_docbook, file_xist_ns_doc),
171            "xist/ns/abbr/index": (file_xist_ns_abbr, file_xist_ns_doc),
172            "xist/ns/cond/index": (file_xist_ns_cond, file_xist_ns_doc),
173            "xist/ns/form/index": (file_xist_ns_form, file_xist_ns_doc),
174            "xist/ns/php/index": (file_xist_ns_php, file_xist_ns_doc),
175            "xist/ns/jsp/index": (file_xist_ns_jsp, file_xist_ns_doc),
176            "xist/ns/meta/index": (file_xist_ns_meta, file_xist_ns_doc),
177            "xist/ns/ruby/index": (file_xist_ns_ruby, file_xist_ns_doc),
178            "xist/ns/specials/index": (file_xist_ns_specials, file_xist_ns_doc),
179            "xist/ns/htmlspecials/index": (file_xist_ns_htmlspecials, file_xist_ns_doc),
180            "xist/ns/struts_html/index": (file_xist_ns_strutshtml, file_xist_ns_doc),
181            "xist/ns/struts_config/index": (file_xist_ns_strutsconfig, file_xist_ns_doc),
182            "xist/ns/doc/index": (file_xist_ns_doc, ),
183            "xist/ns/rng/index": (file_xist_ns_rng, file_xist_ns_doc),
184            "xist/ns/kid/index": (file_xist_ns_kid, file_xist_ns_doc),
185            "xist/ns/detox/index": (file_xist_ns_detox, file_xist_ns_doc),
186            "xist/parsers/index":  (file_xist_parsers, file_xist_ns_doc),
187            "xist/converters/index": (file_xist_converters, file_xist_ns_doc),
188            "xist/presenters/index": (file_xist_presenters, file_xist_ns_doc),
189            "xist/publishers/index":  (file_xist_publishers, file_xist_ns_doc),
190            "xist/sims/index":  (file_xist_sims, file_xist_ns_doc),
191            "xist/xfind/index":  (file_xist_xfind, file_xist_ns_doc),
192            "toxic/index": (file_toxic, file_xist_ns_doc),
193            "orasql/index": (file_orasql, file_xist_ns_doc),
194        }
195
196        for id in files:
197            ext = id.ext
198            if ext and ext.endswith("xsc"):
199                newid = id.withExt(ext[:-3])
200
201                path = str(id.withoutext().path)
202
203                f = self.add(make.FileAction(here/srcdir/id))
204
205                collect = make.CollectAction()
206                collect.addinputs(*auxFiles)
207
208                if path in docdeps:
209                    docxml = self.add(make.FileAction(here/repositorydir/docdeps[path]))
210                    collect.addinputs(docxml)
211                if path in moddeps:
212                    mods = moddeps[path]
213                    collect.addinputs(*mods)
214                    mod2 = self.add(mods[0] / make.FileAction(here/builddir/(path + "_module.py")))
215                    mod3 = self.add(mod2 / make.FileAction(here/installdir/(path + "_module.py")) / make.ModeAction(0644))
216                    build.addinputs(mod2)
217                    install.addinputs(mod3)
218
219                f2 = self.add(
220                    f /
221                    collect /
222                    make.XISTParseAction(parser=xmlparser, base=root/newid).addinputs(pyns) /
223                    make.XISTConvertAction() /
224                    make.XISTPublishAction(publisher=publisher, base=root/newid) /
225                    make.FileAction(here/builddir/newid)
226                )
227                f3 = self.add(f2 / make.FileAction(here/installdir/newid))
228                build.addinputs(f2)
229                install.addinputs(f3)
230
231                # Build alternate versions of the page
232                # Source version of the page
233                pagesrcid = id
234                f2 = self.add(f / make.FileAction(here/builddir/pagesrcid))
235                f3 = self.add(f2 / make.FileAction(here/installdir/pagesrcid) / make.ModeAction(0644))
236                build.addinputs(f2)
237                install.addinputs(f3)
238
239                # Plain text version of the page
240                realf = f
241                if path in docdeps or path in moddeps:
242                    collect = make.CollectAction()
243                    if path in docdeps:
244                        collect.addinputs(docxml)
245                    if path in moddeps:
246                        mods = moddeps[path]
247                        collect.addinputs(*mods)
248                    realf /= collect
249
250                txtid = id.withext("txt")
251                t2 = self.add(
252                    realf /
253                    make.XISTParseAction(xmlparser, root/txtid).addinputs(pyns, mod_xist_ns_doc, mod_xist_ns_text) /
254                    make.XISTConvertAction(target=text) /
255                    make.XISTTextAction() /
256                    make.FileAction(here/builddir/txtid)
257                )
258                t3 = self.add(
259                    t2 /
260                    make.FileAction(here/installdir/txtid) /
261                    make.ModeAction(0644)
262                )
263                build.addinputs(t2)
264                install.addinputs(t3)
265
266                # XSL-FO version of the page
267                realf = f
268                if path in docdeps or path in moddeps:
269                    collect = make.CollectAction()
270                    if path in docdeps:
271                        collect.addinputs(docxml)
272                    if path in moddeps:
273                        mods = moddeps[path]
274                        collect.addinputs(*mods)
275                    realf /= collect
276
277                foid = id.withext("fo")
278                fot2 = self.add(
279                    realf /
280                    make.XISTParseAction(xmlparser, root/foid).addinputs(pyns, mod_xist_ns_doc) /
281                    XISTFOAction() /
282                    make.XISTConvertAction(target=fo) /
283                    make.XISTPublishAction(fopublisher, root/foid) /
284                    make.FileAction(here/builddir/foid)
285                )
286
287                fot3 = self.add(
288                    fot2 /
289                    make.FileAction(here/installdir/foid) /
290                    make.ModeAction(0644)
291                )
292                build.addinputs(fot2)
293                install.addinputs(fot3)
294
295                # PDF version of the page
296                pdfid = id.withext("pdf")
297                t2 = self.add(
298                    fot2 /
299                    make.FOPAction() /
300                    make.FileAction(here/builddir/pdfid)
301                )
302                t3 = self.add(
303                    t2 /
304                    make.FileAction(here/installdir/pdfid) /
305                    make.ModeAction(0644)
306                )
307                build.addinputs(t2)
308                install.addinputs(t3)
309
310        self.writecreatedone()
311
312
313p = Project()
314
315
316if __name__=="__main__":
317    (options, args) = p.parseoptions()
318    if args:
319        p.create()
320        p.build(*args)
321else:
322    p.create()
Note: See TracBrowser for help on using the browser.