root/livinglogic.python.www/site/m.py @ 410:3744a206666f

Revision 410:3744a206666f, 13.9 KB (checked in by Walter Doerwald <walter@…>, 14 years ago)

Don't generate duplicate version of the ll.xist.ns.text and ll.xist.ns.doc
modules.

ll-core release 1.3.1.

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