# # Copyright (C) 2008 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