summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Huber <johu@gentoo.org>2016-12-23 21:07:48 +0100
committerJohannes Huber <johu@gentoo.org>2016-12-23 21:07:48 +0100
commit32ee0df9fead1404087d69a411b4c97261b1bbaa (patch)
tree662fce23f9f78f6081db6580f85f8f583443af3f /kde-apps/pykde4
parentkde-base/katepart -> kde-apps/katepart (diff)
downloadgentoo-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/Manifest1
-rw-r--r--kde-apps/pykde4/files/kpythonpluginfactorywrapper.c-r271
-rw-r--r--kde-apps/pykde4/files/pykde4-4.14.0-arm-sip.patch23
-rw-r--r--kde-apps/pykde4/files/pykde4-4.14.3-gcc-5.patch25
-rw-r--r--kde-apps/pykde4/metadata.xml11
-rw-r--r--kde-apps/pykde4/pykde4-4.14.3-r1.ebuild166
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
+}