>From 24fad181e128d987cc4066265bbd6e34ff4f5461 Mon Sep 17 00:00:00 2001
From: Leo Famulari
Date: Mon, 11 Jul 2016 16:37:17 -0400
Subject: [PATCH] WIP: Add syncthing.
* gnu/packages/syncthing.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
gnu/local.mk | 1 +
gnu/packages/syncthing.scm | 123 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 124 insertions(+)
create mode 100644 gnu/packages/syncthing.scm
diff --git a/gnu/local.mk b/gnu/local.mk
index d011844..fe3b1d2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -322,6 +322,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/suckless.scm \
%D%/packages/swig.scm \
%D%/packages/sxiv.scm \
+ %D%/packages/syncthing.scm \
%D%/packages/synergy.scm \
%D%/packages/task-management.scm \
%D%/packages/tbb.scm \
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
new file mode 100644
index 0000000..97ca8ec
--- /dev/null
+++ b/gnu/packages/syncthing.scm
@@ -0,0 +1,123 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Leo Famulari
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see .
+
+(define-module (gnu packages syncthing)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix download)
+ #:use-module (guix git-download)
+ #:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (gnu packages golang))
+
+(define-public syncthing
+ (package
+ (name "syncthing")
+ (version "v0.13.10")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/syncthing/syncthing.git")
+ (commit version)))
+ (file-name (string-append name "-" version))
+ (sha256
+ (base32
+ "07q3j6mnrza719rnvbkdsmvlkyr2pch5sj2l204m5iy5mxaghpx7"))))
+
+ ;; TODO Make go-build-system.
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure) ; No ./configure script.
+
+ ;; This is the directory structure recommended by Syncthings "guide to
+ ;; building": https://docs.syncthing.net/dev/building.html
+ ;; Can we simplify this step?
+ (replace 'unpack
+ (lambda* (#:key source #:allow-other-keys)
+ (let ((tree "src/github.com/syncthing/syncthing"))
+ (copy-recursively source tree))))
+
+ (add-after 'unpack 'set-env
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((source (assoc-ref inputs "source")))
+ (setenv "GOPATH" (getcwd))
+
+ ;; This should control where `go run build.go install` installs
+ ;; things, but it seems to have no effect in this case.
+ (setenv "GOBIN" (assoc-ref outputs "out"))
+
+ ;; Enable use of bundled dependencies. This is a stop-gap
+ ;; until the dependencies are packaged properly.
+ (setenv "GO15VENDOREXPERIMENT" "1"))))
+
+ ;; This is related to the unpack phase. Can it be avoided?
+ (add-before 'build 'chdir
+ (lambda _ (chdir "src/github.com/syncthing/syncthing")))
+
+ (replace 'build
+ (lambda _
+ (zero? (system* "go" "run" "build.go"
+ ;; Disable Syncthing's built-in updater.
+ "-no-upgrade"
+ ;; This might not be necessary if building from a
+ ;; tarball.
+ "-version" ,version))))
+ (replace 'check
+ (lambda _
+ (zero? (system* "go" "run" "build.go" "test"))))
+
+ ;; TODO Make this use `go run build.go install`.
+ (replace 'install
+ (lambda _
+ (copy-recursively "bin" (string-append (assoc-ref %outputs "out")
+ "/bin"))))
+ ;; TODO These man pages are generated from a different Git
+ ;; repo, https://github.com/syncthing/docs.
+ (add-after 'install 'install-doc
+ (lambda* (#:key outputs source #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (man1 (string-append out "/share/man/man1"))
+ (man5 (string-append out "/share/man/man5"))
+ (man7 (string-append out "/share/man/man7"))
+ (src (string-append source "/man/")))
+ (install-file (string-append src "syncthing.1") man1)
+ (install-file (string-append src "syncthing-config.5") man5)
+ (install-file (string-append src "syncthing-stignore.5") man5)
+ (install-file (string-append src "syncthing-bep.7") man7)
+ (install-file (string-append src "syncthing-device-ids.7") man7)
+ (install-file (string-append src "syncthing-event-api.7") man7)
+ (install-file (string-append src "syncthing-faq.7") man7)
+ (install-file (string-append src "syncthing-globaldisco.7") man7)
+ (install-file (string-append src "syncthing-localdisco.7") man7)
+ (install-file (string-append src "syncthing-networking.7") man7)
+ (install-file (string-append src "syncthing-relay.7") man7)
+ (install-file (string-append src "syncthing-rest-api.7") man7)
+ (install-file (string-append src "syncthing-security.7") man7)
+ (install-file (string-append src "syncthing-versioning.7") man7)
+ (install-file (string-append src "syncthing.1") man7)
+ #t))))))
+ (native-inputs
+ `(("go" ,go-1.5)))
+ (synopsis "Decentralized filesystem synchronization")
+ (description "Syncthing is a peer-to-peer file synchronization tool that
+supports a wide variety of computing platforms. It uses the Block Exchange
+Protocol.")
+ (home-page "https://syncthing.net")
+ ;; TODO Either delete the bundled dependencies or list their licenses here.
+ (license mpl2.0)))
--
2.9.0