# $Id: Makefile.kmk 60975 2016-05-13 11:05:22Z vboxsync $ ## @file # Sub-Makefile for Python bindings # # # Copyright (C) 2009-2016 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. # SUB_DEPTH = ../../../.. include $(KBUILD_PATH)/subheader.kmk ifdef VBOX_WITH_MULTIVERSION_PYTHON VBOX_MULTIPYTHON = 1 else VBOX_MULTIPYTHON = 0 endif # # List of supported Python versions, defining a number of # VBOX_PYTHON[26|27|31|32|33|34|35|DEF]_[INC|LIB] variables # which get picked up below. # ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. ifndef VBOX_WITHOUT_VBOXPYTHON_FOR_OSX_10_6 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.5 10.4) VBOX_PYTHON26_INC = $(VBOX_PATH_MACOSX_SDK_10_6)/usr/include/python2.6 VBOX_PYTHON26_LIB = $(VBOX_PATH_MACOSX_SDK_10_6)/usr/lib/libpython2.6.dylib else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.9" && "$(VBOX_XCODE_VERSION)" == "6.2" # 'effing 10.9 SDK in Xcode 6.2 is missing python. Stupid, stupid Apple!! VBOX_PYTHON26_INC = $(VBOX_PATH_MACOSX_SDK)/../MacOSX10.10.sdk/System/Library/Frameworks/Python.framework/Versions/2.6/Headers VBOX_PYTHON26_LIB = $(VBOX_PATH_MACOSX_SDK)/../MacOSX10.10.sdk/System/Library/Frameworks/Python.framework/Versions/2.6/Python else VBOX_PYTHON26_INC = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Python.framework/Versions/2.6/Headers VBOX_PYTHON26_LIB = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Python.framework/Versions/2.6/Python endif if !defined(VBOX_OSE) || "$(wildcard $(VBOX_PYTHON26_LIB))" != "" VBOX_PYTHON26_LIB_X86 = $(VBOX_PYTHON26_LIB) else VBOX_PYTHON26_INC = VBOX_PYTHON26_LIB = endif endif ifndef VBOX_WITHOUT_VBOXPYTHON_FOR_OSX_10_7 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.6 10.5 10.4) VBOX_PYTHON27_INC = $(VBOX_PATH_MACOSX_SDK_10_7)/usr/include/python2.7 VBOX_PYTHON27_LIB = $(VBOX_PATH_MACOSX_SDK_10_7)/usr/lib/libpython2.7.dylib else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.9" && "$(VBOX_XCODE_VERSION)" == "6.2" # 'effing 10.9 SDK in Xcode 6.2 is missing python. Stupid, stupid Apple!! VBOX_PYTHON27_INC = $(VBOX_PATH_MACOSX_SDK)/../MacOSX10.10.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/Headers VBOX_PYTHON27_LIB = $(VBOX_PATH_MACOSX_SDK)/../MacOSX10.10.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/Python else VBOX_PYTHON27_INC = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Python.framework/Versions/2.7/Headers VBOX_PYTHON27_LIB = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Python.framework/Versions/2.7/Python endif if !defined(VBOX_OSE) || "$(wildcard $(VBOX_PYTHON27_LIB))" != "" VBOX_PYTHON27_LIB_X86 = $(VBOX_PYTHON27_LIB) else VBOX_PYTHON27_INC = VBOX_PYTHON27_LIB = endif endif # No Python 3.x yet as part of OSX versions including El Capitan, 10.11. else # Use the script. $(eval $(subst |,$(NL),$(shell $(VBOX_BLD_PYTHON) \ $(PATH_SUB_CURRENT)/gen_python_deps.py \ $(KBUILD_TARGET) \ $(KBUILD_TARGET_ARCH) \ $(VBOX_MULTIPYTHON) ))) endif ifndef VBOX_ONLY_SDK # # Base Python Client Module - the C++/XPCOM bits (not actually built). # VBoxPythonBase_TEMPLATE = XPCOM VBoxPythonBase_CXXFLAGS = -Wno-write-strings VBoxPythonBase_DLLSUFF.darwin = .so VBoxPythonBase_DEFS = \ _IMPL_NS_COM \ _IMPL_NS_BASE \ EXPORT_XPTI_API \ EXPORT_XPT_API \ VBOX_PYXPCOM \ VBOX_WITH_XPCOM \ VBOX_PYXPCOM_VERSIONED #VBoxPythonBase_DEFS.debug = \ # VBOX_DEBUG_LIFETIMES VBoxPythonBase_INCS = \ src VBoxPythonBase_SOURCES = \ src/module/_xpcom.cpp \ src/dllmain.cpp \ src/ErrorUtils.cpp \ src/PyGBase.cpp \ src/PyGInputStream.cpp \ src/PyGModule.cpp \ src/PyGStub.cpp \ src/PyGWeakReference.cpp \ src/PyIClassInfo.cpp \ src/PyIComponentManager.cpp \ src/PyIComponentManagerObsolete.cpp \ src/PyIEnumerator.cpp \ src/PyIID.cpp \ src/PyIInputStream.cpp \ src/PyIInterfaceInfo.cpp \ src/PyIInterfaceInfoManager.cpp \ src/PyISimpleEnumerator.cpp \ src/PyISupports.cpp \ src/PyIVariant.cpp \ src/Pyxpt_info.cpp \ src/TypeObject.cpp \ src/VariantUtils.cpp VBoxPythonBase_LIBS = \ $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB) \ $(PATH_STAGE_BIN)/VBoxXPCOM$(VBOX_SUFF_DLL) # 32-bit base. VBoxPythonBase_x86_TEMPLATE = XPCOM-x86 VBoxPythonBase_x86_EXTENDS = VBoxPythonBase VBoxPythonBase_x86_DEFS = MODULE_NAME_SUFFIX=_x86 $(VBoxPythonBase_DEFS) VBoxPythonBase_x86_LIBS = \ $(PATH_STAGE_LIB)/VBoxCOM-x86$(VBOX_SUFF_LIB) \ $(PATH_STAGE_BIN)/VBoxXPCOM-x86$(VBOX_SUFF_DLL) ifdef VBOX_PYTHON26_INC # # Python 2.6 version # DLLS += VBoxPython2_6 VBoxPython2_6_EXTENDS = VBoxPythonBase VBoxPython2_6_EXTENDS_BY = appending VBoxPython2_6_TEMPLATE = XPCOM$(if-expr "$(KBUILD_TARGET)" == "darwin" && "$(VBOX_DEF_MACOSX_VERSION_MIN)" <= "10.6",OSX106,) VBoxPython2_6_INCS = $(VBOX_PYTHON26_INC) VBoxPython2_6_LIBS = $(VBOX_PYTHON26_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython2_6_x86 VBoxPython2_6_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython2_6_x86_EXTENDS_BY = appending VBoxPython2_6_x86_TEMPLATE = XPCOM$(if-expr "$(KBUILD_TARGET)" == "darwin" && "$(VBOX_DEF_MACOSX_VERSION_MIN)" <= "10.6",OSX106,-x86) VBoxPython2_6_x86_INCS = $(VBOX_PYTHON26_INC) VBoxPython2_6_x86_LIBS = $(VBOX_PYTHON26_LIB_X86) endif endif ifdef VBOX_PYTHON27_INC # # Python 2.7 version # DLLS += VBoxPython2_7 VBoxPython2_7_EXTENDS = VBoxPythonBase VBoxPython2_7_EXTENDS_BY = appending VBoxPython2_7_TEMPLATE = XPCOM$(if-expr "$(KBUILD_TARGET)" == "darwin" && "$(VBOX_DEF_MACOSX_VERSION_MIN)" <= "10.7",OSX107,) VBoxPython2_7_INCS = $(VBOX_PYTHON27_INC) VBoxPython2_7_LIBS = $(VBOX_PYTHON27_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython2_7_x86 VBoxPython2_7_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython2_7_x86_EXTENDS_BY = appending VBoxPython2_7_x86_TEMPLATE = XPCOM$(if-expr "$(KBUILD_TARGET)" == "darwin" && "$(VBOX_DEF_MACOSX_VERSION_MIN)" <= "10.7",OSX107,-x86) VBoxPython2_7_x86_INCS = $(VBOX_PYTHON27_INC) VBoxPython2_7_x86_LIBS = $(VBOX_PYTHON27_LIB_X86) endif endif ifdef VBOX_PYTHON31_INC # # Python 3.1 version # DLLS += VBoxPython3_1 VBoxPython3_1_EXTENDS = VBoxPythonBase VBoxPython3_1_EXTENDS_BY = appending VBoxPython3_1_TEMPLATE = XPCOM VBoxPython3_1_INCS = $(VBOX_PYTHON31_INC) VBoxPython3_1_LIBS = $(VBOX_PYTHON31_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython3_1_x86 VBoxPython3_1_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython3_1_x86_EXTENDS_BY = appending VBoxPython3_1_x86_TEMPLATE = XPCOM VBoxPython3_1_x86_INCS = $(VBOX_PYTHON31_INC) VBoxPython3_1_x86_LIBS = $(VBOX_PYTHON31_LIB_X86) endif endif ifdef VBOX_PYTHON32_INC # # Python 3.2 version # DLLS += VBoxPython3_2 VBoxPython3_2_EXTENDS = VBoxPythonBase VBoxPython3_2_EXTENDS_BY = appending VBoxPython3_2_TEMPLATE = XPCOM VBoxPython3_2_INCS = $(VBOX_PYTHON32_INC) VBoxPython3_2_LIBS = $(VBOX_PYTHON32_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython3_2_x86 VBoxPython3_2_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython3_2_x86_EXTENDS_BY = appending VBoxPython3_2_x86_TEMPLATE = XPCOM VBoxPython3_2_x86_INCS = $(VBOX_PYTHON32_INC) VBoxPython3_2_x86_LIBS = $(VBOX_PYTHON32_LIB_X86) endif endif ifdef VBOX_PYTHON33_INC # # Python 3.3 version # DLLS += VBoxPython3_3 VBoxPython3_3_EXTENDS = VBoxPythonBase VBoxPython3_3_EXTENDS_BY = appending VBoxPython3_3_TEMPLATE = XPCOM VBoxPython3_3_INCS = $(VBOX_PYTHON33_INC) VBoxPython3_3_LIBS = $(VBOX_PYTHON33_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython3_3_x86 VBoxPython3_3_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython3_3_x86_EXTENDS_BY = appending VBoxPython3_3_x86_TEMPLATE = XPCOM VBoxPython3_3_x86_INCS = $(VBOX_PYTHON33_INC) VBoxPython3_3_x86_LIBS = $(VBOX_PYTHON33_LIB_X86) endif endif ifdef VBOX_PYTHON34_INC # # Python 3.4 version # DLLS += VBoxPython3_4 VBoxPython3_4_EXTENDS = VBoxPythonBase VBoxPython3_4_EXTENDS_BY = appending VBoxPython3_4_TEMPLATE = XPCOM VBoxPython3_4_INCS = $(VBOX_PYTHON34_INC) VBoxPython3_4_LIBS = $(VBOX_PYTHON34_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython3_4_x86 VBoxPython3_4_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython3_4_x86_EXTENDS_BY = appending VBoxPython3_4_x86_TEMPLATE = XPCOM VBoxPython3_4_x86_INCS = $(VBOX_PYTHON34_INC) VBoxPython3_4_x86_LIBS = $(VBOX_PYTHON34_LIB_X86) endif endif ifdef VBOX_PYTHON35_INC # # Python 3.5 version # DLLS += VBoxPython3_5 VBoxPython3_5_EXTENDS = VBoxPythonBase VBoxPython3_5_EXTENDS_BY = appending VBoxPython3_5_TEMPLATE = XPCOM VBoxPython3_5_INCS = $(VBOX_PYTHON35_INC) VBoxPython3_5_LIBS = $(VBOX_PYTHON35_LIB) ifdef VBOX_WITH_32_ON_64_MAIN_API DLLS += VBoxPython3_5_x86 VBoxPython3_5_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython3_5_x86_EXTENDS_BY = appending VBoxPython3_5_x86_TEMPLATE = XPCOM VBoxPython3_5_x86_INCS = $(VBOX_PYTHON35_INC) VBoxPython3_5_x86_LIBS = $(VBOX_PYTHON35_LIB_X86) endif endif ifdef VBOX_PYTHONDEF_INC # # Python without versioning # DLLS += VBoxPython VBoxPython_EXTENDS = VBoxPythonBase VBoxPython_DEFS = $(filter-out VBOX_PYXPCOM_VERSIONED,$(VBoxPythonBase_DEFS)) VBoxPython_INCS = $(VBoxPythonBase_INCS) $(VBOX_PYTHONDEF_INC) if "$(KBUILD_TARGET)" == "linux" VBoxPython_LIBS = $(VBoxPythonBase_LIBS) else VBoxPython_LIBS = $(VBoxPythonBase_LIBS) $(VBOX_PYTHONDEF_LIB) endif ifdef VBOX_WITH_32_ON_64_MAIN_API VBoxPython_x86_EXTENDS = VBoxPythonBase_x86 VBoxPython_x86_DEFS = $(filter-out VBOX_PYXPCOM_VERSIONED,$(VBoxPythonBase_x86_DEFS)) VBoxPython_x86_INCS = $(VBoxPythonBase_x86_INCS) $(VBOX_PYTHONDEF_INC) if "$(KBUILD_TARGET)" == "linux" VBoxPython_x86_LIBS = $(VBoxPythonBase_x86_LIBS) else VBoxPython_x86_LIBS = $(VBoxPythonBase_x86_LIBS) $(VBOX_PYTHONDEF_LIB_X86) endif endif endif endif # VBOX_ONLY_SDK # # Install the python modules. # INSTALLS += VBoxPython-inst-py-xpcom VBoxPython-inst-py-xpcom_INST = $(INST_SDK)bindings/xpcom/python/xpcom/ VBoxPython-inst-py-xpcom_MODE = a+r,u+w VBoxPython-inst-py-xpcom_SOURCES = \ vboxxpcom.py \ components.py \ file.py \ __init__.py \ nsError.py \ primitives.py \ xpcom_consts.py \ xpt.py \ client/__init__.py=>client/__init__.py \ server/__init__.py=>server/__init__.py \ server/enumerator.py=>server/enumerator.py \ server/factory.py=>server/factory.py \ server/loader.py=>server/loader.py \ server/module.py=>server/module.py \ server/policy.py=>server/policy.py include $(FILE_KBUILD_SUB_FOOTER)