aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021-2024 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

;;; This file returns a manifest that builds a directory containing Disarchive
;;; metadata for all the tarballs packages refer to.

(use-modules (srfi srfi-1) (ice-9 match)
             (guix packages) (guix gexp) (guix profiles)
             (guix base16)
             (gnu packages))

(include "source-manifest.scm")

(define (tarball-origin? origin)
  (match (origin-actual-file-name origin)
    (#f #f)
    ((? string? file)
     ;; As of version 0.4.0, Disarchive can only deal with raw tarballs,
     ;; gzip-compressed tarballs, and xz-compressed tarballs.
     (and (origin-hash origin)
          (or (string-suffix? ".tar.gz" file)
              (string-suffix? ".tgz" file)
              (string-suffix? ".tar.bz2" file)
              (string-suffix? ".tbz2" file)
              (string-suffix? ".tar.xz" file)
              (string-suffix? ".tar" file))))))

(define (origin->disarchive origin)
  "Return a directory containing Disarchive metadata for ORIGIN, a tarball, or
an empty directory if ORIGIN could not be disassembled."
  (define file-name
    (let ((hash (origin-hash origin)))
      (string-append (symbol->string (content-hash-algorithm hash))
                     "/"
                     (bytevector->base16-string
                      (content-hash-value hash)))))

  (define disarchive
    (specification->package "disarchive"))

  (define build
    (with-imported-modules '((guix build utils))
      #~(begin
          (use-modules (guix build utils)
                       (srfi srfi-34))

          (define tarball
            #+(upstream-origin origin))

          (define file-name
            (string-append #$output "/" #$file-name))

          (define profile
            #+(profile (content (packages->manifest (list disarchive)))))

          (mkdir-p (dirname file-name))
          (setenv "PATH" (string-append profile "/bin"))
          (setenv "GUILE_LOAD_PATH"
                  (string-append profile "/share/guile/site/"
                                 (effective-version)))
          (setenv "GUILE_LOAD_COMPILED_PATH"
                  (string-append profile "/lib/guile/" (effective-version)
                                 "/site-ccache"))

          (guard (c ((invoke-error? c)
                     ;; Sometimes Disarchive fails with "could not find Gzip
                     ;; compressor".  When that happens, produce an empty
                     ;; directory instead of failing.
                     (report-invoke-error c)
                     (delete-file file-name)))
            (with-output-to-file file-name
              (lambda ()
                ;; Disarchive records the tarball name in its output.  Thus,
                ;; strip the hash from TARBALL.
                (let ((short-name (strip-store-file-name tarball)))
                  (symlink tarball short-name)
                  (invoke "disarchive" "disassemble" short-name))))))))

  (computed-file (match (origin-actual-file-name origin)
                   ((? string? str) (string-append str ".dis"))
                   (#f "anonymous-tarball.dis"))
                 build))


;; The manifest containing Disarchive data.
(let* ((origins (all-origins))
       (disarchives
        (filter-map (lambda (origin)
                      (and (tarball-origin? origin)

                           ;; Dismiss origins with (sha256 #f) such as that of
                           ;; IceCat.
                           (and=> (origin-hash origin)
                                  content-hash-value)

                           ;; FIXME: Exclude the Chromium tarball because it's
                           ;; huge and "disarchive disassemble" exceeds the
                           ;; max-silent timeout.
                           (not (string-prefix?
                                 "chromium-"
                                 (origin-actual-file-name origin)))

                           (manifest-entry
                             (name
                              (string-append (origin-actual-file-name origin)
                                             ".dis"))
                             (version "0")
                             (item (origin->disarchive origin)))))
                    origins)))
  (manifest
   (cons (manifest-entry
           (name "disarchive-collection")
           (version (number->string (length origins)))
           (item (directory-union "disarchive-collection"
                                  (map manifest-entry-item disarchives)
                                  #:copy? #t)))

         ;; Cuirass can distribute derivation builds to build machines if and
         ;; only if it has one "job" per derivation.  Thus, add them here in
         ;; addition to "disarchive-collection".
         disarchives)))
l-extension-gsconnect....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-gsconnect): New variable. Alex Griffin 2020-02-21gnu: gnome-shell-extension-paperwm: Install compiled gschemas....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-paperwm)[arguments]: Install compiled gschemas. Signed-off-by: Alex Griffin <a@ajgrf.com> Jack Hill 2020-02-21gnu: gnome-shell-extension-paperwm: Recompile schemas....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-paperwm) [source]: Remove gschemas.compiled in a snippet. [arguments]: Add compile-schemas phase. [native-inputs]: Add glib. Signed-off-by: Alex Griffin <a@ajgrf.com> Jack Hill 2020-02-21gnu: Add gnome-shell-extension-paperwm....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-paperwm): New variable. Alex Griffin 2020-02-05gnu: Add gnome-shell-extension-appindicator....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-appindicator): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Giacomo Leidi 2019-12-25Revert "gnu: gnome-shell-extension-dash-to-dock: Update to 67."...This reverts commit 5a30234c210dfb37da832125cdbda6a9a0c585ca, which assumes you're running Gnome 3.34, which is unlikely. Tobias Geerinckx-Rice 2019-12-23gnu: gnome-shell-extension-dash-to-dock: Update to 67....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-dash-to-dock): Update to 67. Tobias Geerinckx-Rice 2019-12-23gnu: gnome-shell-extension-dash-to-dock: Depropagate glib:bin....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-dash-to-dock): [propagated-inputs]: Move glib:bin from here... [native-inputs]: ... to here. Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Leo Prikler 2019-12-23gnu: gnome-shell-extension-hide-app-icon: Fix installation....* gnu/packages/gnome-xyz.scm: (gnome-shell-extension-hide-app-icon): [arguments]: Install in subdirectory. Adjust indentation. Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Leo Prikler 2019-12-20gnu: Add gnome-shell-extension-hide-app-icon....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-hide-app-icon): New variable. Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Leo Prikler 2019-12-19gnu: Add gnome-shell-extension-dash-to-panel....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-dash-to-panel): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Giacomo Leidi 2019-12-15gnu: Add papirus-icon-theme....* gnu/packages/gnome-xyz.scm (papirus-icon-theme): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Giacomo Leidi 2019-12-11gnu: gnome-shell-extension-dash-to-dock: Update to 66....* gnu/packages/gnome-xyz.scm (gnome-shell-extension-dash-to-dock): Update to 66. Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Leo Prikler 2019-12-09gnu: delft-icon-theme: Fix broken icons....* gnu/packages/gnome-xyz (delft-icon-theme): Inherit from Adwaita instead of using the (non-existing) GNOME theme. Signed-off-by: Brett Gilio <brettg@posteo.net> Leo Prikler 2019-11-10gnu: Move numix-theme to gnome-xyz.scm....* gnu/packages/gnome.scm (numix-theme): Move from here ... * gnu/packages/gnome-xyz.scm (numix-theme): ... to here. Signed-off-by: Marius Bakke <mbakke@fastmail.com> Giacomo Leidi 2019-11-09gnu: Add matcha-theme....* gnu/packages/gnome-xyz.scm (matcha-theme): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Alexandros Theodotou 2019-11-08gnu: Add gnome-shell-extension-noannoyance....* gnu/packages/gnome-xyz: (gnome-shell-extension-noannoyance): New variable. Signed-off-by: Mathieu Othacehe <m.othacehe@gmail.com> Leo Prikler 2019-11-08gnu: Add gnome-shell-extension-dash-to-dock....* gnu/packages/gnome-xyz.scm: (gnome-shell-extension-dash-to-dock): New variable. Signed-off-by: Mathieu Othacehe <m.othacehe@gmail.com> Leo Prikler 2019-11-08gnu: Add delft-icon-theme....* /gnu/packages/gnome-xyz.scm: New file. (delft-icon-theme): New variable. * /gnu/local.mk: Add it. Signed-off-by: Mathieu Othacehe <m.othacehe@gmail.com> Leo Prikler