root/livinglogic.python.www/site/m.py @ 236:f0c229c0fc0b

Revision 236:f0c229c0fc0b, 12.5 KB (checked in by Walter Doerwald <walter@…>, 16 years ago)

Modernize code.

  • 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 publishers
9from ll.xist.ns import text, doc, fo, specials
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 makeNamespace(id):
87            f = make.XISTNSTarget(self, here/srcdir/id)
88            f2 = make.XISTNSTarget(self, here/builddir/id, copyaction)
89            f2.dependOn(make.MainDep, f)
90            return f2
91
92        pyns = makeNamespace(url.File("Python_xmlns.py"))
93        cssns = makeNamespace(url.File("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                assert len(sources)==1, "XISTPDFAction must have one main source for target %r, has %r" % (target, sources)
120                fofilename = sources[0].id.local()
121                pdffilename = target.id.local()
122                pdfdirname = os.path.dirname(pdffilename)
123                try:
124                    os.mkdir(pdfdirname)
125                except OSError, exc:
126                    if exc.errno != errno.EEXIST:
127                        raise
128                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))
129                #os.remove(fofilename)
130
131        publisher = publishers.Publisher(encoding="utf-8", xhtml=1, root=here/builddir)
132        prefixes = xsc.Prefixes(fo=fo, doc=doc, specials=specials)
133        fopublisher = publishers.Publisher(root=here/builddir, prefixes=prefixes, prefixmode=2)
134        xistaction = make.XISTAction(lang="en")
135        xistactiontext = XISTTextAction(lang="en", target=text)
136        xistactionfo = XISTFOAction(lang="en", target=fo)
137        xistactionpdf = XISTPDFAction()
138        modeaction = make.ModeAction(0644)
139
140        mod_xist = make.PythonTarget(self, here/pythonrootdir/"xist/__init__.py")
141        mod_xist_xsc = make.PythonTarget(self, here/pythonrootdir/"xist/xsc.py")
142        mod_xist_ns = make.PythonTarget(self, here/pythonrootdir/"xist/ns/__init__.py")
143        mod_xist_ns_html = make.PythonTarget(self, here/pythonrootdir/"xist/ns/html.py")
144        mod_xist_ns_wml = make.PythonTarget(self, here/pythonrootdir/"xist/ns/wml.py")
145        mod_xist_ns_ihtml = make.PythonTarget(self, here/pythonrootdir/"xist/ns/ihtml.py")
146        mod_xist_ns_docbook = make.PythonTarget(self, here/pythonrootdir/"xist/ns/docbook.py")
147        mod_xist_ns_abbr = make.PythonTarget(self, here/pythonrootdir/"xist/ns/abbr.py")
148        mod_xist_ns_cond = make.PythonTarget(self, here/pythonrootdir/"xist/ns/cond.py")
149        mod_xist_ns_form = make.PythonTarget(self, here/pythonrootdir/"xist/ns/form.py")
150        mod_xist_ns_php = make.PythonTarget(self, here/pythonrootdir/"xist/ns/php.py")
151        mod_xist_ns_jsp = make.PythonTarget(self, here/pythonrootdir/"xist/ns/jsp.py")
152        mod_xist_ns_meta = make.PythonTarget(self, here/pythonrootdir/"xist/ns/meta.py")
153        mod_xist_ns_ruby = make.PythonTarget(self, here/pythonrootdir/"xist/ns/ruby.py")
154        mod_xist_ns_specials = make.PythonTarget(self, here/pythonrootdir/"xist/ns/specials.py")
155        mod_xist_ns_htmlspecials = make.PythonTarget(self, here/pythonrootdir/"xist/ns/htmlspecials.py")
156        mod_xist_ns_strutshtml = make.PythonTarget(self, here/pythonrootdir/"xist/ns/struts_html.py")
157        mod_xist_ns_strutsconfig = make.PythonTarget(self, here/pythonrootdir/"xist/ns/struts_config.py")
158        mod_xist_ns_doc = make.PythonTarget(self, here/pythonrootdir/"xist/ns/doc.py")
159        mod_xist_ns_css = make.PythonTarget(self, here/pythonrootdir/"xist/ns/css.py")
160        mod_xist_ns_cssspecials = make.PythonTarget(self, here/pythonrootdir/"xist/ns/cssspecials.py")
161        mod_xist_ns_text = make.PythonTarget(self, here/pythonrootdir/"xist/ns/text.py")
162        mod_xist_sources = make.PythonTarget(self, here/pythonrootdir/"xist/sources.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                f = make.XISTTarget(self, here/srcdir/id, base=root/newid)
179                f2 = make.XISTTarget(self, here/builddir/newid, xistaction, base=root/newid, publisher=publisher)
180                f3 = make.XISTTarget(self, here/installdir/newid, actions=(copyaction, modeaction), base=root/newid)
181                f2.dependOn(make.MainDep, f)
182                if ext=="cssxsc":
183                    f2.dependOn(cssns)
184                else:
185                    f2.dependOn(pyns)
186                f2.dependOn(*auxFiles)
187                f3.dependOn(make.MainDep, f2)
188                build.dependOn(f2)
189                install.dependOn(f3)
190
191                # Build alternate versions of the page
192                if ext != "cssxsc":
193                    # Source version of the page
194                    pagesrcid = id
195                    f2 = make.XISTTarget(self, here/builddir/pagesrcid, copyaction)
196                    f3 = make.XISTTarget(self, here/installdir/pagesrcid, actions=(copyaction, modeaction), publisher=publisher)
197                    f2.dependOn(make.MainDep, f)
198                    f3.dependOn(make.MainDep, f2)
199                    build.dependOn(f2)
200                    install.dependOn(f3)
201
202                    # Plain text version of the page
203                    txtid = id.withext("txt")
204                    t2 = make.XISTTarget(self, here/builddir/txtid, xistactiontext, publisher=publisher)
205                    t2.dependOn(make.MainDep, f)
206                    t2.dependOn(pyns, mod_xist_ns_text)
207       
208                    build.dependOn(t2)
209                    t3 = make.XISTTarget(self, here/installdir/txtid, actions=(copyaction, modeaction), publisher=publisher)
210                    t3.dependOn(make.MainDep, t2)
211                    install.dependOn(t3)
212
213                    # XSL-FO version of the page
214                    foid = id.withext("fo")
215                    fot2 = make.XISTTarget(self, here/builddir/foid, xistactionfo, publisher=fopublisher)
216                    fot2.dependOn(make.MainDep, f)
217                    fot2.dependOn(pyns, mod_xist_ns_doc)
218
219                    build.dependOn(fot2)
220                    fot3 = make.XISTTarget(self, here/installdir/foid, actions=(copyaction, modeaction), publisher=publisher)
221                    fot3.dependOn(make.MainDep, fot2)
222                    install.dependOn(fot3)
223
224                    # PDF version of the page
225                    pdfid = id.withext("pdf")
226                    t2 = make.PDFTarget(self, here/builddir/pdfid, xistactionpdf)
227                    t2.dependOn(make.MainDep, fot2)
228
229                    build.dependOn(t2)
230                    t3 = make.PDFTarget(self, here/installdir/pdfid, actions=(copyaction, modeaction))
231                    t3.dependOn(make.MainDep, t2)
232                    install.dependOn(t3)
233
234        # Additional dependencies (News & Install)
235        params = [
236            ("ansistyle/History", "LivingLogic/Python/ansistyle/NEWS.xml"),
237            ("sisyphus/History", "LivingLogic/Python/sisyphus/NEWS.xml"),
238            ("sql/History", "LivingLogic/Python/sql/NEWS.xml"),
239            ("sql/Installation", "LivingLogic/Python/sql/INSTALL.xml"),
240            ("xist/History", "LivingLogic/xist/NEWS.xml"),
241            ("xist/Installation", "LivingLogic/xist/INSTALL.xml"),
242            ("xist/Howto", "LivingLogic/xist/HOWTO.xml"),
243            ("xist/Migration", "LivingLogic/xist/MIGRATION.xml"),
244            ("url/History", "LivingLogic/Python/url/NEWS.xml"),
245            ("url/Installation", "LivingLogic/Python/url/INSTALL.xml"),
246            ("url/Howto", "LivingLogic/Python/url/HOWTO.xml"),
247            ("make/History", "LivingLogic/Python/make/NEWS.xml"),
248            ("make/Installation", "LivingLogic/Python/make/INSTALL.xml"),
249            ("make/Migration", "LivingLogic/Python/make/MIGRATION.xml"),
250        ]
251
252        for (target, source) in params:
253            source = make.XMLTarget(self, here/repositorydir/source)
254            for ext in ("html", "fo", "txt"):
255                p[here/builddir/(target+"." + ext)].dependOn(source)
256
257        # Docstring and module source dependencies
258        params = [
259            ("xist/", (mod_xist, mod_xist_ns_doc)),
260            ("xist/xsc/", (mod_xist_xsc, mod_xist_ns_doc)),
261            ("xist/ns/", (mod_xist_ns, mod_xist_ns_doc)),
262            ("xist/ns/html/", (mod_xist_ns_html, mod_xist_ns_doc)),
263            ("xist/ns/wml/", (mod_xist_ns_wml, mod_xist_ns_doc)),
264            ("xist/ns/ihtml/", (mod_xist_ns_ihtml, mod_xist_ns_doc)),
265            ("xist/ns/docbook/", (mod_xist_ns_docbook, mod_xist_ns_doc)),
266            ("xist/ns/abbr/", (mod_xist_ns_abbr, mod_xist_ns_doc)),
267            ("xist/ns/cond/", (mod_xist_ns_cond, mod_xist_ns_doc)),
268            ("xist/ns/form/", (mod_xist_ns_form, mod_xist_ns_doc)),
269            ("xist/ns/php/", (mod_xist_ns_php, mod_xist_ns_doc)),
270            ("xist/ns/jsp/", (mod_xist_ns_jsp, mod_xist_ns_doc)),
271            ("xist/ns/meta/", (mod_xist_ns_meta, mod_xist_ns_doc)),
272            ("xist/ns/ruby/", (mod_xist_ns_ruby, mod_xist_ns_doc)),
273            ("xist/ns/specials/", (mod_xist_ns_specials, mod_xist_ns_doc)),
274            ("xist/ns/htmlspecials/", (mod_xist_ns_htmlspecials, mod_xist_ns_doc)),
275            ("xist/ns/struts_html/", (mod_xist_ns_strutshtml, mod_xist_ns_doc)),
276            ("xist/ns/struts_config/", (mod_xist_ns_strutsconfig, mod_xist_ns_doc)),
277            ("xist/ns/doc/", (mod_xist_ns_doc, )),
278            ("xist/ns/css/", (mod_xist_ns_css, mod_xist_ns_doc)),
279            ("xist/ns/cssspecials/", (mod_xist_ns_cssspecials, mod_xist_ns_doc)),
280            ("xist/sources/",  (mod_xist_sources, mod_xist_ns_doc)),
281            ("xist/parsers/",  (mod_xist_parsers, mod_xist_ns_doc)),
282            ("xist/converters/", (mod_xist_converters, mod_xist_ns_doc)),
283            ("xist/presenters/", (mod_xist_presenters, mod_xist_ns_doc)),
284            ("xist/publishers/",  (mod_xist_publishers, mod_xist_ns_doc)),
285            ("xist/errors/",  (mod_xist_errors, mod_xist_ns_doc)),
286            ("url/", (mod_url, mod_xist_ns_doc)),
287            ("make/", (mod_make, mod_xist_ns_doc)),
288            ("sisyphus/", (mod_sisyphus, mod_xist_ns_doc)),
289            ("ansistyle/", (mod_ansistyle, mod_xist_ns_doc)),
290            ("sql/", (mod_sql, mod_xist_ns_doc)),
291        ]
292
293        for (base, mods) in params:
294            for ext in ("html", "fo"):
295                f = p[here/builddir/(base + "index." + ext)]
296                f.dependOn(*mods)
297
298            f2 = make.PythonTarget(self, here/builddir/(base + "index_module.py"), copyaction)
299            f2.dependOn(make.MainDep, mods[0])
300            build.dependOn(f2)
301            f3 = make.PythonTarget(self, here/installdir/(base + "index_module.py"), actions=(copyaction, modeaction))
302            f3.dependOn(make.MainDep, f2)
303            install.dependOn(f3)
304
305        print "done"
306
307p = Project()
308p.create()
309
310if __name__=="__main__":
311    p.buildwithargs(sys.argv[1:])
Note: See TracBrowser for help on using the browser.