diff options
Diffstat (limited to 'xbmc/interfaces/swig')
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmc.i | 63 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcaddon.i | 37 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcdrm.i | 30 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcgui.i | 111 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcplugin.i | 32 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcvfs.i | 44 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcwsgi.i | 52 | ||||
-rw-r--r-- | xbmc/interfaces/swig/CMakeLists.txt | 63 |
8 files changed, 432 insertions, 0 deletions
diff --git a/xbmc/interfaces/swig/AddonModuleXbmc.i b/xbmc/interfaces/swig/AddonModuleXbmc.i new file mode 100644 index 0000000..0b54435 --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmc.i @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%module(directors="1") xbmc + +%{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#include "interfaces/legacy/Player.h" +#include "interfaces/legacy/RenderCapture.h" +#include "interfaces/legacy/Keyboard.h" +#include "interfaces/legacy/ModuleXbmc.h" +#include "interfaces/legacy/Monitor.h" + +using namespace XBMCAddon; +using namespace xbmc; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif +%} + +// This is all about warning suppression. It's OK that these base classes are +// not part of what swig parses. +%feature("knownbasetypes") XBMCAddon::xbmc "AddonClass,IPlayerCallback,AddonCallback" +%feature("knownapitypes") XBMCAddon::xbmc "XBMCAddon::xbmcgui::ListItem,XBMCAddon::xbmc::PlayListItem" + +%include "interfaces/legacy/swighelper.h" + +%include "interfaces/legacy/AddonString.h" +%include "interfaces/legacy/ModuleXbmc.h" +%include "interfaces/legacy/Dictionary.h" + +%feature("director") Player; + +%feature("python:nokwds") XBMCAddon::xbmc::Keyboard::Keyboard "true" +%feature("python:nokwds") XBMCAddon::xbmc::Player::Player "true" +%feature("python:nokwds") XBMCAddon::xbmc::PlayList::PlayList "true" + +%include "interfaces/legacy/Player.h" + +%include "interfaces/legacy/RenderCapture.h" + +%include "interfaces/legacy/InfoTagGame.h" +%include "interfaces/legacy/InfoTagMusic.h" +%include "interfaces/legacy/InfoTagPicture.h" +%include "interfaces/legacy/InfoTagRadioRDS.h" +%include "interfaces/legacy/InfoTagVideo.h" +%include "interfaces/legacy/Keyboard.h" +%include "interfaces/legacy/PlayList.h" + +%feature("director") Monitor; + +%include "interfaces/legacy/Monitor.h" + + diff --git a/xbmc/interfaces/swig/AddonModuleXbmcaddon.i b/xbmc/interfaces/swig/AddonModuleXbmcaddon.i new file mode 100644 index 0000000..6c00a1c --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmcaddon.i @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%module xbmcaddon + +%{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#include "interfaces/legacy/Addon.h" +#include "interfaces/legacy/Settings.h" + +using namespace XBMCAddon; +using namespace xbmcaddon; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + +%} + +// This is all about warning suppression. It's OK that these base classes are +// not part of what swig parses. +%feature("knownbasetypes") XBMCAddon::xbmcaddon "AddonClass" + +%include "interfaces/legacy/swighelper.h" +%include "interfaces/legacy/AddonString.h" + +%include "interfaces/legacy/Addon.h" +%include "interfaces/legacy/Settings.h" + diff --git a/xbmc/interfaces/swig/AddonModuleXbmcdrm.i b/xbmc/interfaces/swig/AddonModuleXbmcdrm.i new file mode 100644 index 0000000..055652a --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmcdrm.i @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%module xbmcdrm + +%{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#include "interfaces/legacy/DrmCryptoSession.h" +#include "utils/log.h" + +using namespace XBMCAddon; +using namespace xbmcdrm; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + +%} + +%include "interfaces/legacy/swighelper.h" +%include "interfaces/legacy/AddonString.h" +%include "interfaces/legacy/DrmCryptoSession.h" diff --git a/xbmc/interfaces/swig/AddonModuleXbmcgui.i b/xbmc/interfaces/swig/AddonModuleXbmcgui.i new file mode 100644 index 0000000..b869401 --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmcgui.i @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%module(directors="1") xbmcgui + +%{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#include "interfaces/legacy/Dialog.h" +#include "interfaces/legacy/ModuleXbmcgui.h" +#include "interfaces/legacy/Control.h" +#include "interfaces/legacy/Window.h" +#include "interfaces/legacy/WindowDialog.h" +#include "interfaces/legacy/Dialog.h" +#include "interfaces/legacy/WindowXML.h" +#include "input/actions/ActionIDs.h" +#include "input/Key.h" + +using namespace XBMCAddon; +using namespace xbmcgui; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + +%} + +// This is all about warning suppression. It's OK that these base classes are +// not part of what swig parses. +%feature("knownbasetypes") XBMCAddon::xbmcgui "AddonClass,AddonCallback" + +%feature("knownapitypes") XBMCAddon::xbmcgui "XBMCAddon::xbmc::InfoTagVideo,xbmc::InfoTagMusic,xbmc::InfoTagPicture,xbmc::InfoTagGame" + +%include "interfaces/legacy/swighelper.h" +%include "interfaces/legacy/AddonString.h" + +%include "interfaces/legacy/ModuleXbmcgui.h" + +%include "interfaces/legacy/Exception.h" + +%include "interfaces/legacy/Dictionary.h" + +%include "interfaces/legacy/ListItem.h" + +%include "interfaces/legacy/Control.h" + +%include "interfaces/legacy/Dialog.h" + +%feature("python:nokwds") XBMCAddon::xbmcgui::Dialog::Dialog "true" +%feature("python:nokwds") XBMCAddon::xbmcgui::Window::Window "true" +%feature("python:nokwds") XBMCAddon::xbmcgui::WindowXML::WindowXML "true" +%feature("python:nokwds") XBMCAddon::xbmcgui::WindowXMLDialog::WindowXMLDialog "true" +%feature("python:nokwds") XBMCAddon::xbmcgui::WindowDialog::WindowDialog "true" + +%feature("director") Window; +%feature("director") WindowDialog; +%feature("director") WindowXML; +%feature("director") WindowXMLDialog; + +// This is such a damn hack it makes me nauseous +%feature("python:rcmp") XBMCAddon::xbmcgui::Action + { XBMC_TRACE; + if (method == Py_EQ) + { + XBMCAddon::xbmcgui::Action* a1 = (Action*)retrieveApiInstance(obj1,&TyXBMCAddon_xbmcgui_Action_Type,"rcmp","XBMCAddon::xbmcgui::Action"); + if (PyObject_TypeCheck(obj2, &(TyXBMCAddon_xbmcgui_Action_Type.pythonType))) + { + // both are Action objects + XBMCAddon::xbmcgui::Action* a2 = (Action*)retrieveApiInstance(obj2,&TyXBMCAddon_xbmcgui_Action_Type,"rcmp","XBMCAddon::xbmcgui::Action"); + + if (a1->id == a2->id && + a1->buttonCode == a2->buttonCode && + a1->fAmount1 == a2->fAmount1 && + a1->fAmount2 == a2->fAmount2 && + a1->fRepeat == a2->fRepeat && + a1->strAction == a2->strAction) + { + Py_RETURN_TRUE; + } + else + { + Py_RETURN_FALSE; + } + } + else + { + // for backwards compatibility in python scripts + PyObject* o1 = PyLong_FromLong(a1->id); + return PyObject_RichCompare(o1, obj2, method); + } + } + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + + +%include "interfaces/legacy/Window.h" +%include "interfaces/legacy/WindowDialog.h" +%include "interfaces/legacy/Dialog.h" + +%include "interfaces/legacy/WindowXML.h" + +%include "input/actions/ActionIDs.h" +%include "input/Key.h" diff --git a/xbmc/interfaces/swig/AddonModuleXbmcplugin.i b/xbmc/interfaces/swig/AddonModuleXbmcplugin.i new file mode 100644 index 0000000..24e42b1 --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmcplugin.i @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%module xbmcplugin + +%{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#include "interfaces/legacy/ModuleXbmcplugin.h" + +using namespace XBMCAddon; +using namespace xbmcplugin; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + +%} + +%feature("knownapitypes") XBMCAddon::xbmcplugin "XBMCAddon::xbmcgui::ListItem" + +%include "interfaces/legacy/swighelper.h" +%include "interfaces/legacy/AddonString.h" +%include "interfaces/legacy/ModuleXbmcplugin.h" + diff --git a/xbmc/interfaces/swig/AddonModuleXbmcvfs.i b/xbmc/interfaces/swig/AddonModuleXbmcvfs.i new file mode 100644 index 0000000..bf18f38 --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmcvfs.i @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%module xbmcvfs + +%{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#include "interfaces/legacy/ModuleXbmcvfs.h" +#include "interfaces/legacy/File.h" +#include "interfaces/legacy/Stat.h" +#include "utils/log.h" + +using namespace XBMCAddon; +using namespace xbmcvfs; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + +%} + +%include "interfaces/legacy/swighelper.h" +%include "interfaces/legacy/AddonString.h" + +%feature("python:strictUnicode") XBMCAddon::xbmcvfs::File::read "true" + +%include "interfaces/legacy/File.h" + +%rename ("st_atime") XBMCAddon::xbmcvfs::Stat::atime; +%rename ("st_mtime") XBMCAddon::xbmcvfs::Stat::mtime; +%rename ("st_ctime") XBMCAddon::xbmcvfs::Stat::ctime; +%include "interfaces/legacy/Stat.h" + +%rename ("delete") XBMCAddon::xbmcvfs::deleteFile; +%include "interfaces/legacy/ModuleXbmcvfs.h" + diff --git a/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i b/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i new file mode 100644 index 0000000..6df84e0 --- /dev/null +++ b/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2015-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +%begin %{ +#if defined(TARGET_WINDOWS) +# include <windows.h> +#endif + +#ifdef HAS_WEB_SERVER +%} + +%module xbmcwsgi + +%{ +#include "interfaces/legacy/wsgi/WsgiErrorStream.h" +#include "interfaces/legacy/wsgi/WsgiInputStream.h" +#include "interfaces/legacy/wsgi/WsgiResponse.h" +#include "interfaces/legacy/wsgi/WsgiResponseBody.h" + +using namespace XBMCAddon; +using namespace xbmcwsgi; + +#if defined(__GNUG__) +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + +%} + +// This is all about warning suppression. It's OK that these base classes are +// not part of what swig parses. +%feature("knownbasetypes") XBMCAddon::xbmcaddon "AddonClass" + +%feature("iterator") WsgiInputStreamIterator "std::string" +%feature("iterable") WsgiInputStream "XBMCAddon::xbmcwsgi::WsgiInputStreamIterator" + +%include "interfaces/legacy/swighelper.h" +%include "interfaces/legacy/AddonString.h" + +%include "interfaces/legacy/wsgi/WsgiErrorStream.h" +%include "interfaces/legacy/wsgi/WsgiInputStream.h" +%include "interfaces/legacy/wsgi/WsgiResponse.h" +%include "interfaces/legacy/wsgi/WsgiResponseBody.h" + +%insert("footer") %{ +#endif +%} + diff --git a/xbmc/interfaces/swig/CMakeLists.txt b/xbmc/interfaces/swig/CMakeLists.txt new file mode 100644 index 0000000..f89eb98 --- /dev/null +++ b/xbmc/interfaces/swig/CMakeLists.txt @@ -0,0 +1,63 @@ +function(generate_file file) + set(classpath ${GROOVY_DIR}/groovy-${GROOVY_VER}.jar + ${GROOVY_DIR}/groovy-xml-${GROOVY_VER}.jar + ${GROOVY_DIR}/groovy-templates-${GROOVY_VER}.jar + ${GROOVY_DIR}/commons-lang-${COMMONS_VER}.jar + ${CMAKE_SOURCE_DIR}/tools/codegenerator + ${CMAKE_CURRENT_SOURCE_DIR}/../python) + if(NOT CORE_SYSTEM_NAME STREQUAL windows AND NOT CORE_SYSTEM_NAME STREQUAL windowsstore) + set(devnull "/dev/null") + string(REPLACE ";" ":" classpath "${classpath}") + else() + set(devnull "nul") + endif() + + set(CPP_FILE ${file}.cpp) + if(CLANGFORMAT_FOUND) + set(CLANG_FORMAT_COMMAND COMMAND ${CLANG_FORMAT_EXECUTABLE} ARGS -i ${CPP_FILE}) + endif() + + if(Java_VERSION_MAJOR GREATER 8) + set(JAVA_OPEN_OPTS --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.regex=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED) + endif() + + add_custom_command(OUTPUT ${CPP_FILE} + COMMAND ${SWIG_EXECUTABLE} + ARGS -w401 -c++ -o ${file}.xml -xml -I${CMAKE_SOURCE_DIR}/xbmc -xmllang python ${CMAKE_CURRENT_SOURCE_DIR}/../swig/${file} + COMMAND ${Java_JAVA_EXECUTABLE} + ARGS ${JAVA_OPEN_OPTS} -cp "${classpath}" groovy.ui.GroovyMain ${CMAKE_SOURCE_DIR}/tools/codegenerator/Generator.groovy ${file}.xml ${CMAKE_CURRENT_SOURCE_DIR}/../python/PythonSwig.cpp.template ${file}.cpp > ${devnull} + ${CLANG_FORMAT_COMMAND} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../swig/${file} ${CMAKE_CURRENT_SOURCE_DIR}/../python/PythonSwig.cpp.template) + set(SOURCES ${SOURCES} "${CPP_FILE}" PARENT_SCOPE) +endfunction() + +find_package(Java COMPONENTS Runtime REQUIRED) +find_package(SWIG REQUIRED) + +# The generated bindings +set(INPUTS AddonModuleXbmcaddon.i + AddonModuleXbmcdrm.i + AddonModuleXbmcgui.i + AddonModuleXbmc.i + AddonModuleXbmcplugin.i + AddonModuleXbmcvfs.i + AddonModuleXbmcwsgi.i) + +set(GROOVY_DIR ${CMAKE_SOURCE_DIR}/tools/codegenerator/groovy) +set(GROOVY_VER 4.0.6) +set(COMMONS_VER 2.6) + +foreach(INPUT IN LISTS INPUTS) + generate_file(${INPUT}) + list(APPEND GEN_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${INPUT}.cpp) +endforeach() + +add_library(python_binding STATIC ${SOURCES}) +set_target_properties(python_binding PROPERTIES POSITION_INDEPENDENT_CODE TRUE + FOLDER "Build Utilities") +set(core_DEPENDS python_binding ${core_DEPENDS} CACHE STRING "" FORCE) +add_dependencies(python_binding ${GLOBAL_TARGET_DEPS}) + +if(CORE_SYSTEM_NAME STREQUAL windowsstore) + set_target_properties(python_binding PROPERTIES STATIC_LIBRARY_FLAGS "/ignore:4264") +endif() |