Add Python bindings

Co-authored-by: Manuel Alcaraz Zambrano <manuelalcarazzam@gmail.com>
This commit is contained in:
Nicolas FellaandManuel Alcaraz Zambrano committed 2024-11-26 21:21:34 +01:00
1 parent 9f201d2768
commit c06a6c23f0
4 files changed
+149

No files matched your search

+18
View File
@@ -74,6 +74,11 @@ find_package(KF6I18n ${KF_DEP_VERSION} REQUIRED)
find_package(KF6IconThemes ${KF_DEP_VERSION} REQUIRED)
find_package(KF6WidgetsAddons ${KF_DEP_VERSION} REQUIRED)
# For the Python bindings
find_package(Python3 3.10 COMPONENTS Interpreter Development)
find_package(Shiboken6)
find_package(PySide6)
ecm_set_disabled_deprecation_versions(
QT 6.8
KF 6.8
@@ -82,6 +87,14 @@ ecm_set_disabled_deprecation_versions(
add_definitions(-DTRANSLATION_DOMAIN=\"kxmlgui6\")
ki18n_install(po)
cmake_dependent_option(BUILD_PYTHON_BINDINGS "Generate Python Bindings" ON "TARGET Shiboken6::libshiboken AND TARGET PySide6::pyside6" OFF)
add_feature_info(PYTHON_BINDINGS ${BUILD_PYTHON_BINDINGS} "Python bindings")
# FreeBSD CI is missing required packages
if (CMAKE_SYSTEM_NAME MATCHES FreeBSD)
set(BUILD_PYTHON_BINDINGS OFF)
endif()
# Subdirectories
add_subdirectory(src)
if (BUILD_TESTING)
@@ -89,6 +102,11 @@ if (BUILD_TESTING)
add_subdirectory(autotests)
endif()
if (BUILD_PYTHON_BINDINGS)
include(ECMGeneratePythonBindings)
add_subdirectory(python)
endif()
# create a Config.cmake and a ConfigVersion.cmake file and install them
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6XmlGui")
+53
View File
@@ -0,0 +1,53 @@
# SPDX-FileCopyrightText: 2024 Manuel Alcaraz Zambrano <manuelalcarazzam@gmail.com>
# SPDX-License-Identifier: BSD-2-Clause
set(bindings_library "KXmlGui")
set(wrapped_header ${CMAKE_CURRENT_SOURCE_DIR}/bindings.h)
set(typesystem_file ${CMAKE_CURRENT_SOURCE_DIR}/bindings.xml)
set(generated_sources
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kxmlgui_module_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kaboutapplicationdialog_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kaboutplugindialog_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kactioncategory_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kactioncollection_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kbugreport_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kedittoolbar_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/khelpmenu_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kkeysequencewidget_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kmainwindow_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kshortcutsdialog_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kshortcutseditor_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kshortcutwidget_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/ktoggletoolbaraction_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/ktoolbar_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/ktooltiphelper_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kundoactions_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kxmlguibuilder_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kxmlguiclient_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kxmlguifactory_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KXmlGui/kxmlguiwindow_wrapper.cpp)
ecm_generate_python_bindings(
PACKAGE_NAME ${bindings_library}
VERSION ${KF_VERSION}
WRAPPED_HEADER ${wrapped_header}
TYPESYSTEM ${typesystem_file}
GENERATED_SOURCES ${generated_sources}
DEPENDENCIES KF6::XmlGui
QT_VERSION ${REQUIRED_QT_VERSION}
HOMEPAGE_URL "https://invent.kde.org/frameworks/kxmlgui"
ISSUES_URL "https://bugs.kde.org/describecomponents.cgi?product=frameworks-kxmlgui"
AUTHOR "The KDE Community"
README ../README.md
)
target_link_libraries(${bindings_library} PRIVATE KF6::XmlGui)
execute_process(COMMAND ${Python_EXECUTABLE} -Esc "import sysconfig; print(sysconfig.get_path('platlib', vars={'platbase': '${CMAKE_INSTALL_PREFIX}', 'base': '${CMAKE_INSTALL_PREFIX}'}))" OUTPUT_VARIABLE sysconfig_output)
string(STRIP ${sysconfig_output} PYTHON_INSTALL_DIR)
install(TARGETS ${bindings_library} LIBRARY DESTINATION "${PYTHON_INSTALL_DIR}")
+27
View File
@@ -0,0 +1,27 @@
// SPDX-FileCopyrightText: 2024 Manuel Alcaraz Zambrano <manuelalcarazzam@gmail.com>
// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
#pragma once
#include <QMetaMethod>
#include <KAboutApplicationDialog>
#include <KAboutPluginDialog>
#include <KActionCategory>
#include <KActionCollection>
#include <KBugReport>
#include <KEditToolBar>
#include <KHelpMenu>
#include <KKeySequenceWidget>
#include <KMainWindow>
#include <KShortcutWidget>
#include <KShortcutsDialog>
#include <KShortcutsEditor>
#include <KToggleToolBarAction>
#include <KToolBar>
#include <KToolTipHelper>
#include <KUndoActions>
#include <KXMLGUIBuilder>
#include <KXMLGUIClient>
#include <KXMLGUIFactory>
#include <KXmlGuiWindow>
+51
View File
@@ -0,0 +1,51 @@
<?xml version="1.0"?>
<typesystem package="KXmlGui">
<!--
SPDX-FileCopyrightText: 2024 Manuel Alcaraz Zambrano <manuelalcarazzam@gmail.com>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-->
<load-typesystem name="typesystem_widgets.xml" generate="no"/>
<object-type name="KAboutApplicationDialog">
<enum-type name="Option" flags="Options" />
</object-type>
<object-type name="KAboutPluginDialog">
<enum-type name="Option" flags="Options" />
</object-type>
<object-type name="KActionCategory" />
<object-type name="KActionCollection" />
<object-type name="KBugReport">
<modify-function signature="sendBugReport()" remove="all" />
</object-type>
<object-type name="KEditToolBar" />
<object-type name="KHelpMenu">
<enum-type name="MenuId" />
</object-type>
<object-type name="KKeySequenceWidget">
<enum-type name="Validation" />
<enum-type name="ShortcutType" flags="ShortcutTypes" />
</object-type>
<object-type name="KMainWindow" />
<object-type name="KShortcutsDialog" />
<object-type name="KShortcutsEditor">
<enum-type name="ActionType" flags="ActionTypes" />
<enum-type name="LetterShortcuts" />
</object-type>
<object-type name="KShortcutWidget" />
<object-type name="KToggleToolBarAction" />
<object-type name="KToolBar" />
<object-type name="KToolTipHelper" />
<namespace-type name="KUndoActions" />
<object-type name="KXMLGUIBuilder">
<modify-function signature="virtual_hook(int,void*)" remove="all" />
</object-type>
<object-type name="KXMLGUIClient">
<enum-type name="ReverseStateChange" />
<modify-function signature="virtual_hook(int,void*)" remove="all" />
</object-type>
<object-type name="KXMLGUIFactory" />
<object-type name="KXmlGuiWindow">
<enum-type name="StandardWindowOption" flags="StandardWindowOptions" />
</object-type>
</typesystem>