83a18ded57ce3073affb525b9ba5cec194910907
[matrix.git] / setup.py
1 #!/usr/bin/env python
2
3 matrix_version = '1.4'
4
5 import distutils.core
6 import optparse
7 import sys
8 import os
9 from glob import glob
10 from os.path import join
11
12 def add_flag(option, opt, value, parser):
13         dist_args.append(opt)
14
15 def add_value(option, opt, value, parser):
16         dist_args.append(opt)
17         dist_args.append(value)
18
19 def add_prefix_value(option, opt, value, parser):
20         global dist_prefix
21         dist_prefix = value
22         add_value(option, opt, value, parser)
23
24 parser = optparse.OptionParser()
25 parser.add_option(
26         '--prefix',
27         help='installation prefix',
28         action='callback', callback=add_prefix_value, type="string")
29 parser.add_option(
30         '--compile',
31         help='compile .py to .pyc [default]',
32         action='callback', callback=add_flag)
33 parser.add_option(
34         '--no-compile',
35         help="don't compile .py files",
36         action='callback', callback=add_flag)
37 parser.add_option(
38         '-O', '--optimize',
39         help='optimize',
40         action='callback', callback=add_value, type="string")
41 parser.add_option(
42         '-f', '--force',
43         help='force installation (overwrite any existing files)',
44         action='callback', callback=add_flag)
45
46 parse_args = None
47 dist_args = None
48 dist_prefix = '/usr/local'
49
50 for i in xrange(1, len(sys.argv)):
51         arg = sys.argv[i]
52         if arg.startswith('-'):
53                 continue
54         if arg.startswith('install'):
55                 dist_args = sys.argv[:i+1]
56                 parse_args = sys.argv[i+1:]
57         break
58
59 if parse_args:
60         parser.usage = '%s [options]' % ' '.join(dist_args)
61         parser.parse_args(args=parse_args)
62
63         sys.argv = dist_args
64
65 binfiles = [
66         'bin/matrix',
67         'bin/matrix-graph',
68         'bin/matrix-upload',
69         'bin/matrix-rootfs',
70         'bin/matrixify',
71 ]
72
73 scriptdir = 'share/matrix/scripts'
74
75 distutils.core.setup(
76         name='matrix',
77         version=matrix_version,
78         license='GPL2',
79         packages=['matrix'],
80         scripts=binfiles,
81         data_files=[
82                 (scriptdir, glob('scripts/*.sh') + glob('scripts/*.mk')),
83                 (join(scriptdir, 'styles'), glob('scripts/styles/*.mk')),
84         ],
85 )
86
87 python_version = 'python%d.%d' % tuple(sys.version_info[0:2])
88
89 dist_moduledir = join(dist_prefix, 'lib', python_version, 'site-packages')
90 dist_scriptdir = join(dist_prefix, scriptdir)
91
92 dist_binfiles = [join(dist_prefix, file) for file in binfiles]
93
94 try:
95         while dist_binfiles:
96                 path = dist_binfiles[0]
97
98                 file = open(path, 'rU')
99                 lines = file.readlines()
100                 file.close()
101
102                 file = open(path, 'w')
103                 for line in lines:
104                         line = line.replace('@MODULEDIR@', dist_moduledir)
105                         line = line.replace('@SCRIPTDIR@', dist_scriptdir)
106                         line = line.replace('@VERSION@', matrix_version)
107                         file.write(line)
108                 file.close()
109
110                 del dist_binfiles[0]
111 finally:
112         for path in dist_binfiles:
113                 try:
114                         os.unlink(path)
115                 except:
116                         pass