Subject: [bug#33572] Guile-JSON now seems to be a required dependency

From: Eric Bavier <[email-masked]>
Date: Sun, 2 Dec 2018 16:22:25 -0600

On Sun, 02 Dec 2018 22:59:47 +0100
[email-masked] (Ludovic Courtès) wrote:

> Hello,
> 
> Joshua Branson <[email-masked]> skribis:
> 
> > Timothy Sample <[email-masked]> writes:
> >  
> >> Hi Eric,
> >>
> >> Eric Bavier <[email-masked]> writes:  
> 
> [...]
> 
> >>> Yes, we decided to make it a hard requirement.  I'm working on a patch
> >>> to follow through.  
> >
> > I believe I created such a patch.  
> 
> Eric, could you consider merging your patch with Joshua’s?  Making
> Guile-JSON a hard dependency takes more than updating guix.texi, though.

Here's an updated patch.

I think this takes care of everything.  Most of the conditional-loading
logic in modules has been removed/factored/superseded already.

`~Eric
From 48c22f503493a4406758e91844d3708fe5f88864 Mon Sep 17 00:00:00 2001
From: Eric Bavier <[email-masked]>
Date: Sat, 1 Dec 2018 20:46:22 -0600
Subject: [PATCH] Make Guile-JSON a required dependency.

* README (Requirements): Remove "optional" verbiage.
* doc/guix.texi (Requirements): Move Guile-JSON from optional to required.
* configure.ac (HAVE_GUILE_JSON): Remove Automake conditional.
(have_guile_json): Error if not "yes".
* Makefile.am (MODULE, SCM_TESTS)[HAVE_GUILE_JSON]: Add modules and tests
unconditionally.
* gnu/packages/package-mangement.scm (guix-minimal)[propagated-inputs]: Leave
guile-json input.
---
 Makefile.am                         | 72 ++++++++++++-----------------
 README                              |  2 +-
 configure.ac                        |  6 ++-
 doc/guix.texi                       |  9 +---
 gnu/packages/package-management.scm |  2 +-
 5 files changed, 37 insertions(+), 54 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index e14ac57f2..32cebd591 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -62,7 +62,9 @@ MODULES =					\
   guix/base16.scm				\
   guix/base32.scm				\
   guix/base64.scm				\
+  guix/ci.scm					\
   guix/cpio.scm					\
+  guix/docker.scm	   			\
   guix/records.scm				\
   guix/pki.scm					\
   guix/progress.scm				\
@@ -186,15 +188,24 @@ MODULES =					\
   guix/build/make-bootstrap.scm			\
   guix/search-paths.scm				\
   guix/packages.scm				\
-  guix/import/print.scm				\
-  guix/import/utils.scm				\
-  guix/import/gnu.scm				\
-  guix/import/snix.scm				\
   guix/import/cabal.scm				\
+  guix/import/cpan.scm				\
   guix/import/cran.scm				\
-  guix/import/hackage.scm			\
+  guix/import/crate.scm				\
   guix/import/elpa.scm   			\
+  guix/import/gem.scm				\
+  guix/import/github.scm   			\
+  guix/import/gnome.scm				\
+  guix/import/gnu.scm				\
+  guix/import/hackage.scm			\
+  guix/import/json.scm				\
+  guix/import/opam.scm				\
+  guix/import/print.scm				\
+  guix/import/pypi.scm				\
+  guix/import/snix.scm				\
+  guix/import/stackage.scm			\
   guix/import/texlive.scm   			\
+  guix/import/utils.scm				\
   guix/scripts.scm				\
   guix/scripts/download.scm			\
   guix/scripts/perform-download.scm		\
@@ -216,46 +227,29 @@ MODULES =					\
   guix/scripts/system/search.scm		\
   guix/scripts/lint.scm				\
   guix/scripts/challenge.scm			\
+  guix/scripts/import/crate.scm			\
   guix/scripts/import/cran.scm			\
+  guix/scripts/import/elpa.scm  		\
+  guix/scripts/import/gem.scm			\
   guix/scripts/import/gnu.scm			\
-  guix/scripts/import/nix.scm			\
   guix/scripts/import/hackage.scm		\
-  guix/scripts/import/elpa.scm  		\
+  guix/scripts/import/json.scm  		\
+  guix/scripts/import/nix.scm			\
+  guix/scripts/import/opam.scm			\
+  guix/scripts/import/pypi.scm			\
+  guix/scripts/import/stackage.scm		\
   guix/scripts/import/texlive.scm  		\
   guix/scripts/environment.scm			\
   guix/scripts/publish.scm			\
   guix/scripts/edit.scm				\
   guix/scripts/size.scm				\
   guix/scripts/graph.scm			\
+  guix/scripts/weather.scm			\
   guix/scripts/container.scm			\
   guix/scripts/container/exec.scm		\
   guix.scm					\
   $(GNU_SYSTEM_MODULES)
 
-if HAVE_GUILE_JSON
-
-MODULES +=					\
-  guix/ci.scm					\
-  guix/docker.scm	   			\
-  guix/import/cpan.scm				\
-  guix/import/crate.scm				\
-  guix/import/gem.scm				\
-  guix/import/github.scm   			\
-  guix/import/gnome.scm				\
-  guix/import/json.scm				\
-  guix/import/opam.scm				\
-  guix/import/pypi.scm				\
-  guix/import/stackage.scm			\
-  guix/scripts/import/crate.scm			\
-  guix/scripts/import/gem.scm			\
-  guix/scripts/import/json.scm  		\
-  guix/scripts/import/opam.scm			\
-  guix/scripts/import/pypi.scm			\
-  guix/scripts/import/stackage.scm		\
-  guix/scripts/weather.scm
-
-endif
-
 if HAVE_GUILE_SSH
 
 MODULES +=					\
@@ -335,7 +329,10 @@ SCM_TESTS =					\
   tests/base16.scm				\
   tests/base32.scm				\
   tests/base64.scm				\
+  tests/cpan.scm				\
   tests/cpio.scm				\
+  tests/crate.scm				\
+  tests/gem.scm					\
   tests/pki.scm					\
   tests/print.scm				\
   tests/sets.scm				\
@@ -389,22 +386,13 @@ SCM_TESTS =					\
   tests/services.scm				\
   tests/scripts-build.scm			\
   tests/containers.scm				\
+  tests/opam.scm				\
   tests/pack.scm				\
+  tests/pypi.scm				\
   tests/import-utils.scm			\
   tests/store-database.scm			\
   tests/store-deduplication.scm
 
-if HAVE_GUILE_JSON
-
-SCM_TESTS += 					\
-  tests/pypi.scm				\
-  tests/opam.scm				\
-  tests/cpan.scm				\
-  tests/gem.scm					\
-  tests/crate.scm
-
-endif
-
 SH_TESTS =					\
   tests/guix-build.sh				\
   tests/guix-build-branch.sh			\
diff --git a/README b/README
index a7a818c5c..e7871917f 100644
--- a/README
+++ b/README
@@ -27,7 +27,7 @@ GNU Guix currently depends on the following packages:
   - [[https://notabug.org/guile-sqlite3/guile-sqlite3][Guile-SQLite3]], version 0.1.0 or later
   - [[https://gitlab.com/guile-git/guile-git][Guile-Git]]
   - [[http://www.zlib.net/][zlib]]
-  - optionally [[https://savannah.nongnu.org/projects/guile-json/][Guile-JSON]], for the 'guix import pypi' command
+  - [[https://savannah.nongnu.org/projects/guile-json/][Guile-JSON]]
 
 Unless `--disable-daemon' was passed, the following packages are needed:
 
diff --git a/configure.ac b/configure.ac
index 2a1edbc32..2817e6e24 100644
--- a/configure.ac
+++ b/configure.ac
@@ -122,9 +122,11 @@ if test "x$have_guile_git" != "xyes"; then
   AC_MSG_ERROR([Guile-Git is missing; please install it.])
 fi
 
-dnl Guile-JSON is used in various places.
+dnl Check for Guile-JSON.
 GUILE_MODULE_AVAILABLE([have_guile_json], [(json)])
-AM_CONDITIONAL([HAVE_GUILE_JSON], [test "x$have_guile_json" = "xyes"])
+if test "x$have_guile_json" != "xyes"; then
+  AC_MSG_ERROR([Guile-JSON is missing; please install it.])
+fi
 
 dnl Guile-Sqlite3 is used by the (guix store ...) modules.
 GUIX_CHECK_GUILE_SQLITE3
diff --git a/doc/guix.texi b/doc/guix.texi
index fff5dfe0b..907735285 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -653,20 +653,13 @@ or later;
 @c FIXME: Specify a version number once a release has been made.
 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
 2017 or later;
+@item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON};
 @item @url{http://zlib.net, zlib};
 @item @url{http://www.gnu.org/software/make/, GNU Make}.
 @end itemize
 
 The following dependencies are optional:
 
-@itemize
-@item
-Installing
-@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
-allow you to use the @command{guix import pypi} command (@pxref{Invoking
-guix import}).  It is of
-interest primarily for developers and not for casual users.
-
 @item
 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
 Support for build offloading (@pxref{Daemon Offload Setup}) and
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 141d0e52f..c4e917102 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -389,7 +389,7 @@ the Nix package manager.")
        (propagated-inputs
         (fold alist-delete
               (package-propagated-inputs guix)
-              '("guile-json" "guile-ssh")))))))
+              '("guile-ssh")))))))
 
 (define (source-file? file stat)
   "Return true if FILE is likely a source file, false if it is a typical
-- 
2.19.1