Merge branch 'master' into staging

This commit is contained in:
Vladimír Čunát
2016-02-17 10:06:31 +01:00
456 changed files with 22536 additions and 2438 deletions

View File

@@ -0,0 +1,44 @@
{ lib, stdenv, fetchFromGitHub, cmake, curl }:
stdenv.mkDerivation rec {
name = "aws-sdk-cpp-${version}";
version = "0.9.6";
src = fetchFromGitHub {
owner = "awslabs";
repo = "aws-sdk-cpp";
rev = version;
sha256 = "022v7naa5vjvq3wfn4mcp99li61ffsk2fnc8qqi52cb1pyxz9sk1";
};
buildInputs = [ cmake curl ];
# FIXME: provide flags to build only part of the SDK, or put them in
# different outputs.
# cmakeFlags = "-DBUILD_ONLY=aws-cpp-sdk-s3";
enableParallelBuilding = true;
preBuild =
''
# Ensure that the unit tests can find the *.so files.
for i in testing-resources aws-cpp-sdk-*; do
export LD_LIBRARY_PATH=$(pwd)/$i:$LD_LIBRARY_PATH
done
'';
postInstall =
''
# Move the .so files to a more reasonable location.
mv $out/lib/linux/*/Release/*.so $out/lib
rm -rf $out/lib/linux
'';
meta = {
description = "A C++ interface for Amazon Web Services";
homepage = https://github.com/awslabs/aws-sdk-cpp;
license = lib.licenses.asl20;
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.eelco ];
};
}

View File

@@ -2,7 +2,7 @@
callPackage ./generic.nix (args // {
baseVersion = "1.10";
revision = "10";
sha256 = "0qs1ps25k79jnzm31zjl6hj8kxzfwwjsdrlc9bz621218r3v2rvb";
revision = "12";
sha256 = "09xcbrs48c9sgy6cj37qbc69gi6wlkjd6r3fi4zr8xwmj5wkmz5g";
extraConfigureFlags = "--with-gnump";
})

View File

@@ -2,7 +2,7 @@
callPackage ./generic.nix (args // {
baseVersion = "1.11";
revision = "25";
sha256 = "1spjryza9yznbsa26i1kg3hz4ifjdi6cjhfd2h2lqg07xyf2a66c";
revision = "28";
sha256 = "0cjr3zkara8js1fbm8ddcbd5mkizxh1wm6fja13psw5j8mpwj554";
openssl = null;
})

View File

@@ -1,18 +1,23 @@
{stdenv, fetchurl, ncurses}:
{ stdenv, fetchurl, ncurses }:
let
version = "5.0-20160131";
in
stdenv.mkDerivation {
name = "cdk-${version}";
inherit version;
buildInputs = [
ncurses
];
in
stdenv.mkDerivation {
name = "cdk";
inherit buildInputs;
src = fetchurl {
url = "http://invisible-island.net/datafiles/release/cdk.tar.gz";
sha256 = "0j74l874y33i26y5kjg3pf1vswyjif8k93pqhi0iqykpbxfsg382";
url = "ftp://invisible-island.net/cdk/cdk-${version}.tgz";
sha256 = "08ic2f5rmi8niaxwxwr6l6lhpan7690x52vpldnbjcf20rc0fbf3";
};
meta = {
description = ''Curses development kit'';
description = "Curses development kit";
license = stdenv.lib.licenses.bsdOriginal ;
maintainers = [stdenv.lib.maintainers.raskin];
platforms = stdenv.lib.platforms.linux;

View File

@@ -61,6 +61,7 @@ stdenv.mkDerivation ({
./security-bdf1ff05.patch
./cve-2014-8121.patch
./cve-2015-1781.patch
./cve-2015-7547.patch
./glibc-locale-incompatibility.patch
];

View File

@@ -0,0 +1,573 @@
CVE-2015-7547
2016-02-15 Carlos O'Donell <carlos@redhat.com>
[BZ #18665]
* resolv/nss_dns/dns-host.c (gaih_getanswer_slice): Always set
*herrno_p.
(gaih_getanswer): Document functional behviour. Return tryagain
if any result is tryagain.
* resolv/res_query.c (__libc_res_nsearch): Set buffer size to zero
when freed.
* resolv/res_send.c: Add copyright text.
(__libc_res_nsend): Document that MAXPACKET is expected.
(send_vc): Document. Remove buffer reuse.
(send_dg): Document. Remove buffer reuse. Set *thisanssizp to set the
size of the buffer. Add Dprint for truncated UDP buffer.
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index a255d5e..47cfe27 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -1031,7 +1031,10 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
int h_namelen = 0;
if (ancount == 0)
- return NSS_STATUS_NOTFOUND;
+ {
+ *h_errnop = HOST_NOT_FOUND;
+ return NSS_STATUS_NOTFOUND;
+ }
while (ancount-- > 0 && cp < end_of_message && had_error == 0)
{
@@ -1208,7 +1211,14 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
/* Special case here: if the resolver sent a result but it only
contains a CNAME while we are looking for a T_A or T_AAAA record,
we fail with NOTFOUND instead of TRYAGAIN. */
- return canon == NULL ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
+ if (canon != NULL)
+ {
+ *h_errnop = HOST_NOT_FOUND;
+ return NSS_STATUS_NOTFOUND;
+ }
+
+ *h_errnop = NETDB_INTERNAL;
+ return NSS_STATUS_TRYAGAIN;
}
@@ -1222,11 +1232,101 @@ gaih_getanswer (const querybuf *answer1, int anslen1, const querybuf *answer2,
enum nss_status status = NSS_STATUS_NOTFOUND;
+ /* Combining the NSS status of two distinct queries requires some
+ compromise and attention to symmetry (A or AAAA queries can be
+ returned in any order). What follows is a breakdown of how this
+ code is expected to work and why. We discuss only SUCCESS,
+ TRYAGAIN, NOTFOUND and UNAVAIL, since they are the only returns
+ that apply (though RETURN and MERGE exist). We make a distinction
+ between TRYAGAIN (recoverable) and TRYAGAIN' (not-recoverable).
+ A recoverable TRYAGAIN is almost always due to buffer size issues
+ and returns ERANGE in errno and the caller is expected to retry
+ with a larger buffer.
+
+ Lastly, you may be tempted to make significant changes to the
+ conditions in this code to bring about symmetry between responses.
+ Please don't change anything without due consideration for
+ expected application behaviour. Some of the synthesized responses
+ aren't very well thought out and sometimes appear to imply that
+ IPv4 responses are always answer 1, and IPv6 responses are always
+ answer 2, but that's not true (see the implemetnation of send_dg
+ and send_vc to see response can arrive in any order, particlarly
+ for UDP). However, we expect it holds roughly enough of the time
+ that this code works, but certainly needs to be fixed to make this
+ a more robust implementation.
+
+ ----------------------------------------------
+ | Answer 1 Status / | Synthesized | Reason |
+ | Answer 2 Status | Status | |
+ |--------------------------------------------|
+ | SUCCESS/SUCCESS | SUCCESS | [1] |
+ | SUCCESS/TRYAGAIN | TRYAGAIN | [5] |
+ | SUCCESS/TRYAGAIN' | SUCCESS | [1] |
+ | SUCCESS/NOTFOUND | SUCCESS | [1] |
+ | SUCCESS/UNAVAIL | SUCCESS | [1] |
+ | TRYAGAIN/SUCCESS | TRYAGAIN | [2] |
+ | TRYAGAIN/TRYAGAIN | TRYAGAIN | [2] |
+ | TRYAGAIN/TRYAGAIN' | TRYAGAIN | [2] |
+ | TRYAGAIN/NOTFOUND | TRYAGAIN | [2] |
+ | TRYAGAIN/UNAVAIL | TRYAGAIN | [2] |
+ | TRYAGAIN'/SUCCESS | SUCCESS | [3] |
+ | TRYAGAIN'/TRYAGAIN | TRYAGAIN | [3] |
+ | TRYAGAIN'/TRYAGAIN' | TRYAGAIN' | [3] |
+ | TRYAGAIN'/NOTFOUND | TRYAGAIN' | [3] |
+ | TRYAGAIN'/UNAVAIL | UNAVAIL | [3] |
+ | NOTFOUND/SUCCESS | SUCCESS | [3] |
+ | NOTFOUND/TRYAGAIN | TRYAGAIN | [3] |
+ | NOTFOUND/TRYAGAIN' | TRYAGAIN' | [3] |
+ | NOTFOUND/NOTFOUND | NOTFOUND | [3] |
+ | NOTFOUND/UNAVAIL | UNAVAIL | [3] |
+ | UNAVAIL/SUCCESS | UNAVAIL | [4] |
+ | UNAVAIL/TRYAGAIN | UNAVAIL | [4] |
+ | UNAVAIL/TRYAGAIN' | UNAVAIL | [4] |
+ | UNAVAIL/NOTFOUND | UNAVAIL | [4] |
+ | UNAVAIL/UNAVAIL | UNAVAIL | [4] |
+ ----------------------------------------------
+
+ [1] If the first response is a success we return success.
+ This ignores the state of the second answer and in fact
+ incorrectly sets errno and h_errno to that of the second
+ answer. However because the response is a success we ignore
+ *errnop and *h_errnop (though that means you touched errno on
+ success). We are being conservative here and returning the
+ likely IPv4 response in the first answer as a success.
+
+ [2] If the first response is a recoverable TRYAGAIN we return
+ that instead of looking at the second response. The
+ expectation here is that we have failed to get an IPv4 response
+ and should retry both queries.
+
+ [3] If the first response was not a SUCCESS and the second
+ response is not NOTFOUND (had a SUCCESS, need to TRYAGAIN,
+ or failed entirely e.g. TRYAGAIN' and UNAVAIL) then use the
+ result from the second response, otherwise the first responses
+ status is used. Again we have some odd side-effects when the
+ second response is NOTFOUND because we overwrite *errnop and
+ *h_errnop that means that a first answer of NOTFOUND might see
+ its *errnop and *h_errnop values altered. Whether it matters
+ in practice that a first response NOTFOUND has the wrong
+ *errnop and *h_errnop is undecided.
+
+ [4] If the first response is UNAVAIL we return that instead of
+ looking at the second response. The expectation here is that
+ it will have failed similarly e.g. configuration failure.
+
+ [5] Testing this code is complicated by the fact that truncated
+ second response buffers might be returned as SUCCESS if the
+ first answer is a SUCCESS. To fix this we add symmetry to
+ TRYAGAIN with the second response. If the second response
+ is a recoverable error we now return TRYAGIN even if the first
+ response was SUCCESS. */
+
if (anslen1 > 0)
status = gaih_getanswer_slice(answer1, anslen1, qname,
&pat, &buffer, &buflen,
errnop, h_errnop, ttlp,
&first);
+
if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND
|| (status == NSS_STATUS_TRYAGAIN
/* We want to look at the second answer in case of an
@@ -1242,8 +1342,15 @@ gaih_getanswer (const querybuf *answer1, int anslen1, const querybuf *answer2,
&pat, &buffer, &buflen,
errnop, h_errnop, ttlp,
&first);
+ /* Use the second response status in some cases. */
if (status != NSS_STATUS_SUCCESS && status2 != NSS_STATUS_NOTFOUND)
status = status2;
+ /* Do not return a truncated second response (unless it was
+ unavoidable e.g. unrecoverable TRYAGAIN). */
+ if (status == NSS_STATUS_SUCCESS
+ && (status2 == NSS_STATUS_TRYAGAIN
+ && *errnop == ERANGE && *h_errnop != NO_RECOVERY))
+ status = NSS_STATUS_TRYAGAIN;
}
return status;
diff --git a/resolv/res_query.c b/resolv/res_query.c
index 4a9b3b3..95470a9 100644
--- a/resolv/res_query.c
+++ b/resolv/res_query.c
@@ -396,6 +396,7 @@ __libc_res_nsearch(res_state statp,
{
free (*answerp2);
*answerp2 = NULL;
+ *nanswerp2 = 0;
*answerp2_malloced = 0;
}
}
@@ -447,6 +448,7 @@ __libc_res_nsearch(res_state statp,
{
free (*answerp2);
*answerp2 = NULL;
+ *nanswerp2 = 0;
*answerp2_malloced = 0;
}
@@ -521,6 +523,7 @@ __libc_res_nsearch(res_state statp,
{
free (*answerp2);
*answerp2 = NULL;
+ *nanswerp2 = 0;
*answerp2_malloced = 0;
}
if (saved_herrno != -1)
diff --git a/resolv/res_send.c b/resolv/res_send.c
index a968b95..21843f1 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -1,3 +1,20 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
/*
* Copyright (c) 1985, 1989, 1993
* The Regents of the University of California. All rights reserved.
@@ -355,6 +372,8 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen,
#ifdef USE_HOOKS
if (__glibc_unlikely (statp->qhook || statp->rhook)) {
if (anssiz < MAXPACKET && ansp) {
+ /* Always allocate MAXPACKET, callers expect
+ this specific size. */
u_char *buf = malloc (MAXPACKET);
if (buf == NULL)
return (-1);
@@ -630,6 +649,77 @@ get_nsaddr (res_state statp, int n)
return (struct sockaddr *) (void *) &statp->nsaddr_list[n];
}
+/* The send_vc function is responsible for sending a DNS query over TCP
+ to the nameserver numbered NS from the res_state STATP i.e.
+ EXT(statp).nssocks[ns]. The function supports sending both IPv4 and
+ IPv6 queries at the same serially on the same socket.
+
+ Please note that for TCP there is no way to disable sending both
+ queries, unlike UDP, which honours RES_SNGLKUP and RES_SNGLKUPREOP
+ and sends the queries serially and waits for the result after each
+ sent query. This implemetnation should be corrected to honour these
+ options.
+
+ Please also note that for TCP we send both queries over the same
+ socket one after another. This technically violates best practice
+ since the server is allowed to read the first query, respond, and
+ then close the socket (to service another client). If the server
+ does this, then the remaining second query in the socket data buffer
+ will cause the server to send the client an RST which will arrive
+ asynchronously and the client's OS will likely tear down the socket
+ receive buffer resulting in a potentially short read and lost
+ response data. This will force the client to retry the query again,
+ and this process may repeat until all servers and connection resets
+ are exhausted and then the query will fail. It's not known if this
+ happens with any frequency in real DNS server implementations. This
+ implementation should be corrected to use two sockets by default for
+ parallel queries.
+
+ The query stored in BUF of BUFLEN length is sent first followed by
+ the query stored in BUF2 of BUFLEN2 length. Queries are sent
+ serially on the same socket.
+
+ Answers to the query are stored firstly in *ANSP up to a max of
+ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP
+ is non-NULL (to indicate that modifying the answer buffer is allowed)
+ then malloc is used to allocate a new response buffer and ANSCP and
+ ANSP will both point to the new buffer. If more than *ANSSIZP bytes
+ are needed but ANSCP is NULL, then as much of the response as
+ possible is read into the buffer, but the results will be truncated.
+ When truncation happens because of a small answer buffer the DNS
+ packets header feild TC will bet set to 1, indicating a truncated
+ message and the rest of the socket data will be read and discarded.
+
+ Answers to the query are stored secondly in *ANSP2 up to a max of
+ *ANSSIZP2 bytes, with the actual response length stored in
+ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2
+ is non-NULL (required for a second query) then malloc is used to
+ allocate a new response buffer, *ANSSIZP2 is set to the new buffer
+ size and *ANSP2_MALLOCED is set to 1.
+
+ The ANSP2_MALLOCED argument will eventually be removed as the
+ change in buffer pointer can be used to detect the buffer has
+ changed and that the caller should use free on the new buffer.
+
+ Note that the answers may arrive in any order from the server and
+ therefore the first and second answer buffers may not correspond to
+ the first and second queries.
+
+ It is not supported to call this function with a non-NULL ANSP2
+ but a NULL ANSCP. Put another way, you can call send_vc with a
+ single unmodifiable buffer or two modifiable buffers, but no other
+ combination is supported.
+
+ It is the caller's responsibility to free the malloc allocated
+ buffers by detecting that the pointers have changed from their
+ original values i.e. *ANSCP or *ANSP2 has changed.
+
+ If errors are encountered then *TERRNO is set to an appropriate
+ errno value and a zero result is returned for a recoverable error,
+ and a less-than zero result is returned for a non-recoverable error.
+
+ If no errors are encountered then *TERRNO is left unmodified and
+ a the length of the first response in bytes is returned. */
static int
send_vc(res_state statp,
const u_char *buf, int buflen, const u_char *buf2, int buflen2,
@@ -639,11 +729,7 @@ send_vc(res_state statp,
{
const HEADER *hp = (HEADER *) buf;
const HEADER *hp2 = (HEADER *) buf2;
- u_char *ans = *ansp;
- int orig_anssizp = *anssizp;
- // XXX REMOVE
- // int anssiz = *anssizp;
- HEADER *anhp = (HEADER *) ans;
+ HEADER *anhp = (HEADER *) *ansp;
struct sockaddr_in6 *nsap = EXT(statp).nsaddrs[ns];
int truncating, connreset, n;
/* On some architectures compiler might emit a warning indicating
@@ -731,6 +817,8 @@ send_vc(res_state statp,
* Receive length & response
*/
int recvresp1 = 0;
+ /* Skip the second response if there is no second query.
+ To do that we mark the second response as received. */
int recvresp2 = buf2 == NULL;
uint16_t rlen16;
read_len:
@@ -767,40 +855,14 @@ send_vc(res_state statp,
u_char **thisansp;
int *thisresplenp;
if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) {
+ /* We have not received any responses
+ yet or we only have one response to
+ receive. */
thisanssizp = anssizp;
thisansp = anscp ?: ansp;
assert (anscp != NULL || ansp2 == NULL);
thisresplenp = &resplen;
} else {
- if (*anssizp != MAXPACKET) {
- /* No buffer allocated for the first
- reply. We can try to use the rest
- of the user-provided buffer. */
-#if __GNUC_PREREQ (4, 7)
- DIAG_PUSH_NEEDS_COMMENT;
- DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
-#endif
-#if _STRING_ARCH_unaligned
- *anssizp2 = orig_anssizp - resplen;
- *ansp2 = *ansp + resplen;
-#else
- int aligned_resplen
- = ((resplen + __alignof__ (HEADER) - 1)
- & ~(__alignof__ (HEADER) - 1));
- *anssizp2 = orig_anssizp - aligned_resplen;
- *ansp2 = *ansp + aligned_resplen;
-#endif
-#if __GNUC_PREREQ (4, 7)
- DIAG_POP_NEEDS_COMMENT;
-#endif
- } else {
- /* The first reply did not fit into the
- user-provided buffer. Maybe the second
- answer will. */
- *anssizp2 = orig_anssizp;
- *ansp2 = *ansp;
- }
-
thisanssizp = anssizp2;
thisansp = ansp2;
thisresplenp = resplen2;
@@ -804,10 +870,14 @@ send_vc(res_state statp,
anhp = (HEADER *) *thisansp;
*thisresplenp = rlen;
- if (rlen > *thisanssizp) {
- /* Yes, we test ANSCP here. If we have two buffers
- both will be allocatable. */
- if (__glibc_likely (anscp != NULL)) {
+ /* Is the answer buffer too small? */
+ if (*thisanssizp < rlen) {
+ /* If the current buffer is not the the static
+ user-supplied buffer then we can reallocate
+ it. */
+ if (thisansp != NULL && thisansp != ansp) {
+ /* Always allocate MAXPACKET, callers expect
+ this specific size. */
u_char *newp = malloc (MAXPACKET);
if (newp == NULL) {
*terrno = ENOMEM;
@@ -819,6 +889,9 @@ send_vc(res_state statp,
if (thisansp == ansp2)
*ansp2_malloced = 1;
anhp = (HEADER *) newp;
+ /* A uint16_t can't be larger than MAXPACKET
+ thus it's safe to allocate MAXPACKET but
+ read RLEN bytes instead. */
len = rlen;
} else {
Dprint(statp->options & RES_DEBUG,
@@ -948,6 +1021,66 @@ reopen (res_state statp, int *terrno, int ns)
return 1;
}
+/* The send_dg function is responsible for sending a DNS query over UDP
+ to the nameserver numbered NS from the res_state STATP i.e.
+ EXT(statp).nssocks[ns]. The function supports IPv4 and IPv6 queries
+ along with the ability to send the query in parallel for both stacks
+ (default) or serially (RES_SINGLKUP). It also supports serial lookup
+ with a close and reopen of the socket used to talk to the server
+ (RES_SNGLKUPREOP) to work around broken name servers.
+
+ The query stored in BUF of BUFLEN length is sent first followed by
+ the query stored in BUF2 of BUFLEN2 length. Queries are sent
+ in parallel (default) or serially (RES_SINGLKUP or RES_SNGLKUPREOP).
+
+ Answers to the query are stored firstly in *ANSP up to a max of
+ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP
+ is non-NULL (to indicate that modifying the answer buffer is allowed)
+ then malloc is used to allocate a new response buffer and ANSCP and
+ ANSP will both point to the new buffer. If more than *ANSSIZP bytes
+ are needed but ANSCP is NULL, then as much of the response as
+ possible is read into the buffer, but the results will be truncated.
+ When truncation happens because of a small answer buffer the DNS
+ packets header feild TC will bet set to 1, indicating a truncated
+ message, while the rest of the UDP packet is discarded.
+
+ Answers to the query are stored secondly in *ANSP2 up to a max of
+ *ANSSIZP2 bytes, with the actual response length stored in
+ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2
+ is non-NULL (required for a second query) then malloc is used to
+ allocate a new response buffer, *ANSSIZP2 is set to the new buffer
+ size and *ANSP2_MALLOCED is set to 1.
+
+ The ANSP2_MALLOCED argument will eventually be removed as the
+ change in buffer pointer can be used to detect the buffer has
+ changed and that the caller should use free on the new buffer.
+
+ Note that the answers may arrive in any order from the server and
+ therefore the first and second answer buffers may not correspond to
+ the first and second queries.
+
+ It is not supported to call this function with a non-NULL ANSP2
+ but a NULL ANSCP. Put another way, you can call send_vc with a
+ single unmodifiable buffer or two modifiable buffers, but no other
+ combination is supported.
+
+ It is the caller's responsibility to free the malloc allocated
+ buffers by detecting that the pointers have changed from their
+ original values i.e. *ANSCP or *ANSP2 has changed.
+
+ If an answer is truncated because of UDP datagram DNS limits then
+ *V_CIRCUIT is set to 1 and the return value non-zero to indicate to
+ the caller to retry with TCP. The value *GOTSOMEWHERE is set to 1
+ if any progress was made reading a response from the nameserver and
+ is used by the caller to distinguish between ECONNREFUSED and
+ ETIMEDOUT (the latter if *GOTSOMEWHERE is 1).
+
+ If errors are encountered then *TERRNO is set to an appropriate
+ errno value and a zero result is returned for a recoverable error,
+ and a less-than zero result is returned for a non-recoverable error.
+
+ If no errors are encountered then *TERRNO is left unmodified and
+ a the length of the first response in bytes is returned. */
static int
send_dg(res_state statp,
const u_char *buf, int buflen, const u_char *buf2, int buflen2,
@@ -957,8 +1090,6 @@ send_dg(res_state statp,
{
const HEADER *hp = (HEADER *) buf;
const HEADER *hp2 = (HEADER *) buf2;
- u_char *ans = *ansp;
- int orig_anssizp = *anssizp;
struct timespec now, timeout, finish;
struct pollfd pfd[1];
int ptimeout;
@@ -991,6 +1122,8 @@ send_dg(res_state statp,
int need_recompute = 0;
int nwritten = 0;
int recvresp1 = 0;
+ /* Skip the second response if there is no second query.
+ To do that we mark the second response as received. */
int recvresp2 = buf2 == NULL;
pfd[0].fd = EXT(statp).nssocks[ns];
pfd[0].events = POLLOUT;
@@ -1154,55 +1287,56 @@ send_dg(res_state statp,
int *thisresplenp;
if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) {
+ /* We have not received any responses
+ yet or we only have one response to
+ receive. */
thisanssizp = anssizp;
thisansp = anscp ?: ansp;
assert (anscp != NULL || ansp2 == NULL);
thisresplenp = &resplen;
} else {
- if (*anssizp != MAXPACKET) {
- /* No buffer allocated for the first
- reply. We can try to use the rest
- of the user-provided buffer. */
-#if _STRING_ARCH_unaligned
- *anssizp2 = orig_anssizp - resplen;
- *ansp2 = *ansp + resplen;
-#else
- int aligned_resplen
- = ((resplen + __alignof__ (HEADER) - 1)
- & ~(__alignof__ (HEADER) - 1));
- *anssizp2 = orig_anssizp - aligned_resplen;
- *ansp2 = *ansp + aligned_resplen;
-#endif
- } else {
- /* The first reply did not fit into the
- user-provided buffer. Maybe the second
- answer will. */
- *anssizp2 = orig_anssizp;
- *ansp2 = *ansp;
- }
-
thisanssizp = anssizp2;
thisansp = ansp2;
thisresplenp = resplen2;
}
if (*thisanssizp < MAXPACKET
- /* Yes, we test ANSCP here. If we have two buffers
- both will be allocatable. */
- && anscp
+ /* If the current buffer is not the the static
+ user-supplied buffer then we can reallocate
+ it. */
+ && (thisansp != NULL && thisansp != ansp)
#ifdef FIONREAD
+ /* Is the size too small? */
&& (ioctl (pfd[0].fd, FIONREAD, thisresplenp) < 0
|| *thisanssizp < *thisresplenp)
#endif
) {
+ /* Always allocate MAXPACKET, callers expect
+ this specific size. */
u_char *newp = malloc (MAXPACKET);
if (newp != NULL) {
- *anssizp = MAXPACKET;
- *thisansp = ans = newp;
+ *thisanssizp = MAXPACKET;
+ *thisansp = newp;
if (thisansp == ansp2)
*ansp2_malloced = 1;
}
}
+ /* We could end up with truncation if anscp was NULL
+ (not allowed to change caller's buffer) and the
+ response buffer size is too small. This isn't a
+ reliable way to detect truncation because the ioctl
+ may be an inaccurate report of the UDP message size.
+ Therefore we use this only to issue debug output.
+ To do truncation accurately with UDP we need
+ MSG_TRUNC which is only available on Linux. We
+ can abstract out the Linux-specific feature in the
+ future to detect truncation. */
+ if (__glibc_unlikely (*thisanssizp < *thisresplenp)) {
+ Dprint(statp->options & RES_DEBUG,
+ (stdout, ";; response may be truncated (UDP)\n")
+ );
+ }
+
HEADER *anhp = (HEADER *) *thisansp;
socklen_t fromlen = sizeof(struct sockaddr_in6);
assert (sizeof(from) <= fromlen);

View File

@@ -2,11 +2,11 @@
, pciutils, numactl }:
stdenv.mkDerivation rec {
name = "hwloc-1.6";
name = "hwloc-1.11.2";
src = fetchurl {
url = "http://www.open-mpi.org/software/hwloc/v1.6/downloads/${name}.tar.bz2";
sha256 = "0y561bryiqp1f5af5lm432dcw93xwp1jw55si7wa6skxnd6ch25w";
url = "http://www.open-mpi.org/software/hwloc/v1.11/downloads/${name}.tar.bz2";
sha1 = "3d68de060808f04349538be4e63cde501cd53b0a";
};
# XXX: libX11 is not directly needed, but needed as a propagated dep of Cairo.
@@ -39,9 +39,9 @@ stdenv.mkDerivation rec {
-e "s|-lnuma|-L$numalibdir -lnuma|g"
'';
# XXX: A test hangs on Cygwin, see
# <http://hydra.bordeaux.inria.fr/build/51474/nixlog/1/raw>.
doCheck = !stdenv.isCygwin;
# Checks disabled because they're impure (hardware dependent) and
# fail on some build machines.
doCheck = false;
meta = with stdenv.lib; {
description = "Portable abstraction of hierarchical architectures for high-performance computing";

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "attica";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,25 @@
{ kdeFramework, lib, extra-cmake-modules, kauth, kconfig
, kcoreaddons, kcrash, kdbusaddons, kfilemetadata, ki18n, kidletime
, kio, lmdb, makeQtWrapper, qtbase, qtquick1, solid
}:
kdeFramework {
name = "baloo";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [
kconfig kcrash kdbusaddons lmdb qtquick1 solid
];
propagatedBuildInputs = [
kauth kcoreaddons kfilemetadata ki18n kio kidletime qtbase
];
postInstall = ''
wrapQtProgram "$out/bin/baloo_file"
wrapQtProgram "$out/bin/baloo_file_extractor"
wrapQtProgram "$out/bin/balooctl"
wrapQtProgram "$out/bin/baloosearch"
wrapQtProgram "$out/bin/balooshow"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib
, extra-cmake-modules
, qtdeclarative
}:
kdeFramework {
name = "bluez-qt";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ qtdeclarative ];
preConfigure = ''
substituteInPlace CMakeLists.txt \
--replace /lib/udev/rules.d "$out/lib/udev/rules.d"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,10 @@
{ kdeFramework
, extra-cmake-modules
, qtsvg
}:
kdeFramework {
name = "breeze-icons";
nativeBuildInputs = [ extra-cmake-modules ];
propagatedUserEnvPkgs = [ qtsvg ];
}

View File

@@ -0,0 +1,118 @@
# Maintainer's Notes:
#
# Minor updates:
# 1. Edit ./fetchsrcs.sh to point to the updated URL.
# 2. Run ./fetchsrcs.sh.
# 3. Build and enjoy.
#
# Major updates:
# We prefer not to immediately overwrite older versions with major updates, so
# make a copy of this directory first. After copying, be sure to delete ./tmp
# if it exists. Then follow the minor update instructions. Be sure to check if
# any new components have been added and package them as necessary.
{ pkgs, debug ? false }:
let
inherit (pkgs) lib makeSetupHook stdenv;
mirror = "mirror://kde";
srcs = import ./srcs.nix { inherit (pkgs) fetchurl; inherit mirror; };
packages = self: with self; {
kdeFramework = args:
let
inherit (args) name;
inherit (srcs."${name}") src version;
in stdenv.mkDerivation (args // {
name = "${name}-${version}";
inherit src;
cmakeFlags =
(args.cmakeFlags or [])
++ [ "-DBUILD_TESTING=OFF" ]
++ lib.optional debug "-DCMAKE_BUILD_TYPE=Debug";
meta = {
license = with lib.licenses; [
lgpl21Plus lgpl3Plus bsd2 mit gpl2Plus gpl3Plus fdl12
];
platforms = lib.platforms.linux;
homepage = "http://www.kde.org";
} // (args.meta or {});
});
attica = callPackage ./attica.nix {};
baloo = callPackage ./baloo.nix {};
bluez-qt = callPackage ./bluez-qt.nix {};
breeze-icons = callPackage ./breeze-icons.nix {};
extra-cmake-modules = callPackage ./extra-cmake-modules {};
frameworkintegration = callPackage ./frameworkintegration.nix {};
kactivities = callPackage ./kactivities.nix {};
kapidox = callPackage ./kapidox.nix {};
karchive = callPackage ./karchive.nix {};
kauth = callPackage ./kauth {};
kbookmarks = callPackage ./kbookmarks.nix {};
kcmutils = callPackage ./kcmutils {};
kcodecs = callPackage ./kcodecs.nix {};
kcompletion = callPackage ./kcompletion.nix {};
kconfig = callPackage ./kconfig.nix {};
kconfigwidgets = callPackage ./kconfigwidgets {};
kcoreaddons = callPackage ./kcoreaddons.nix {};
kcrash = callPackage ./kcrash.nix {};
kdbusaddons = callPackage ./kdbusaddons.nix {};
kdeclarative = callPackage ./kdeclarative.nix {};
kded = callPackage ./kded.nix {};
kdelibs4support = callPackage ./kdelibs4support.nix {};
kdesignerplugin = callPackage ./kdesignerplugin.nix {};
kdewebkit = callPackage ./kdewebkit.nix {};
kdesu = callPackage ./kdesu.nix {};
kdnssd = callPackage ./kdnssd.nix {};
kdoctools = callPackage ./kdoctools {};
kemoticons = callPackage ./kemoticons.nix {};
kfilemetadata = callPackage ./kfilemetadata.nix {};
kglobalaccel = callPackage ./kglobalaccel.nix {};
kguiaddons = callPackage ./kguiaddons.nix {};
khtml = callPackage ./khtml.nix {};
ki18n = callPackage ./ki18n.nix {};
kiconthemes = callPackage ./kiconthemes {};
kidletime = callPackage ./kidletime.nix {};
kimageformats = callPackage ./kimageformats.nix {};
kinit = callPackage ./kinit {};
kio = callPackage ./kio {};
kitemmodels = callPackage ./kitemmodels.nix {};
kitemviews = callPackage ./kitemviews.nix {};
kjobwidgets = callPackage ./kjobwidgets.nix {};
kjs = callPackage ./kjs.nix {};
kjsembed = callPackage ./kjsembed.nix {};
kmediaplayer = callPackage ./kmediaplayer.nix {};
knewstuff = callPackage ./knewstuff.nix {};
knotifications = callPackage ./knotifications.nix {};
knotifyconfig = callPackage ./knotifyconfig.nix {};
kpackage = callPackage ./kpackage {};
kparts = callPackage ./kparts.nix {};
kpeople = callPackage ./kpeople.nix {};
kplotting = callPackage ./kplotting.nix {};
kpty = callPackage ./kpty.nix {};
kross = callPackage ./kross.nix {};
krunner = callPackage ./krunner.nix {};
kservice = callPackage ./kservice {};
ktexteditor = callPackage ./ktexteditor {};
ktextwidgets = callPackage ./ktextwidgets.nix {};
kunitconversion = callPackage ./kunitconversion.nix {};
kwallet = callPackage ./kwallet.nix {};
kwidgetsaddons = callPackage ./kwidgetsaddons.nix {};
kwindowsystem = callPackage ./kwindowsystem.nix {};
kxmlgui = callPackage ./kxmlgui.nix {};
kxmlrpcclient = callPackage ./kxmlrpcclient.nix {};
modemmanager-qt = callPackage ./modemmanager-qt.nix {};
networkmanager-qt = callPackage ./networkmanager-qt.nix {};
oxygen-icons5 = callPackage ./oxygen-icons5.nix {};
plasma-framework = callPackage ./plasma-framework {};
solid = callPackage ./solid.nix {};
sonnet = callPackage ./sonnet.nix {};
threadweaver = callPackage ./threadweaver.nix {};
};
in packages

View File

@@ -0,0 +1,74 @@
From 3cc148e878b69fc3e0228f3e3bf1bbe689dad87c Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Fri, 20 Feb 2015 23:17:39 -0600
Subject: [PATCH] extra-cmake-modules paths
---
kde-modules/KDEInstallDirs.cmake | 37 ++++---------------------------------
1 file changed, 4 insertions(+), 33 deletions(-)
diff --git a/kde-modules/KDEInstallDirs.cmake b/kde-modules/KDEInstallDirs.cmake
index b7cd34d..2f868ac 100644
--- a/kde-modules/KDEInstallDirs.cmake
+++ b/kde-modules/KDEInstallDirs.cmake
@@ -193,37 +193,8 @@
# (To distribute this file outside of extra-cmake-modules, substitute the full
# License text for the above reference.)
-# Figure out what the default install directory for libraries should be.
-# This is based on the logic in GNUInstallDirs, but simplified (the
-# GNUInstallDirs code deals with re-configuring, but that is dealt with
-# by the _define_* macros in this module).
+# The default library directory on NixOS is *always* /lib.
set(_LIBDIR_DEFAULT "lib")
-# Override this default 'lib' with 'lib64' iff:
-# - we are on a Linux, kFreeBSD or Hurd system but NOT cross-compiling
-# - we are NOT on debian
-# - we are on a 64 bits system
-# reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
-# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
-# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
-# See http://wiki.debian.org/Multiarch
-if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")
- AND NOT CMAKE_CROSSCOMPILING)
- if (EXISTS "/etc/debian_version") # is this a debian system ?
- if(CMAKE_LIBRARY_ARCHITECTURE)
- set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
- endif()
- else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
- if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
- message(AUTHOR_WARNING
- "Unable to determine default LIB_INSTALL_LIBDIR directory because no target architecture is known. "
- "Please enable at least one language before including KDEInstallDirs.")
- else()
- if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
- set(_LIBDIR_DEFAULT "lib64")
- endif()
- endif()
- endif()
-endif()
set(_gnu_install_dirs_vars
BINDIR
@@ -445,15 +416,15 @@ if(KDE_INSTALL_USE_QT_SYS_PATHS)
"QtQuick2 imports"
QML_INSTALL_DIR)
else()
- _define_relative(QTPLUGINDIR LIBDIR "plugins"
+ _define_relative(QTPLUGINDIR LIBDIR "qt5/plugins"
"Qt plugins"
QT_PLUGIN_INSTALL_DIR)
- _define_relative(QTQUICKIMPORTSDIR QTPLUGINDIR "imports"
+ _define_relative(QTQUICKIMPORTSDIR QTPLUGINDIR "qt5/imports"
"QtQuick1 imports"
IMPORTS_INSTALL_DIR)
- _define_relative(QMLDIR LIBDIR "qml"
+ _define_relative(QMLDIR LIBDIR "qt5/qml"
"QtQuick2 imports"
QML_INSTALL_DIR)
endif()
--
2.3.0

View File

@@ -0,0 +1,18 @@
{ kdeFramework, lib, stdenv, cmake, pkgconfig, qttools }:
kdeFramework {
name = "extra-cmake-modules";
patches = [ ./0001-extra-cmake-modules-paths.patch ];
setupHook = ./setup-hook.sh;
# It is OK to propagate these inputs as long as
# extra-cmake-modules is never a propagated input
# of some other derivation.
propagatedNativeBuildInputs = [ cmake pkgconfig qttools ];
meta = {
license = stdenv.lib.licenses.bsd2;
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,27 @@
addMimePkg() {
local propagated
if [[ -d "$1/share/mime" ]]; then
propagated=
for pkg in $propagatedBuildInputs; do
if [[ "z$pkg" == "z$1" ]]; then
propagated=1
fi
done
if [[ -z $propagated ]]; then
propagatedBuildInputs="$propagatedBuildInputs $1"
fi
propagated=
for pkg in $propagatedUserEnvPkgs; do
if [[ "z$pkg" == "z$1" ]]; then
propagated=1
fi
done
if [[ -z $propagated ]]; then
propagatedUserEnvPkgs="$propagatedUserEnvPkgs $1"
fi
fi
}
envHooks+=(addMimePkg)

View File

@@ -0,0 +1,57 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p coreutils findutils gnused nix wget
set -x
# The trailing slash at the end is necessary!
RELEASE_URL="http://download.kde.org/stable/frameworks/5.19/"
EXTRA_WGET_ARGS='-A *.tar.xz'
mkdir tmp; cd tmp
rm -f ../srcs.csv
wget -nH -r -c --no-parent $RELEASE_URL $EXTRA_WGET_ARGS
find . | while read src; do
if [[ -f "${src}" ]]; then
# Sanitize file name
filename=$(basename "$src" | tr '@' '_')
nameVersion="${filename%.tar.*}"
name=$(echo "$nameVersion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,')
version=$(echo "$nameVersion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,')
echo "$name,$version,$src,$filename" >>../srcs.csv
fi
done
cat >../srcs.nix <<EOF
# DO NOT EDIT! This file is generated automatically by fetchsrcs.sh
{ fetchurl, mirror }:
{
EOF
gawk -F , "{ print \$1 }" ../srcs.csv | sort | uniq | while read name; do
versions=$(gawk -F , "/^$name,/ { print \$2 }" ../srcs.csv)
latestVersion=$(echo "$versions" | sort -rV | head -n 1)
src=$(gawk -F , "/^$name,$latestVersion,/ { print \$3 }" ../srcs.csv)
filename=$(gawk -F , "/^$name,$latestVersion,/ { print \$4 }" ../srcs.csv)
url="${src:2}"
sha256=$(nix-hash --type sha256 --base32 --flat "$src")
cat >>../srcs.nix <<EOF
$name = {
version = "$latestVersion";
src = fetchurl {
url = "\${mirror}/$url";
sha256 = "$sha256";
name = "$filename";
};
};
EOF
done
echo "}" >>../srcs.nix
rm -f ../srcs.csv
cd ..

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, kbookmarks, kcompletion
, kconfig, kconfigwidgets, ki18n, kiconthemes, kio, knotifications
, kwidgetsaddons, libXcursor, qtx11extras
}:
kdeFramework {
name = "frameworkintegration";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kbookmarks kcompletion kconfig knotifications kwidgetsaddons
libXcursor
];
propagatedBuildInputs = [ kconfigwidgets ki18n kio kiconthemes qtx11extras ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,22 @@
{ kdeFramework, lib, extra-cmake-modules, boost, kcmutils, kconfig
, kcoreaddons, kdbusaddons, kdeclarative, kglobalaccel, ki18n
, kio, kservice, kwindowsystem, kxmlgui, makeQtWrapper, qtdeclarative
}:
kdeFramework {
name = "kactivities";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [
boost kcmutils kconfig kcoreaddons kdbusaddons kservice
kxmlgui
];
propagatedBuildInputs = [
kdeclarative kglobalaccel ki18n kio kwindowsystem qtdeclarative
];
postInstall = ''
wrapQtProgram "$out/bin/kactivitymanagerd"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,12 @@
{ kdeFramework, lib
, extra-cmake-modules
, python
}:
kdeFramework {
name = "kapidox";
nativeBuildInputs = [ extra-cmake-modules python ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "karchive";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib
, extra-cmake-modules
, kcoreaddons
, polkit-qt
}:
kdeFramework {
name = "kauth";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ polkit-qt ];
propagatedBuildInputs = [ kcoreaddons ];
patches = [ ./kauth-policy-install.patch ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
diff --git a/KF5AuthConfig.cmake.in b/KF5AuthConfig.cmake.in
index e859ec7..9a8ab18 100644
--- a/KF5AuthConfig.cmake.in
+++ b/KF5AuthConfig.cmake.in
@@ -4,7 +4,7 @@ set(KAUTH_STUB_FILES_DIR "${PACKAGE_PREFIX_DIR}/@KF5_DATA_INSTALL_DIR@/kauth/")
set(KAUTH_BACKEND_NAME "@KAUTH_BACKEND_NAME@")
set(KAUTH_HELPER_BACKEND_NAME "@KAUTH_HELPER_BACKEND_NAME@")
-set(KAUTH_POLICY_FILES_INSTALL_DIR "@KAUTH_POLICY_FILES_INSTALL_DIR@")
+set(KAUTH_POLICY_FILES_INSTALL_DIR "\${CMAKE_INSTALL_PREFIX}/share/polkit-1/actions")
set(KAUTH_HELPER_INSTALL_DIR "@KAUTH_HELPER_INSTALL_DIR@")
find_dependency(KF5CoreAddons "@KF5_DEP_VERSION@")

View File

@@ -0,0 +1,25 @@
{ kdeFramework, lib
, extra-cmake-modules
, kcodecs
, kconfig
, kconfigwidgets
, kcoreaddons
, kiconthemes
, kxmlgui
}:
kdeFramework {
name = "kbookmarks";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kcodecs
kconfig
kconfigwidgets
kcoreaddons
kiconthemes
kxmlgui
];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,25 @@
From f14d2a275323a47104b33eb61c5b6910ae1a9f59 Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Wed, 14 Oct 2015 06:43:53 -0500
Subject: [PATCH] qdiriterator follow symlinks
---
src/kpluginselector.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/kpluginselector.cpp b/src/kpluginselector.cpp
index 9c3431d..d6b1ee2 100644
--- a/src/kpluginselector.cpp
+++ b/src/kpluginselector.cpp
@@ -305,7 +305,7 @@ void KPluginSelector::addPlugins(const QString &componentName,
QStringList desktopFileNames;
const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, componentName + QStringLiteral("/kpartplugins"), QStandardPaths::LocateDirectory);
Q_FOREACH (const QString &dir, dirs) {
- QDirIterator it(dir, QStringList() << QStringLiteral("*.desktop"), QDir::NoFilter, QDirIterator::Subdirectories);
+ QDirIterator it(dir, QStringList() << QStringLiteral("*.desktop"), QDir::NoFilter, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
while (it.hasNext()) {
desktopFileNames.append(it.next());
}
--
2.5.2

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, kconfigwidgets
, kcoreaddons, kdeclarative, ki18n, kiconthemes, kitemviews
, kpackage, kservice, kxmlgui
}:
kdeFramework {
name = "kcmutils";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kcoreaddons kiconthemes kitemviews kpackage kxmlgui
];
propagatedBuildInputs = [ kconfigwidgets kdeclarative ki18n kservice ];
patches = [ ./0001-qdiriterator-follow-symlinks.patch ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "kcodecs";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,14 @@
{ kdeFramework, lib
, extra-cmake-modules
, kconfig
, kwidgetsaddons
}:
kdeFramework {
name = "kcompletion";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kconfig kwidgetsaddons ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib
, extra-cmake-modules
, makeQtWrapper
}:
kdeFramework {
name = "kconfig";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
postInstall = ''
wrapQtProgram "$out/bin/kreadconfig5"
wrapQtProgram "$out/bin/kwriteconfig5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,25 @@
From 4f84780893d505b2d62a14633dd983baa8ec6e28 Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Wed, 14 Oct 2015 06:47:01 -0500
Subject: [PATCH] qdiriterator follow symlinks
---
src/khelpclient.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/khelpclient.cpp b/src/khelpclient.cpp
index 53a331e..80fbb01 100644
--- a/src/khelpclient.cpp
+++ b/src/khelpclient.cpp
@@ -48,7 +48,7 @@ void KHelpClient::invokeHelp(const QString &anchor, const QString &_appname)
QString docPath;
const QStringList desktopDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
Q_FOREACH (const QString &dir, desktopDirs) {
- QDirIterator it(dir, QStringList() << appname + QLatin1String(".desktop"), QDir::NoFilter, QDirIterator::Subdirectories);
+ QDirIterator it(dir, QStringList() << appname + QLatin1String(".desktop"), QDir::NoFilter, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
while (it.hasNext()) {
const QString desktopPath(it.next());
KDesktopFile desktopFile(desktopPath);
--
2.5.2

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, kauth, kcodecs, kconfig
, kdoctools, kguiaddons, ki18n, kwidgetsaddons, makeQtWrapper
}:
kdeFramework {
name = "kconfigwidgets";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [ kguiaddons ];
propagatedBuildInputs = [ kauth kconfig kcodecs ki18n kwidgetsaddons ];
patches = [ ./0001-qdiriterator-follow-symlinks.patch ];
postInstall = ''
wrapQtProgram "$out/bin/preparetips5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib, makeQtWrapper
, extra-cmake-modules
, shared_mime_info
}:
kdeFramework {
name = "kcoreaddons";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [ shared_mime_info ];
postInstall = ''
wrapQtProgram "$out/bin/desktoptojson"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib
, extra-cmake-modules
, kcoreaddons
, kwindowsystem
, qtx11extras
}:
kdeFramework {
name = "kcrash";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kcoreaddons ];
propagatedBuildInputs = [ kwindowsystem qtx11extras ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib
, extra-cmake-modules
, makeQtWrapper
, qtx11extras
}:
kdeFramework {
name = "kdbusaddons";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
propagatedBuildInputs = [ qtx11extras ];
postInstall = ''
wrapQtProgram "$out/bin/kquitapp5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,22 @@
{ kdeFramework, lib, extra-cmake-modules, epoxy, kconfig
, kglobalaccel, kguiaddons, ki18n, kiconthemes, kio, kpackage
, kwidgetsaddons, kwindowsystem, makeQtWrapper, pkgconfig
, qtdeclarative
}:
kdeFramework {
name = "kdeclarative";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [
epoxy kguiaddons kiconthemes kwidgetsaddons
];
propagatedBuildInputs = [
kconfig kglobalaccel ki18n kio kpackage kwindowsystem qtdeclarative
];
postInstall = ''
wrapQtProgram "$out/bin/kpackagelauncherqml"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,19 @@
{ kdeFramework, lib
, extra-cmake-modules
, kconfig
, kcoreaddons
, kcrash
, kdbusaddons
, kdoctools
, kinit
, kservice
}:
kdeFramework {
name = "kded";
buildInputs = [ kconfig kcoreaddons kcrash kdbusaddons kinit kservice ];
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,32 @@
{ kdeFramework, lib, extra-cmake-modules, docbook_xml_dtd_45, kauth
, karchive, kcompletion, kconfig, kconfigwidgets, kcoreaddons
, kcrash, kdbusaddons, kded, kdesignerplugin, kdoctools, kemoticons
, kglobalaccel, kguiaddons, ki18n, kiconthemes, kio, kitemmodels
, kinit, knotifications, kparts, kservice, ktextwidgets
, kunitconversion, kwidgetsaddons, kwindowsystem, kxmlgui
, networkmanager, qtsvg, qtx11extras, xlibs
}:
# TODO: debug docbook detection
kdeFramework {
name = "kdelibs4support";
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
buildInputs = [
kcompletion kconfig kded kservice kwidgetsaddons
kxmlgui networkmanager qtsvg qtx11extras xlibs.libSM
];
propagatedBuildInputs = [
kauth karchive kconfigwidgets kcoreaddons kcrash kdbusaddons
kdesignerplugin kemoticons kglobalaccel kguiaddons ki18n kio
kiconthemes kitemmodels kinit knotifications kparts ktextwidgets
kunitconversion kwindowsystem
];
cmakeFlags = [
"-DDocBookXML4_DTD_DIR=${docbook_xml_dtd_45}/xml/dtd/docbook"
"-DDocBookXML4_DTD_VERSION=4.5"
];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,34 @@
{ kdeFramework, lib, makeQtWrapper
, extra-cmake-modules
, kcompletion
, kconfig
, kconfigwidgets
, kcoreaddons
, kdewebkit
, kdoctools
, kiconthemes
, kio
, kitemviews
, kplotting
, ktextwidgets
, kwidgetsaddons
, kxmlgui
, sonnet
}:
kdeFramework {
name = "kdesignerplugin";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [
kcompletion kconfig kconfigwidgets kcoreaddons kdewebkit
kiconthemes kitemviews kplotting ktextwidgets kwidgetsaddons
kxmlgui
];
propagatedBuildInputs = [ kio sonnet ];
postInstall = ''
wrapQtProgram "$out/bin/kgendesignerplugin"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib, extra-cmake-modules, kcoreaddons, ki18n, kpty
, kservice
}:
kdeFramework {
name = "kdesu";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kcoreaddons kservice ];
propagatedBuildInputs = [ ki18n kpty ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
, ki18n, kio, kjobwidgets, kparts, kservice, kwallet, qtwebkit
}:
kdeFramework {
name = "kdewebkit";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kconfig kcoreaddons kjobwidgets kparts kservice kwallet ];
propagatedBuildInputs = [ ki18n kio qtwebkit ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, avahi
}:
kdeFramework {
name = "kdnssd";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ avahi ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,20 @@
{ kdeFramework, lib, extra-cmake-modules, docbook_xml_dtd_45
, docbook5_xsl, karchive, ki18n, makeQtWrapper, perl, perlPackages
}:
kdeFramework {
name = "kdoctools";
setupHook = ./setup-hook.sh;
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ karchive ];
propagatedBuildInputs = [ ki18n ];
propagatedNativeBuildInputs = [ makeQtWrapper perl perlPackages.URI ];
cmakeFlags = [
"-DDocBookXML4_DTD_DIR=${docbook_xml_dtd_45}/xml/dtd/docbook"
"-DDocBookXSL_DIR=${docbook5_xsl}/xml/xsl/docbook"
];
patches = [ ./kdoctools-no-find-docbook-xml.patch ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,12 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5c4863c..f731775 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,7 +46,6 @@ set_package_properties(LibXml2 PROPERTIES
)
-find_package(DocBookXML4 "4.5")
set_package_properties(DocBookXML4 PROPERTIES
TYPE REQUIRED

View File

@@ -0,0 +1,5 @@
addXdgData() {
addToSearchPath XDG_DATA_DIRS "$1/share"
}
envHooks+=(addXdgData)

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib
, extra-cmake-modules
, karchive
, kconfig
, kcoreaddons
, kservice
}:
kdeFramework {
name = "kemoticons";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ karchive kconfig kcoreaddons ];
propagatedBuildInputs = [ kservice ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib, extra-cmake-modules, attr, ebook_tools, exiv2
, ffmpeg, karchive, ki18n, poppler, qtbase, taglib
}:
kdeFramework {
name = "kfilemetadata";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ attr ebook_tools exiv2 ffmpeg karchive poppler taglib ];
propagatedBuildInputs = [ qtbase ki18n ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,23 @@
{ kdeFramework, lib
, extra-cmake-modules
, kconfig
, kcoreaddons
, kcrash
, kdbusaddons
, kwindowsystem
, makeQtWrapper
, qtx11extras
}:
kdeFramework {
name = "kglobalaccel";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [ kconfig kcoreaddons kcrash kdbusaddons ];
propagatedBuildInputs = [ kwindowsystem qtx11extras ];
postInstall = ''
wrapQtProgram "$out/bin/kglobalaccel5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, qtx11extras
}:
kdeFramework {
name = "kguiaddons";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ qtx11extras ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,21 @@
{ kdeFramework, lib, extra-cmake-modules, giflib, karchive
, kcodecs, kglobalaccel, ki18n, kiconthemes, kio, kjs
, knotifications, kparts, ktextwidgets, kwallet, kwidgetsaddons
, kwindowsystem, kxmlgui, perl, phonon, qtx11extras, sonnet
}:
kdeFramework {
name = "khtml";
nativeBuildInputs = [ extra-cmake-modules perl ];
buildInputs = [
giflib karchive kiconthemes knotifications kwallet kwidgetsaddons
kxmlgui phonon
];
propagatedBuildInputs = [
kcodecs kglobalaccel ki18n kio kjs kparts ktextwidgets
kwindowsystem qtx11extras sonnet
];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib
, extra-cmake-modules
, gettext
, python
, qtdeclarative
, qtscript
}:
kdeFramework {
name = "ki18n";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ qtdeclarative qtscript ];
propagatedNativeBuildInputs = [ gettext python ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
Index: kiconthemes-5.17.0/src/kicontheme.cpp
===================================================================
--- kiconthemes-5.17.0.orig/src/kicontheme.cpp
+++ kiconthemes-5.17.0/src/kicontheme.cpp
@@ -557,7 +557,7 @@ void KIconTheme::reconfigure()
// static
QString KIconTheme::defaultThemeName()
{
- return QStringLiteral("oxygen");
+ return QStringLiteral("breeze");
}
void KIconTheme::assignIconsToContextMenu(ContextMenus type,

View File

@@ -0,0 +1,18 @@
{ kdeFramework, lib, copyPathsToStore
, extra-cmake-modules, makeQtWrapper
, kconfigwidgets, ki18n, breeze-icons, kitemviews, qtsvg
}:
kdeFramework {
name = "kiconthemes";
patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [ kconfigwidgets kitemviews qtsvg ];
propagatedBuildInputs = [ breeze-icons ki18n ];
postInstall = ''
wrapQtProgram "$out/bin/kiconfinder5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1 @@
default-theme-breeze.patch

View File

@@ -0,0 +1,15 @@
{ kdeFramework, lib
, extra-cmake-modules
, qtbase
, qtx11extras
}:
kdeFramework {
name = "kidletime";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ qtx11extras ];
propagatedBuildInputs = [ qtbase ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, ilmbase
}:
kdeFramework {
name = "kimageformats";
nativeBuildInputs = [ extra-cmake-modules ];
NIX_CFLAGS_COMPILE = "-I${ilmbase}/include/OpenEXR";
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,42 @@
From 723c9b1268a04127647a1c20eebe9804150566dd Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Sat, 13 Jun 2015 08:57:55 -0500
Subject: [PATCH] kinit libpath
---
src/kdeinit/kinit.cpp | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/kdeinit/kinit.cpp b/src/kdeinit/kinit.cpp
index 9e775b6..0ac5646 100644
--- a/src/kdeinit/kinit.cpp
+++ b/src/kdeinit/kinit.cpp
@@ -660,15 +660,17 @@ static pid_t launch(int argc, const char *_name, const char *args,
if (!libpath.isEmpty()) {
if (!l.load()) {
if (libpath_relative) {
- // NB: Because Qt makes the actual dlopen() call, the
- // RUNPATH of kdeinit is *not* respected - see
- // https://sourceware.org/bugzilla/show_bug.cgi?id=13945
- // - so we try hacking it in ourselves
- QString install_lib_dir = QFile::decodeName(
- CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/");
- libpath = install_lib_dir + libpath;
- l.setFileName(libpath);
+ // Use QT_PLUGIN_PATH to find shared library directories
+ // For KF5, the plugin path is /lib/qt5/plugins/, so kdeinit5
+ // shared libraries should be in /lib/qt5/plugins/../../
+ const QRegExp pathSepRegExp(QString::fromLatin1("[:\b]"));
+ const QString up = QString::fromLocal8Bit("/../../");
+ const QStringList paths = QString::fromLocal8Bit(qgetenv("QT_PLUGIN_PATH")).split(pathSepRegExp, QString::KeepEmptyParts);
+ Q_FOREACH (const QString &path, paths) {
+ l.setFileName(path + up + libpath);
l.load();
+ if (l.isLoaded()) break;
+ }
}
}
if (!l.isLoaded()) {
--
2.4.2

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, kconfig, kcrash
, kdoctools, ki18n, kio, kservice, kwindowsystem, libcap
, libcap_progs
}:
# TODO: setuid wrapper
kdeFramework {
name = "kinit";
nativeBuildInputs = [ extra-cmake-modules kdoctools libcap_progs ];
buildInputs = [ kconfig kcrash kservice libcap ];
propagatedBuildInputs = [ ki18n kio kwindowsystem ];
patches = [ ./0001-kinit-libpath.patch ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,33 @@
{ kdeFramework, lib, copyPathsToStore
, extra-cmake-modules, acl, karchive
, kbookmarks, kcompletion, kconfig, kconfigwidgets, kcoreaddons
, kdbusaddons, kdoctools, ki18n, kiconthemes, kitemviews
, kjobwidgets, knotifications, kservice, ktextwidgets, kwallet
, kwidgetsaddons, kwindowsystem, kxmlgui, makeQtWrapper
, qtscript, qtx11extras, solid
}:
kdeFramework {
name = "kio";
patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [
acl karchive kconfig kcoreaddons kdbusaddons kiconthemes
knotifications ktextwidgets kwallet kwidgetsaddons
qtscript
];
propagatedBuildInputs = [
kbookmarks kcompletion kconfigwidgets ki18n kitemviews kjobwidgets
kservice kwindowsystem kxmlgui solid qtx11extras
];
postInstall = ''
wrapQtProgram "$out/bin/kcookiejar5"
wrapQtProgram "$out/bin/ktelnetservice5"
wrapQtProgram "$out/bin/ktrash5"
wrapQtProgram "$out/bin/kmailservice5"
wrapQtProgram "$out/bin/protocoltojson"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,28 @@
Index: kio-5.17.0/src/core/ksambashare.cpp
===================================================================
--- kio-5.17.0.orig/src/core/ksambashare.cpp
+++ kio-5.17.0/src/core/ksambashare.cpp
@@ -67,13 +67,18 @@ KSambaSharePrivate::~KSambaSharePrivate(
bool KSambaSharePrivate::isSambaInstalled()
{
- if (QFile::exists(QStringLiteral("/usr/sbin/smbd"))
- || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"))) {
- return true;
+ const QByteArray pathEnv = qgetenv("PATH");
+ if (!pathEnv.isEmpty()) {
+ QLatin1Char pathSep(':');
+ QStringList paths = QFile::decodeName(pathEnv).split(pathSep, QString::SkipEmptyParts);
+ for (QStringList::iterator it = paths.begin(); it != paths.end(); ++it) {
+ it->append("/smbd");
+ if (QFile::exists(*it)) {
+ return true;
+ }
+ }
}
- //qDebug() << "Samba is not installed!";
-
return false;
}

View File

@@ -0,0 +1 @@
samba-search-path.patch

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "kitemmodels";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "kitemviews";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib
, extra-cmake-modules
, kcoreaddons
, kwidgetsaddons
, qtx11extras
}:
kdeFramework {
name = "kjobwidgets";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kcoreaddons kwidgetsaddons ];
propagatedBuildInputs = [ qtx11extras ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib
, extra-cmake-modules
, kdoctools
, makeQtWrapper
}:
kdeFramework {
name = "kjs";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
postInstall = ''
wrapQtProgram "$out/bin/kjs5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, kdoctools, ki18n, kjs
, makeQtWrapper, qtsvg
}:
kdeFramework {
name = "kjsembed";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [ qtsvg ];
propagatedBuildInputs = [ ki18n kjs ];
postInstall = ''
wrapQtProgram "$out/bin/kjscmd5"
wrapQtProgram "$out/bin/kjsconsole"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,15 @@
{ kdeFramework, lib
, extra-cmake-modules
, kparts
, kxmlgui
}:
kdeFramework {
name = "kmediaplayer";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kxmlgui ];
propagatedBuildInputs = [ kparts ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, attica, karchive
, kcompletion, kconfig, kcoreaddons, ki18n, kiconthemes, kio
, kitemviews, kservice, ktextwidgets, kwidgetsaddons, kxmlgui
}:
kdeFramework {
name = "knewstuff";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
karchive kcompletion kconfig kcoreaddons kiconthemes
kitemviews ktextwidgets kwidgetsaddons
];
propagatedBuildInputs = [ attica ki18n kio kservice kxmlgui ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,21 @@
{ kdeFramework, lib
, extra-cmake-modules
, kcodecs
, kconfig
, kcoreaddons
, kwindowsystem
, phonon
, qtx11extras
}:
kdeFramework {
name = "knotifications";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kcodecs kconfig kcoreaddons phonon
];
propagatedBuildInputs = [ kwindowsystem qtx11extras ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib, extra-cmake-modules, kcompletion, kconfig
, ki18n, kio, phonon
}:
kdeFramework {
name = "knotifyconfig";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ kcompletion kconfig phonon ];
propagatedBuildInputs = [ ki18n kio ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
Index: kpackage-5.18.0/src/kpackage/package.cpp
===================================================================
--- kpackage-5.18.0.orig/src/kpackage/package.cpp
+++ kpackage-5.18.0/src/kpackage/package.cpp
@@ -808,7 +808,7 @@ PackagePrivate::PackagePrivate()
: QSharedData(),
fallbackPackage(0),
metadata(0),
- externalPaths(false),
+ externalPaths(true),
valid(false),
checkedValid(false)
{

View File

@@ -0,0 +1,23 @@
{ kdeFramework, lib, copyPathsToStore
, extra-cmake-modules
, karchive
, kconfig
, kcoreaddons
, kdoctools
, ki18n
, makeQtWrapper
}:
kdeFramework {
name = "kpackage";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [ karchive kconfig ];
propagatedBuildInputs = [ kcoreaddons ki18n ];
patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
postInstall = ''
wrapQtProgram "$out/bin/kpackagetool5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,26 @@
Index: kpackage-5.18.0/src/kpackage/packageloader.cpp
===================================================================
--- kpackage-5.18.0.orig/src/kpackage/packageloader.cpp
+++ kpackage-5.18.0/src/kpackage/packageloader.cpp
@@ -241,7 +241,7 @@ QList<KPluginMetaData> PackageLoader::li
} else {
//qDebug() << "Not cached";
// If there's no cache file, fall back to listing the directory
- const QDirIterator::IteratorFlags flags = QDirIterator::Subdirectories;
+ const QDirIterator::IteratorFlags flags = QDirIterator::Subdirectories | QDirIterator::FollowSymlinks;
const QStringList nameFilters = QStringList(QStringLiteral("metadata.desktop")) << QStringLiteral("metadata.json");
QDirIterator it(plugindir, nameFilters, QDir::Files, flags);
Index: kpackage-5.18.0/src/kpackage/private/packagejobthread.cpp
===================================================================
--- kpackage-5.18.0.orig/src/kpackage/private/packagejobthread.cpp
+++ kpackage-5.18.0/src/kpackage/private/packagejobthread.cpp
@@ -146,7 +146,7 @@ bool indexDirectory(const QString& dir,
QJsonArray plugins;
- QDirIterator it(dir, *metaDataFiles, QDir::Files, QDirIterator::Subdirectories);
+ QDirIterator it(dir, *metaDataFiles, QDir::Files, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
while (it.hasNext()) {
it.next();
const QString path = it.fileInfo().absoluteFilePath();

View File

@@ -0,0 +1,2 @@
allow-external-paths.patch
qdiriterator-follow-symlinks.patch

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
, ki18n, kiconthemes, kio, kjobwidgets, knotifications, kservice
, ktextwidgets, kwidgetsaddons, kxmlgui
}:
kdeFramework {
name = "kparts";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kconfig kcoreaddons kiconthemes kjobwidgets knotifications
kservice kwidgetsaddons
];
propagatedBuildInputs = [ ki18n kio ktextwidgets kxmlgui ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,15 @@
{ kdeFramework, lib, extra-cmake-modules, kcoreaddons, ki18n
, kitemviews, kservice, kwidgetsaddons, qtdeclarative
}:
kdeFramework {
name = "kpeople";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kcoreaddons kitemviews kservice kwidgetsaddons
];
propagatedBuildInputs = [ ki18n qtdeclarative ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "kplotting";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,10 @@
{ kdeFramework, lib, extra-cmake-modules, kcoreaddons, ki18n }:
kdeFramework {
name = "kpty";
nativeBuildInputs = [ extra-cmake-modules ];
propagatedBuildInputs = [ kcoreaddons ki18n ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,14 @@
{ kdeFramework, lib, extra-cmake-modules, kcompletion, kcoreaddons
, kdoctools, ki18n, kiconthemes, kio, kparts, kwidgetsaddons
, kxmlgui, qtscript
}:
kdeFramework {
name = "kross";
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
buildInputs = [ kcompletion kcoreaddons kxmlgui ];
propagatedBuildInputs = [ ki18n kiconthemes kio kparts kwidgetsaddons qtscript ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
, ki18n, kio, kservice, plasma-framework, qtquick1, solid
, threadweaver
}:
kdeFramework {
name = "krunner";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kconfig kcoreaddons kservice qtquick1 solid threadweaver
];
propagatedBuildInputs = [ ki18n kio plasma-framework ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,25 @@
From ae8919eb81abad369e4a26ffcd845b140983398d Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Wed, 14 Oct 2015 06:28:57 -0500
Subject: [PATCH 1/2] qdiriterator follow symlinks
---
src/sycoca/kbuildsycoca.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/sycoca/kbuildsycoca.cpp b/src/sycoca/kbuildsycoca.cpp
index 1deae14..250baa8 100644
--- a/src/sycoca/kbuildsycoca.cpp
+++ b/src/sycoca/kbuildsycoca.cpp
@@ -208,7 +208,7 @@ bool KBuildSycoca::build()
QStringList relFiles;
const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_resourceSubdir, QStandardPaths::LocateDirectory);
Q_FOREACH (const QString &dir, dirs) {
- QDirIterator it(dir, QDirIterator::Subdirectories);
+ QDirIterator it(dir, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
while (it.hasNext()) {
const QString filePath = it.next();
Q_ASSERT(filePath.startsWith(dir)); // due to the line below...
--
2.5.2

View File

@@ -0,0 +1,25 @@
From 46d124da602d84b7611a7ff0ac0862168d451cdb Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Wed, 14 Oct 2015 06:31:29 -0500
Subject: [PATCH 2/2] no canonicalize path
---
src/sycoca/vfolder_menu.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/sycoca/vfolder_menu.cpp b/src/sycoca/vfolder_menu.cpp
index d3e31c3..d15d743 100644
--- a/src/sycoca/vfolder_menu.cpp
+++ b/src/sycoca/vfolder_menu.cpp
@@ -415,7 +415,7 @@ VFolderMenu::absoluteDir(const QString &_dir, const QString &baseDir, bool keepR
}
if (!relative) {
- QString resolved = QDir(dir).canonicalPath();
+ QString resolved = QDir::cleanPath(dir);
if (!resolved.isEmpty()) {
dir = resolved;
}
--
2.5.2

View File

@@ -0,0 +1,19 @@
{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
, kcrash, kdbusaddons, kdoctools, ki18n, kwindowsystem
}:
kdeFramework {
name = "kservice";
setupHook = ./setup-hook.sh;
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
buildInputs = [ kcrash kdbusaddons ];
propagatedBuildInputs = [ kconfig kcoreaddons ki18n kwindowsystem ];
propagatedUserEnvPkgs = [ kcoreaddons ];
patches = [
./0001-qdiriterator-follow-symlinks.patch
./0002-no-canonicalize-path.patch
];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,43 @@
addServicePkg() {
local propagated
for dir in "share/kservices5" "share/kservicetypes5"; do
if [[ -d "$1/$dir" ]]; then
propagated=
for pkg in $propagatedBuildInputs; do
if [[ "z$pkg" == "z$1" ]]; then
propagated=1
break
fi
done
if [[ -z $propagated ]]; then
propagatedBuildInputs="$propagatedBuildInputs $1"
fi
propagated=
for pkg in $propagatedUserEnvPkgs; do
if [[ "z$pkg" == "z$1" ]]; then
propagated=1
break
fi
done
if [[ -z $propagated ]]; then
propagatedUserEnvPkgs="$propagatedUserEnvPkgs $1"
fi
break
fi
done
}
envHooks+=(addServicePkg)
local propagated
for pkg in $propagatedBuildInputs; do
if [[ "z$pkg" == "z@out@" ]]; then
propagated=1
break
fi
done
if [[ -z $propagated ]]; then
propagatedBuildInputs="$propagatedBuildInputs @out@"
fi

View File

@@ -0,0 +1,22 @@
{ kdeFramework, lib, copyPathsToStore
, extra-cmake-modules, makeQtWrapper, perl
, karchive, kconfig, kguiaddons, kiconthemes, kparts
, libgit2
, qtscript, qtxmlpatterns
, ki18n, kio, sonnet
}:
kdeFramework {
name = "ktexteditor";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper perl ];
buildInputs = [
karchive kconfig kguiaddons kiconthemes kparts
libgit2
qtscript qtxmlpatterns
];
propagatedBuildInputs = [ ki18n kio sonnet ];
patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,36 @@
Index: ktexteditor-5.18.0/src/syntax/data/katehighlightingindexer.cpp
===================================================================
--- ktexteditor-5.18.0.orig/src/syntax/data/katehighlightingindexer.cpp
+++ ktexteditor-5.18.0/src/syntax/data/katehighlightingindexer.cpp
@@ -55,19 +55,16 @@ QStringList readListing(const QString &f
int main(int argc, char *argv[])
{
- // get app instance
- QCoreApplication app(argc, argv);
-
// ensure enough arguments are passed
- if (app.arguments().size() < 3)
+ if (argc < 3)
return 1;
// open schema
QXmlSchema schema;
- if (!schema.load(QUrl::fromLocalFile(app.arguments().at(2))))
+ if (!schema.load(QUrl::fromLocalFile(QString::fromLocal8Bit(argv[2]))))
return 2;
- const QString hlFilenamesListing = app.arguments().value(3);
+ const QString hlFilenamesListing = QString::fromLocal8Bit(argv[3]);
if (hlFilenamesListing.isEmpty()) {
return 1;
}
@@ -152,7 +149,7 @@ int main(int argc, char *argv[])
return anyError;
// create outfile, after all has worked!
- QFile outFile(app.arguments().at(1));
+ QFile outFile(QString::fromLocal8Bit(argv[1]));
if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
return 7;

View File

@@ -0,0 +1 @@
no-qcoreapplication.patch

View File

@@ -0,0 +1,16 @@
{ kdeFramework, lib, extra-cmake-modules, kcompletion, kconfig
, kconfigwidgets, ki18n, kiconthemes, kservice, kwindowsystem
, sonnet
}:
kdeFramework {
name = "ktextwidgets";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kcompletion kconfig kconfigwidgets kiconthemes kservice
];
propagatedBuildInputs = [ ki18n kwindowsystem sonnet ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,10 @@
{ kdeFramework, lib, extra-cmake-modules, ki18n }:
kdeFramework {
name = "kunitconversion";
nativeBuildInputs = [ extra-cmake-modules ];
propagatedBuildInputs = [ ki18n ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,21 @@
{ kdeFramework, lib, extra-cmake-modules, kconfig, kconfigwidgets
, kcoreaddons, kdbusaddons, kdoctools, ki18n, kiconthemes, knotifications
, kservice, kwidgetsaddons, kwindowsystem, libgcrypt, makeQtWrapper
}:
kdeFramework {
name = "kwallet";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [
kconfig kconfigwidgets kcoreaddons kdbusaddons kiconthemes
knotifications kservice kwidgetsaddons libgcrypt
];
propagatedBuildInputs = [ ki18n kwindowsystem ];
postInstall = ''
wrapQtProgram "$out/bin/kwalletd5"
wrapQtProgram "$out/bin/kwallet-query"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "kwidgetsaddons";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, qtx11extras
}:
kdeFramework {
name = "kwindowsystem";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ qtx11extras ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,18 @@
{ kdeFramework, lib, extra-cmake-modules, attica, kconfig
, kconfigwidgets, kglobalaccel, ki18n, kiconthemes, kitemviews
, ktextwidgets, kwindowsystem, sonnet
}:
kdeFramework {
name = "kxmlgui";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
attica kconfig kiconthemes kitemviews ktextwidgets
];
propagatedBuildInputs = [
kconfigwidgets kglobalaccel ki18n kwindowsystem sonnet
];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,10 @@
{ kdeFramework, lib, extra-cmake-modules, ki18n, kio }:
kdeFramework {
name = "kxmlrpcclient";
nativeBuildInputs = [ extra-cmake-modules ];
propagatedBuildInputs = [ ki18n kio ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, modemmanager
}:
kdeFramework {
name = "modemmanager-qt";
nativeBuildInputs = [ extra-cmake-modules ];
propagatedBuildInputs = [ modemmanager ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, networkmanager
}:
kdeFramework {
name = "networkmanager-qt";
nativeBuildInputs = [ extra-cmake-modules ];
propagatedBuildInputs = [ networkmanager ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework
, lib
, extra-cmake-modules
}:
kdeFramework {
name = "oxygen-icons5";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
license = lib.licenses.lgpl3Plus;
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,25 @@
{ kdeFramework, lib, extra-cmake-modules, kactivities, karchive
, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, kdeclarative
, kdoctools, kglobalaccel, kguiaddons, ki18n, kiconthemes, kio
, knotifications, kpackage, kservice, kwindowsystem, kxmlgui
, makeQtWrapper, qtscript, qtx11extras
}:
kdeFramework {
name = "plasma-framework";
nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
buildInputs = [
karchive kconfig kconfigwidgets kcoreaddons kdbusaddons kguiaddons
kiconthemes knotifications kxmlgui qtscript
];
propagatedBuildInputs = [
kactivities kdeclarative kglobalaccel ki18n kio kpackage kservice kwindowsystem
qtx11extras
];
postInstall = ''
wrapQtProgram "$out/bin/plasmapkg2"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,17 @@
{ kdeFramework, lib
, extra-cmake-modules
, makeQtWrapper
, qtdeclarative
}:
kdeFramework {
name = "solid";
nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
buildInputs = [ qtdeclarative ];
postInstall = ''
wrapQtProgram "$out/bin/solid-hardware5"
'';
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,13 @@
{ kdeFramework, lib
, extra-cmake-modules
, hunspell
}:
kdeFramework {
name = "sonnet";
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [ hunspell ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@@ -0,0 +1,565 @@
# DO NOT EDIT! This file is generated automatically by fetchsrcs.sh
{ fetchurl, mirror }:
{
attica = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/attica-5.19.0.tar.xz";
sha256 = "0cbvjnv2fcqsxspiy5pzmnnzrpfamlsc9j927kd6gpzai1ckf1lv";
name = "attica-5.19.0.tar.xz";
};
};
baloo = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/baloo-5.19.0.tar.xz";
sha256 = "02yy0w13h5wxm74a87zi439f6yd9miid6rb54nia0pgvcka98svg";
name = "baloo-5.19.0.tar.xz";
};
};
bluez-qt = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/bluez-qt-5.19.0.tar.xz";
sha256 = "0609i7rzhnnnp4fqnwscwp6y646ji8kl2hw5sy7azc87yllisnyv";
name = "bluez-qt-5.19.0.tar.xz";
};
};
breeze-icons = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/breeze-icons-5.19.0.tar.xz";
sha256 = "0bwix0jl1dscqfb7ygn9drpd9ivfx4g15vz6h01mswvxa9lz1vj0";
name = "breeze-icons-5.19.0.tar.xz";
};
};
extra-cmake-modules = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/extra-cmake-modules-5.19.0.tar.xz";
sha256 = "1dl3hhbara7iswb5wsc5dp17ar3ljw5f0nrncl8vry9smaz2zl63";
name = "extra-cmake-modules-5.19.0.tar.xz";
};
};
frameworkintegration = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/frameworkintegration-5.19.0.tar.xz";
sha256 = "00la7p7wcyqpxyi73h4fjrmm9d2gqzdaljn4468xya4bfns5ijy3";
name = "frameworkintegration-5.19.0.tar.xz";
};
};
kactivities = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kactivities-5.19.0.tar.xz";
sha256 = "0yml1sbn3z4jd4vsfs25kqrl03pmlcgamzbgpw3248sabhyg7ks3";
name = "kactivities-5.19.0.tar.xz";
};
};
kapidox = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kapidox-5.19.0.tar.xz";
sha256 = "0a9731xrkd6mnqh72592rx6gfnxxdfd7xl8pdpgdn7qs3394k1yz";
name = "kapidox-5.19.0.tar.xz";
};
};
karchive = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/karchive-5.19.0.tar.xz";
sha256 = "043spmi7s2d1bj8d3wbgzbhisip6h92kqjhlvg8gyv0a7vy54ymv";
name = "karchive-5.19.0.tar.xz";
};
};
kauth = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kauth-5.19.0.tar.xz";
sha256 = "0fm9ih2hkh2rpmlf98yw8z1r5bn2qmpva2k7mrv6ijd5h767fxss";
name = "kauth-5.19.0.tar.xz";
};
};
kbookmarks = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kbookmarks-5.19.0.tar.xz";
sha256 = "0q418jpdc348nqgdavsmxxka4g8sldpdi9n89i1pllfmq10kw9sd";
name = "kbookmarks-5.19.0.tar.xz";
};
};
kcmutils = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kcmutils-5.19.0.tar.xz";
sha256 = "0qhdjb3zvqq9ycfgb52lz4flgipyplj5ksz8h8y71bbs4w6lazd8";
name = "kcmutils-5.19.0.tar.xz";
};
};
kcodecs = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kcodecs-5.19.0.tar.xz";
sha256 = "1rzp314fv9n5168j7nhv1c8fjaszpmgdx6javrx4w0hyrjdfkg66";
name = "kcodecs-5.19.0.tar.xz";
};
};
kcompletion = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kcompletion-5.19.0.tar.xz";
sha256 = "05n0y5kf3bcc4wgn6k0js5cravv1k93xxzrgapm21323qgvfagwd";
name = "kcompletion-5.19.0.tar.xz";
};
};
kconfig = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kconfig-5.19.0.tar.xz";
sha256 = "0nk5hfl8yh0kgaa7xi0cc05dl6nf7prvbvxv0i99207xh9dafdmm";
name = "kconfig-5.19.0.tar.xz";
};
};
kconfigwidgets = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kconfigwidgets-5.19.0.tar.xz";
sha256 = "1nld27chcjwjgwv76s2j77ifmca235yp10bm08rjmvnfn6778ypv";
name = "kconfigwidgets-5.19.0.tar.xz";
};
};
kcoreaddons = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kcoreaddons-5.19.0.tar.xz";
sha256 = "07sm0givfdx28p302fkynzsd3xkpn1hbs43d4rscyx18yxfsldcw";
name = "kcoreaddons-5.19.0.tar.xz";
};
};
kcrash = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kcrash-5.19.0.tar.xz";
sha256 = "1dy03gp1sj96wn0zfa0dpbvz8pz0ia1j7p1wcif3iqk55pjxdgyl";
name = "kcrash-5.19.0.tar.xz";
};
};
kdbusaddons = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdbusaddons-5.19.0.tar.xz";
sha256 = "1bb5aik0kl3kab5399drfjxrm8iysgkf813xgr0y4k64c9kwfp28";
name = "kdbusaddons-5.19.0.tar.xz";
};
};
kdeclarative = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdeclarative-5.19.0.tar.xz";
sha256 = "03g02zy7wjzmpvqzxx32z8ap7jyj9sf432g1d3csb0dcbx2ny52g";
name = "kdeclarative-5.19.0.tar.xz";
};
};
kded = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kded-5.19.0.tar.xz";
sha256 = "0nyvg0h2aqy7qr57bad6wyc2rmcv9nhdq0py4fxc3irb6516p9hz";
name = "kded-5.19.0.tar.xz";
};
};
kdelibs4support = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/kdelibs4support-5.19.0.tar.xz";
sha256 = "0iqnb2j6gfy8006arwv65vljfhxdnk6aia0zppngb481jnd9n2pn";
name = "kdelibs4support-5.19.0.tar.xz";
};
};
kdesignerplugin = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdesignerplugin-5.19.0.tar.xz";
sha256 = "11inmvyair796rx4842naf1dnxqvc6bqqzrv700ycvisad646ws5";
name = "kdesignerplugin-5.19.0.tar.xz";
};
};
kdesu = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdesu-5.19.0.tar.xz";
sha256 = "19w8m7ji61bpd368lzkwlizcwa1l968l568lksgm2mm9pnyjjhgz";
name = "kdesu-5.19.0.tar.xz";
};
};
kdewebkit = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdewebkit-5.19.0.tar.xz";
sha256 = "04b5qanhxggffnvmi28lspyi8kj4kq7mxhxndar9fmkzzgvy70hj";
name = "kdewebkit-5.19.0.tar.xz";
};
};
kdnssd = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdnssd-5.19.0.tar.xz";
sha256 = "15a8w2i29mrbhadw6y123mr0cc45ijabnwdfp3lbkd40lk8nq314";
name = "kdnssd-5.19.0.tar.xz";
};
};
kdoctools = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kdoctools-5.19.0.tar.xz";
sha256 = "06g77n9wxpiv4skc1kz794ppfb2mkmd3fgn6an5kr301xc76cnpn";
name = "kdoctools-5.19.0.tar.xz";
};
};
kemoticons = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kemoticons-5.19.0.tar.xz";
sha256 = "0fiix2sf2wrvmrpx8whdr1bzm7gbv7pvg02y47w5bl6s9gh176g5";
name = "kemoticons-5.19.0.tar.xz";
};
};
kfilemetadata = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kfilemetadata-5.19.0.tar.xz";
sha256 = "11j8if3xhp3xxwibwm6nxb4lh8wx40ni3zf5hki327pxv4vpq3qr";
name = "kfilemetadata-5.19.0.tar.xz";
};
};
kglobalaccel = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kglobalaccel-5.19.0.tar.xz";
sha256 = "021j98f7217m83aqxpamg0lzlaiskdaqsd9iabc8wrp1g0nkm05d";
name = "kglobalaccel-5.19.0.tar.xz";
};
};
kguiaddons = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kguiaddons-5.19.0.tar.xz";
sha256 = "019xaf7vpgifcw8wibli9d2b50brhgdaypsqknh6mqq8q9g06jhy";
name = "kguiaddons-5.19.0.tar.xz";
};
};
khtml = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/khtml-5.19.0.tar.xz";
sha256 = "0hqa54a9nxy954vy8gf52y89xd3ibz9b4jgh6w347b1alp1zn145";
name = "khtml-5.19.0.tar.xz";
};
};
ki18n = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/ki18n-5.19.0.tar.xz";
sha256 = "0v3arc20y5d8afm9zfrz1skd2xg3ng62cq1xvxiq645w6mxf7y05";
name = "ki18n-5.19.0.tar.xz";
};
};
kiconthemes = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kiconthemes-5.19.0.tar.xz";
sha256 = "0riicirgda3w2b30dzsa2lq9xrr4y04qwhxyzq1p8gn2x4pp3g3n";
name = "kiconthemes-5.19.0.tar.xz";
};
};
kidletime = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kidletime-5.19.0.tar.xz";
sha256 = "0jlbzqv36ddhfhk8xkkgw0xhq8s371z9ama1cyv2xq8kk4vjywc6";
name = "kidletime-5.19.0.tar.xz";
};
};
kimageformats = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kimageformats-5.19.0.tar.xz";
sha256 = "1ydizc6b0ncndazk62h8y249yfcx381pwzyivfpka1f69zfgyvv5";
name = "kimageformats-5.19.0.tar.xz";
};
};
kinit = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kinit-5.19.0.tar.xz";
sha256 = "03l7pijqdnnsfg6yz9p73p7xa86sldayggl6rc5hpkzmgyczcfzm";
name = "kinit-5.19.0.tar.xz";
};
};
kio = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kio-5.19.0.tar.xz";
sha256 = "0c7smp7cajivx53shy65mp9zcc51pha9iyvh37dggfflxy3xf9nv";
name = "kio-5.19.0.tar.xz";
};
};
kitemmodels = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kitemmodels-5.19.0.tar.xz";
sha256 = "0skmim986qnncbzd84vm1wp1fr41jn04af2dgckirsk23d35bln7";
name = "kitemmodels-5.19.0.tar.xz";
};
};
kitemviews = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kitemviews-5.19.0.tar.xz";
sha256 = "118zv46mvrfwbvl06bb1m8axv92wnp4pfs36hsxvnjl7gfjk5xjn";
name = "kitemviews-5.19.0.tar.xz";
};
};
kjobwidgets = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kjobwidgets-5.19.0.tar.xz";
sha256 = "1qzf8nzy8rxkdai9aj2lyrww90245v0p2q115xiz73bsg9rahmji";
name = "kjobwidgets-5.19.0.tar.xz";
};
};
kjs = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/kjs-5.19.0.tar.xz";
sha256 = "08m01762hb25vm020g3v37bh40cgvcfrj45ql135klx96x9imfaf";
name = "kjs-5.19.0.tar.xz";
};
};
kjsembed = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/kjsembed-5.19.0.tar.xz";
sha256 = "1wmkgy8jgm21y2cvcbv1fdv29dxxla8n6ws78kzzbbw4cgqwwl48";
name = "kjsembed-5.19.0.tar.xz";
};
};
kmediaplayer = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/kmediaplayer-5.19.0.tar.xz";
sha256 = "1vhqr2c7q8vwzdj29vpmfjfhyal8wp9ffirrnqc98vb6sffs85ay";
name = "kmediaplayer-5.19.0.tar.xz";
};
};
knewstuff = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/knewstuff-5.19.0.tar.xz";
sha256 = "12acd12vxk9z83zg3yz8lvmmb8737z9lzd4hs9a3jcs1z5k2nhb4";
name = "knewstuff-5.19.0.tar.xz";
};
};
knotifications = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/knotifications-5.19.0.tar.xz";
sha256 = "0grgm0ws16gp2j77nslqpl1jpxbi0m6g59zr7v1xnmzdk2j6n4av";
name = "knotifications-5.19.0.tar.xz";
};
};
knotifyconfig = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/knotifyconfig-5.19.0.tar.xz";
sha256 = "161brvryxzdkny7sf6icn1jpyi6rnw6jc808gdf5g41v50xpnxfj";
name = "knotifyconfig-5.19.0.tar.xz";
};
};
kpackage = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kpackage-5.19.0.tar.xz";
sha256 = "1km4sjgxfljp2pnjnzj48q3c574zvj7341a57n4ifhjwj37yzxdv";
name = "kpackage-5.19.0.tar.xz";
};
};
kparts = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kparts-5.19.0.tar.xz";
sha256 = "05g59x2mrqygawzcwgw3igl5n96l649h0kpzh37sfq4i8kg15g7l";
name = "kparts-5.19.0.tar.xz";
};
};
kpeople = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kpeople-5.19.0.tar.xz";
sha256 = "1ksf6g71li1xk4q98cvwkam8m8g32x2815kj1gfwbg4g6iw74w98";
name = "kpeople-5.19.0.tar.xz";
};
};
kplotting = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kplotting-5.19.0.tar.xz";
sha256 = "169x4m9ms8yhfha8zclnl8wrnfhfqshpwwg4b5bd046pcrkqmnqq";
name = "kplotting-5.19.0.tar.xz";
};
};
kpty = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kpty-5.19.0.tar.xz";
sha256 = "0289vzfjwppwqj9h03flzhwm18dnxz11hqhdhr9990x7rw6a4n03";
name = "kpty-5.19.0.tar.xz";
};
};
kross = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/kross-5.19.0.tar.xz";
sha256 = "1nv7mrhn7wa4bs2a164x42d3b37akyvhkxqs8cg5fqp4vr2wkw0p";
name = "kross-5.19.0.tar.xz";
};
};
krunner = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/portingAids/krunner-5.19.0.tar.xz";
sha256 = "054s8309lxi27gpbg7iygbcxsp0pwrzbzww3h8zp2a9yiic4s5mx";
name = "krunner-5.19.0.tar.xz";
};
};
kservice = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kservice-5.19.0.tar.xz";
sha256 = "02lbia26r2462nwksizaxjfkhxfqqs732dp495yx8bjc7wcv3srm";
name = "kservice-5.19.0.tar.xz";
};
};
ktexteditor = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/ktexteditor-5.19.0.tar.xz";
sha256 = "0v3l44w4k43ajs81i8386hszk3x7rajjlb6z3jb7q98vhp91b5dp";
name = "ktexteditor-5.19.0.tar.xz";
};
};
ktextwidgets = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/ktextwidgets-5.19.0.tar.xz";
sha256 = "1xydb76r6x1p10bkr2nlqg3md78jw8zvqad0h42dgvl4f5xvjknp";
name = "ktextwidgets-5.19.0.tar.xz";
};
};
kunitconversion = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kunitconversion-5.19.0.tar.xz";
sha256 = "11g1vhqkrb1k748drj7klkbb7jca3dybakcmcgqf53g8vxfih8kb";
name = "kunitconversion-5.19.0.tar.xz";
};
};
kwallet = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kwallet-5.19.0.tar.xz";
sha256 = "0z0c62fdfx9syrq6z7bk0ihac4yqyxpycll7h3mijj29km4jnpjm";
name = "kwallet-5.19.0.tar.xz";
};
};
kwidgetsaddons = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kwidgetsaddons-5.19.0.tar.xz";
sha256 = "0b85ng0dj5gpzifqmhyzgx61nb37vq7d0gvfpfazlcp5n27ywivm";
name = "kwidgetsaddons-5.19.0.tar.xz";
};
};
kwindowsystem = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kwindowsystem-5.19.0.tar.xz";
sha256 = "115xs34r74j9zcsw69glnh8w59iyh764n3gniawwrk23c6yb8fch";
name = "kwindowsystem-5.19.0.tar.xz";
};
};
kxmlgui = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kxmlgui-5.19.0.tar.xz";
sha256 = "1al2xifiyvl3zpva9nqap8gb6vqfgmf2fnhkmymm02rwg4yn4gah";
name = "kxmlgui-5.19.0.tar.xz";
};
};
kxmlrpcclient = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/kxmlrpcclient-5.19.0.tar.xz";
sha256 = "0lji7cxvh2lmjz42lx6ymz962gr4cyqfzksz0n5vgzfk5z0vq98g";
name = "kxmlrpcclient-5.19.0.tar.xz";
};
};
modemmanager-qt = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/modemmanager-qt-5.19.0.tar.xz";
sha256 = "05x9jicryjw9fj02arpya8xsh79rsnljnqjfpwbb7pi38f9i8v4w";
name = "modemmanager-qt-5.19.0.tar.xz";
};
};
networkmanager-qt = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/networkmanager-qt-5.19.0.tar.xz";
sha256 = "0wi0mkygzbvvyil1nyzc3ihgilvpx6j7caqaa9k38p85g93vsq13";
name = "networkmanager-qt-5.19.0.tar.xz";
};
};
oxygen-icons5 = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/oxygen-icons5-5.19.0.tar.xz";
sha256 = "09vfwcyidj3bl0qr4sq78bkc69zp9x8dwp8bsay5y05q8591dkg0";
name = "oxygen-icons5-5.19.0.tar.xz";
};
};
plasma-framework = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/plasma-framework-5.19.0.tar.xz";
sha256 = "1588r1jag0s9hhw4qq7mr2mcdd3d9az5ngb3z1l58xdhvfcc4497";
name = "plasma-framework-5.19.0.tar.xz";
};
};
solid = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/solid-5.19.0.tar.xz";
sha256 = "02bnvhscb55r6q5hkyh7rqi6zsc3r974y3x9shi8l0xbs78snkgz";
name = "solid-5.19.0.tar.xz";
};
};
sonnet = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/sonnet-5.19.0.tar.xz";
sha256 = "02ringh0wyiq1n19c200bcyf5x2w5jhw0pcxvfjzjai1sjig03x7";
name = "sonnet-5.19.0.tar.xz";
};
};
threadweaver = {
version = "5.19.0";
src = fetchurl {
url = "${mirror}/stable/frameworks/5.19/threadweaver-5.19.0.tar.xz";
sha256 = "1jm1sw7xq76s2ggghm6qqdn7452myy9n7p5zzdb01qbaw2y1x4pw";
name = "threadweaver-5.19.0.tar.xz";
};
};
}

View File

@@ -0,0 +1,11 @@
{ kdeFramework, lib
, extra-cmake-modules
}:
kdeFramework {
name = "threadweaver";
nativeBuildInputs = [ extra-cmake-modules ];
meta = {
maintainers = [ lib.maintainers.ttuegel ];
};
}

Some files were not shown because too many files have changed in this diff Show More