diff --git a/CMakeLists.txt b/CMakeLists.txt index dde6a6dc..29aa4889 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt new file mode 100644 index 00000000..3710587b --- /dev/null +++ b/python/CMakeLists.txt @@ -0,0 +1,53 @@ +# SPDX-FileCopyrightText: 2024 Manuel Alcaraz Zambrano +# 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}") + diff --git a/python/bindings.h b/python/bindings.h new file mode 100644 index 00000000..d79252c9 --- /dev/null +++ b/python/bindings.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2024 Manuel Alcaraz Zambrano +// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/python/bindings.xml b/python/bindings.xml new file mode 100644 index 00000000..8d445ee0 --- /dev/null +++ b/python/bindings.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +