merge
[dygraphs.git] / mochikit_v14 / scripts / build.py
CommitLineData
6a1aa64f
DV
1#!/usr/bin/env python
2execfile('scripts/make_docs.py')
3execfile('scripts/pack.py')
4import os
5import sys
6import glob
7import zipfile
8import re
9def 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
50VERSION = re.search(
51 r"""(?mxs)MochiKit.MochiKit.VERSION\s*=\s*['"]([^'"]+)""",
52 file('MochiKit/MochiKit.js').read()
53).group(1)
54META = 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)
65FILES = glob.glob('lib/MochiKit/*.js')
66for fn in FILES:
67 modname = os.path.splitext(os.path.basename(fn))[0]
68 META['provides'][modname] = dict(file=fn, version=VERSION)
69if not os.path.exists('dist'):
70 os.makedirs('dist')
71
72pkg = '%(name)s-%(version)s' % META
73z = zipfile.ZipFile(
74 os.path.join('dist', pkg) + '.zip',
75 'w',
76 zipfile.ZIP_DEFLATED
77)
78MANIFEST = ['Changes', 'META.json', 'MANIFEST\t\t\tThis list of files']
79z.writestr(os.path.join(pkg, 'META.json'), ''.join(json_encode(META)))
80z.write(
81 os.path.join('doc', 'rst', 'MochiKit', 'VersionHistory.rst'),
82 os.path.join(pkg, 'Changes')
83)
84
85IGNOREDIRS = ['.svn', 'dist', 'scripts']
86src = os.path.join('.', '')
87dst = os.path.join(pkg, '')
88
89for 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
113z.writestr(os.path.join(pkg, 'MANIFEST'), '\n'.join(MANIFEST + ['']))
114
115z.close()