root/livinglogic.python.www/site/m.py @ 387:2fba3d5c9588

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

Try to get m.py to run with the new make (doesn't work yet).

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