root/mochikit/branches/scriptaculous/scripts/build.py

Revision 289, 3.4 kB (checked in by bob, 3 years ago)

check for document.defaultView

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1 #!/usr/bin/env python
2 execfile('scripts/make_docs.py')
3 execfile('scripts/pack.py')
4 import os
5 import sys
6 import glob
7 import zipfile
8 import re
9 def json_encode(o, indent=0):
10     if isinstance(o, dict):
11         if len(o) == 0:
12             yield '{}'
13         else:
14             yield '{\n'
15             first = True
16             for key, value in o.iteritems():
17                 if first:
18                     first = False
19                 else:
20                     yield ',\n'
21                 yield ' ' * (indent + 4)
22                 assert isinstance(key, (basestring, float, int, long))
23                 for chunk in json_encode(key):
24                     yield chunk
25                 yield ': '
26                 for chunk in json_encode(value, indent + 4):
27                     yield chunk
28             yield '\n' + (' ' * indent) + '}'
29     elif isinstance(o, list):
30         if len(o) == 0:
31             yield '[]'
32         else:
33             yield '[\n'
34             first = True
35             for value in o:
36                 if first:
37                     first = False
38                 else:
39                     yield ',\n'
40                 yield ' ' * (indent + 4)
41                 for chunk in json_encode(value, indent + 4):
42                     yield chunk
43             yield '\n' + (' ' * indent) + ']'
44     elif isinstance(o, basestring):
45         yield '"' + o.replace('\\', '\\\\').replace('"', '\\"') + '"'
46     elif isinstance(o, (float, int, long)):
47         yield str(o)
48     else:
49         raise NotImplementedError
50 VERSION = re.search(
51     r"""(?mxs)MochiKit.MochiKit.VERSION\s*=\s*['"]([^'"]+)""",
52     file('MochiKit/MochiKit.js').read()
53 ).group(1)
54 META = dict(
55     name='MochiKit',
56     author=['Bob Ippolito <bob@redivi.com>'],
57     abstract='Python-inspired JavaScript kit',
58     license='mit',
59     version=VERSION,
60     build_requires={'Test.Simple': '0.11'},
61     recommends={'JSAN': '0.10'},
62     provides={},
63     generated_by="MochiKit's build script",
64 )
65 FILES = glob.glob('lib/MochiKit/*.js')
66 for fn in FILES:
67     modname = os.path.splitext(os.path.basename(fn))[0]
68     META['provides'][modname] = dict(file=fn, version=VERSION)
69 if not os.path.exists('dist'):
70     os.makedirs('dist')
71
72 pkg = '%(name)s-%(version)s' % META
73 z = zipfile.ZipFile(
74     os.path.join('dist', pkg) + '.zip',
75     'w',
76     zipfile.ZIP_DEFLATED
77 )
78 MANIFEST = ['Changes', 'META.json', 'MANIFEST\t\t\tThis list of files']
79 z.writestr(os.path.join(pkg, 'META.json'), ''.join(json_encode(META)))
80 z.write(
81     os.path.join('doc', 'rst', 'MochiKit', 'VersionHistory.rst'),
82     os.path.join(pkg, 'Changes')
83 )
84
85 IGNOREDIRS = ['.svn', 'dist', 'scripts']
86 src = os.path.join('.', '')
87 dst = os.path.join(pkg, '')
88
89 for root, dirs, files in os.walk(src):
90     for ex in IGNOREDIRS:
91         if ex in dirs:
92             dirs.remove(ex)
93     for fn in files:
94         if fn.startswith('.'):
95             continue
96         fn = os.path.join(root, fn)
97         mfn = fn[len(src):]
98         MANIFEST.append(mfn)
99         if mfn.startswith('MochiKit/'):
100             mfn = 'lib/' + mfn
101         dstfn = os.path.join(dst, mfn)
102         if os.path.splitext(fn)[1] == '.html':
103             s = file(fn).read()
104             s = s.replace('/MochiKit/', '/lib/MochiKit/')
105             s = s.replace(
106                 "JSAN.addRepository('..');",
107                 'JSAN.addRepository("../lib");',
108             )
109             z.writestr(dstfn, s)
110         else:
111             z.write(fn, dstfn)
112
113 z.writestr(os.path.join(pkg, 'MANIFEST'), '\n'.join(MANIFEST + ['']))
114
115 z.close()
Note: See TracBrowser for help on using the browser.