From 238b40d1da1e486392c69840ad9439e5bbb60c4a Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Tue, 3 Mar 2020 10:38:40 +0100 Subject: [PATCH] gnu: Add couchdb. * gnu/packages/databases.scm (couchdb): New variable. --- gnu/packages/databases.scm | 91 +++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index c8d12f43b5..063292c68a 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -74,15 +74,17 @@ #:use-module (gnu packages cyrus-sasl) #:use-module (gnu packages dbm) #:use-module (gnu packages emacs) + #:use-module (gnu packages erlang) #:use-module (gnu packages flex) #:use-module (gnu packages gcc) #:use-module (gnu packages gettext) #:use-module (gnu packages glib) #:use-module (gnu packages gnupg) + #:use-module (gnu packages gnuzilla) #:use-module (gnu packages guile) - #:use-module (gnu packages time) #:use-module (gnu packages golang) #:use-module (gnu packages jemalloc) + #:use-module (gnu packages icu4c) #:use-module (gnu packages language) #:use-module (gnu packages libevent) #:use-module (gnu packages linux) @@ -110,6 +112,7 @@ #:use-module (gnu packages tcl) #:use-module (gnu packages terminals) #:use-module (gnu packages textutils) + #:use-module (gnu packages time) #:use-module (gnu packages tls) #:use-module (gnu packages valgrind) #:use-module (gnu packages web) @@ -3403,3 +3406,89 @@ The drivers officially supported by @code{libdbi} are: PostreSQL, SQLite, ODBC and MySQL.") (home-page "http://soci.sourceforge.net/") (license license:boost1.0))) + +(define-public couchdb + (package + (name "couchdb") + (version "3.0.0") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://apache/couchdb/source/" version + "/apache-couchdb-" version ".tar.gz")) + (sha256 + (base32 + "1nbz2vafzhp9jv8xna8cfnf99jwn22xs4ydzm426qx7yf0dbn2fi")) + (modules '((guix build utils))) + ;; TODO: Unbundle fonts, others from share/docs/html/_static, share/www, share/server + ;; Remove pre-built binary, will be rebuilt. + (snippet '(begin (delete-file "bin/rebar") #t)))) + (build-system gnu-build-system) + (arguments + `(#:make-flags '("release" + "CC=gcc") + #:configure-flags (list "--skip-deps" + "--spidermonkey-version" + ,(version-major (package-version mozjs-60))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/couch/rebar.config.script" + (("/usr/include/mozjs-60") + (string-append (assoc-ref inputs "mozjs") "/include/mozjs-60"))) + (substitute* "Makefile" + ;; Disable python-black code formatting. + (("check: all python-black") "check: all") + ;; Disable venv creation and package installation. + (("python3 -m venv .venv") "true") + (("\\.venv/bin/python3 -m pip install -r requirements.txt") "true") + ;; Do not test elixir, depends on `mix` and several external dependencies. + (("@\\$\\(MAKE\\) elixir") "") + ;; Use system python. + (("\\.venv/bin/python3") (which "python3"))) + #t)) + (replace 'configure + (lambda* (#:key (configure-flags '()) #:allow-other-keys) + (apply invoke "./configure" configure-flags))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; CouchDB tries to bundle erts, use our own copy. + (let ((out (assoc-ref outputs "out")) + (erts-version "10.3.5.9")) + (delete-file-recursively + (string-append "rel/couchdb/erts-" erts-version)) + (substitute* '("rel/couchdb/bin/couchdb" + "rel/couchdb/bin/remsh") + (("ROOTDIR=\\$\\{ERTS_BIN_DIR%/\\*\\}") + (string-append "ROOTDIR=" out)) + (("BINDIR=\"[^\"]+\"") + (string-append + "BINDIR=" (assoc-ref inputs "erlang") + "/lib/erlang/erts-" erts-version "/bin"))) + (copy-recursively "rel/couchdb" out)) + #t))))) + (native-inputs + ;; for tests + `(("curl" ,curl) + ("python" ,python) + ("python-hypothesis" ,python-hypothesis) + ("python-nose" ,python-nose) + ("python-requests" ,python-requests) + ;; for documentation + ("python-sphinx" ,python-sphinx))) + (inputs + `(("erlang" ,erlang) + ("icu4c" ,icu4c) + ("mozjs" ,mozjs-60) + ("openssl" ,openssl))) + (home-page "https://couchdb.apache.org/") + (synopsis "Document-oriented NoSQL database, implemented in Erlang") + (description "CouchDB is a database that completely embraces the web. Store +your data with JSON documents. Access your documents with your web browser, via +HTTP. Query, combine, and transform your documents with JavaScript. CouchDB +works well with modern web and mobile apps. You can distribute your data, +efficiently using CouchDB’s incremental replication. CouchDB supports +master-master setups with automatic conflict detection.") + (license license:asl2.0))) -- 2.25.1