;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Mathieu Othacehe ;;; ;;; 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 . (define-module (gnu installer timezone) #:use-module (gnu installer utils) #:use-module (guix i18n) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) #:use-module (ice-9 match) #:use-module (ice-9 receive) #:export (locate-children timezone->posix-tz timezone-has-child? zonetab->timezone-tree posix-tz->configuration)) (define %not-blank (char-set-complement char-set:blank)) (define (posix-tz->timezone tz) "Convert given TZ in Posix format like \"Europe/Paris\" into a list like (\"Europe\" \"Paris\")." (string-split tz #\/)) (define (timezone->posix-tz timezone) "Convert given TIMEZONE like (\"Europe\" \"Paris\") into a Posix timezone like \"Europe/Paris\"." (string-join timezone "/")) (define (zonetab->timezones zonetab) "Parse ZONETAB file and return the corresponding list of timezones." (define (zonetab-line->posix-tz line) (let ((tokens (string-tokenize line %not-blank))) (match tokens ((code coordinates tz _ ...) tz)))) (call-with-input-file zonetab (lambda (port) (let* ((lines (read-lines port)) ;; Filter comment lines starting with '#' character. (tz-lines (filter (lambda (line) (not (eq? (string-ref line 0) #\#))) lines))) (map (lambda (line) (posix-tz->timezone (zonetab-line->posix-tz line))) tz-lines))))) (define (timezones->timezone-tree timezones) "Convert the list of timezones, TIMEZONES into a tree under the form: (\"America\" (\"North_Dakota\" \"New_Salem\" \"Center\")) representing America/North_Dakota/New_Salem and America/North_Dakota/Center timezones." (define (remove-first lists) "Remove the first element of every sublists in the argument LISTS." (map (lambda (list) (if (null? list) list (cdr list))) lists)) (let loop ((cur-timezones timezones)) (match cur-timezones (() '()) (((region . rest-region) . rest-timezones) (if (null? rest-region) (cons (list region) (loop rest-timezones)) (receive (same-region other-region) (partition (lambda (timezone) (string=? (car timezone) region)) cur-timezones) (acons region (loop (remove-first same-region)) (loop other-region)))))))) (define (locate-children tree path) "Return the children of the timezone indicated by PATH in the given TREE. Raise a condition if the PATH could not be found." (let ((extract-proc (cut map car <>))) (match path (() (sort (extract-proc tree) string (assoc-ref tree region) (cut locate-children <> rest)) (raise (condition (&message (message (format #f (G_ "Unable to locate path: ~a.") path)))))))))) (define (timezone-has-child? tree timezone) "Return #t if the given TIMEZONE any child in TREE and #f otherwise." (not (null? (locate-children tree timezone)))) (define* (zonetab->timezone-tree zonetab) "Return the timezone tree corresponding to the given ZONETAB file." (timezones->timezone-tree (zonetab->timezones zonetab))) ;;; ;;; Configuration formatter. ;;; (define (posix-tz->configuration timezone) "Return the configuration field for TIMEZONE." `((timezone ,timezone))) 24-01-23 21:45:36 +0100'>2024-01-23ci: Don't cross compile to or1k-elf....* gnu/ci.scm (cross-jobs)[pointless?]: Don't build any packages for or1k-elf. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Change-Id: I294429d5318b94fb8e7780a37f3608b5321cf6ca Mathieu Othacehe 2023-12-18gnu: ci: Build tuned packages for common baselines....* gnu/ci.scm (%x86-64-micro-architectures): Update the list of micro-architectures to also match the psABI levels. Change-Id: Iee2f65376a00ad2ee5fb393c2e64c07f866d8116 Efraim Flashner 2023-12-12ci: Don't cross compile to avr....* gnu/ci.scm (cross-jobs)[pointless?]: Don't build any packages for avr. Change-Id: I1728727874d65461b82364e71b70c7d1fd050d90 Efraim Flashner 2023-09-20image: Introduce the mbr-hybrid-raw image type....Until 209204e23b39af09e0ea92540b6fa00a60e6a0ae and d57cab764122af69d52d8cc9c843456044e5d7bc, the default image type used by "guix system image" was an MBR image with an ESP partition. Having both an MBR image and an ESP partition is handy because the image will boot on most x86 based systems using legacy BIOS and/or UEFI. We now have a distinction between MBR images and EFI images. Introduce a new MBR hybrid image type and default to it to restore the default behaviour. This also fixes the images section of (gnu ci) that was trying to install a BIOS bootloader on an EFI, GPT image and failing to do so. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Mathieu Othacehe 2023-08-21ci: Really honor system type for manifests....* gnu/ci.scm (manifests->jobs): Pass SYSTEM to 'lower-object'. Ludovic Courtès 2023-08-21ci: Honor user-specific systems for manifests....* gnu/ci.scm (manifests->jobs): Add 'systems' argument. [manifest-entry->job]: Add 'system' and honor it. Honor it. (cuirass-jobs): Pass SYSTEMS to 'manifests->jobs'. Ludovic Courtès