From b9b0c427ba54236d56ffe5a236d46d19ee1e57c2 Mon Sep 17 00:00:00 2001
From: Julio Galvan <julio@epazote.net>
Date: Tue, 16 Jul 2019 16:48:32 -0700
Subject: [PATCH 1/3] New package: libco-1.0.2

---
 common/shlibs          |  3 +++
 srcpkgs/libco-devel    |  1 +
 srcpkgs/libco/template | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+)
 create mode 120000 srcpkgs/libco-devel
 create mode 100644 srcpkgs/libco/template

diff --git a/common/shlibs b/common/shlibs
index 2f146bbfa9d..9fdacc43d7c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3493,3 +3493,6 @@ libkres.so.9 knot-resolver-4.0.0_1
 libnsl.so.2 libnsl-1.2.0_1
 libbcc.so.0 bcc-0.10.0_1
 libbcc_bpf.so.0 bcc-0.10.0_1
+libco.so libco-1.0.1_1
+libco.so libco-1.0.2_1
+libraft.so.0 raft-0.9.2_1
diff --git a/srcpkgs/libco-devel b/srcpkgs/libco-devel
new file mode 120000
index 00000000000..9cbee396adf
--- /dev/null
+++ b/srcpkgs/libco-devel
@@ -0,0 +1 @@
+libco
\ No newline at end of file
diff --git a/srcpkgs/libco/template b/srcpkgs/libco/template
new file mode 100644
index 00000000000..a6b50f4af07
--- /dev/null
+++ b/srcpkgs/libco/template
@@ -0,0 +1,33 @@
+# Template file for 'libco'
+pkgname=libco
+version=1.0.2
+revision=1
+short_desc="Cooperative multithreading library written in C89"
+maintainer="Julio Galvan <julio@epazote.net>"
+license="Public Domain"
+homepage="https://github.com/freeekanayaka/libco"
+distfiles="https://github.com/freeekanayaka/libco/archive/v${version}.tar.gz"
+checksum=8876aa8e61f07b37adb3ad422b369ecf9bf6fad20ce691428c35719ba5f16615
+
+do_build() {
+	make
+}
+
+do_install() {
+	vinstall libco.so 0664 /usr/lib/ libco.so.${version}
+	ln -s libco.so.${version} ${DESTDIR}/usr/lib/libco.so.1
+	ln -s libco.so.${version} ${DESTDIR}/usr/lib/libco.so
+	vinstall libco.pc 0664 /usr/lib/pkgconfig
+	vinstall libco.a 0664 /usr/lib/
+	vinstall libco.h 0664 /usr/include/
+}
+
+libco-devel_package() {
+	depends="libco>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.a"
+	}
+}

From 6745bc272b6229cf49e1d7227db044e9ab70de42 Mon Sep 17 00:00:00 2001
From: Julio Galvan <julio@epazote.net>
Date: Tue, 16 Jul 2019 16:59:54 -0700
Subject: [PATCH 2/3] New package: raft-0.9.2

---
 srcpkgs/raft-devel                      |  1 +
 srcpkgs/raft/patches/fix-musl.patch     | 58 +++++++++++++++++++++++++
 srcpkgs/raft/patches/remove-extra.patch | 21 +++++++++
 srcpkgs/raft/template                   | 29 +++++++++++++
 4 files changed, 109 insertions(+)
 create mode 120000 srcpkgs/raft-devel
 create mode 100644 srcpkgs/raft/patches/fix-musl.patch
 create mode 100644 srcpkgs/raft/patches/remove-extra.patch
 create mode 100644 srcpkgs/raft/template

