root/livinglogic.python.www/site/m.py @ 238:005dd658cedd

Revision 238:005dd658cedd, 12.6 KB (checked in by Walter Doerwald <walter@…>, 16 years ago)

Update to XIST 2.4.

  • Property exe set to *
Line 
1#!/usr/bin/env python
2
3from ll.xist import xsc
4
5import sys, os, os.path, errno
6
7from ll import make, url
8from ll.xist import parsers, publishers
9from ll.xist.ns import text, doc, fo, specials, abbr, code, chars, css, cssspecials
10
11class Project(make.Project):
12    def create(self):
13        print "Creating dependancies ...",
14        sys.stdout.flush()
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        pythonrootdir = home/"pythonroot/ll/"
23        xistdir = url.firstdir([here/"../xist_src/", home/"LivingLogic/xist/"])
24
25        build = make.PhonyTarget(self, "build")
26        install = make.PhonyTarget(self, "install")
27        clean = make.PhonyTarget(self, "clean", make.CommandAction("rm -rf %s" % (here/builddir).asFilename()))
28        installclean = make.PhonyTarget(self, "installclean", make.CommandAction("rm -rf %s/*" % (here/installdir).asFilename()))
29        installclean.dependOn(clean)
30
31        namespaces = []
32        files = srcdir.files()
33
34        pixelfiles = [ file for file in xistdir.files() if file.ext=="gif" ]
35
36        extensions = {
37            "gif": make.ImageTarget,
38            "jpg": make.ImageTarget,
39            "png": make.ImageTarget,
40            "css": make.CascadingStyleSheetTarget,
41            "js": make.JavascriptTarget,
42            "xml": make.XMLTarget,
43            "html": make.HTMLTarget,
44            "phtml": make.HTMLTarget,
45            "shtml": make.HTMLTarget,
46            "jsp": make.HTMLTarget,
47            "jspp": make.HTMLTarget,
48            "xsc": make.XISTTarget,
49            "pxsc": make.XISTTarget,
50            "sxsc": make.XISTTarget,
51            "jxsc": make.XISTTarget,
52            "jxscp": make.XISTTarget,
53            "py": make.PythonTarget
54        }
55
56        copyaction = make.CopyAction()
57        copyextensions = {"gif": 1, "jpg": 1, "css": 0, "js":0 }
58        auxFiles = []
59        for id in files:
60            ext = id.ext
61            try:
62                aux = copyextensions[ext]
63            except KeyError:
64                continue
65            class_ = extensions[ext]
66            f = class_(self, here/srcdir/id)
67            f2 = class_(self, here/builddir/id, copyaction)
68            f3 = class_(self, here/installdir/id, copyaction)
69            if aux:
70                auxFiles.append(f2)
71            f2.dependOn(make.MainDep, f)
72            f3.dependOn(make.MainDep, f2)
73            build.dependOn(f2)
74            install.dependOn(f3)
75
76        for id in pixelfiles:
77            f = make.ImageTarget(self, here/xistdir/id)
78            f2 = make.ImageTarget(self, here/builddir/id, copyaction)
79            f3 = make.ImageTarget(self, here/installdir/id, copyaction)
80            auxFiles.append(f2)
81            f2.dependOn(make.MainDep, f)
82            f3.dependOn(make.MainDep, f2)
83            build.dependOn(f2)
84            install.dependOn(f3)
85
86        def makens(prefix, id):
87            f = make.XISTNSTarget(self, here/srcdir/id)
88            f2 = make.XISTNSTarget(self, here/builddir/id, prefix=prefix, actions=copyaction)
89            f2.dependOn(make.MainDep, f)
90            return f2
91
92        pyns = makens("py", "Python_xmlns.py")
93        cssns = makens("css", "css_xmlns.py")
94
95        class XISTTextAction(make.XISTAction):
96            def publish(self, target, node):
97                """
98                <par>publish the <arg>node</arg> as the content of the
99                target <arg>target</arg>.</par>
100                """
101                text = node.asText()
102                outfile = target.id.openwrite()
103                try:
104                    outfile.write(text)
105                except:
106                    target.failed()
107                    raise
108                outfile.close()
109                return len(text)
110
111        class XISTFOAction(make.XISTAction):
112            def convert(self, node, maketarget=None):
113                node = doc.fodoc(node)
114                return make.XISTAction.convert(self, node, maketarget=maketarget)
115       
116        class XISTPDFAction(make.Action):
117            def execute(self, target):
118                sources = target.sources(make.MainDep)
119                if len(sources) !=1:
120                    raise SourceError(self, target, sources)
121                fofilename = sources[0].id.local()
122                pdffilename = target.id.local()
123                pdfdirname = os.path.dirname(pdffilename)
124                try:
125                    os.mkdir(pdfdirname)
126                except OSError, exc:
127                    if exc.errno != errno.EEXIST:
128                        raise
129                os.system("/usr/local/src/fop-0.20.5/fop.sh -q -c /usr/local/src/fop-0.20.5/conf/userconfig.xml -fo %s -pdf %s" % (fofilename, pdffilename))
130
131        xmlparser = parsers.Parser(prefixes=xsc.Prefixes([chars, abbr, doc, code, specials]))
132        cssparser = parsers.Parser(prefixes=xsc.Prefixes([css, cssspecials, code]))
133        publisher = publishers.Publisher(encoding="utf-8", xhtml=1)
134        fopublisher = publishers.Publisher(prefixes=xsc.Prefixes(fo=fo, doc=doc, specials=specials), prefixmode=2)
135        xistaction = make.XISTAction(lang="en")
136        xistactiontext = XISTTextAction(lang="en", target=text)
137        xistactionfo = XISTFOAction(lang="en", target=fo)
138        xistactionpdf = XISTPDFAction()
139        modeaction = make.ModeAction(0644)
140
141        mod_xist = make.PythonTarget(self, here/pythonrootdir/"xist/__init__.py")
142        mod_xist_xsc = make.PythonTarget(self, here/pythonrootdir/"xist/xsc.py")
143        mod_xist_ns = make.PythonTarget(self, here/pythonrootdir/"xist/ns/__init__.py")
144        mod_xist_ns_html = make.PythonTarget(self, here/pythonrootdir/"xist/ns/html.py")
145        mod_xist_ns_wml = make.PythonTarget(self, here/pythonrootdir/"xist/ns/wml.py")
146        mod_xist_ns_ihtml = make.PythonTarget(self, here/pythonrootdir/"xist/ns/ihtml.py")
147        mod_xist_ns_docbook = make.PythonTarget(self, here/pythonrootdir/"xist/ns/docbook.py")
148        mod_xist_ns_abbr = make.PythonTarget(self, here/pythonrootdir/"xist/ns/abbr.py")
149        mod_xist_ns_cond = make.PythonTarget(self, here/pythonrootdir/"xist/ns/cond.py")
150        mod_xist_ns_form = make.PythonTarget(self, here/pythonrootdir/"xist/ns/form.py")
151        mod_xist_ns_php = make.PythonTarget(self, here/pythonrootdir/"xist/ns/php.py")
152        mod_xist_ns_jsp = make.PythonTarget(self, here/pythonrootdir/"xist/ns/jsp.py")
153        mod_xist_ns_meta = make.PythonTarget(self, here/pythonrootdir/"xist/ns/meta.py")
154        mod_xist_ns_ruby = make.PythonTarget(self, here/pythonrootdir/"xist/ns/ruby.py")
155        mod_xist_ns_specials = make.PythonTarget(self, here/pythonrootdir/"xist/ns/specials.py")
156        mod_xist_ns_htmlspecials = make.PythonTarget(self, here/pythonrootdir/"xist/ns/htmlspecials.py")
157        mod_xist_ns_strutshtml = make.PythonTarget(self, here/pythonrootdir/"xist/ns/struts_html.py")
158        mod_xist_ns_strutsconfig = make.PythonTarget(self, here/pythonrootdir/"xist/ns/struts_config.py")
159        mod_xist_ns_doc = make.PythonTarget(self, here/pythonrootdir/"xist/ns/doc.py")
160        mod_xist_ns_css = make.PythonTarget(self, here/pythonrootdir/"xist/ns/css.py")
161        mod_xist_ns_cssspecials = make.PythonTarget(self, here/pythonrootdir/"xist/ns/cssspecials.py")
162        mod_xist_ns_text = make.PythonTarget(self, here/pythonrootdir/"xist/ns/text.py")
163        mod_xist_parsers = make.PythonTarget(self, here/pythonrootdir/"xist/parsers.py")
164        mod_xist_converters = make.PythonTarget(self, here/pythonrootdir/"xist/converters.py")
165        mod_xist_presenters = make.PythonTarget(self, here/pythonrootdir/"xist/presenters.py")
166        mod_xist_publishers = make.PythonTarget(self, here/pythonrootdir/"xist/publishers.py")
167        mod_xist_errors = make.PythonTarget(self, here/pythonrootdir/"xist/errors.py")
168        mod_url = make.PythonTarget(self, here/pythonrootdir/"url.py")
169        mod_make = make.PythonTarget(self, here/pythonrootdir/"make.py")
170        mod_sisyphus = make.PythonTarget(self, here/pythonrootdir/"sisyphus.py")
171        mod_ansistyle = make.PythonTarget(self, here/pythonrootdir/"ansistyle.py")
172        mod_sql = make.PythonTarget(self, here/pythonrootdir/"sql.py")
173
174        for id in files:
175            ext = id.ext
176            if ext and ext.endswith("xsc"):
177                newid = id.withExt(ext[:-3])
178                if ext=="cssxsc":
179                    parser = cssparser
180                else:
181                    parser = xmlparser
182                f = make.XISTTarget(self, here/srcdir/id, base=root/newid, parser=parser)
183                f2 = make.XISTTarget(self, here/builddir/newid, xistaction, base=root/newid, publisher=publisher)
184                f3 = make.XISTTarget(self, here/installdir/newid, actions=(copyaction, modeaction), base=root/newid)
185                f2.dependOn(make.MainDep, f)
186                if ext=="cssxsc":
187                    f2.dependOn(cssns)
188                else:
189                    f2.dependOn(pyns)
190                    f2.dependOn(*auxFiles)
191                f3.dependOn(make.MainDep, f2)
192                build.dependOn(f2)
193                install.dependOn(f3)
194
195                # Build alternate versions of the page
196                if ext != "cssxsc":
197                    # Source version of the page
198                    pagesrcid = id
199                    f2 = make.XISTTarget(self, here/builddir/pagesrcid, copyaction)
200                    f3 = make.XISTTarget(self, here/installdir/pagesrcid, actions=(copyaction, modeaction), publisher=publisher)
201                    f2.dependOn(make.MainDep, f)
202                    f3.dependOn(make.MainDep, f2)
203                    build.dependOn(f2)
204                    install.dependOn(f3)
205
206                    # Plain text version of the page
207                    txtid = id.withext("txt")
208                    t2 = make.XISTTarget(self, here/builddir/txtid, xistactiontext, publisher=publisher)
209                    t2.dependOn(make.MainDep, f)
210                    t2.dependOn(pyns, mod_xist_ns_text)
211       
212                    build.dependOn(t2)
213                    t3 = make.XISTTarget(self, here/installdir/txtid, actions=(copyaction, modeaction), publisher=publisher)
214                    t3.dependOn(make.MainDep, t2)
215                    install.dependOn(t3)
216
217                    # XSL-FO version of the page
218                    foid = id.withext("fo")
219                    fot2 = make.XISTTarget(self, here/builddir/foid, xistactionfo, publisher=fopublisher)
220                    fot2.dependOn(make.MainDep, f)
221                    fot2.dependOn(pyns, mod_xist_ns_doc)
222
223                    build.dependOn(fot2)
224                    fot3 = make.XISTTarget(self, here/installdir/foid, actions=(copyaction, modeaction), publisher=publisher)
225                    fot3.dependOn(make.MainDep, fot2)
226                    install.dependOn(fot3)
227
228                    # PDF version of the page
229                    pdfid = id.withext("pdf")
230                    t2 = make.PDFTarget(self, here/builddir/pdfid, xistactionpdf)
231                    t2.dependOn(make.MainDep, fot2)
232
233                    build.dependOn(t2)
234                    t3 = make.PDFTarget(self, here/installdir/pdfid, actions=(copyaction, modeaction))
235                    t3.dependOn(make.MainDep, t2)
236                    install.dependOn(t3)
237
238        # Additional dependencies (News & Install)
239        params = [
240            ("ansistyle/History", "LivingLogic/Python/ansistyle/NEWS.xml"),
241            ("sisyphus/History", "LivingLogic/Python/sisyphus/NEWS.xml"),
242            ("sql/History", "LivingLogic/Python/sql/NEWS.xml"),
243            ("sql/Installation", "LivingLogic/Python/sql/INSTALL.xml"),
244            ("xist/History", "LivingLogic/xist/NEWS.xml"),
245            ("xist/Installation", "LivingLogic/xist/INSTALL.xml"),
246            ("xist/Howto", "LivingLogic/xist/HOWTO.xml"),
247            ("xist/Migration", "LivingLogic/xist/MIGRATION.xml"),
248            ("url/History", "LivingLogic/Python/url/NEWS.xml"),
249            ("url/Installation", "LivingLogic/Python/url/INSTALL.xml"),
250            ("url/Howto", "LivingLogic/Python/url/HOWTO.xml"),
251            ("make/History", "LivingLogic/Python/make/NEWS.xml"),
252            ("make/Installation", "LivingLogic/Python/make/INSTALL.xml"),
253            ("make/Migration", "LivingLogic/Python/make/MIGRATION.xml"),
254        ]
255
256        for (target, source) in params:
257            source = make.XMLTarget(self, here/repositorydir/source)
258            for ext in ("html", "fo", "txt"):
259                p[here/builddir/(target+"." + ext)].dependOn(source)
260
261        # Docstring and module source dependencies
262        params = [
263            ("xist/", (mod_xist, mod_xist_ns_doc)),
264            ("xist/xsc/", (mod_xist_xsc, mod_xist_ns_doc)),
265            ("xist/ns/", (mod_xist_ns, mod_xist_ns_doc)),
266            ("xist/ns/html/", (mod_xist_ns_html, mod_xist_ns_doc)),
267            ("xist/ns/wml/", (mod_xist_ns_wml, mod_xist_ns_doc)),
268            ("xist/ns/ihtml/", (mod_xist_ns_ihtml, mod_xist_ns_doc)),
269            ("xist/ns/docbook/", (mod_xist_ns_docbook, mod_xist_ns_doc)),
270            ("xist/ns/abbr/", (mod_xist_ns_abbr, mod_xist_ns_doc)),
271            ("xist/ns/cond/", (mod_xist_ns_cond, mod_xist_ns_doc)),
272            ("xist/ns/form/", (mod_xist_ns_form, mod_xist_ns_doc)),
273            ("xist/ns/php/", (mod_xist_ns_php, mod_xist_ns_doc)),
274            ("xist/ns/jsp/", (mod_xist_ns_jsp, mod_xist_ns_doc)),
275            ("xist/ns/meta/", (mod_xist_ns_meta, mod_xist_ns_doc)),
276            ("xist/ns/ruby/", (mod_xist_ns_ruby, mod_xist_ns_doc)),
277            ("xist/ns/specials/", (mod_xist_ns_specials, mod_xist_ns_doc)),
278            ("xist/ns/htmlspecials/", (mod_xist_ns_htmlspecials, mod_xist_ns_doc)),
279            ("xist/ns/struts_html/", (mod_xist_ns_strutshtml, mod_xist_ns_doc)),
280            ("xist/ns/struts_config/", (mod_xist_ns_strutsconfig, mod_xist_ns_doc)),
281            ("xist/ns/doc/", (mod_xist_ns_doc, )),
282            ("xist/ns/css/", (mod_xist_ns_css, mod_xist_ns_doc)),
283            ("xist/ns/cssspecials/", (mod_xist_ns_cssspecials, mod_xist_ns_doc)),
284            ("xist/parsers/",  (mod_xist_parsers, mod_xist_ns_doc)),
285            ("xist/converters/", (mod_xist_converters, mod_xist_ns_doc)),
286            ("xist/presenters/", (mod_xist_presenters, mod_xist_ns_doc)),
287            ("xist/publishers/",  (mod_xist_publishers, mod_xist_ns_doc)),
288            ("xist/errors/",  (mod_xist_errors, mod_xist_ns_doc)),
289            ("url/", (mod_url, mod_xist_ns_doc)),
290            ("make/", (mod_make, mod_xist_ns_doc)),
291            ("sisyphus/", (mod_sisyphus, mod_xist_ns_doc)),
292            ("ansistyle/", (mod_ansistyle, mod_xist_ns_doc)),
293            ("sql/", (mod_sql, mod_xist_ns_doc)),
294        ]
295
296        for (base, mods) in params:
297            for ext in ("html", "fo"):
298                f = p[here/builddir/(base + "index." + ext)]
299                f.dependOn(*mods)
300
301            f2 = make.PythonTarget(self, here/builddir/(base + "index_module.py"), copyaction)
302            f2.dependOn(make.MainDep, mods[0])
303            build.dependOn(f2)
304            f3 = make.PythonTarget(self, here/installdir/(base + "index_module.py"), actions=(copyaction, modeaction))
305            f3.dependOn(make.MainDep, f2)
306            install.dependOn(f3)
307
308        print "done"
309
310p = Project()
311p.create()
312
313if __name__=="__main__":
314    p.buildwithargs(sys.argv[1:])
Note: See TracBrowser for help on using the browser.