diff options
author | Nicolas Graves <ngraves@ngraves.fr> | 2024-09-26 09:50:52 +0200 |
---|---|---|
committer | Guix Patches Tester <> | 2024-09-26 11:21:03 +0200 |
commit | b3d4ef189ba3afa7953a1a864d3c56d464487d65 (patch) | |
tree | fa86f9f8630c51f9f2be86498c370f92e0987837 | |
parent | 404dbd894c69c94b483c6139d2a39b1c1eaddf36 (diff) | |
download | guix-patches-b3d4ef189ba3afa7953a1a864d3c56d464487d65.tar guix-patches-b3d4ef189ba3afa7953a1a864d3c56d464487d65.tar.gz |
import: Add %libreoffice-updater.
Change-Id: I481b1175db531c4fea4a57838fe190f679cd1a85
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | guix/import/libreoffice.scm | 98 |
2 files changed, 99 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index e9801283f8..e4e4fb5a19 100644 --- a/Makefile.am +++ b/Makefile.am @@ -306,6 +306,7 @@ MODULES = \ guix/import/json.scm \ guix/import/kde.scm \ guix/import/launchpad.scm \ + guix/import/libreoffice.scm \ guix/import/minetest.scm \ guix/import/npm-binary.scm \ guix/import/opam.scm \ diff --git a/guix/import/libreoffice.scm b/guix/import/libreoffice.scm new file mode 100644 index 0000000000..65d20f0432 --- /dev/null +++ b/guix/import/libreoffice.scm @@ -0,0 +1,98 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr> +;;; +;;; 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/>. + +(define-module (guix import libreoffice) + #:use-module (web client) + #:use-module (sxml match) + #:use-module (sxml simple) + #:use-module (guix i18n) + #:use-module (guix diagnostics) + #:use-module (guix packages) + #:use-module (guix upstream) + #:use-module (guix utils) + #:use-module (ice-9 textual-ports) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (%libreoffice-updater)) + +(define archive-prefix + "https://downloadarchive.documentfoundation.org/libreoffice/old/") +(define libreoffice-latest-url (string-append archive-prefix "latest/src/")) + +(define (libreoffice-latest-version) + (let* ((response port (http-get libreoffice-latest-url + #:streaming? #t)) + (content (get-string-all port)) + ;; xml->sxml is not flexible enough for html. + ;; For instance, <img> tags don't have closing </img>. + ;; This trick preprocesses html to extract all <a> tags in + ;; a <body> wrapper, which sxml-match can handle well. + (xml (xml->sxml + (string-append + "<body><" + (string-join + (filter (cute string-prefix? "a " <>) + (string-split content #\<)) + "</a><") + "></a></body>") + #:trim-whitespace? #t))) + (sxml-match + xml + ((*TOP* + (body + (a (@ (href "?C=N;O=D")) "Name") + (a (@ (href "?C=M;O=A")) "Last modified") + (a (@ (href "?C=S;O=A")) "Size") + (a (@ (href "/libreoffice/old/latest/")) "Parent Directory") + (a (@ (href ,link)) ,name) + . ,rest)) + (if (and (string-prefix? "libreoffice-" name) + (string-suffix? ".tar.xz" name)) + (string-drop + (string-drop-right name (string-length ".tar.xz")) + (string-length "libreoffice-")) + (raise + (formatted-message (G_ "Could not extract version from '~a'") + name))))))) + +(define* (latest-release package #:key (version #f)) + "Return an <upstream-source> for the latest-release of PACKAGE." + (let* ((name (package-name package)) + (version (or version (libreoffice-latest-version)))) + (upstream-source + (package name) + (version version) + (urls (list + (string-append + archive-prefix version "/src/libreoffice-" version ".tar.xz") + (string-append + "https://download.documentfoundation.org/libreoffice/src/" + (version-prefix version 3) "/libreoffice-" version ".tar.xz")))))) + +(define (libreoffice-package? package) + "Return true if PACKAGE is LibreOffice." + (string=? (package-name package) "libreoffice")) + +(define %libreoffice-updater + (upstream-updater + (name 'libreoffice) + (description "Updater for Libreoffice package") + (pred libreoffice-package?) + (import latest-release))) + +;; libreoffice.scm ends here. |