diff --git a/srcpkgs/raft-devel b/srcpkgs/raft-devel
new file mode 120000
index 00000000000..d96c908578a
--- /dev/null
+++ b/srcpkgs/raft-devel
@@ -0,0 +1 @@
+raft
\ No newline at end of file
diff --git a/srcpkgs/raft/patches/fix-musl.patch b/srcpkgs/raft/patches/fix-musl.patch
new file mode 100644
index 00000000000..2689cb81578
--- /dev/null
+++ b/srcpkgs/raft/patches/fix-musl.patch
@@ -0,0 +1,58 @@
+From dae2c6d6dc4e4a553cef7c8da7a2bb303f37dbb3 Mon Sep 17 00:00:00 2001
+From: Free Ekanayaka <free.ekanayaka@canonical.com>
+Date: Thu, 18 Jul 2019 11:22:35 +0200
+Subject: [PATCH 1/2] Conditionally include error.h
+
+---
+ src/replication.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git src/replication.c src/replication.c
+index f9cb5a8f..6039a694 100644
+--- src/replication.c
++++ src/replication.c
+@@ -3,6 +3,9 @@
+ #include "assert.h"
+ #include "configuration.h"
+ #include "convert.h"
++#ifdef __GLIBC__
++#include "error.h"
++#endif
+ #include "error.h"
+ #include "log.h"
+ #include "logging.h"
+
+From 62b1753f80ac3aed5cdc1029882cf18060d67d3a Mon Sep 17 00:00:00 2001
+From: Free Ekanayaka <free.ekanayaka@canonical.com>
+Date: Thu, 18 Jul 2019 11:22:45 +0200
+Subject: [PATCH 2/2] Run clang-format
+
+---
+ src/replication.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git src/replication.c src/replication.c
+index 6039a694..052fd652 100644
+--- src/replication.c
++++ src/replication.c
+@@ -236,8 +236,8 @@ static void sendSnapshotGetCb(struct raft_io_snapshot_get *get,
+     req->snapshot = snapshot;
+     req->send.data = req;
+ 
+-    debugf(r, "sending snapshot with last index %ld to %ld",
+-           snapshot->index, server->id);
++    debugf(r, "sending snapshot with last index %ld to %ld", snapshot->index,
++           server->id);
+ 
+     rv = r->io->send(r->io, &req->send, &message, sendInstallSnapshotCb);
+     if (rv != 0) {
+@@ -378,8 +378,7 @@ static int triggerAll(struct raft *r)
+         rv = replicationProgress(r, i);
+         if (rv != 0 && rv != RAFT_NOCONNECTION) {
+             /* This is not a critical failure, let's just log it. */
+-            debugf(r,
+-                   "failed to send append entries to server %ld: %s (%d)",
++            debugf(r, "failed to send append entries to server %ld: %s (%d)",
+                    server->id, raft_strerror(rv), rv);
+         }
+     }
diff --git a/srcpkgs/raft/patches/remove-extra.patch b/srcpkgs/raft/patches/remove-extra.patch
new file mode 100644
index 00000000000..a84464c14a0
--- /dev/null
+++ b/srcpkgs/raft/patches/remove-extra.patch
@@ -0,0 +1,21 @@
+From b9e6f25ca3eff14fac1fd27491011a20272fb18c Mon Sep 17 00:00:00 2001
+From: Julio Galvan <julio@epazote.net>
+Date: Sun, 21 Jul 2019 21:59:01 -0700
+Subject: [PATCH] remove extra header
+
+---
+ src/replication.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git src/replication.c src/replication.c
+index 052fd652..53bddd20 100644
+--- src/replication.c
++++ src/replication.c
+@@ -6,7 +6,6 @@
+ #ifdef __GLIBC__
+ #include "error.h"
+ #endif
+-#include "error.h"
+ #include "log.h"
+ #include "logging.h"
+ #include "membership.h"
diff --git a/srcpkgs/raft/template b/srcpkgs/raft/template
new file mode 100644
index 00000000000..f819e2235e2
--- /dev/null
+++ b/srcpkgs/raft/template
@@ -0,0 +1,29 @@
+# Template file for 'raft'
+pkgname=raft
+version=0.9.2
+revision=1
+build_style=gnu-configure
+configure_args="--enable-example=no"
+hostmakedepends="pkg-config autoconf automake libtool"
+makedepends="libuv-devel"
+short_desc="C implementation of the Raft consensus protocol"
+maintainer="Julio Galvan <julio@epazote.net>"
+license="Apache-2.0"
+homepage="https://github.com/CanonicalLtd/raft"
+distfiles="https://github.com/CanonicalLtd/raft/archive/v${version}.tar.gz"
+checksum=3090b1f44fafad712af5da08358cec3354164dff6036617011198baa351b9e92
+
+pre_configure() {
+	autoreconf -i
+}
+
+raft-devel_package() {
+	depends="raft>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+	}
+}

From 5003e9ebccf47927666b2d4fe6dab00de3cd1d7c Mon Sep 17 00:00:00 2001
From: Julio Galvan <julio@epazote.net>
Date: Tue, 16 Jul 2019 15:39:24 -0700
Subject: [PATCH 3/3] dqlite: update to 0.9.1

---
 srcpkgs/dqlite/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/dqlite/template b/srcpkgs/dqlite/template
index b11c2e93bd9..1818072b1e3 100644
--- a/srcpkgs/dqlite/template
+++ b/srcpkgs/dqlite/template
@@ -1,17 +1,17 @@
 # Template file for 'dqlite'
 pkgname=dqlite
-version=0.2.6
+version=0.9.1
 revision=1
 build_style=gnu-configure
 hostmakedepends="pkg-config autoconf automake libtool"
-makedepends="libuv-devel sqlite-replication-devel"
+makedepends="libuv-devel sqlite-replication-devel raft-devel libco-devel"
 depends="sqlite-replication"
 short_desc="Distributed SQLite database using the Raft algorithm"
 maintainer="Cameron Nemo <camerontnorman@gmail.com>"
 license="Apache-2.0"
 homepage="https://github.com/CanonicalLtd/dqlite"
 distfiles="${homepage}/archive/v${version}.tar.gz"
-checksum=47d31550d970a12d25101c331896cfb855128c110d912f5da3371062d9ece52b
+checksum=0d3f96343b1a0d5c2b717402c3a9f99b96452439af838cd64f6e07ae6899ef7b
 
 pre_configure() {
 	autoreconf -i
