aboutsummaryrefslogtreecommitdiff
path: root/etc/disarchive-manifest.scm
blob: 5cc59f5e2af18e869eb49feecf1b5020becb5323 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 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.2.1, Disarchive can only deal with raw tarballs and
     ;; gzip-compressed tarballs.
     (and (origin-hash origin)
          (or (string-suffix? ".tar.gz" file)
              (string-suffix? ".tgz" 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))

(define (disarchive-collection origins)
  "Return a directory containing all the Disarchive metadata for ORIGINS."
  (directory-union "disarchive-collection"
                   (filter-map (lambda (origin)
                                 (and (tarball-origin? origin)
                                      (origin->disarchive origin)))
                               origins)
                   #:copy? #t))


;; The manifest containing Disarchive data.
(let ((origins (all-origins)))
  (manifest
   (list (manifest-entry
           (name "disarchive-collection")
           (version (length origins))
           (item (disarchive-collection origins))))))
e 2017-03-30gnu: Use HTTPS for almost all gnu.org HOME-PAGEs....All HTTP gnu.org (and supported subdomain) HOME-PAGEs changed to HTTPS. Tobias Geerinckx-Rice 2017-03-15gnu: man-pages: Update to 4.10....* gnu/packages/man.scm (man-pages): Update to 4.10. [home-page]: Use HTTPS. Tobias Geerinckx-Rice 2017-03-02gnu: txt2man: Update to 1.6.0....* gnu/packages/man.scm (txt2man): Update to 1.6.0. Tobias Geerinckx-Rice 2016-12-14gnu: man-pages: Update to 4.09....* gnu/packages/man.scm (man-pages): Update to 4.09. Tobias Geerinckx-Rice 2016-10-12Merge branch 'master' into core-updatesMark H Weaver 2016-10-10gnu: man-pages: Update to 4.08....* gnu/packages/man.scm (man-pages): Update to 4.08. Tobias Geerinckx-Rice 2016-09-30Merge branch 'master' into core-updatesLudovic Courtès 2016-09-28gnu: Add and use gettext-minimal....* gnu/packages/gettext.scm (gnu-gettext): Rename to... (gettext-minimal): ... this. Adjust synopsis and description. (gnu-gettext): Inherit from it. (po4a): Use 'gettext-minimal' instead of 'gnu-gettext'. * gnu/packages/acl.scm: Likewise. * gnu/packages/admin.scm: Likewise. * gnu/packages/apl.scm: Likewise. * gnu/packages/attr.scm: Likewise. * gnu/packages/audio.scm: Likewise. * gnu/packages/base.scm: Likewise. * gnu/packages/cdrom.scm: Likewise. * gnu/packages/commencement.scm: Likewise. * gnu/packages/crypto.scm: Likewise. * gnu/packages/databases.scm: Likewise. * gnu/packages/disk.scm: Likewise. * gnu/packages/documentation.scm: Likewise. * gnu/packages/education.scm: Likewise. * gnu/packages/engineering.scm: Likewise. * gnu/packages/enlightenment.scm: Likewise. * gnu/packages/fcitx.scm: Likewise. * gnu/packages/fontutils.scm: Likewise. * gnu/packages/freedesktop.scm: Likewise. * gnu/packages/games.scm: Likewise. * gnu/packages/gkrellm.scm: Likewise. * gnu/packages/glib.scm: Likewise. * gnu/packages/gnome.scm: Likewise. * gnu/packages/grub.scm: Likewise. * gnu/packages/gtk.scm: Likewise. * gnu/packages/guile.scm: Likewise. * gnu/packages/ibus.scm: Likewise. * gnu/packages/irc.scm: Likewise. * gnu/packages/iso-codes.scm: Likewise. * gnu/packages/kde-frameworks.scm: Likewise. * gnu/packages/kodi.scm: Likewise. * gnu/packages/linux.scm: Likewise. * gnu/packages/man.scm: Likewise. * gnu/packages/maths.scm: Likewise. * gnu/packages/mono.scm: Likewise. * gnu/packages/mp3.scm: Likewise. * gnu/packages/music.scm: Likewise. * gnu/packages/nano.scm: Likewise. * gnu/packages/networking.scm: Likewise. * gnu/packages/package-management.scm: Likewise. * gnu/packages/pdf.scm: Likewise. * gnu/packages/sawfish.scm: Likewise. * gnu/packages/statistics.scm: Likewise. * gnu/packages/terminals.scm: Likewise. * gnu/packages/version-control.scm: Likewise. * gnu/packages/vpn.scm: Likewise. * gnu/packages/w3m.scm: Likewise. * gnu/packages/webkit.scm: Likewise. * gnu/packages/wicd.scm: Likewise. * gnu/packages/wine.scm: Likewise. * gnu/packages/xdisorg.scm: Likewise. * gnu/packages/xorg.scm: Likewise. Alex Kost 2016-09-07gnu: man-db: Patch path to iconv....* gnu/packages/man.scm (man-db)[arguments]: Add phase "patch-iconv-path". Fixes <http://bugs.gnu.org/24373>. Ricardo Wurmus 2016-09-07gnu: man-db: Use modify-phases syntax....* gnu/packages/man.scm (man-db)[arguments]: Use modify-phases syntax. Ricardo Wurmus 2016-07-10gnu: help2man: Update to 1.47.4....* gnu/packages/man.scm (help2man): Update to 1.47.4. Efraim Flashner 2016-07-10gnu: man-pages: Update to 4.0.6....* gnu/packages/man.scm (man-pages): Update to 4.0.6. Efraim Flashner 2016-07-10gnu: man-db: Update to 2.7.5....* gnu/packages/man.scm (man-db): Update to 2.7.5. Efraim Flashner 2016-01-11gnu: man-pages: Update to 4.04....* gnu/packages/man.scm (man-pages): Update to 4.04. [source]: Add alternate location. Efraim Flashner 2015-12-07gnu: help2man: Update to 1.47.3....* gnu/packages/man.scm (help2man): Update to 1.47.3. Efraim Flashner 2015-10-29gnu: Move gdbm to (gnu packages databases)....* gnu/packages/gdbm.scm: Remove. * gnu/packages/databases.scm (gdbm): New variable, from gdbm.scm. * gnu/packages/avahi.scm, gnu/packages/cyrus-sasl.scm, gnu/packages/guile.scm, gnu/packages/mail.scm, gnu/packages/man.scm, gnu/packages/pulseaudio.scm, gnu/packages/python.scm, gnu/packages/ruby.scm, gnu/packages/sawfish.scm: Adjust accordingly. * gnu-system.am (GNU_SYSTEM_MODULES): Remove gdbm.scm. Ludovic Courtès 2015-10-21gnu: help2man: Update to 1.47.2....* gnu/packages/man.scm (help2man): Update to 1.47.2. Ludovic Courtès 2015-07-21gnu: man-db: Update to 2.7.1....* gnu/packages/man.scm (man-db): Update to 2.7.1. [arguments]: Add '--with-systemdtmpfilesdir' to configure flags. Alex Kost 2015-07-21gnu: libpipeline: Update to 1.4.0....* gnu/packages/man.scm (libpipeline): Update to 1.4.0. Alex Kost 2015-07-21gnu: man-db: Pass --with-col to configure....* gnu/packages/man.scm (man-db)[inputs]: Add 'util-linux'. [arguments]: Add '--with-col' to configure flags. Alex Kost 2015-06-29gnu: help2man: Update to 1.47.1....* gnu/packages/man.scm (help2man): Update to 1.47.1. Ludovic Courtès 2015-05-03gnu: help2man: Update to 1.46.6....* gnu/packages/man.scm (help2man): Update to 1.46.6. Ludovic Courtès 2015-04-12gnu: man-pages: Update to 3.82....* gnu/packages/man.scm (man-pages): Update to 3.82. Ludovic Courtès