1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import os
23 import sys
24 from flumotion.common.log import safeprintf
25
26 PYGTK_REQ = (2, 6, 3)
27
28 GST_REQ = {'0.10': {'gstreamer': (0, 10, 0, 1),
29 'gst-python': (0, 10, 0, 1)}}
30
32 """
33 Initialize pygobject. A missing or too-old pygobject will cause a
34 SystemExit exception to be raised.
35 """
36 try:
37 import pygtk
38 pygtk.require('2.0')
39
40 import gobject
41 except ImportError:
42 raise SystemExit('ERROR: PyGTK could not be found')
43
44 if gobject.pygtk_version < PYGTK_REQ:
45 raise SystemExit('ERROR: PyGTK %s or higher is required'
46 % '.'.join(map(str, PYGTK_REQ)))
47
48 gobject.threads_init()
49
51
52 def tup2version(tup):
53 return '.'.join(map(str, tup))
54
55 if gst_majorminor not in GST_REQ:
56 raise SystemExit('ERROR: Invalid FLU_GST_VERSION: %r (expected '
57 'one of %r)' % (gst_majorminor, GST_REQ.keys()))
58
59 pygst_req = GST_REQ[gst_majorminor]['gst-python']
60 gst_req = GST_REQ[gst_majorminor]['gstreamer']
61
62 try:
63 import pygst
64 pygst.require(gst_majorminor)
65 import gst
66 except ImportError:
67 return False
68 except AssertionError:
69 return False
70
71 try:
72 gst_version = gst.get_gst_version()
73 pygst_version = gst.get_pygst_version()
74 except AttributeError:
75
76 gst_version = gst.gst_version
77 pygst_version = gst.pygst_version
78
79 if gst_req[:2] != gst_version[:2]:
80 raise SystemExit('ERROR: Expected GStreamer %s, but got incompatible %s'
81 % (gst_majorminor, tup2version(gst_version[:2])))
82
83 if gst_version < gst_req:
84 raise SystemExit('ERROR: GStreamer %s too old; install %s or newer'
85 % (tup2version(gst_version), tup2version(gst_req)))
86
87 if pygst_version < pygst_req:
88 raise SystemExit('ERROR: gst-python %s too old; install %s or newer'
89 % (tup2version(pygst_version), tup2version(pygst_req)))
90
91 return True
92
94 """
95 Initialize pygst. A missing or too-old pygst will cause a
96 SystemExit exception to be raised.
97 """
98 assert 'gobject' in sys.modules, "Run init_gobject() first"
99
100 gst_majorminor = os.getenv('FLU_GST_VERSION')
101
102 if gst_majorminor:
103 if not _init_gst_version(gst_majorminor):
104 raise SystemExit('ERROR: requested GStreamer version %s '
105 'not available' % gst_majorminor)
106 else:
107 majorminors = GST_REQ.keys()
108 majorminors.sort()
109 while majorminors:
110 majorminor = majorminors.pop()
111 if _init_gst_version(majorminor):
112 gst_majorminor = majorminor
113 break
114 if not gst_majorminor:
115 raise SystemExit('ERROR: no GStreamer available '
116 '(looking for versions %r)' % (GST_REQ.keys(),))
117
118 return gst_majorminor
119
120 USE_GOPTION_PARSER = False
136
137 USE_GTK = False
138 USE_GST = True
139 -def boot(path, gtk=False, gst=True, installReactor=True):
181 reactor.addSystemEventTrigger('before', 'startup', setkilled, False)
182 reactor.addSystemEventTrigger('before', 'shutdown', setkilled, True)
183
184 from flumotion.twisted import reflect
185 from flumotion.common import errors
186 from flumotion.common import setup
187
188 setup.setup()
189
190 from flumotion.common import log
191 log.logTwisted()
192
193
194 __pychecker__ = 'no-reuseattr'
195
196 if os.getenv('FLU_PROFILE'):
197 def catching(proc, *args, **kwargs):
198 import statprof
199 statprof.start()
200 try:
201 return proc(*args, **kwargs)
202 finally:
203 statprof.stop()
204 statprof.display()
205 elif os.getenv('FLU_ATEXIT'):
206 def catching(proc, *args, **kwargs):
207 env = os.getenv('FLU_ATEXIT').split(' ')
208 fqfn = env.pop(0)
209 log.info('atexit', 'FLU_ATEXIT set, will call %s(*%r) on exit',
210 fqfn, env)
211 atexitproc = reflect.namedAny(fqfn)
212
213 try:
214 return proc(*args, **kwargs)
215 finally:
216 log.info('atexit', 'trying to call %r(*%r)',
217 atexitproc, env)
218 atexitproc(*env)
219 else:
220 def catching(proc, *args, **kwargs):
221 return proc(*args, **kwargs)
222
223 main = reflect.namedAny(path)
224
225 try:
226 sys.exit(catching(main, sys.argv))
227 except (errors.SystemError, SystemError), e:
228 safeprintf(sys.stderr, 'ERROR: %s\n', e)
229 sys.exit(1)
230