vboxxpcom.py revision c7814cf6e1240a519cbec0441e033d0e2470ed00
"""
Copyright (C) 2008-2012 Oracle Corporation
This file is part of VirtualBox Open Source Edition (OSE), as
available from http://www.virtualbox.org. This file is free software;
you can redistribute it and/or modify it under the terms of the GNU
General Public License (GPL) as published by the Free Software
Foundation, in version 2 as it comes in the "COPYING" file of the
VirtualBox OSE distribution. VirtualBox OSE is distributed in the
hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
"""
import xpcom
import sys
import platform
# this code overcomes somewhat unlucky feature of Python, where it searches
# for binaries in the same place as platfom independent modules, while
# rest of Python bindings expect _xpcom to be inside xpcom module
candidates = ['VBoxPython' + str(sys.version_info[0]) + '_' + str(sys.version_info[1]),
'VBoxPython' + str(sys.version_info[0]),
'VBoxPython']
if platform.system() == 'Darwin':
# On Darwin (aka Mac OS X) we know exactly where things are in a normal
# VirtualBox installation. Also, there are two versions of python there
# (2.3.x and 2.5.x) depending on whether the os is striped or spotty, so
# we have to choose the right module to load.
#
# XXX: This needs to be adjusted for OSE builds. A more general solution would
# be to to sed the file during install and inject the VBOX_PATH_APP_PRIVATE_ARCH
# and VBOX_PATH_SHARED_LIBS when these are set.
sys.path.append('/Applications/VirtualBox.app/Contents/MacOS')
cglue = None
for m in candidates:
try:
cglue = __import__(m)
break
except:
pass
if platform.system() == 'Darwin':
sys.path.remove('/Applications/VirtualBox.app/Contents/MacOS')
if cglue == None:
raise Exception, "Cannot find VBoxPython module"
sys.modules['xpcom._xpcom'] = cglue
xpcom._xpcom = cglue