1 | """
|
---|
2 | Copyright (C) 2008-2012 Oracle Corporation
|
---|
3 |
|
---|
4 | This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
5 | available from http://www.virtualbox.org. This file is free software;
|
---|
6 | you can redistribute it and/or modify it under the terms of the GNU
|
---|
7 | General Public License (GPL) as published by the Free Software
|
---|
8 | Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
9 | VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
10 | hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
11 | """
|
---|
12 |
|
---|
13 | import xpcom
|
---|
14 | import sys
|
---|
15 | import platform
|
---|
16 |
|
---|
17 | # this code overcomes somewhat unlucky feature of Python, where it searches
|
---|
18 | # for binaries in the same place as platfom independent modules, while
|
---|
19 | # rest of Python bindings expect _xpcom to be inside xpcom module
|
---|
20 |
|
---|
21 | candidates = ['VBoxPython' + str(sys.version_info[0]) + '_' + str(sys.version_info[1]),
|
---|
22 | 'VBoxPython' + str(sys.version_info[0]),
|
---|
23 | 'VBoxPython']
|
---|
24 | if platform.system() == 'Darwin':
|
---|
25 | # On Darwin (aka Mac OS X) we know exactly where things are in a normal
|
---|
26 | # VirtualBox installation. Also, there are two versions of python there
|
---|
27 | # (2.3.x and 2.5.x) depending on whether the os is striped or spotty, so
|
---|
28 | # we have to choose the right module to load.
|
---|
29 | #
|
---|
30 | # XXX: This needs to be adjusted for OSE builds. A more general solution would
|
---|
31 | # be to to sed the file during install and inject the VBOX_PATH_APP_PRIVATE_ARCH
|
---|
32 | # and VBOX_PATH_SHARED_LIBS when these are set.
|
---|
33 | sys.path.append('/Applications/VirtualBox.app/Contents/MacOS')
|
---|
34 |
|
---|
35 | cglue = None
|
---|
36 | for m in candidates:
|
---|
37 | try:
|
---|
38 | cglue = __import__(m)
|
---|
39 | break
|
---|
40 | except:
|
---|
41 | pass
|
---|
42 |
|
---|
43 | if platform.system() == 'Darwin':
|
---|
44 | sys.path.remove('/Applications/VirtualBox.app/Contents/MacOS')
|
---|
45 |
|
---|
46 | if cglue == None:
|
---|
47 | raise Exception, "Cannot find VBoxPython module"
|
---|
48 |
|
---|
49 | sys.modules['xpcom._xpcom'] = cglue
|
---|
50 | xpcom._xpcom = cglue
|
---|
51 |
|
---|