Subject: bug#39197: closed (Re: [PATCH core-updates 2/4] gnu: cmake-minimal: Build with a minimal variant of cURL.)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 22 Jan 2020 18:47:01 +0000

Your bug report

#39197: [PATCH core-updates 0/4] Replace libjpeg with libjpeg-turbo

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
39197: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=39197
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [PATCH core-updates 2/4] gnu: cmake-minimal: Build with a minimal variant of cURL.
From: Marius Bakke <[email-masked]>
To: Jakub Kądziołka <[email-masked]>, [email-masked]
Date: Wed, 22 Jan 2020 19:46:00 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Jakub Kądziołka <[email-masked]> writes:

>> This is necessary to avoid a circular dependency in the next commit.
>> 
>> * gnu/packages/curl.scm (curl-minimal): New public variable.
>> * gnu/packages/cmake.scm (cmake-minimal)[inputs]: Change from CURL to 
>> CURL-MINIMAL.
>> (cmake)[inputs]: Do the opposite.
>
> Is there a reason this curl-minimal couldn't also be used for
> git-minimal? This would keep the updater working for rhash.

Good catch.  I did this initially, but found it simpler to not use
git-fetch for RHash.  I don't like inserting these 'magic' packages
around the graph.  It also means we need two graft two cURLs instead of
one.

But I don't feel strongly about it, and keeping the updater working is a
good argument.  So I was about to revert back, but then found out RHash
is available on sourceforge too:

https://sourceforge.net/projects/rhash/

Much better!

Since you made me reconsider, I also found a better solution for 2/4: we
can lose CMakes runtime dependency on 'curl-minimal' as well by using it
only once, to build libjpeg-turbo:

diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index d053935a86..fcc6642280 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -152,7 +152,7 @@
              (apply invoke "./configure" configure-flags))))))
     (native-inputs
      `(("bzip2" ,bzip2)
-       ("curl" ,curl-minimal)
+       ("curl" ,curl)
        ("expat" ,expat)
        ("file" ,file)
        ("libarchive" ,libarchive)
@@ -235,6 +235,18 @@ and workspaces that can be used in the compiler environment of your choice.")
     (search-paths
      (package-native-search-paths cmake-minimal))))
 
+;; The purpose of this package is to solve a circular dependency between
+;; packages that use cmake-build-system and CMakes own dependencies.
+(define-public cmake-minimal-bootstrap
+  (package
+    (inherit cmake-minimal)
+    (name "cmake-minimal-bootstrap")
+    (native-inputs
+     `(;; cURL depends on ghostscript (via groff and OpenLDAP), which depends on
+       ;; 'cmake-build-system' through libtiff and ultimately libjpeg-turbo.
+       ("curl" ,curl-minimal)
+       ,@(alist-delete "curl" (package-native-inputs cmake-minimal))))))
+
 (define-public emacs-cmake-mode
   (package
     (inherit cmake)
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 38efe61780..1b86f700e4 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -46,6 +46,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
@@ -1505,8 +1506,13 @@ is hereby granted."))))
     (native-inputs
      `(("nasm" ,nasm)))
     (arguments
-     '(#:configure-flags '("-DCMAKE_INSTALL_LIBDIR:PATH=lib"
-                           "-DENABLE_STATIC=0")))
+     `(#:configure-flags '("-DCMAKE_INSTALL_LIBDIR:PATH=lib"
+                           "-DENABLE_STATIC=0")
+       ,@(if (%current-target-system)
+             '()
+             ;; Use a special "bootstrap" CMake for the native build to work
+             ;; around a circular dependency between CMake and this package.
+             `(#:cmake ,cmake-minimal-bootstrap))))
     (home-page "https://libjpeg-turbo.org/")
     (synopsis "SIMD-accelerated JPEG image handling library")
     (description "libjpeg-turbo is a JPEG image codec that accelerates baseline

Thanks a lot for the feedback.  Will push this shortly.  :-)

Subject: [PATCH core-updates 0/4] Replace libjpeg with libjpeg-turbo
From: Marius Bakke <[email-masked]>
To: [email-masked]
Date: Mon, 20 Jan 2020 00:16:51 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

AIUI most distributions have moved away from the IJG libjpeg library in
favor of libjpeg-turbo (which is ABI- and API-compatible, and under lots
of scrutiny by security researchers).

This series do the same for Guix.

Marius Bakke (4):
  gnu: RHash: Do not use git-fetch, but provide a fallback URL.
  gnu: cmake-minimal: Build with a minimal variant of cURL.
  gnu: Replace uses of 'libjpeg' with 'libjpeg-turbo'.
  gnu: Deprecate the 'libjpeg' variable.

 gnu/packages/abiword.scm          |  2 +-
 gnu/packages/admin.scm            |  2 +-
 gnu/packages/algebra.scm          |  2 +-
 gnu/packages/animation.scm        |  2 +-
 gnu/packages/astronomy.scm        |  4 ++--
 gnu/packages/cdrom.scm            |  2 +-
 gnu/packages/cmake.scm            |  5 ++++-
 gnu/packages/cran.scm             |  6 +++---
 gnu/packages/crypto.scm           | 18 ++++++++++++------
 gnu/packages/cups.scm             |  4 ++--
 gnu/packages/curl.scm             | 16 ++++++++++++++--
 gnu/packages/display-managers.scm |  2 +-
 gnu/packages/ebook.scm            |  2 +-
 gnu/packages/emacs.scm            |  2 +-
 gnu/packages/emulators.scm        |  2 +-
 gnu/packages/enlightenment.scm    |  2 +-
 gnu/packages/fltk.scm             |  4 ++--
 gnu/packages/fontutils.scm        |  2 +-
 gnu/packages/freedesktop.scm      |  2 +-
 gnu/packages/game-development.scm | 12 ++++++------
 gnu/packages/games.scm            | 20 ++++++++++----------
 gnu/packages/gd.scm               |  4 ++--
 gnu/packages/ghostscript.scm      |  6 +++---
 gnu/packages/gimp.scm             |  4 ++--
 gnu/packages/gnome.scm            |  8 ++++----
 gnu/packages/gnunet.scm           |  2 +-
 gnu/packages/gnustep.scm          |  2 +-
 gnu/packages/graphics.scm         | 14 +++++++-------
 gnu/packages/graphviz.scm         |  2 +-
 gnu/packages/gstreamer.scm        |  2 +-
 gnu/packages/gtk.scm              |  2 +-
 gnu/packages/image-processing.scm | 16 ++++++++--------
 gnu/packages/image-viewers.scm    |  4 ++--
 gnu/packages/image.scm            | 31 +++++++++++++++++--------------
 gnu/packages/imagemagick.scm      |  4 ++--
 gnu/packages/java.scm             | 10 +++++-----
 gnu/packages/kde-frameworks.scm   |  2 +-
 gnu/packages/kodi.scm             |  2 +-
 gnu/packages/machine-learning.scm |  4 ++--
 gnu/packages/mate.scm             |  4 ++--
 gnu/packages/maths.scm            |  8 ++++----
 gnu/packages/netpbm.scm           |  2 +-
 gnu/packages/pdf.scm              |  8 ++++----
 gnu/packages/photo.scm            | 12 ++++++------
 gnu/packages/prolog.scm           |  2 +-
 gnu/packages/python-xyz.scm       |  4 ++--
 gnu/packages/qt.scm               |  6 +++---
 gnu/packages/rdesktop.scm         |  2 +-
 gnu/packages/scanner.scm          |  4 ++--
 gnu/packages/scheme.scm           |  2 +-
 gnu/packages/scribus.scm          |  2 +-
 gnu/packages/sdl.scm              |  4 ++--
 gnu/packages/spice.scm            |  2 +-
 gnu/packages/statistics.scm       |  2 +-
 gnu/packages/tcl.scm              |  2 +-
 gnu/packages/upnp.scm             |  2 +-
 gnu/packages/video.scm            |  8 ++++----
 gnu/packages/web-browsers.scm     |  4 ++--
 gnu/packages/web.scm              |  2 +-
 gnu/packages/webkit.scm           |  2 +-
 gnu/packages/wine.scm             |  2 +-
 gnu/packages/wv.scm               |  2 +-
 gnu/packages/wxwidgets.scm        |  4 ++--
 gnu/packages/xdisorg.scm          |  2 +-
 gnu/packages/xfce.scm             |  2 +-
 gnu/packages/xfig.scm             |  4 ++--
 gnu/packages/xorg.scm             |  2 +-
 67 files changed, 179 insertions(+), 155 deletions(-)

-- 
2.24.1