diff options
author | Johannes Huber <johu@gentoo.org> | 2016-12-23 21:07:48 +0100 |
---|---|---|
committer | Johannes Huber <johu@gentoo.org> | 2016-12-23 21:07:48 +0100 |
commit | 32ee0df9fead1404087d69a411b4c97261b1bbaa (patch) | |
tree | 662fce23f9f78f6081db6580f85f8f583443af3f /kde-apps/pykde4 | |
parent | kde-base/katepart -> kde-apps/katepart (diff) | |
download | gentoo-32ee0df9fead1404087d69a411b4c97261b1bbaa.tar.gz gentoo-32ee0df9fead1404087d69a411b4c97261b1bbaa.tar.bz2 gentoo-32ee0df9fead1404087d69a411b4c97261b1bbaa.zip |
kde-base/pykde4 -> kde-apps/pykde4
Diffstat (limited to 'kde-apps/pykde4')
-rw-r--r-- | kde-apps/pykde4/Manifest | 1 | ||||
-rw-r--r-- | kde-apps/pykde4/files/kpythonpluginfactorywrapper.c-r2 | 71 | ||||
-rw-r--r-- | kde-apps/pykde4/files/pykde4-4.14.0-arm-sip.patch | 23 | ||||
-rw-r--r-- | kde-apps/pykde4/files/pykde4-4.14.3-gcc-5.patch | 25 | ||||
-rw-r--r-- | kde-apps/pykde4/metadata.xml | 11 | ||||
-rw-r--r-- | kde-apps/pykde4/pykde4-4.14.3-r1.ebuild | 166 |
6 files changed, 297 insertions, 0 deletions
diff --git a/kde-apps/pykde4/Manifest b/kde-apps/pykde4/Manifest new file mode 100644 index 000000000000..95faafe1cca4 --- /dev/null +++ b/kde-apps/pykde4/Manifest @@ -0,0 +1 @@ +DIST pykde4-4.14.3.tar.xz 2006504 SHA256 7fb9d7b5ed03d531243ebd67939baf30933452dafbdfca866e6653e9a77d80fc SHA512 42430f83bf41dc5d7511369250ff480fd7b90954b4ace8dbda2d6151ee3f3c979fe3d9b0163cda76df52107e982d4ac518fa1c28bc1d711d97f2d8739eaff1f3 WHIRLPOOL 5df847617a220ef9e1330f3c970bb6f785e713ebbed8a04ef4a3c9d1470d1b4a2032177f59df4d4baf89a0975b8c02f63f133747588cb65a3fa5d849e51b4d4d diff --git a/kde-apps/pykde4/files/kpythonpluginfactorywrapper.c-r2 b/kde-apps/pykde4/files/kpythonpluginfactorywrapper.c-r2 new file mode 100644 index 000000000000..f516f1b72281 --- /dev/null +++ b/kde-apps/pykde4/files/kpythonpluginfactorywrapper.c-r2 @@ -0,0 +1,71 @@ +#include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + +#define VERSION_LEN 10 + +#define FORMAT EPREFIX PLUGIN_DIR "/kpython%spluginfactory.so" + +static void *handle; +static void *(*wrapped_qt_plugin_instance)(); + +static void get_python_version(char* out) { + int pipefd[2]; + pipe(pipefd); + pid_t cpid = fork(); + if (cpid > 0) { + close(pipefd[1]); + read(pipefd[0], out, VERSION_LEN); + close(pipefd[0]); + waitpid(cpid, NULL, 0); + } else if (cpid < 0) { + /* fork failed, guess 2.7 */ + strcpy(out, "2.7\n"); + close(pipefd[0]); + close(pipefd[1]); + } else { + close(pipefd[0]); + close(1); + dup2(pipefd[1], 1); + close(pipefd[1]); + close(0); + char *args[] = { "eselect", "python", "show", "--ABI", "--python2", 0 }; + execv(EPREFIX "/usr/bin/eselect", args); + /* exec failed, guess 2.7 */ + write(1, "2.7\n", 4); + exit(0); + } +} + +__attribute__((constructor)) +static void init() { + char buf[VERSION_LEN + 1]; + memset(buf, 0, VERSION_LEN + 1); + get_python_version(buf); + char *s = buf; + while(*s != '\0') { + if(*s == '\n') { + *s = '\0'; + break; + } + ++s; + } + int length = strlen(FORMAT) + strlen(buf) + 1; + char *name = malloc(length + 1); + snprintf(name, length, FORMAT, buf); + handle = dlopen(name, RTLD_NOW); + free(name); + wrapped_qt_plugin_instance = dlsym(handle, "qt_plugin_instance"); +} + +__attribute__((destructor)) +static void fini() { + dlclose(handle); +} + +void *qt_plugin_instance() { + return wrapped_qt_plugin_instance(); +} diff --git a/kde-apps/pykde4/files/pykde4-4.14.0-arm-sip.patch b/kde-apps/pykde4/files/pykde4-4.14.0-arm-sip.patch new file mode 100644 index 000000000000..f6391a8ec714 --- /dev/null +++ b/kde-apps/pykde4/files/pykde4-4.14.0-arm-sip.patch @@ -0,0 +1,23 @@ +See Gentoo bug #322351. + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -99,6 +99,9 @@ include_directories( + ${KDEPIMLIBS_INCLUDE_DIRS} + ) + ++# Pull in ARM configuration options if needed ++STRING(REGEX MATCH "PyQt_qreal_double" SIP_ARM_HACK ${PYQT4_SIP_FLAGS} "") ++ + set(SIP_INCLUDES ${CMAKE_BINARY_DIR} ${PYQT4_SIP_DIR} sip) + set(SIP_CONCAT_PARTS 8) + if (WIN32) +@@ -106,7 +109,7 @@ if (WIN32) + else () + set(SIP_TAGS ALL WS_X11 ${PYQT4_VERSION_TAG}) + endif () +-set(SIP_DISABLE_FEATURES VendorID PyQt_NoPrintRangeBug) ++set(SIP_DISABLE_FEATURES VendorID PyQt_NoPrintRangeBug ${SIP_ARM_HACK}) + + set(SIP_FILES_INSTALL_DIR ${SHARE_INSTALL_PREFIX}/sip) + diff --git a/kde-apps/pykde4/files/pykde4-4.14.3-gcc-5.patch b/kde-apps/pykde4/files/pykde4-4.14.3-gcc-5.patch new file mode 100644 index 000000000000..9c29ffa503fa --- /dev/null +++ b/kde-apps/pykde4/files/pykde4-4.14.3-gcc-5.patch @@ -0,0 +1,25 @@ +Patch created by: Erik Zeek + +See also: https://bugs.gentoo.org/show_bug.cgi?id=567022 + +--- a/CMakeLists.txt ++++ a/CMakeLists.txt +@@ -166,7 +166,7 @@ add_sip_python_module(PyKDE4.kdeui sip/kdeui/kdeuimod.sip ${KDE4_KDEUI_LIBS} ${Q + + file(GLOB kio_files_sip sip/kio/*.sip) + set(SIP_EXTRA_FILES_DEPEND ${kio_files_sip}) +-add_sip_python_module(PyKDE4.kio sip/kio/kiomod.sip ${KDE4_KIO_LIBS} ${KDE4_KFILE_LIBS}) ++add_sip_python_module(PyKDE4.kio sip/kio/kiomod.sip ${KDE4_SOLID_LIBS} ${KDE4_KIO_LIBS} ${KDE4_KFILE_LIBS}) + + file(GLOB kutils_files_sip sip/kutils/*.sip) + set(SIP_EXTRA_FILES_DEPEND ${kutils_files_sip}) +@@ -190,7 +190,7 @@ add_sip_python_module(PyKDE4.knewstuff sip/knewstuff/knewstuffmod.sip ${KDE4_KNE + + file(GLOB dnssd_files_sip sip/dnssd/*.sip) + set(SIP_EXTRA_FILES_DEPEND ${dnssd_files_sip}) +-add_sip_python_module(PyKDE4.dnssd sip/dnssd/dnssdmod.sip ${KDE4_KDNSSD_LIBS} ${QT_QTCORE_LIBRARY}) ++add_sip_python_module(PyKDE4.dnssd sip/dnssd/dnssdmod.sip ${KDE4_KDNSSD_LIBS} ${QT_QTCORE_LIBRARY} ${QT_QTNETWORK_LIBRARY}) + + file(GLOB phonon_files_sip sip/phonon/*.sip) + set(SIP_EXTRA_FILES_DEPEND ${phonon_files_sip}) + diff --git a/kde-apps/pykde4/metadata.xml b/kde-apps/pykde4/metadata.xml new file mode 100644 index 000000000000..5c0841267d7e --- /dev/null +++ b/kde-apps/pykde4/metadata.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="project"> + <email>kde@gentoo.org</email> + <name>Gentoo KDE Project</name> + </maintainer> + <use> + <flag name="akonadi">Compile bindings for Akonadi</flag> + </use> +</pkgmetadata> diff --git a/kde-apps/pykde4/pykde4-4.14.3-r1.ebuild b/kde-apps/pykde4/pykde4-4.14.3-r1.ebuild new file mode 100644 index 000000000000..ce382c6d4345 --- /dev/null +++ b/kde-apps/pykde4/pykde4-4.14.3-r1.ebuild @@ -0,0 +1,166 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +PYTHON_COMPAT=( python{2_7,3_4} ) +PYTHON_REQ_USE="threads" +OPENGL_REQUIRED="always" +CMAKE_MAKEFILE_GENERATOR="emake" +WEBKIT_REQUIRED="always" +inherit python-r1 portability kde4-base multilib eutils + +DESCRIPTION="Python bindings for KDE SC 4" +KEYWORDS="amd64 ~arm x86 ~amd64-linux ~x86-linux" +IUSE="akonadi debug doc examples test" +HOMEPAGE="https://techbase.kde.org/Development/Languages/Python" + +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +RDEPEND=" + ${PYTHON_DEPS} + >=dev-python/PyQt4-4.11.1[${PYTHON_USEDEP},dbus,declarative,script,sql,svg,webkit,X] + >=dev-python/sip-4.16.2:=[${PYTHON_USEDEP}] + $(add_kdebase_dep kdelibs 'opengl') + akonadi? ( $(add_kdeapps_dep kdepimlibs) ) +" +DEPEND="${RDEPEND} + dev-lang/python-exec:2[${PYTHON_USEDEP}] + sys-devel/libtool +" + +PATCHES=( "${FILESDIR}/${P}-gcc-5.patch" ) + +pkg_setup() { + kde4-base_pkg_setup + + have_python2=false + + scan_python_versions() { + if [[ ${EPYTHON} == python2.* ]]; then + have_python2=true + fi + } + python_foreach_impl scan_python_versions + + if ! ${have_python2}; then + ewarn "You do not have a Python 2 version selected." + ewarn "kpythonpluginfactory will not be built" + fi +} + +src_prepare() { + kde4-base_src_prepare + + if ! use examples; then + sed -e '/^ADD_SUBDIRECTORY(examples)/s/^/# DISABLED /' -i CMakeLists.txt \ + || die "Failed to disable examples" + fi + + # See bug 322351 + use arm && epatch "${FILESDIR}/${PN}-4.14.0-arm-sip.patch" + + sed -e 's/kpythonpluginfactory /kpython${PYTHON_SHORT_VERSION}pluginfactory /g' \ + -i kpythonpluginfactory/CMakeLists.txt || die + + if ${have_python2}; then + mkdir -p "${WORKDIR}/wrapper" || die "failed to copy wrapper" + cp "${FILESDIR}/kpythonpluginfactorywrapper.c-r2" "${WORKDIR}/wrapper/kpythonpluginfactorywrapper.c" || die "failed to copy wrapper" + fi + python_copy_sources + +} + +src_configure() { + configuration() { + local mycmakeargs=( + -DWITH_PolkitQt=OFF + -DWITH_QScintilla=OFF + -DPYKDEUIC4_ALTINSTALL=TRUE + -DWITH_Nepomuk=OFF + -DWITH_Soprano=OFF + $(cmake-utils_use_with akonadi KdepimLibs) + -DPYTHON_EXECUTABLE=${PYTHON} + ) + local CMAKE_BUILD_DIR=${S}_build-${PYTHON_ABI} + kde4-base_src_configure + } + + python_foreach_impl run_in_build_dir configuration +} + +echo_and_run() { + echo "$@" + "$@" +} + +src_compile() { + compilation() { + local CMAKE_BUILD_DIR=${S}_build-${PYTHON_ABI} + kde4-base_src_compile + } + python_foreach_impl run_in_build_dir compilation + + if ${have_python2}; then + pushd "${WORKDIR}/wrapper" > /dev/null + echo_and_run libtool --tag=CC --mode=compile $(tc-getCC) \ + -shared \ + ${CFLAGS} ${CPPFLAGS} \ + -DEPREFIX="\"${EPREFIX}\"" \ + -DPLUGIN_DIR="\"/usr/$(get_libdir)/kde4\"" -c \ + -o kpythonpluginfactorywrapper.lo \ + kpythonpluginfactorywrapper.c + echo_and_run libtool --tag=CC --mode=link $(tc-getCC) \ + -shared -module -avoid-version \ + ${CFLAGS} ${LDFLAGS} \ + -o kpythonpluginfactory.la \ + -rpath "${EPREFIX}/usr/$(get_libdir)/kde4" \ + kpythonpluginfactorywrapper.lo \ + $(dlopen_lib) + popd > /dev/null + fi +} + +src_test() { + python_foreach_impl run_in_build_dir kde4-base_src_test +} + +src_install() { + installation() { + emake DESTDIR="${D}" install + + mkdir -p "${D%/}$(python_get_scriptdir)" || die + mv "${ED%/}/usr/bin/pykdeuic4-${EPYTHON/python/}" \ + "${D%/}$(python_get_scriptdir)"/pykdeuic4 || die + + python_fix_shebang "${D%/}$(python_get_scriptdir)"/pykdeuic4 + python_optimize + } + python_foreach_impl run_in_build_dir installation + + dosym ../lib/python-exec/python-exec2 /usr/bin/pykdeuic4 + + # As we don't call the eclass's src_install, we have to install the docs manually + DOCS=("${S}"/{AUTHORS,NEWS,README}) + use doc && HTML_DOCS=("${S}/docs/html/") + einstalldocs + + if ${have_python2}; then + pushd "${WORKDIR}/wrapper" > /dev/null + echo_and_run libtool --mode=install install kpythonpluginfactory.la "${ED}/usr/$(get_libdir)/kde4/kpythonpluginfactory.la" + rm "${ED}/usr/$(get_libdir)/kde4/kpythonpluginfactory.la" + popd > /dev/null + fi +} + +pkg_postinst() { + kde4-base_pkg_postinst + + if use examples; then + echo + elog "PyKDE4 examples have been installed to" + elog "${EPREFIX}/usr/share/apps/${PN}/examples" + echo + fi +} |