gnu: Move sqlite to separate module.
[jackhill/guix/guix.git] / gnu / packages / sync.scm
index 4b026b9..421e362 100644 (file)
@@ -1,6 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 (define-module (gnu packages sync)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system go)
+  #:use-module (guix build-system meson)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages acl)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages databases)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages rsync)
+  #:use-module (gnu packages selinux)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls))
 
 (define-public owncloud-client
   (package
     (name "owncloud-client")
-    (version "2.2.4")
+    (version "2.5.1.10973")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.owncloud.com/desktop/stable/"
                            "owncloudclient-" version ".tar.xz"))
        (sha256
-        (base32 "1lz7v5sscj5489panz5ng372g9l66ng0srx6xaz8drnsgi7m64zk"))
+        (base32 "19x4rbnqg7f7hspz1xy86b1q51q1n5y7yvq8kqc1m64n2r2s3srk"))
+       (patches (search-patches "owncloud-disable-updatecheck.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
-           ;; only allows bundled libcrashreporter-qt
+           ;; libcrashreporter-qt has its own bundled dependencies
            (delete-file-recursively "src/3rdparty/libcrashreporter-qt")
-           ;; we already package qtkeychain and sqlite
-           (delete-file-recursively "src/3rdparty/qtkeychain")
            (delete-file-recursively "src/3rdparty/sqlite3")
-           ;; qjson is packaged, qprogessindicator, qlockedfile, qtokenizer and
+           ;; qprogessindicator, qlockedfile, qtokenizer and
            ;; qtsingleapplication have not yet been packaged, but all are
            ;; explicitly used from the 3rdparty folder during build.
            ;; We can also remove the macgoodies folder
-           (delete-file-recursively "src/3rdparty/qtmacgoodies")))))
+           (delete-file-recursively "src/3rdparty/qtmacgoodies")
+           #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'change-rpath-dirs
-          (lambda _
-            (substitute* '("src/libsync/CMakeLists.txt"
-                           "csync/src/CMakeLists.txt")
-              ;; We store the libs in out/lib and not /usr/lib/appname, so we
-              ;; need the executable to point to the libraries in /lib and not
-              ;; in /lib/appname.
-              (("\\/\\$\\{APPLICATION_EXECUTABLE\\}") ""))
-            (substitute* '("src/cmd/CMakeLists.txt"
-                           "src/crashreporter/CMakeLists.txt"
-                           "src/gui/CMakeLists.txt")
-              ;; This has the same issue as the substitution above.
-              (("\\/\\$\\{APPLICATION_EXECUTABLE\\}\\\"") "\""))
-            #t))
          (add-after 'unpack 'delete-failing-tests
-           ;; These tests fail for no apparent reason
+           ;; "Could not create autostart folder"
            (lambda _
              (substitute* "test/CMakeLists.txt"
-                          (("owncloud_add_test\\(FileSystem \"\"\\)" test)
-                           (string-append "#" test))
                           (("owncloud_add_test\\(Utility \"\"\\)" test)
                            (string-append "#" test)))
              #t)))
-       #:configure-flags '("-DUNIT_TESTING=ON")))
+       #:configure-flags '("-DUNIT_TESTING=ON"
+                           ;; build without qtwebkit, which causes the
+                           ;; package to FTBFS while looking for QWebView.
+                           "-DNO_SHIBBOLETH=1")))
     (native-inputs
      `(("cmocka" ,cmocka)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("inotify-tools" ,inotify-tools)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase)
+     `(("qtbase" ,qtbase)
        ("qtkeychain" ,qtkeychain)
-       ("qtwebkit" ,qtwebkit)
        ("sqlite" ,sqlite)
        ("zlib" ,zlib)))
     (home-page "https://owncloud.org")
