diff mbox series

[bug#39881] Add couchdb

Message ID 20200310110822.GW1423@E5400
State Accepted
Headers show
Series [bug#39881] Add couchdb | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job

Commit Message

Efraim Flashner March 10, 2020, 11:08 a.m. UTC
I touched up the couchdb patch a bit and there were a couple of things
that stood out to me. The test suite passed for me without any problems.

There are a couple of bundled fonts as well as bundled javascript inside
the share directory, which also makes it to the output.

Looking at %out/lib/ it looks like there are a bunch of other libraries
bundled with couchdb. I don't know much about erlang but I assume all
these libraries should be unbundled. Looking inside erlang I see there
are also a lot of what looks like bundled libraries so I'm not really
sure how that goes.

On the other hand, after talking to you on IRC and looking at how Debian
takes erlang¹ and seems to split it into dozens of package outputs I'm
far more uncertain of how it works.

Anyway, take a look at the changes I made and see if anything/everything
works :)

¹ https://sources.debian.org/src/erlang/1:23.0%7Erc1+dfsg-1/debian/patterns/

Comments

Lars-Dominik Braun March 12, 2020, 9:07 a.m. UTC | #1
Hi Efraim,

> There are a couple of bundled fonts as well as bundled javascript inside
> the share directory, which also makes it to the output.
we can probably unbundle fontawesome, but not their own font. The web frontend
(fauxton) depends on NPM and a bunch of JavaScript packages – nothing we can do
about that.

> Looking at %out/lib/ it looks like there are a bunch of other libraries
> bundled with couchdb. I don't know much about erlang but I assume all
> these libraries should be unbundled. Looking inside erlang I see there
> are also a lot of what looks like bundled libraries so I'm not really
> sure how that goes.
As far as I see there is a mix between bundled external libraries and those
internal to couchdb. External libraries in src/ are:

- bear (https://github.com/boundary/bear)
- dreyfus (https://github.com/cloudant-labs/dreyfus)
- folsom (https://github.com/boundary/folsom)
- hyper (https://github.com/GameAnalytics/hyper)
- jiffy (https://github.com/davisp/jiffy)
- meck (https://github.com/eproxus/meck)
- mochiweb (https://github.com/mochi/mochiweb/)
- proper (https://github.com/proper-testing/proper)
- rebar (https://github.com/rebar/rebar)
- recon (https://github.com/ferd/recon)
- snappy (https://github.com/skunkwerks/snappy-erlang-nif)

All modules are also mirrored by the Apache project here
https://github.com/apache?q=couchdb&type=&language=
so it might be possible to build most of them “out of tree”, i.e. create
separate packages and somehow “link” to them. I’ll look into that when I have
some time, but I’m not an Erlang guru. In the meantime I’ll be maintaining the
package over here[1], since the current state is not good enough for inclusion
into guix.

> Anyway, take a look at the changes I made and see if anything/everything
> works :)
Yep, I can confirm the server and web interface are working.

Thanks for the review,
Lars

[1] https://github.com/leibniz-psychology/guix-zpid/blob/master/zpid/packages/couchdb.scm
Leo Famulari May 29, 2020, 12:38 a.m. UTC | #2
On Thu, Mar 12, 2020 at 10:07:26AM +0100, Lars-Dominik Braun wrote:
> Yep, I can confirm the server and web interface are working.

Alright, what is the status of this patch? Does it need more work? Or is
it ready?
Lars-Dominik Braun May 29, 2020, 6:28 a.m. UTC | #3
Hi,

> Alright, what is the status of this patch? Does it need more work? Or is
> it ready?
I don’t have time to work on this any more. The package works fine, but
probably does not satisfy guix’ requirements regarding bundled and precompiled
(JavaScript) sources.

Lars
Leo Famulari May 29, 2020, 5:10 p.m. UTC | #4
On Fri, May 29, 2020 at 08:28:51AM +0200, Lars-Dominik Braun wrote:
> Hi,
> 
> > Alright, what is the status of this patch? Does it need more work? Or is
> > it ready?
> I don’t have time to work on this any more. The package works fine, but
> probably does not satisfy guix’ requirements regarding bundled and precompiled
> (JavaScript) sources.

Oh well, that's too bad. I'll close this ticket and anyone should feel
free to reopen it if they'd like to continue the work.
diff mbox series

Patch

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)))