diff --git a/autotests/pythontest.py b/autotests/pythontest.py new file mode 100644 index 0000000..160966c --- /dev/null +++ b/autotests/pythontest.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- + +from __future__ import print_function + +import sys + +sys.path.append(sys.argv[1]) + +from PyQt5 import QtCore +from PyQt5 import QtWidgets + +from PyKF5 import KAuth + +def main(): + app = QtWidgets.QApplication(sys.argv) + + a = KAuth.KAuth.Action() + assert(a.status() == KAuth.KAuth.Action.InvalidStatus) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/cmake/rules_PyKF5.py b/cmake/rules_PyKF5.py new file mode 100644 index 0000000..b34c3c9 --- /dev/null +++ b/cmake/rules_PyKF5.py @@ -0,0 +1,41 @@ +# +# Copyright 2016 Stephen Kelly +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os, sys + +import rules_engine +sys.path.append(os.path.dirname(os.path.dirname(rules_engine.__file__))) +import Qt5Ruleset + +def local_function_rules(): + return [ + ["KAuth::ActionReply", "ActionReply", ".*", ".*", ".*int.*", rules_engine.function_discard], + ] + +class RuleSet(Qt5Ruleset.RuleSet): + def __init__(self): + Qt5Ruleset.RuleSet.__init__(self) + self._fn_db = rules_engine.FunctionRuleDb(lambda: local_function_rules() + Qt5Ruleset.function_rules()) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1b6930d..10b7924 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,114 +1,137 @@ find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets DBus) # This file handles all the logic for compiling KAuth's backends include(ConfigureChecks.cmake) # Configure a small file to tell BackendsManager what to use configure_file(BackendsConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/BackendsConfig.h) ecm_create_qm_loader(KAuth_QM_LOADER kauth5_qt) set(libkauth_SRCS kauthaction.cpp kauthactionreply.cpp kauthexecutejob.cpp kauthobjectdecorator.cpp AuthBackend.cpp BackendsManager.cpp HelperProxy.cpp kauthhelpersupport.cpp kauthdebug.cpp backends/fake/FakeBackend.cpp backends/fakehelper/FakeHelperProxy.cpp ${KAuth_QM_LOADER} ) add_library(KF5Auth ${libkauth_SRCS}) generate_export_header(KF5Auth BASE_NAME KAuth) add_library(KF5::Auth ALIAS KF5Auth) target_include_directories(KF5Auth INTERFACE "$") target_link_libraries(KF5Auth PUBLIC Qt5::Core KF5::CoreAddons) # for KJob target_link_libraries(KF5Auth PRIVATE Qt5::Widgets Qt5::DBus) set_target_properties(KF5Auth PROPERTIES VERSION ${KAUTH_VERSION_STRING} SOVERSION ${KAUTH_SOVERSION} EXPORT_NAME Auth ) ecm_generate_headers(KAuth_HEADERS HEADER_NAMES KAuth KAuthHelperSupport KAuthAction KAuthActionReply KAuthExecuteJob KAuthObjectDecorator REQUIRED_HEADERS KAuth_HEADERS ) +find_package(PythonModuleGeneration) + +if (PythonModuleGeneration_FOUND) + ecm_generate_python_binding( + TARGET KF5::Auth + PYTHONNAMESPACE PyKF5 + MODULENAME KAuth + RULES_FILE "${CMAKE_SOURCE_DIR}/cmake/rules_PyKF5.py" + INSTALL_DIR_SUFFIX ${KDE_INSTALL_PYTHONBINDINGSDIR} + SIP_INCLUDES $ + SIP_DEPENDS + QtWidgets/QtWidgetsmod.sip + PyKF5/KCoreAddons/KCoreAddonsmod.sip + HEADERS + kauth.h + kauthhelpersupport.h + kauthaction.h + kauthactionreply.h + kauthexecutejob.h + kauthobjectdecorator.h + ) +endif() + # KAuth policy generator executable # Compile only if fake backend has not been selected if (NOT "${KAUTH_BACKEND_NAME}" STREQUAL "FAKE") # KAUTH_POLICY_GEN_SRCS has been generated from ConfigureChecks.cmake add_executable(kauth-policy-gen ${KAUTH_POLICY_GEN_SRCS}) add_executable(KF5::kauth-policy-gen ALIAS kauth-policy-gen) # KAUTH_POLICY_GEN_LIBRARIES has been generated from ConfigureChecks.cmake target_link_libraries( kauth-policy-gen PRIVATE ${KAUTH_POLICY_GEN_LIBRARIES} ) install( TARGETS kauth-policy-gen EXPORT KF5AuthToolsTargets DESTINATION ${KAUTH_HELPER_INSTALL_DIR}) endif () # KAuth backend plugin if (NOT "${KAUTH_BACKEND_NAME}" STREQUAL "FAKE") set(KAUTH_BACKEND_SRCS ${KAUTH_BACKEND_SRCS}) # KAuth::AuthBackend is not exported add_library(kauth_backend_plugin MODULE ${KAUTH_BACKEND_SRCS} AuthBackend.cpp kauthdebug.cpp) target_link_libraries(kauth_backend_plugin PRIVATE ${KAUTH_BACKEND_LIBS}) set_target_properties(kauth_backend_plugin PROPERTIES PREFIX "") install(TARGETS kauth_backend_plugin LIBRARY DESTINATION "${KDE_INSTALL_PLUGINDIR}/${KAUTH_BACKEND_PLUGIN_DIR}" ARCHIVE DESTINATION "${KDE_INSTALL_PLUGINDIR}/${KAUTH_BACKEND_PLUGIN_DIR}" RUNTIME DESTINATION "${KDE_INSTALL_PLUGINDIR}/${KAUTH_BACKEND_PLUGIN_DIR}" ) endif () # KAuth helper plugin if (NOT "${KAUTH_HELPER_BACKEND_NAME}" STREQUAL "FAKE") # KAuth::HelperProxy is not exported add_library(kauth_helper_plugin MODULE ${KAUTH_HELPER_BACKEND_SRCS} HelperProxy.cpp kauthdebug.cpp) target_link_libraries(kauth_helper_plugin PRIVATE ${KAUTH_HELPER_BACKEND_LIBS}) set_target_properties(kauth_helper_plugin PROPERTIES PREFIX "") install(TARGETS kauth_helper_plugin LIBRARY DESTINATION "${KDE_INSTALL_PLUGINDIR}/${KAUTH_HELPER_PLUGIN_DIR}" ARCHIVE DESTINATION "${KDE_INSTALL_PLUGINDIR}/${KAUTH_HELPER_PLUGIN_DIR}" RUNTIME DESTINATION "${KDE_INSTALL_PLUGINDIR}/${KAUTH_HELPER_PLUGIN_DIR}" ) endif () install(TARGETS KF5Auth EXPORT KF5AuthTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kauth_export.h ${KAuth_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KAuth COMPONENT Devel ) # TODO: Remove once we depend on polkit-qt1 > 0.99.0 # core/polkitqt1-actiondescription.h from polkit currently fails when built with -pedantic string(REPLACE "--pedantic-errors" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-pedantic-errors" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "--pedantic" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-pedantic" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KAuth LIB_NAME KF5Auth DEPS "core KCoreAddons" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KAuth) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})