@@ -109,17 +106,17 @@ silently and reliably flow across to every other.")
 (define-public qsyncthingtray
   (package
     (name "qsyncthingtray")
-    (version "0.5.7")
+    (version "0.5.8")
     (source
       (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://github.com/sieren/QSyncthingTray/archive/"
-               version ".tar.gz"))
-        (file-name (string-append name "-" version ".tar.gz"))
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/sieren/QSyncthingTray")
+               (commit version)))
+        (file-name (git-file-name name version))
         (sha256
          (base32
-          "1qzlxgq36sb1dk621nkbjw9k6y3css6q3z8xzx6nv7f327vanvp6"))))
+          "1n9g4j7qznvg9zl6x163pi9f7wsc3x6q76i33psnm7x2v1i22x5w"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DQST_BUILD_WEBKIT=1")
@@ -131,12 +128,10 @@ silently and reliably flow across to every other.")
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "QSyncthingTray" bin)
-               (install-file (string-append
-                               "../QSyncthingTray-"
-                               ,(package-version qsyncthingtray)
-                               "/resources/images/Icon1024.png")
-                             (string-append
-                               out "/share/pixmaps/QSyncthingTray.png"))
+               (mkdir-p (string-append out "/share/pixmaps"))
+               (copy-file "../source/resources/images/Icon1024.png"
+                          (string-append
+                            out "/share/pixmaps/QSyncthingTray.png"))
                #t))))
        #:tests? #f)) ; no test target
     (inputs
@@ -164,7 +159,7 @@ their folder.
 (define-public lsyncd
   (package
     (name "lsyncd")
-    (version "2.2.1")
+    (version "2.2.2")
     (source
      (origin
        (method url-fetch)
@@ -173,7 +168,7 @@ their folder.
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0da7mrq2c578v2dd5x9v75l1fqrm28jvn28qkcd49y8p992nj6gl"))))
+         "02g054qv8rnbxywd4f0gnd13lrlns9175d3ciqnyslhs1zs15nqb"))))
     (build-system cmake-build-system)
     (arguments
      `(;; The "tests" target is broken and assumes that tests are run in the
@@ -203,6 +198,95 @@ interface (inotify or fsevents).  It aggregates and combines events for a few
 seconds and then spawns one (or more) process(es) to synchronize the changes.
 By default this is rsync, which must be installed on all source and target
 machines.  Lsyncd is thus a light-weight live mirror solution that is
-comparatively easy to install not requiring new filesystems or block devices
-and does not hamper local filesystem performance.")
+comparatively easy to install not requiring new file systems or block devices
+and does not hamper local file system performance.")
     (license license:gpl2+)))
+
+(define-public casync
+  (package
+    (name "casync")
+    (version "2")
+    (home-page "https://github.com/systemd/casync/")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "0znkp3fcksrykcsv06y2mjvf2lbwmin25snmvfa8i5qfm3f4rm88"))
+              (file-name (string-append name "-" version "-checkout"))
+              (patches (search-patches "casync-renameat2-declaration.patch"))))
+    (build-system meson-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("python-sphinx" ,python-sphinx)
+       ("rsync" ,rsync)))                         ;for tests
+    (inputs
+     `(("xz" ,xz)                                 ;for liblzma
+       ("zstd" ,zstd)
+       ("curl" ,curl)
+       ("acl" ,acl)
+       ("libselinux" ,libselinux)
+       ("fuse" ,fuse)
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
+    (synopsis "File synchronization and backup system")
+    (description
+     "casync is a @dfn{content-addressable data synchronizer} that can be used
+as the basis of a backup system.  It is:
+
+@itemize
+@item A combination of the rsync algorithm and content-addressable storage;
+@item An efficient way to store and retrieve multiple related versions of
+large file systems or directory trees;
+@item An efficient way to deliver and update OS, VM, IoT and container images
+over the Internet in an HTTP and CDN friendly way;
+@item An efficient backup system.
+@end itemize\n")
+    (license license:lgpl2.1+)))
+
+(define-public rclone
+  (package
+    (name "rclone")
+    (version "1.45")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ncw/rclone.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06xg0ibv9pnrnmabh1kblvxx1pk8h5rmkr9mjbymv497sx3zgz26"))))
+    ;; FIXME: Rclone bundles some libraries Guix already provides.  Need to
+    ;; un-bundle them.
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/ncw/rclone"
+       #:install-source? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; Fix failure during "check" phase: "mkdir /homeless-shelter:
+         ;; permission denied".
+         (add-after 'unpack 'set-home-directory
+           (lambda _ (setenv "HOME" "/tmp") #t)))))
+    (synopsis "@code{rsync} for cloud storage")
+    (description "@code{Rclone} is a command line program to sync files and
+directories to and from different cloud storage providers.
+
+Features include:
+@itemize
+@item MD5/SHA1 hashes checked at all times for file integrity
+@item Timestamps preserved on files
+@item Partial syncs supported on a whole file basis
+@item Copy mode to just copy new/changed files
+@item Sync (one way) mode to make a directory identical
+@item Check mode to check for file hash equality
+@item Can sync to and from network, e.g., two different cloud accounts
+@item Optional encryption (Crypt)
+@item Optional cache (Cache)
+@item Optional FUSE mount (rclone mount)
+@end itemize")
+    (home-page "https://rclone.org/")
+    (license license:expat)))