Initial check-in
[dygraphs.git] / mochikit_v14 / scripts / build.py
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()