From 6ccfa48d83b9c513b40835ae0c5896102b4dd915 Mon Sep 17 00:00:00 2001 From: Jakob Kirsch Date: Wed, 2 Aug 2023 14:37:13 +0200 Subject: gnu: john-the-ripper-jumbo: Fix compilation with GCC 11+. * gnu/packages/patches/john-the-ripper-jumbo-with-gcc-11.patch: New file. * gnu/local.mk (dist_PATCH_DATA): Register it. * gnu/packages/password-utils.scm (john-the-ripper-jumbo)[source]: Use it. Co-authored-by: Guillaume Le Vaillant --- gnu/local.mk | 1 + 1 file changed, 1 insertion(+) (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 2be8bbd594..393a773e17 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1431,6 +1431,7 @@ dist_patch_DATA = \ %D%/packages/patches/jfsutils-add-sysmacros.patch \ %D%/packages/patches/jfsutils-gcc-compat.patch \ %D%/packages/patches/jfsutils-include-systypes.patch \ + %D%/packages/patches/john-the-ripper-jumbo-with-gcc-11.patch \ %D%/packages/patches/json-c-0.13-CVE-2020-12762.patch \ %D%/packages/patches/json-c-0.12-CVE-2020-12762.patch \ %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch \ -- cgit v1.2.3 From 8f99f824d22626750221a47d528442b06f1e7a7c Mon Sep 17 00:00:00 2001 From: Zheng Junjie <873216071@qq.com> Date: Wed, 12 Jul 2023 18:38:05 +0800 Subject: gnu: kwayland: Update to 5.108.0. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/kde-frameworks.scm (kwayland): Update to 5.108.0. [arguments]: Run tests with testWaylandRegistry, testPlasmaShell and testPlasmaWindowModel skipped. * gnu/packages/patches/kwayland-skip-flaky-test.patch: Remove file. * gnu/local.mk (dist_patch_DATA): Unregister it. Signed-off-by: 宋文武 --- gnu/local.mk | 1 - gnu/packages/kde-frameworks.scm | 14 ++++++++++---- gnu/packages/patches/kwayland-skip-flaky-test.patch | 13 ------------- 3 files changed, 10 insertions(+), 18 deletions(-) delete mode 100644 gnu/packages/patches/kwayland-skip-flaky-test.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 393a773e17..bd5bd0f7aa 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1467,7 +1467,6 @@ dist_patch_DATA = \ %D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch \ %D%/packages/patches/kodi-set-libcurl-ssl-parameters.patch \ %D%/packages/patches/kodi-mesa-eglchromium.patch \ - %D%/packages/patches/kwayland-skip-flaky-test.patch \ %D%/packages/patches/laby-make-install.patch \ %D%/packages/patches/laby-use-tmpdir-from-runtime.patch \ %D%/packages/patches/ldns-drill-examples.patch \ diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index 8011e13a39..f32d3c3941 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -1090,17 +1090,16 @@ protocols used in KDE Plasma.") (define-public kwayland (package (name "kwayland") - (version "5.98.0") + (version "5.108.0") (source (origin (method url-fetch) (uri (string-append "mirror://kde/stable/frameworks/" (version-major+minor version) "/" name "-" version ".tar.xz")) - (patches (search-patches "kwayland-skip-flaky-test.patch")) (sha256 (base32 - "0c0953gm63xhrqb7aspvf28wi7x31mrgaid23dw5gqphkbgis5qw")))) + "11xk1rzizmqb0haqkg24kdd54a3fdqrxr2kh056irbnksp9p8k03")))) (build-system qt-build-system) (native-inputs (list extra-cmake-modules pkg-config)) @@ -1119,7 +1118,14 @@ protocols used in KDE Plasma.") #~(modify-phases %standard-phases (add-before 'check 'set-XDG_RUNTIME_DIR (lambda _ - (setenv "XDG_RUNTIME_DIR" (getcwd))))))) + (setenv "XDG_RUNTIME_DIR" (getcwd)))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "ctest" "-E" + ;; XXX: maybe is upstream bug + "(kwayland-testWaylandRegistry|\ +kwayland-testPlasmaShell|kwayland-testPlasmaWindowModel)"))))))) (home-page "https://community.kde.org/Frameworks") (synopsis "Qt-style API to interact with the wayland client and server") (description "As the names suggest they implement a Client respectively a diff --git a/gnu/packages/patches/kwayland-skip-flaky-test.patch b/gnu/packages/patches/kwayland-skip-flaky-test.patch deleted file mode 100644 index 592ab3cc77..0000000000 --- a/gnu/packages/patches/kwayland-skip-flaky-test.patch +++ /dev/null @@ -1,13 +0,0 @@ -This test fails in the Guix CI for unknown and difficult to debug reasons. - -diff --git a/autotests/client/test_plasma_window_model.cpp b/autotests/client/test_plasma_window_model.cpp ---- a/autotests/client/test_plasma_window_model.cpp -+++ b/autotests/client/test_plasma_window_model.cpp -@@ -545,6 +545,7 @@ void PlasmaWindowModelTest::testPid() - - void PlasmaWindowModelTest::testVirtualDesktops() - { -+ QSKIP("This test fails on the Guix CI (FIXME)"); - auto model = m_pw->createWindowModel(); - QVERIFY(model); - QSignalSpy rowInsertedSpy(model, &PlasmaWindowModel::rowsInserted); -- cgit v1.2.3 From 72e2bbebf5f93467568dae2d9000022204dc941e Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Sun, 6 Aug 2023 02:00:00 +0200 Subject: gnu: openssh: Update to 9.4p1. * gnu/packages/ssh.scm (openssh): Update to 9.4p1. [source]: Remove upstreamed Hurd patch. * gnu/packages/patches/openssh-hurd.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/patches/openssh-hurd.patch | 30 ------------------------------ gnu/packages/ssh.scm | 19 +++++++++---------- 3 files changed, 9 insertions(+), 41 deletions(-) delete mode 100644 gnu/packages/patches/openssh-hurd.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 1fc37ca6e8..f2ae61f108 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1684,7 +1684,6 @@ dist_patch_DATA = \ %D%/packages/patches/openjdk-15-xcursor-no-dynamic.patch \ %D%/packages/patches/openmpi-mtl-priorities.patch \ %D%/packages/patches/openmw-assume-nonconst-SIGSTKSZ.patch \ - %D%/packages/patches/openssh-hurd.patch \ %D%/packages/patches/openssh-trust-guix-store-directory.patch \ %D%/packages/patches/openresolv-restartcmd-guix.patch \ %D%/packages/patches/openrgb-unbundle-hueplusplus.patch \ diff --git a/gnu/packages/patches/openssh-hurd.patch b/gnu/packages/patches/openssh-hurd.patch deleted file mode 100644 index 1ad09a7ee6..0000000000 --- a/gnu/packages/patches/openssh-hurd.patch +++ /dev/null @@ -1,30 +0,0 @@ -Author: Jan (janneke) Nieuwenhuizen" -Not upstreamed. - -From 1ddae040d67e9a4ebcc3e1b95af1bff12c0f086b Mon Sep 17 00:00:00 2001 -From: "Jan (janneke) Nieuwenhuizen" -Date: Tue, 7 Apr 2020 17:41:05 +0200 -Subject: [PATCH] Build fix for the Hurd. - -* gss-serv.c (ssh_gssapi_acquire_cred): Use HOST_NAME_MAX instead of -MAXHOSTNAMELEN. ---- - gss-serv.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gss-serv.c b/gss-serv.c -index 1d47870e7..22081c6f1 100644 ---- a/gss-serv.c -+++ b/gss-serv.c -@@ -107,7 +107,7 @@ ssh_gssapi_acquire_cred(Gssctxt *ctx) - gss_create_empty_oid_set(&status, &oidset); - gss_add_oid_set_member(&status, ctx->oid, &oidset); - -- if (gethostname(lname, MAXHOSTNAMELEN)) { -+ if (gethostname(lname, HOST_NAME_MAX)) { - gss_release_oid_set(&status, &oidset); - return (-1); - } --- -2.26.0 - diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm index 81fbfd87a1..3a5d5ef59b 100644 --- a/gnu/packages/ssh.scm +++ b/gnu/packages/ssh.scm @@ -198,16 +198,15 @@ a server that supports the SSH-2 protocol.") (define-public openssh (package (name "openssh") - (version "9.3p2") - (source (origin - (method url-fetch) - (uri (string-append "mirror://openbsd/OpenSSH/portable/" - "openssh-" version ".tar.gz")) - (patches (search-patches "openssh-hurd.patch" - "openssh-trust-guix-store-directory.patch")) - (sha256 - (base32 - "1s3nqv57r3l7avsdkzwd575dvxra8h19xpqczl0z3cvcgwabw3i0")))) + (version "9.4p1") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://openbsd/OpenSSH/portable/" + "openssh-" version ".tar.gz")) + (patches (search-patches "openssh-trust-guix-store-directory.patch")) + (sha256 + (base32 "11bahrik5qi337m954g5479f63cxnxdch076ng7668fvi28gs21n")))) (build-system gnu-build-system) (arguments (list -- cgit v1.2.3 From 55f3b1791541814c83ee3558d1e45a34f1582d17 Mon Sep 17 00:00:00 2001 From: 宋文武 Date: Tue, 8 Aug 2023 21:54:54 +0800 Subject: gnu: grantlee: Fix build on i686-linux. This fixes a test (formatfiltertest07) failure on i686-linux. See also . * gnu/packages/patches/grantlee-fix-i586-precision.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/qt.scm (grantlee)[source]: Add patch. --- gnu/local.mk | 1 + .../patches/grantlee-fix-i586-precision.patch | 40 ++++++++++++++++++++++ gnu/packages/qt.scm | 3 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/grantlee-fix-i586-precision.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index bd5bd0f7aa..71f12aaa86 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1316,6 +1316,7 @@ dist_patch_DATA = \ %D%/packages/patches/gpm-glibc-2.26.patch \ %D%/packages/patches/gpodder-disable-updater.patch \ %D%/packages/patches/gpsbabel-fix-i686-test.patch \ + %D%/packages/patches/grantlee-fix-i586-precision.patch \ %D%/packages/patches/grep-timing-sensitive-test.patch \ %D%/packages/patches/grfcodec-gcc-compat.patch \ %D%/packages/patches/gromacs-tinyxml2.patch \ diff --git a/gnu/packages/patches/grantlee-fix-i586-precision.patch b/gnu/packages/patches/grantlee-fix-i586-precision.patch new file mode 100644 index 0000000000..f3d4384b5b --- /dev/null +++ b/gnu/packages/patches/grantlee-fix-i586-precision.patch @@ -0,0 +1,40 @@ +From 13094b78a790786030a468453c2b3ead4c7fd9cf Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Sun, 13 Nov 2022 14:01:21 +0100 +Subject: [PATCH] Fix formatting of some larger file sizes on 32bit x86 + +With the x87 FPU available, GCC uses long double precision for some variables. +Due to the function call passing a double, some comparisons break down. +That resulted in "1.00 YB" being printed as "1000.00 ZB" instead. + +Fixes #85 +--- + templates/lib/util.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/templates/lib/util.cpp b/templates/lib/util.cpp +index 504674a7..a0381c59 100644 +--- a/templates/lib/util.cpp ++++ b/templates/lib/util.cpp +@@ -23,6 +23,7 @@ + #include "metaenumvariable_p.h" + #include "metatype.h" + ++#include + #include + + QString Grantlee::unescapeStringLiteral(const QString &input) +@@ -212,7 +213,13 @@ std::pair Grantlee::calcFileSize(qreal size, int unitSystem, + bool found = false; + int count = 0; + const qreal baseVal = (_unitSystem == 10) ? 1000.0F : 1024.0F; ++#if FLT_EVAL_METHOD == 2 ++ // Avoid that this is treated as long double, as the increased ++ // precision breaks the comparison below. ++ volatile qreal current = 1.0F; ++#else + qreal current = 1.0F; ++#endif + int units = decimalUnits.size(); + while (!found && (count < units)) { + current *= baseVal; diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index ba3d4f1c00..8e54d3b696 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -320,7 +320,8 @@ applications on Wayland.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1ipnkdi8wgv519mvwa5zxlz20wipbypyfixjv2qdfd9vl1pznwvs")))) + (base32 "1ipnkdi8wgv519mvwa5zxlz20wipbypyfixjv2qdfd9vl1pznwvs")) + (patches (search-patches "grantlee-fix-i586-precision.patch")))) (native-inputs ;; Optional: lcov and cccc, both are for code coverage (list doxygen)) -- cgit v1.2.3 From ab008c4a90a36789ca73813784dd0bb534e8316b Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Wed, 17 May 2023 10:26:23 +0300 Subject: gnu: rust-nettle-sys-2: Update to 2.2.0. * gnu/packages/crates-io.scm (rust-nettle-sys-2): Update to 2.2.0. [source]: Remove patch. [cargo-inputs]: Add rust-cc-1, rust-libc-0.2, rust-tempfile-3, rust-vcpkg-0.2. Replace rust-bindgen-0.51 with 0.63. * gnu/packages/patches/rust-nettle-sys-disable-vendor.patch: Remove file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/crates-io.scm | 13 +++--- .../patches/rust-nettle-sys-disable-vendor.patch | 48 ---------------------- 3 files changed, 8 insertions(+), 54 deletions(-) delete mode 100644 gnu/packages/patches/rust-nettle-sys-disable-vendor.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index f2ae61f108..a6cfd602ae 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1917,7 +1917,6 @@ dist_patch_DATA = \ %D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch \ %D%/packages/patches/rust-ndarray-0.14-remove-blas-src.patch \ %D%/packages/patches/rust-nettle-disable-vendor.patch \ - %D%/packages/patches/rust-nettle-sys-disable-vendor.patch \ %D%/packages/patches/rust-openssl-sys-no-vendor.patch \ %D%/packages/patches/rust-webbrowser-remove-unsupported-os.patch \ %D%/packages/patches/rust-wl-clipboard-rs-newer-wl.patch \ diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm index 02ae95371c..4ae214a03a 100644 --- a/gnu/packages/crates-io.scm +++ b/gnu/packages/crates-io.scm @@ -38520,15 +38520,14 @@ cryptographic library.") (define-public rust-nettle-sys-2 (package (name "rust-nettle-sys") - (version "2.0.4") + (version "2.2.0") (source (origin (method url-fetch) (uri (crate-uri "nettle-sys" version)) (file-name (string-append name "-" version ".tar.gz")) (sha256 - (base32 "1yq1w6dlcmg89x529i7s20j29afdhgim7qnsa7978fszzwrr6qmq")) - (patches (search-patches "rust-nettle-sys-disable-vendor.patch")))) + (base32 "0wwa7pmxdz7yl9jwybml2kmrj3i87jcn0h0cdc5xl0lhgcs1rs5m")))) (build-system cargo-build-system) (native-inputs (list clang pkg-config)) @@ -38536,8 +38535,12 @@ cryptographic library.") (list nettle)) (arguments `(#:cargo-inputs - (("rust-bindgen" ,rust-bindgen-0.51) - ("rust-pkg-config" ,rust-pkg-config-0.3)))) + (("rust-bindgen" ,rust-bindgen-0.63) + ("rust-cc" ,rust-cc-1) + ("rust-libc" ,rust-libc-0.2) + ("rust-pkg-config" ,rust-pkg-config-0.3) + ("rust-tempfile" ,rust-tempfile-3) + ("rust-vcpkg" ,rust-vcpkg-0.2)))) (home-page "https://gitlab.com/sequoia-pgp/nettle-sys") (synopsis "Low-level Rust bindings for the Nettle cryptographic library") (description "This package provides low-level Rust bindings for the Nettle diff --git a/gnu/packages/patches/rust-nettle-sys-disable-vendor.patch b/gnu/packages/patches/rust-nettle-sys-disable-vendor.patch deleted file mode 100644 index ae5ef5ebe0..0000000000 --- a/gnu/packages/patches/rust-nettle-sys-disable-vendor.patch +++ /dev/null @@ -1,48 +0,0 @@ -Subject: nettle-sys: clear out "vendored" feature cruft from build.rs -From: Daniel Kahn Gillmor's avatarDaniel Kahn Gillmor - -https://salsa.debian.org/rust-team/debcargo-conf/-/commit/0c71150ad26bb66a8396dcdab055181af232ddc5 -https://sources.debian.org/src/rust-nettle-sys/2.0.4-3/debian/patches/disable-vendor.diff/ ---- a/Cargo.toml 2019-10-23 13:08:07.000000000 -0400 -+++ b/Cargo.toml 2019-10-23 14:08:46.644064014 -0400 -@@ -29,12 +29,9 @@ - version = "0.51.1" - default-features = false - --[build-dependencies.nettle-src] --version = "3.5.1-0" --optional = true -- - [build-dependencies.pkg-config] - version = "0.3" - - [features] - vendored = ["nettle-src"] -+nettle-src = [] -diff --git a/build.rs b/build.rs -index 44f7af3..ede4b2f 100644 ---- a/build.rs -+++ b/build.rs -@@ -1,7 +1,5 @@ - extern crate bindgen; - extern crate pkg_config; --#[cfg(feature = "vendored")] --extern crate nettle_src; - - use std::env; - use std::fs; -@@ -36,14 +34,6 @@ fn main() { - println!("cargo:rerun-if-env-changed=NETTLE_STATIC"); - println!("cargo:rerun-if-env-changed={}", NETTLE_PREGENERATED_BINDINGS); - -- #[cfg(feature = "vendored")] -- { -- let artifacts = nettle_src::Build::new().build(); -- println!("cargo:vendored=1"); -- env::set_var("PKG_CONFIG_PATH", -- artifacts.lib_dir().join("pkgconfig")); -- } -- - let nettle = pkg_config::probe_library("nettle hogweed").unwrap(); - - let mode = match env::var_os("NETTLE_STATIC") { -- cgit v1.2.3 From fe4c5790376867f03e2e3fadb586cae6eec1425c Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 22 May 2023 22:23:20 +0300 Subject: gnu: rust-ring-0.16: Add missing files. * gnu/packages/crates-io.scm (rust-ring-0.16)[source]: Add patch with missing files. Adjust snippet to delete a pre-generated file. [arguments]: Add a custom phase to rebuild the pre-generated-file. [native-inputs]: Add clang, python-2. * gnu/packages/patches/rust-ring-0.16-missing-files.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. --- gnu/local.mk | 1 + gnu/packages/crates-io.scm | 16 +- .../patches/rust-ring-0.16-missing-files.patch | 2293 ++++++++++++++++++++ 3 files changed, 2308 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/rust-ring-0.16-missing-files.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index a6cfd602ae..eeb3bb9c9e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1912,6 +1912,7 @@ dist_patch_DATA = \ %D%/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch \ %D%/packages/patches/rustc-1.54.0-src.patch \ %D%/packages/patches/rust-1.64-fix-riscv64-bootstrap.patch \ + %D%/packages/patches/rust-ring-0.16-missing-files.patch \ %D%/packages/patches/i3status-rust-enable-unstable-features.patch \ %D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch \ %D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch \ diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm index be93e931ba..8c2c86280a 100644 --- a/gnu/packages/crates-io.scm +++ b/gnu/packages/crates-io.scm @@ -52098,10 +52098,14 @@ Digital Signature Algorithm} (ECDSA).") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "1z682xp7v38ayq9g9nkbhhfpj6ygralmlx7wdmsfv8rnw99cylrh")) + (patches (search-patches "rust-ring-0.16-missing-files.patch")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "pregenerated") + ;; Regenerating the curve25519_tables requires python2 and clang-format. + ;; Luckily we've added the script back in the patch. + (delete-file "crypto/curve25519/curve25519_tables.h") ;; Pretend this isn't a relase tarball. (with-output-to-file ".git" (lambda _ @@ -52120,9 +52124,17 @@ Digital Signature Algorithm} (ECDSA).") ("rust-cc" ,rust-cc-1)) #:cargo-development-inputs (("rust-libc" ,rust-libc-0.2) - ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3)))) + ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'generate-curve25519-tables + (lambda _ + (with-directory-excursion "crypto/curve25519" + (with-output-to-file "curve25519_tables.h" + (lambda _ + (invoke "python" "make_curve25519_tables.py"))))))))) (native-inputs - (list perl)) + (list clang perl python-2)) (home-page "https://github.com/briansmith/ring") (synopsis "Safe, fast, small crypto using Rust") (description "This package provided safe, fast, small crypto using Rust.") diff --git a/gnu/packages/patches/rust-ring-0.16-missing-files.patch b/gnu/packages/patches/rust-ring-0.16-missing-files.patch new file mode 100644 index 0000000000..fa2f94a801 --- /dev/null +++ b/gnu/packages/patches/rust-ring-0.16-missing-files.patch @@ -0,0 +1,2293 @@ +These 4 files exist in the git repository for rust-ring, and are from +the same commit where 0.16.20 is taken from. They were not added to the +include list in Cargo.toml, so they were not added to the tarball. + +--- + crypto/curve25519/make_curve25519_tables.py | 222 +++++ + crypto/fipsmodule/aes/asm/vpaes-armv7.pl | 896 ++++++++++++++++++ + crypto/fipsmodule/aes/asm/vpaes-armv8.pl | 837 ++++++++++++++++ + .../fipsmodule/modes/asm/ghash-neon-armv8.pl | 294 ++++++ + 4 files changed, 2249 insertions(+) + create mode 100755 crypto/curve25519/make_curve25519_tables.py + create mode 100644 crypto/fipsmodule/aes/asm/vpaes-armv7.pl + create mode 100755 crypto/fipsmodule/aes/asm/vpaes-armv8.pl + create mode 100644 crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl + +diff --git a/crypto/curve25519/make_curve25519_tables.py b/crypto/curve25519/make_curve25519_tables.py +new file mode 100755 +index 0000000..50dee2a +--- /dev/null ++++ b/crypto/curve25519/make_curve25519_tables.py +@@ -0,0 +1,222 @@ ++#!/usr/bin/env python ++# coding=utf-8 ++# Copyright (c) 2020, Google Inc. ++# ++# Permission to use, copy, modify, and/or distribute this software for any ++# purpose with or without fee is hereby granted, provided that the above ++# copyright notice and this permission notice appear in all copies. ++# ++# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY ++# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION ++# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN ++# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ ++import StringIO ++import subprocess ++ ++# Base field Z_p ++p = 2**255 - 19 ++ ++def modp_inv(x): ++ return pow(x, p-2, p) ++ ++# Square root of -1 ++modp_sqrt_m1 = pow(2, (p-1) // 4, p) ++ ++# Compute corresponding x-coordinate, with low bit corresponding to ++# sign, or return None on failure ++def recover_x(y, sign): ++ if y >= p: ++ return None ++ x2 = (y*y-1) * modp_inv(d*y*y+1) ++ if x2 == 0: ++ if sign: ++ return None ++ else: ++ return 0 ++ ++ # Compute square root of x2 ++ x = pow(x2, (p+3) // 8, p) ++ if (x*x - x2) % p != 0: ++ x = x * modp_sqrt_m1 % p ++ if (x*x - x2) % p != 0: ++ return None ++ ++ if (x & 1) != sign: ++ x = p - x ++ return x ++ ++# Curve constant ++d = -121665 * modp_inv(121666) % p ++ ++# Base point ++g_y = 4 * modp_inv(5) % p ++g_x = recover_x(g_y, 0) ++ ++# Points are represented as affine tuples (x, y). ++ ++def point_add(P, Q): ++ x1, y1 = P ++ x2, y2 = Q ++ x3 = ((x1*y2 + y1*x2) * modp_inv(1 + d*x1*x2*y1*y2)) % p ++ y3 = ((y1*y2 + x1*x2) * modp_inv(1 - d*x1*x2*y1*y2)) % p ++ return (x3, y3) ++ ++# Computes Q = s * P ++def point_mul(s, P): ++ Q = (0, 1) # Neutral element ++ while s > 0: ++ if s & 1: ++ Q = point_add(Q, P) ++ P = point_add(P, P) ++ s >>= 1 ++ return Q ++ ++def to_bytes(x): ++ ret = bytearray(32) ++ for i in range(len(ret)): ++ ret[i] = x % 256 ++ x >>= 8 ++ assert x == 0 ++ return ret ++ ++def to_ge_precomp(P): ++ # typedef struct { ++ # fe_loose yplusx; ++ # fe_loose yminusx; ++ # fe_loose xy2d; ++ # } ge_precomp; ++ x, y = P ++ return ((y + x) % p, (y - x) % p, (x * y * 2 * d) % p) ++ ++def to_base_25_5(x): ++ limbs = (26, 25, 26, 25, 26, 25, 26, 25, 26, 25) ++ ret = [] ++ for l in limbs: ++ ret.append(x & ((1<>= l ++ assert x == 0 ++ return ret ++ ++def to_base_51(x): ++ ret = [] ++ for _ in range(5): ++ ret.append(x & ((1<<51) - 1)) ++ x >>= 51 ++ assert x == 0 ++ return ret ++ ++def to_literal(x): ++ ret = "{{\n#if defined(BORINGSSL_CURVE25519_64BIT)\n" ++ ret += ", ".join(map(str, to_base_51(x))) ++ ret += "\n#else\n" ++ ret += ", ".join(map(str, to_base_25_5(x))) ++ ret += "\n#endif\n}}" ++ return ret ++ ++def main(): ++ d2 = (2 * d) % p ++ ++ small_precomp = bytearray() ++ for i in range(1, 16): ++ s = (i&1) | ((i&2) << (64-1)) | ((i&4) << (128-2)) | ((i&8) << (192-3)) ++ P = point_mul(s, (g_x, g_y)) ++ small_precomp += to_bytes(P[0]) ++ small_precomp += to_bytes(P[1]) ++ ++ large_precomp = [] ++ for i in range(32): ++ large_precomp.append([]) ++ for j in range(8): ++ P = point_mul((j + 1) << (i * 8), (g_x, g_y)) ++ large_precomp[-1].append(to_ge_precomp(P)) ++ ++ bi_precomp = [] ++ for i in range(8): ++ P = point_mul(2*i + 1, (g_x, g_y)) ++ bi_precomp.append(to_ge_precomp(P)) ++ ++ ++ buf = StringIO.StringIO() ++ buf.write("""/* Copyright (c) 2020, Google Inc. ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY ++ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION ++ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN ++ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ ++ ++// This file is generated from ++// ./make_curve25519_tables.py > curve25519_tables.h ++ ++ ++static const fe d = """) ++ buf.write(to_literal(d)) ++ buf.write("""; ++ ++static const fe sqrtm1 = """) ++ buf.write(to_literal(modp_sqrt_m1)) ++ buf.write("""; ++ ++static const fe d2 = """) ++ buf.write(to_literal(d2)) ++ buf.write("""; ++ ++#if defined(OPENSSL_SMALL) ++ ++// This block of code replaces the standard base-point table with a much smaller ++// one. The standard table is 30,720 bytes while this one is just 960. ++// ++// This table contains 15 pairs of group elements, (x, y), where each field ++// element is serialised with |fe_tobytes|. If |i| is the index of the group ++// element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀ ++// is the most significant bit). The value of the group element is then: ++// (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator. ++static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {""") ++ for i, b in enumerate(small_precomp): ++ buf.write("0x%02x, " % b) ++ buf.write(""" ++}; ++ ++#else ++ ++// k25519Precomp[i][j] = (j+1)*256^i*B ++static const ge_precomp k25519Precomp[32][8] = { ++""") ++ for child in large_precomp: ++ buf.write("{\n") ++ for val in child: ++ buf.write("{\n") ++ for term in val: ++ buf.write(to_literal(term) + ",\n") ++ buf.write("},\n") ++ buf.write("},\n") ++ buf.write("""}; ++ ++#endif // OPENSSL_SMALL ++ ++// Bi[i] = (2*i+1)*B ++static const ge_precomp Bi[8] = { ++""") ++ for val in bi_precomp: ++ buf.write("{\n") ++ for term in val: ++ buf.write(to_literal(term) + ",\n") ++ buf.write("},\n") ++ buf.write("""}; ++""") ++ ++ proc = subprocess.Popen(["clang-format"], stdin=subprocess.PIPE) ++ proc.communicate(buf.getvalue()) ++ ++if __name__ == "__main__": ++ main() +diff --git a/crypto/fipsmodule/aes/asm/vpaes-armv7.pl b/crypto/fipsmodule/aes/asm/vpaes-armv7.pl +new file mode 100644 +index 0000000..d36a97a +--- /dev/null ++++ b/crypto/fipsmodule/aes/asm/vpaes-armv7.pl +@@ -0,0 +1,896 @@ ++#! /usr/bin/env perl ++# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. ++# ++# Licensed under the OpenSSL license (the "License"). You may not use ++# this file except in compliance with the License. You can obtain a copy ++# in the file LICENSE in the source distribution or at ++# https://www.openssl.org/source/license.html ++ ++ ++###################################################################### ++## Constant-time SSSE3 AES core implementation. ++## version 0.1 ++## ++## By Mike Hamburg (Stanford University), 2009 ++## Public domain. ++## ++## For details see http://shiftleft.org/papers/vector_aes/ and ++## http://crypto.stanford.edu/vpaes/. ++## ++###################################################################### ++# Adapted from the original x86_64 version and 's ARMv8 ++# version. ++# ++# armv7, aarch64, and x86_64 differ in several ways: ++# ++# * x86_64 SSSE3 instructions are two-address (destination operand is also a ++# source), while NEON is three-address (destination operand is separate from ++# two sources). ++# ++# * aarch64 has 32 SIMD registers available, while x86_64 and armv7 have 16. ++# ++# * x86_64 instructions can take memory references, while ARM is a load/store ++# architecture. This means we sometimes need a spare register. ++# ++# * aarch64 and x86_64 have 128-bit byte shuffle instructions (tbl and pshufb), ++# while armv7 only has a 64-bit byte shuffle (vtbl). ++# ++# This means this armv7 version must be a mix of both aarch64 and x86_64 ++# implementations. armv7 and aarch64 have analogous SIMD instructions, so we ++# base the instructions on aarch64. However, we cannot use aarch64's register ++# allocation. x86_64's register count matches, but x86_64 is two-address. ++# vpaes-armv8.pl already accounts for this in the comments, which use ++# three-address AVX instructions instead of the original SSSE3 ones. We base ++# register usage on these comments, which are preserved in this file. ++# ++# This means we do not use separate input and output registers as in aarch64 and ++# cannot pin as many constants in the preheat functions. However, the load/store ++# architecture means we must still deviate from x86_64 in places. ++# ++# Next, we account for the byte shuffle instructions. vtbl takes 64-bit source ++# and destination and 128-bit table. Fortunately, armv7 also allows addressing ++# upper and lower halves of each 128-bit register. The lower half of q{N} is ++# d{2*N}. The upper half is d{2*N+1}. Instead of the following non-existent ++# instruction, ++# ++# vtbl.8 q0, q1, q2 @ Index each of q2's 16 bytes into q1. Store in q0. ++# ++# we write: ++# ++# vtbl.8 d0, q1, d4 @ Index each of d4's 8 bytes into q1. Store in d0. ++# vtbl.8 d1, q1, d5 @ Index each of d5's 8 bytes into q1. Store in d1. ++# ++# For readability, we write d0 and d1 as q0#lo and q0#hi, respectively and ++# post-process before outputting. (This is adapted from ghash-armv4.pl.) Note, ++# however, that destination (q0) and table (q1) registers may no longer match. ++# We adjust the register usage from x86_64 to avoid this. (Unfortunately, the ++# two-address pshufb always matched these operands, so this is common.) ++# ++# This file also runs against the limit of ARMv7's ADR pseudo-instruction. ADR ++# expands to an ADD or SUB of the pc register to find an address. That immediate ++# must fit in ARM's encoding scheme: 8 bits of constant and 4 bits of rotation. ++# This means larger values must be more aligned. ++# ++# ARM additionally has two encodings, ARM and Thumb mode. Our assembly files may ++# use either encoding (do we actually need to support this?). In ARM mode, the ++# distances get large enough to require 16-byte alignment. Moving constants ++# closer to their use resolves most of this, but common constants in ++# _vpaes_consts are used by the whole file. Affected ADR instructions must be ++# placed at 8 mod 16 (the pc register is 8 ahead). Instructions with this ++# constraint have been commented. ++# ++# For details on ARM's immediate value encoding scheme, see ++# https://alisdair.mcdiarmid.org/arm-immediate-value-encoding/ ++# ++# Finally, a summary of armv7 and aarch64 SIMD syntax differences: ++# ++# * armv7 prefixes SIMD instructions with 'v', while aarch64 does not. ++# ++# * armv7 SIMD registers are named like q0 (and d0 for the half-width ones). ++# aarch64 names registers like v0, and denotes half-width operations in an ++# instruction suffix (see below). ++# ++# * aarch64 embeds size and lane information in register suffixes. v0.16b is ++# 16 bytes, v0.8h is eight u16s, v0.4s is four u32s, and v0.2d is two u64s. ++# armv7 embeds the total size in the register name (see above) and the size of ++# each element in an instruction suffix, which may look like vmov.i8, ++# vshr.u8, or vtbl.8, depending on instruction. ++ ++use strict; ++ ++my $flavour = shift; ++my $output; ++while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} ++ ++$0 =~ m/(.*[\/\\])[^\/\\]+$/; ++my $dir=$1; ++my $xlate; ++( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or ++( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or ++die "can't locate arm-xlate.pl"; ++ ++open OUT,"| \"$^X\" $xlate $flavour $output"; ++*STDOUT=*OUT; ++ ++my $code = ""; ++ ++$code.=<<___; ++.syntax unified ++ ++.arch armv7-a ++.fpu neon ++ ++#if defined(__thumb2__) ++.thumb ++#else ++.code 32 ++#endif ++ ++.text ++ ++.type _vpaes_consts,%object ++.align 7 @ totally strategic alignment ++_vpaes_consts: ++.Lk_mc_forward: @ mc_forward ++ .quad 0x0407060500030201, 0x0C0F0E0D080B0A09 ++ .quad 0x080B0A0904070605, 0x000302010C0F0E0D ++ .quad 0x0C0F0E0D080B0A09, 0x0407060500030201 ++ .quad 0x000302010C0F0E0D, 0x080B0A0904070605 ++.Lk_mc_backward:@ mc_backward ++ .quad 0x0605040702010003, 0x0E0D0C0F0A09080B ++ .quad 0x020100030E0D0C0F, 0x0A09080B06050407 ++ .quad 0x0E0D0C0F0A09080B, 0x0605040702010003 ++ .quad 0x0A09080B06050407, 0x020100030E0D0C0F ++.Lk_sr: @ sr ++ .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 ++ .quad 0x030E09040F0A0500, 0x0B06010C07020D08 ++ .quad 0x0F060D040B020900, 0x070E050C030A0108 ++ .quad 0x0B0E0104070A0D00, 0x0306090C0F020508 ++ ++@ ++@ "Hot" constants ++@ ++.Lk_inv: @ inv, inva ++ .quad 0x0E05060F0D080180, 0x040703090A0B0C02 ++ .quad 0x01040A060F0B0780, 0x030D0E0C02050809 ++.Lk_ipt: @ input transform (lo, hi) ++ .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 ++ .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 ++.Lk_sbo: @ sbou, sbot ++ .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 ++ .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA ++.Lk_sb1: @ sb1u, sb1t ++ .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF ++ .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 ++.Lk_sb2: @ sb2u, sb2t ++ .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A ++ .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD ++ ++.asciz "Vector Permutation AES for ARMv7 NEON, Mike Hamburg (Stanford University)" ++.size _vpaes_consts,.-_vpaes_consts ++.align 6 ++___ ++ ++{ ++my ($inp,$out,$key) = map("r$_", (0..2)); ++ ++my ($invlo,$invhi) = map("q$_", (10..11)); ++my ($sb1u,$sb1t,$sb2u,$sb2t) = map("q$_", (12..15)); ++ ++$code.=<<___; ++@@ ++@@ _aes_preheat ++@@ ++@@ Fills q9-q15 as specified below. ++@@ ++.type _vpaes_preheat,%function ++.align 4 ++_vpaes_preheat: ++ adr r10, .Lk_inv ++ vmov.i8 q9, #0x0f @ .Lk_s0F ++ vld1.64 {q10,q11}, [r10]! @ .Lk_inv ++ add r10, r10, #64 @ Skip .Lk_ipt, .Lk_sbo ++ vld1.64 {q12,q13}, [r10]! @ .Lk_sb1 ++ vld1.64 {q14,q15}, [r10] @ .Lk_sb2 ++ bx lr ++ ++@@ ++@@ _aes_encrypt_core ++@@ ++@@ AES-encrypt q0. ++@@ ++@@ Inputs: ++@@ q0 = input ++@@ q9-q15 as in _vpaes_preheat ++@@ [$key] = scheduled keys ++@@ ++@@ Output in q0 ++@@ Clobbers q1-q5, r8-r11 ++@@ Preserves q6-q8 so you get some local vectors ++@@ ++@@ ++.type _vpaes_encrypt_core,%function ++.align 4 ++_vpaes_encrypt_core: ++ mov r9, $key ++ ldr r8, [$key,#240] @ pull rounds ++ adr r11, .Lk_ipt ++ @ vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo ++ @ vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi ++ vld1.64 {q2, q3}, [r11] ++ adr r11, .Lk_mc_forward+16 ++ vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5 # round0 key ++ vand q1, q0, q9 @ vpand %xmm9, %xmm0, %xmm1 ++ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 ++ vtbl.8 q1#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm1 ++ vtbl.8 q1#hi, {q2}, q1#hi ++ vtbl.8 q2#lo, {q3}, q0#lo @ vpshufb %xmm0, %xmm3, %xmm2 ++ vtbl.8 q2#hi, {q3}, q0#hi ++ veor q0, q1, q5 @ vpxor %xmm5, %xmm1, %xmm0 ++ veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0 ++ ++ @ .Lenc_entry ends with a bnz instruction which is normally paired with ++ @ subs in .Lenc_loop. ++ tst r8, r8 ++ b .Lenc_entry ++ ++.align 4 ++.Lenc_loop: ++ @ middle of middle round ++ add r10, r11, #0x40 ++ vtbl.8 q4#lo, {$sb1t}, q2#lo @ vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u ++ vtbl.8 q4#hi, {$sb1t}, q2#hi ++ vld1.64 {q1}, [r11]! @ vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] ++ vtbl.8 q0#lo, {$sb1u}, q3#lo @ vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t ++ vtbl.8 q0#hi, {$sb1u}, q3#hi ++ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k ++ vtbl.8 q5#lo, {$sb2t}, q2#lo @ vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u ++ vtbl.8 q5#hi, {$sb2t}, q2#hi ++ veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A ++ vtbl.8 q2#lo, {$sb2u}, q3#lo @ vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t ++ vtbl.8 q2#hi, {$sb2u}, q3#hi ++ vld1.64 {q4}, [r10] @ vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] ++ vtbl.8 q3#lo, {q0}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm3 # 0 = B ++ vtbl.8 q3#hi, {q0}, q1#hi ++ veor q2, q2, q5 @ vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A ++ @ Write to q5 instead of q0, so the table and destination registers do ++ @ not overlap. ++ vtbl.8 q5#lo, {q0}, q4#lo @ vpshufb %xmm4, %xmm0, %xmm0 # 3 = D ++ vtbl.8 q5#hi, {q0}, q4#hi ++ veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B ++ vtbl.8 q4#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C ++ vtbl.8 q4#hi, {q3}, q1#hi ++ @ Here we restore the original q0/q5 usage. ++ veor q0, q5, q3 @ vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D ++ and r11, r11, #~(1<<6) @ and \$0x30, %r11 # ... mod 4 ++ veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D ++ subs r8, r8, #1 @ nr-- ++ ++.Lenc_entry: ++ @ top of round ++ vand q1, q0, q9 @ vpand %xmm0, %xmm9, %xmm1 # 0 = k ++ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i ++ vtbl.8 q5#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k ++ vtbl.8 q5#hi, {$invhi}, q1#hi ++ veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j ++ vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i ++ vtbl.8 q3#hi, {$invlo}, q0#hi ++ vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j ++ vtbl.8 q4#hi, {$invlo}, q1#hi ++ veor q3, q3, q5 @ vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k ++ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k ++ vtbl.8 q2#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak ++ vtbl.8 q2#hi, {$invlo}, q3#hi ++ vtbl.8 q3#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak ++ vtbl.8 q3#hi, {$invlo}, q4#hi ++ veor q2, q2, q1 @ vpxor %xmm1, %xmm2, %xmm2 # 2 = io ++ veor q3, q3, q0 @ vpxor %xmm0, %xmm3, %xmm3 # 3 = jo ++ vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5 ++ bne .Lenc_loop ++ ++ @ middle of last round ++ add r10, r11, #0x80 ++ ++ adr r11, .Lk_sbo ++ @ Read to q1 instead of q4, so the vtbl.8 instruction below does not ++ @ overlap table and destination registers. ++ vld1.64 {q1}, [r11]! @ vmovdqa -0x60(%r10), %xmm4 # 3 : sbou ++ vld1.64 {q0}, [r11] @ vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 ++ vtbl.8 q4#lo, {q1}, q2#lo @ vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou ++ vtbl.8 q4#hi, {q1}, q2#hi ++ vld1.64 {q1}, [r10] @ vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] ++ @ Write to q2 instead of q0 below, to avoid overlapping table and ++ @ destination registers. ++ vtbl.8 q2#lo, {q0}, q3#lo @ vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t ++ vtbl.8 q2#hi, {q0}, q3#hi ++ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k ++ veor q2, q2, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A ++ @ Here we restore the original q0/q2 usage. ++ vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0 ++ vtbl.8 q0#hi, {q2}, q1#hi ++ bx lr ++.size _vpaes_encrypt_core,.-_vpaes_encrypt_core ++ ++.globl GFp_vpaes_encrypt ++.type GFp_vpaes_encrypt,%function ++.align 4 ++GFp_vpaes_encrypt: ++ @ _vpaes_encrypt_core uses r8-r11. Round up to r7-r11 to maintain stack ++ @ alignment. ++ stmdb sp!, {r7-r11,lr} ++ @ _vpaes_encrypt_core uses q4-q5 (d8-d11), which are callee-saved. ++ vstmdb sp!, {d8-d11} ++ ++ vld1.64 {q0}, [$inp] ++ bl _vpaes_preheat ++ bl _vpaes_encrypt_core ++ vst1.64 {q0}, [$out] ++ ++ vldmia sp!, {d8-d11} ++ ldmia sp!, {r7-r11, pc} @ return ++.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt ++___ ++} ++{ ++my ($inp,$bits,$out,$dir)=("r0","r1","r2","r3"); ++my ($rcon,$s0F,$invlo,$invhi,$s63) = map("q$_",(8..12)); ++ ++$code.=<<___; ++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++@@ @@ ++@@ AES key schedule @@ ++@@ @@ ++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ++@ This function diverges from both x86_64 and armv7 in which constants are ++@ pinned. x86_64 has a common preheat function for all operations. aarch64 ++@ separates them because it has enough registers to pin nearly all constants. ++@ armv7 does not have enough registers, but needing explicit loads and stores ++@ also complicates using x86_64's register allocation directly. ++@ ++@ We pin some constants for convenience and leave q14 and q15 free to load ++@ others on demand. ++ ++@ ++@ Key schedule constants ++@ ++.type _vpaes_key_consts,%object ++.align 4 ++_vpaes_key_consts: ++.Lk_rcon: @ rcon ++ .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 ++ ++.Lk_opt: @ output transform ++ .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 ++ .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 ++.Lk_deskew: @ deskew tables: inverts the sbox's "skew" ++ .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A ++ .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 ++.size _vpaes_key_consts,.-_vpaes_key_consts ++ ++.type _vpaes_key_preheat,%function ++.align 4 ++_vpaes_key_preheat: ++ adr r11, .Lk_rcon ++ vmov.i8 $s63, #0x5b @ .Lk_s63 ++ adr r10, .Lk_inv @ Must be aligned to 8 mod 16. ++ vmov.i8 $s0F, #0x0f @ .Lk_s0F ++ vld1.64 {$invlo,$invhi}, [r10] @ .Lk_inv ++ vld1.64 {$rcon}, [r11] @ .Lk_rcon ++ bx lr ++.size _vpaes_key_preheat,.-_vpaes_key_preheat ++ ++.type _vpaes_schedule_core,%function ++.align 4 ++_vpaes_schedule_core: ++ @ We only need to save lr, but ARM requires an 8-byte stack alignment, ++ @ so save an extra register. ++ stmdb sp!, {r3,lr} ++ ++ bl _vpaes_key_preheat @ load the tables ++ ++ adr r11, .Lk_ipt @ Must be aligned to 8 mod 16. ++ vld1.64 {q0}, [$inp]! @ vmovdqu (%rdi), %xmm0 # load key (unaligned) ++ ++ @ input transform ++ @ Use q4 here rather than q3 so .Lschedule_am_decrypting does not ++ @ overlap table and destination. ++ vmov q4, q0 @ vmovdqa %xmm0, %xmm3 ++ bl _vpaes_schedule_transform ++ adr r10, .Lk_sr @ Must be aligned to 8 mod 16. ++ vmov q7, q0 @ vmovdqa %xmm0, %xmm7 ++ ++ add r8, r8, r10 ++ ++ @ encrypting, output zeroth round key after transform ++ vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx) ++ ++ @ *ring*: Decryption removed. ++ ++.Lschedule_go: ++ cmp $bits, #192 @ cmp \$192, %esi ++ bhi .Lschedule_256 ++ @ 128: fall though ++ ++@@ ++@@ .schedule_128 ++@@ ++@@ 128-bit specific part of key schedule. ++@@ ++@@ This schedule is really simple, because all its parts ++@@ are accomplished by the subroutines. ++@@ ++.Lschedule_128: ++ mov $inp, #10 @ mov \$10, %esi ++ ++.Loop_schedule_128: ++ bl _vpaes_schedule_round ++ subs $inp, $inp, #1 @ dec %esi ++ beq .Lschedule_mangle_last ++ bl _vpaes_schedule_mangle @ write output ++ b .Loop_schedule_128 ++ ++@@ ++@@ .aes_schedule_256 ++@@ ++@@ 256-bit specific part of key schedule. ++@@ ++@@ The structure here is very similar to the 128-bit ++@@ schedule, but with an additional "low side" in ++@@ q6. The low side's rounds are the same as the ++@@ high side's, except no rcon and no rotation. ++@@ ++.align 4 ++.Lschedule_256: ++ vld1.64 {q0}, [$inp] @ vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) ++ bl _vpaes_schedule_transform @ input transform ++ mov $inp, #7 @ mov \$7, %esi ++ ++.Loop_schedule_256: ++ bl _vpaes_schedule_mangle @ output low result ++ vmov q6, q0 @ vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6 ++ ++ @ high round ++ bl _vpaes_schedule_round ++ subs $inp, $inp, #1 @ dec %esi ++ beq .Lschedule_mangle_last ++ bl _vpaes_schedule_mangle ++ ++ @ low round. swap xmm7 and xmm6 ++ vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0 ++ vmov.i8 q4, #0 ++ vmov q5, q7 @ vmovdqa %xmm7, %xmm5 ++ vmov q7, q6 @ vmovdqa %xmm6, %xmm7 ++ bl _vpaes_schedule_low_round ++ vmov q7, q5 @ vmovdqa %xmm5, %xmm7 ++ ++ b .Loop_schedule_256 ++ ++@@ ++@@ .aes_schedule_mangle_last ++@@ ++@@ Mangler for last round of key schedule ++@@ Mangles q0 ++@@ when encrypting, outputs out(q0) ^ 63 ++@@ when decrypting, outputs unskew(q0) ++@@ ++@@ Always called right before return... jumps to cleanup and exits ++@@ ++.align 4 ++.Lschedule_mangle_last: ++ @ schedule last round key from xmm0 ++ adr r11, .Lk_deskew @ lea .Lk_deskew(%rip),%r11 # prepare to deskew ++ ++ @ encrypting ++ vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10),%xmm1 ++ adr r11, .Lk_opt @ lea .Lk_opt(%rip), %r11 # prepare to output transform ++ add $out, $out, #32 @ add \$32, %rdx ++ vmov q2, q0 ++ vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0 # output permute ++ vtbl.8 q0#hi, {q2}, q1#hi ++ ++.Lschedule_mangle_last_dec: ++ sub $out, $out, #16 @ add \$-16, %rdx ++ veor q0, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm0 ++ bl _vpaes_schedule_transform @ output transform ++ vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx) # save last key ++ ++ @ cleanup ++ veor q0, q0, q0 @ vpxor %xmm0, %xmm0, %xmm0 ++ veor q1, q1, q1 @ vpxor %xmm1, %xmm1, %xmm1 ++ veor q2, q2, q2 @ vpxor %xmm2, %xmm2, %xmm2 ++ veor q3, q3, q3 @ vpxor %xmm3, %xmm3, %xmm3 ++ veor q4, q4, q4 @ vpxor %xmm4, %xmm4, %xmm4 ++ veor q5, q5, q5 @ vpxor %xmm5, %xmm5, %xmm5 ++ veor q6, q6, q6 @ vpxor %xmm6, %xmm6, %xmm6 ++ veor q7, q7, q7 @ vpxor %xmm7, %xmm7, %xmm7 ++ ldmia sp!, {r3,pc} @ return ++.size _vpaes_schedule_core,.-_vpaes_schedule_core ++ ++@@ ++@@ .aes_schedule_round ++@@ ++@@ Runs one main round of the key schedule on q0, q7 ++@@ ++@@ Specifically, runs subbytes on the high dword of q0 ++@@ then rotates it by one byte and xors into the low dword of ++@@ q7. ++@@ ++@@ Adds rcon from low byte of q8, then rotates q8 for ++@@ next rcon. ++@@ ++@@ Smears the dwords of q7 by xoring the low into the ++@@ second low, result into third, result into highest. ++@@ ++@@ Returns results in q7 = q0. ++@@ Clobbers q1-q4, r11. ++@@ ++.type _vpaes_schedule_round,%function ++.align 4 ++_vpaes_schedule_round: ++ @ extract rcon from xmm8 ++ vmov.i8 q4, #0 @ vpxor %xmm4, %xmm4, %xmm4 ++ vext.8 q1, $rcon, q4, #15 @ vpalignr \$15, %xmm8, %xmm4, %xmm1 ++ vext.8 $rcon, $rcon, $rcon, #15 @ vpalignr \$15, %xmm8, %xmm8, %xmm8 ++ veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7 ++ ++ @ rotate ++ vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0 ++ vext.8 q0, q0, q0, #1 @ vpalignr \$1, %xmm0, %xmm0, %xmm0 ++ ++ @ fall through... ++ ++ @ low round: same as high round, but no rotation and no rcon. ++_vpaes_schedule_low_round: ++ @ The x86_64 version pins .Lk_sb1 in %xmm13 and .Lk_sb1+16 in %xmm12. ++ @ We pin other values in _vpaes_key_preheat, so load them now. ++ adr r11, .Lk_sb1 ++ vld1.64 {q14,q15}, [r11] ++ ++ @ smear xmm7 ++ vext.8 q1, q4, q7, #12 @ vpslldq \$4, %xmm7, %xmm1 ++ veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7 ++ vext.8 q4, q4, q7, #8 @ vpslldq \$8, %xmm7, %xmm4 ++ ++ @ subbytes ++ vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1 # 0 = k ++ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i ++ veor q7, q7, q4 @ vpxor %xmm4, %xmm7, %xmm7 ++ vtbl.8 q2#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k ++ vtbl.8 q2#hi, {$invhi}, q1#hi ++ veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j ++ vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i ++ vtbl.8 q3#hi, {$invlo}, q0#hi ++ veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k ++ vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j ++ vtbl.8 q4#hi, {$invlo}, q1#hi ++ veor q7, q7, $s63 @ vpxor .Lk_s63(%rip), %xmm7, %xmm7 ++ vtbl.8 q3#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak ++ vtbl.8 q3#hi, {$invlo}, q3#hi ++ veor q4, q4, q2 @ vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k ++ vtbl.8 q2#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak ++ vtbl.8 q2#hi, {$invlo}, q4#hi ++ veor q3, q3, q1 @ vpxor %xmm1, %xmm3, %xmm3 # 2 = io ++ veor q2, q2, q0 @ vpxor %xmm0, %xmm2, %xmm2 # 3 = jo ++ vtbl.8 q4#lo, {q15}, q3#lo @ vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou ++ vtbl.8 q4#hi, {q15}, q3#hi ++ vtbl.8 q1#lo, {q14}, q2#lo @ vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t ++ vtbl.8 q1#hi, {q14}, q2#hi ++ veor q1, q1, q4 @ vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output ++ ++ @ add in smeared stuff ++ veor q0, q1, q7 @ vpxor %xmm7, %xmm1, %xmm0 ++ veor q7, q1, q7 @ vmovdqa %xmm0, %xmm7 ++ bx lr ++.size _vpaes_schedule_round,.-_vpaes_schedule_round ++ ++@@ ++@@ .aes_schedule_transform ++@@ ++@@ Linear-transform q0 according to tables at [r11] ++@@ ++@@ Requires that q9 = 0x0F0F... as in preheat ++@@ Output in q0 ++@@ Clobbers q1, q2, q14, q15 ++@@ ++.type _vpaes_schedule_transform,%function ++.align 4 ++_vpaes_schedule_transform: ++ vld1.64 {q14,q15}, [r11] @ vmovdqa (%r11), %xmm2 # lo ++ @ vmovdqa 16(%r11), %xmm1 # hi ++ vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1 ++ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 ++ vtbl.8 q2#lo, {q14}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm2 ++ vtbl.8 q2#hi, {q14}, q1#hi ++ vtbl.8 q0#lo, {q15}, q0#lo @ vpshufb %xmm0, %xmm1, %xmm0 ++ vtbl.8 q0#hi, {q15}, q0#hi ++ veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0 ++ bx lr ++.size _vpaes_schedule_transform,.-_vpaes_schedule_transform ++ ++@@ ++@@ .aes_schedule_mangle ++@@ ++@@ Mangles q0 from (basis-transformed) standard version ++@@ to our version. ++@@ ++@@ On encrypt, ++@@ xor with 0x63 ++@@ multiply by circulant 0,1,1,1 ++@@ apply shiftrows transform ++@@ ++@@ On decrypt, ++@@ xor with 0x63 ++@@ multiply by "inverse mixcolumns" circulant E,B,D,9 ++@@ deskew ++@@ apply shiftrows transform ++@@ ++@@ ++@@ Writes out to [r2], and increments or decrements it ++@@ Keeps track of round number mod 4 in r8 ++@@ Preserves q0 ++@@ Clobbers q1-q5 ++@@ ++.type _vpaes_schedule_mangle,%function ++.align 4 ++_vpaes_schedule_mangle: ++ tst $dir, $dir ++ vmov q4, q0 @ vmovdqa %xmm0, %xmm4 # save xmm0 for later ++ adr r11, .Lk_mc_forward @ Must be aligned to 8 mod 16. ++ vld1.64 {q5}, [r11] @ vmovdqa .Lk_mc_forward(%rip),%xmm5 ++ ++ @ encrypting ++ @ Write to q2 so we do not overlap table and destination below. ++ veor q2, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm4 ++ add $out, $out, #16 @ add \$16, %rdx ++ vtbl.8 q4#lo, {q2}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm4 ++ vtbl.8 q4#hi, {q2}, q5#hi ++ vtbl.8 q1#lo, {q4}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm1 ++ vtbl.8 q1#hi, {q4}, q5#hi ++ vtbl.8 q3#lo, {q1}, q5#lo @ vpshufb %xmm5, %xmm1, %xmm3 ++ vtbl.8 q3#hi, {q1}, q5#hi ++ veor q4, q4, q1 @ vpxor %xmm1, %xmm4, %xmm4 ++ vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10), %xmm1 ++ veor q3, q3, q4 @ vpxor %xmm4, %xmm3, %xmm3 ++ ++.Lschedule_mangle_both: ++ @ Write to q2 so table and destination do not overlap. ++ vtbl.8 q2#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm3 ++ vtbl.8 q2#hi, {q3}, q1#hi ++ add r8, r8, #64-16 @ add \$-16, %r8 ++ and r8, r8, #~(1<<6) @ and \$0x30, %r8 ++ vst1.64 {q2}, [$out] @ vmovdqu %xmm3, (%rdx) ++ bx lr ++.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle ++ ++.globl GFp_vpaes_set_encrypt_key ++.type GFp_vpaes_set_encrypt_key,%function ++.align 4 ++GFp_vpaes_set_encrypt_key: ++ stmdb sp!, {r7-r11, lr} ++ vstmdb sp!, {d8-d15} ++ ++ lsr r9, $bits, #5 @ shr \$5,%eax ++ add r9, r9, #5 @ \$5,%eax ++ str r9, [$out,#240] @ mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; ++ ++ mov $dir, #0 @ mov \$0,%ecx ++ mov r8, #0x30 @ mov \$0x30,%r8d ++ bl _vpaes_schedule_core ++ eor r0, r0, r0 ++ ++ vldmia sp!, {d8-d15} ++ ldmia sp!, {r7-r11, pc} @ return ++.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key ++___ ++} ++ ++{ ++my ($out, $inp) = map("r$_", (0..1)); ++my ($s0F, $s63, $s63_raw, $mc_forward) = map("q$_", (9..12)); ++ ++$code .= <<___; ++ ++@ Additional constants for converting to bsaes. ++.type _vpaes_convert_consts,%object ++.align 4 ++_vpaes_convert_consts: ++@ .Lk_opt_then_skew applies skew(opt(x)) XOR 0x63, where skew is the linear ++@ transform in the AES S-box. 0x63 is incorporated into the low half of the ++@ table. This was computed with the following script: ++@ ++@ def u64s_to_u128(x, y): ++@ return x | (y << 64) ++@ def u128_to_u64s(w): ++@ return w & ((1<<64)-1), w >> 64 ++@ def get_byte(w, i): ++@ return (w >> (i*8)) & 0xff ++@ def apply_table(table, b): ++@ lo = b & 0xf ++@ hi = b >> 4 ++@ return get_byte(table[0], lo) ^ get_byte(table[1], hi) ++@ def opt(b): ++@ table = [ ++@ u64s_to_u128(0xFF9F4929D6B66000, 0xF7974121DEBE6808), ++@ u64s_to_u128(0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0), ++@ ] ++@ return apply_table(table, b) ++@ def rot_byte(b, n): ++@ return 0xff & ((b << n) | (b >> (8-n))) ++@ def skew(x): ++@ return (x ^ rot_byte(x, 1) ^ rot_byte(x, 2) ^ rot_byte(x, 3) ^ ++@ rot_byte(x, 4)) ++@ table = [0, 0] ++@ for i in range(16): ++@ table[0] |= (skew(opt(i)) ^ 0x63) << (i*8) ++@ table[1] |= skew(opt(i<<4)) << (i*8) ++@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[0])) ++@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[1])) ++.Lk_opt_then_skew: ++ .quad 0x9cb8436798bc4763, 0x6440bb9f6044bf9b ++ .quad 0x1f30062936192f00, 0xb49bad829db284ab ++ ++@ void GFp_vpaes_encrypt_key_to_bsaes(AES_KEY *bsaes, const AES_KEY *vpaes); ++.globl GFp_vpaes_encrypt_key_to_bsaes ++.type GFp_vpaes_encrypt_key_to_bsaes,%function ++.align 4 ++GFp_vpaes_encrypt_key_to_bsaes: ++ stmdb sp!, {r11, lr} ++ ++ @ See _vpaes_schedule_core for the key schedule logic. In particular, ++ @ _vpaes_schedule_transform(.Lk_ipt) (section 2.2 of the paper), ++ @ _vpaes_schedule_mangle (section 4.3), and .Lschedule_mangle_last ++ @ contain the transformations not in the bsaes representation. This ++ @ function inverts those transforms. ++ @ ++ @ Note also that bsaes-armv7.pl expects aes-armv4.pl's key ++ @ representation, which does not match the other aes_nohw_* ++ @ implementations. The ARM aes_nohw_* stores each 32-bit word ++ @ byteswapped, as a convenience for (unsupported) big-endian ARM, at the ++ @ cost of extra REV and VREV32 operations in little-endian ARM. ++ ++ vmov.i8 $s0F, #0x0f @ Required by _vpaes_schedule_transform ++ adr r2, .Lk_mc_forward @ Must be aligned to 8 mod 16. ++ add r3, r2, 0x90 @ .Lk_sr+0x10-.Lk_mc_forward = 0x90 (Apple's toolchain doesn't support the expression) ++ ++ vld1.64 {$mc_forward}, [r2] ++ vmov.i8 $s63, #0x5b @ .Lk_s63 from vpaes-x86_64 ++ adr r11, .Lk_opt @ Must be aligned to 8 mod 16. ++ vmov.i8 $s63_raw, #0x63 @ .LK_s63 without .Lk_ipt applied ++ ++ @ vpaes stores one fewer round count than bsaes, but the number of keys ++ @ is the same. ++ ldr r2, [$inp,#240] ++ add r2, r2, #1 ++ str r2, [$out,#240] ++ ++ @ The first key is transformed with _vpaes_schedule_transform(.Lk_ipt). ++ @ Invert this with .Lk_opt. ++ vld1.64 {q0}, [$inp]! ++ bl _vpaes_schedule_transform ++ vrev32.8 q0, q0 ++ vst1.64 {q0}, [$out]! ++ ++ @ The middle keys have _vpaes_schedule_transform(.Lk_ipt) applied, ++ @ followed by _vpaes_schedule_mangle. _vpaes_schedule_mangle XORs 0x63, ++ @ multiplies by the circulant 0,1,1,1, then applies ShiftRows. ++.Loop_enc_key_to_bsaes: ++ vld1.64 {q0}, [$inp]! ++ ++ @ Invert the ShiftRows step (see .Lschedule_mangle_both). Note we cycle ++ @ r3 in the opposite direction and start at .Lk_sr+0x10 instead of 0x30. ++ @ We use r3 rather than r8 to avoid a callee-saved register. ++ vld1.64 {q1}, [r3] ++ vtbl.8 q2#lo, {q0}, q1#lo ++ vtbl.8 q2#hi, {q0}, q1#hi ++ add r3, r3, #16 ++ and r3, r3, #~(1<<6) ++ vmov q0, q2 ++ ++ @ Handle the last key differently. ++ subs r2, r2, #1 ++ beq .Loop_enc_key_to_bsaes_last ++ ++ @ Multiply by the circulant. This is its own inverse. ++ vtbl.8 q1#lo, {q0}, $mc_forward#lo ++ vtbl.8 q1#hi, {q0}, $mc_forward#hi ++ vmov q0, q1 ++ vtbl.8 q2#lo, {q1}, $mc_forward#lo ++ vtbl.8 q2#hi, {q1}, $mc_forward#hi ++ veor q0, q0, q2 ++ vtbl.8 q1#lo, {q2}, $mc_forward#lo ++ vtbl.8 q1#hi, {q2}, $mc_forward#hi ++ veor q0, q0, q1 ++ ++ @ XOR and finish. ++ veor q0, q0, $s63 ++ bl _vpaes_schedule_transform ++ vrev32.8 q0, q0 ++ vst1.64 {q0}, [$out]! ++ b .Loop_enc_key_to_bsaes ++ ++.Loop_enc_key_to_bsaes_last: ++ @ The final key does not have a basis transform (note ++ @ .Lschedule_mangle_last inverts the original transform). It only XORs ++ @ 0x63 and applies ShiftRows. The latter was already inverted in the ++ @ loop. Note that, because we act on the original representation, we use ++ @ $s63_raw, not $s63. ++ veor q0, q0, $s63_raw ++ vrev32.8 q0, q0 ++ vst1.64 {q0}, [$out] ++ ++ @ Wipe registers which contained key material. ++ veor q0, q0, q0 ++ veor q1, q1, q1 ++ veor q2, q2, q2 ++ ++ ldmia sp!, {r11, pc} @ return ++.size GFp_vpaes_encrypt_key_to_bsaes,.-GFp_vpaes_encrypt_key_to_bsaes ++___ ++} ++ ++{ ++# Register-passed parameters. ++my ($inp, $out, $len, $key) = map("r$_", 0..3); ++# Temporaries. _vpaes_encrypt_core already uses r8..r11, so overlap $ivec and ++# $tmp. $ctr is r7 because it must be preserved across calls. ++my ($ctr, $ivec, $tmp) = map("r$_", 7..9); ++ ++# void vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len, ++# const AES_KEY *key, const uint8_t ivec[16]); ++$code .= <<___; ++.globl GFp_vpaes_ctr32_encrypt_blocks ++.type GFp_vpaes_ctr32_encrypt_blocks,%function ++.align 4 ++GFp_vpaes_ctr32_encrypt_blocks: ++ mov ip, sp ++ stmdb sp!, {r7-r11, lr} ++ @ This function uses q4-q7 (d8-d15), which are callee-saved. ++ vstmdb sp!, {d8-d15} ++ ++ cmp $len, #0 ++ @ $ivec is passed on the stack. ++ ldr $ivec, [ip] ++ beq .Lctr32_done ++ ++ @ _vpaes_encrypt_core expects the key in r2, so swap $len and $key. ++ mov $tmp, $key ++ mov $key, $len ++ mov $len, $tmp ++___ ++my ($len, $key) = ($key, $len); ++$code .= <<___; ++ ++ @ Load the IV and counter portion. ++ ldr $ctr, [$ivec, #12] ++ vld1.8 {q7}, [$ivec] ++ ++ bl _vpaes_preheat ++ rev $ctr, $ctr @ The counter is big-endian. ++ ++.Lctr32_loop: ++ vmov q0, q7 ++ vld1.8 {q6}, [$inp]! @ Load input ahead of time ++ bl _vpaes_encrypt_core ++ veor q0, q0, q6 @ XOR input and result ++ vst1.8 {q0}, [$out]! ++ subs $len, $len, #1 ++ @ Update the counter. ++ add $ctr, $ctr, #1 ++ rev $tmp, $ctr ++ vmov.32 q7#hi[1], $tmp ++ bne .Lctr32_loop ++ ++.Lctr32_done: ++ vldmia sp!, {d8-d15} ++ ldmia sp!, {r7-r11, pc} @ return ++.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks ++___ ++} ++ ++foreach (split("\n",$code)) { ++ s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo; ++ print $_,"\n"; ++} ++ ++close STDOUT; +diff --git a/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/crypto/fipsmodule/aes/asm/vpaes-armv8.pl +new file mode 100755 +index 0000000..b31bbb8 +--- /dev/null ++++ b/crypto/fipsmodule/aes/asm/vpaes-armv8.pl +@@ -0,0 +1,837 @@ ++#! /usr/bin/env perl ++# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. ++# ++# Licensed under the OpenSSL license (the "License"). You may not use ++# this file except in compliance with the License. You can obtain a copy ++# in the file LICENSE in the source distribution or at ++# https://www.openssl.org/source/license.html ++ ++ ++###################################################################### ++## Constant-time SSSE3 AES core implementation. ++## version 0.1 ++## ++## By Mike Hamburg (Stanford University), 2009 ++## Public domain. ++## ++## For details see http://shiftleft.org/papers/vector_aes/ and ++## http://crypto.stanford.edu/vpaes/. ++## ++###################################################################### ++# ARMv8 NEON adaptation by ++# ++# Reason for undertaken effort is that there is at least one popular ++# SoC based on Cortex-A53 that doesn't have crypto extensions. ++# ++# CBC enc ECB enc/dec(*) [bit-sliced enc/dec] ++# Cortex-A53 21.5 18.1/20.6 [17.5/19.8 ] ++# Cortex-A57 36.0(**) 20.4/24.9(**) [14.4/16.6 ] ++# X-Gene 45.9(**) 45.8/57.7(**) [33.1/37.6(**) ] ++# Denver(***) 16.6(**) 15.1/17.8(**) [8.80/9.93 ] ++# Apple A7(***) 22.7(**) 10.9/14.3 [8.45/10.0 ] ++# Mongoose(***) 26.3(**) 21.0/25.0(**) [13.3/16.8 ] ++# ++# (*) ECB denotes approximate result for parallelizable modes ++# such as CBC decrypt, CTR, etc.; ++# (**) these results are worse than scalar compiler-generated ++# code, but it's constant-time and therefore preferred; ++# (***) presented for reference/comparison purposes; ++ ++$flavour = shift; ++while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} ++ ++$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; ++( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or ++( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or ++die "can't locate arm-xlate.pl"; ++ ++open OUT,"| \"$^X\" $xlate $flavour $output"; ++*STDOUT=*OUT; ++ ++$code.=<<___; ++#include ++ ++.section .rodata ++ ++.type _vpaes_consts,%object ++.align 7 // totally strategic alignment ++_vpaes_consts: ++.Lk_mc_forward: // mc_forward ++ .quad 0x0407060500030201, 0x0C0F0E0D080B0A09 ++ .quad 0x080B0A0904070605, 0x000302010C0F0E0D ++ .quad 0x0C0F0E0D080B0A09, 0x0407060500030201 ++ .quad 0x000302010C0F0E0D, 0x080B0A0904070605 ++.Lk_mc_backward:// mc_backward ++ .quad 0x0605040702010003, 0x0E0D0C0F0A09080B ++ .quad 0x020100030E0D0C0F, 0x0A09080B06050407 ++ .quad 0x0E0D0C0F0A09080B, 0x0605040702010003 ++ .quad 0x0A09080B06050407, 0x020100030E0D0C0F ++.Lk_sr: // sr ++ .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 ++ .quad 0x030E09040F0A0500, 0x0B06010C07020D08 ++ .quad 0x0F060D040B020900, 0x070E050C030A0108 ++ .quad 0x0B0E0104070A0D00, 0x0306090C0F020508 ++ ++// ++// "Hot" constants ++// ++.Lk_inv: // inv, inva ++ .quad 0x0E05060F0D080180, 0x040703090A0B0C02 ++ .quad 0x01040A060F0B0780, 0x030D0E0C02050809 ++.Lk_ipt: // input transform (lo, hi) ++ .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 ++ .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 ++.Lk_sbo: // sbou, sbot ++ .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 ++ .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA ++.Lk_sb1: // sb1u, sb1t ++ .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF ++ .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 ++.Lk_sb2: // sb2u, sb2t ++ .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A ++ .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD ++ ++// ++// Key schedule constants ++// ++.Lk_dksd: // decryption key schedule: invskew x*D ++ .quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9 ++ .quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E ++.Lk_dksb: // decryption key schedule: invskew x*B ++ .quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99 ++ .quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8 ++.Lk_dkse: // decryption key schedule: invskew x*E + 0x63 ++ .quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086 ++ .quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487 ++.Lk_dks9: // decryption key schedule: invskew x*9 ++ .quad 0xB6116FC87ED9A700, 0x4AED933482255BFC ++ .quad 0x4576516227143300, 0x8BB89FACE9DAFDCE ++ ++.Lk_rcon: // rcon ++ .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 ++ ++.Lk_opt: // output transform ++ .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 ++ .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 ++.Lk_deskew: // deskew tables: inverts the sbox's "skew" ++ .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A ++ .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 ++ ++.asciz "Vector Permutation AES for ARMv8, Mike Hamburg (Stanford University)" ++.size _vpaes_consts,.-_vpaes_consts ++.align 6 ++ ++.text ++___ ++ ++{ ++my ($inp,$out,$key) = map("x$_",(0..2)); ++ ++my ($invlo,$invhi,$iptlo,$ipthi,$sbou,$sbot) = map("v$_.16b",(18..23)); ++my ($sb1u,$sb1t,$sb2u,$sb2t) = map("v$_.16b",(24..27)); ++my ($sb9u,$sb9t,$sbdu,$sbdt,$sbbu,$sbbt,$sbeu,$sbet)=map("v$_.16b",(24..31)); ++ ++$code.=<<___; ++## ++## _aes_preheat ++## ++## Fills register %r10 -> .aes_consts (so you can -fPIC) ++## and %xmm9-%xmm15 as specified below. ++## ++.type _vpaes_encrypt_preheat,%function ++.align 4 ++_vpaes_encrypt_preheat: ++ adrp x10, :pg_hi21:.Lk_inv ++ add x10, x10, :lo12:.Lk_inv ++ movi v17.16b, #0x0f ++ ld1 {v18.2d-v19.2d}, [x10],#32 // .Lk_inv ++ ld1 {v20.2d-v23.2d}, [x10],#64 // .Lk_ipt, .Lk_sbo ++ ld1 {v24.2d-v27.2d}, [x10] // .Lk_sb1, .Lk_sb2 ++ ret ++.size _vpaes_encrypt_preheat,.-_vpaes_encrypt_preheat ++ ++## ++## _aes_encrypt_core ++## ++## AES-encrypt %xmm0. ++## ++## Inputs: ++## %xmm0 = input ++## %xmm9-%xmm15 as in _vpaes_preheat ++## (%rdx) = scheduled keys ++## ++## Output in %xmm0 ++## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax ++## Preserves %xmm6 - %xmm8 so you get some local vectors ++## ++## ++.type _vpaes_encrypt_core,%function ++.align 4 ++_vpaes_encrypt_core: ++ mov x9, $key ++ ldr w8, [$key,#240] // pull rounds ++ adrp x11, :pg_hi21:.Lk_mc_forward+16 ++ add x11, x11, :lo12:.Lk_mc_forward+16 ++ // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo ++ ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key ++ and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 ++ ushr v0.16b, v7.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 ++ tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 ++ // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi ++ tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 ++ eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 ++ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 ++ b .Lenc_entry ++ ++.align 4 ++.Lenc_loop: ++ // middle of middle round ++ add x10, x11, #0x40 ++ tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u ++ ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] ++ tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t ++ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k ++ tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u ++ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A ++ tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t ++ ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] ++ tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B ++ eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A ++ tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D ++ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B ++ tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C ++ eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D ++ and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4 ++ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D ++ sub w8, w8, #1 // nr-- ++ ++.Lenc_entry: ++ // top of round ++ and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k ++ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i ++ tbl v5.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k ++ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j ++ tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i ++ tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j ++ eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k ++ eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k ++ tbl v2.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak ++ tbl v3.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak ++ eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io ++ eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo ++ ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 ++ cbnz w8, .Lenc_loop ++ ++ // middle of last round ++ add x10, x11, #0x80 ++ // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo ++ // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 ++ tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou ++ ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] ++ tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t ++ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k ++ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A ++ tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 ++ ret ++.size _vpaes_encrypt_core,.-_vpaes_encrypt_core ++ ++.globl GFp_vpaes_encrypt ++.type GFp_vpaes_encrypt,%function ++.align 4 ++GFp_vpaes_encrypt: ++ AARCH64_SIGN_LINK_REGISTER ++ stp x29,x30,[sp,#-16]! ++ add x29,sp,#0 ++ ++ ld1 {v7.16b}, [$inp] ++ bl _vpaes_encrypt_preheat ++ bl _vpaes_encrypt_core ++ st1 {v0.16b}, [$out] ++ ++ ldp x29,x30,[sp],#16 ++ AARCH64_VALIDATE_LINK_REGISTER ++ ret ++.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt ++ ++.type _vpaes_encrypt_2x,%function ++.align 4 ++_vpaes_encrypt_2x: ++ mov x9, $key ++ ldr w8, [$key,#240] // pull rounds ++ adrp x11, :pg_hi21:.Lk_mc_forward+16 ++ add x11, x11, :lo12:.Lk_mc_forward+16 ++ // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo ++ ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key ++ and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 ++ ushr v0.16b, v14.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 ++ and v9.16b, v15.16b, v17.16b ++ ushr v8.16b, v15.16b, #4 ++ tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 ++ tbl v9.16b, {$iptlo}, v9.16b ++ // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi ++ tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 ++ tbl v10.16b, {$ipthi}, v8.16b ++ eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 ++ eor v8.16b, v9.16b, v16.16b ++ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 ++ eor v8.16b, v8.16b, v10.16b ++ b .Lenc_2x_entry ++ ++.align 4 ++.Lenc_2x_loop: ++ // middle of middle round ++ add x10, x11, #0x40 ++ tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u ++ tbl v12.16b, {$sb1t}, v10.16b ++ ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] ++ tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t ++ tbl v8.16b, {$sb1u}, v11.16b ++ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k ++ eor v12.16b, v12.16b, v16.16b ++ tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u ++ tbl v13.16b, {$sb2t}, v10.16b ++ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A ++ eor v8.16b, v8.16b, v12.16b ++ tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t ++ tbl v10.16b, {$sb2u}, v11.16b ++ ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] ++ tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B ++ tbl v11.16b, {v8.16b}, v1.16b ++ eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A ++ eor v10.16b, v10.16b, v13.16b ++ tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D ++ tbl v8.16b, {v8.16b}, v4.16b ++ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B ++ eor v11.16b, v11.16b, v10.16b ++ tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C ++ tbl v12.16b, {v11.16b},v1.16b ++ eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D ++ eor v8.16b, v8.16b, v11.16b ++ and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4 ++ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D ++ eor v8.16b, v8.16b, v12.16b ++ sub w8, w8, #1 // nr-- ++ ++.Lenc_2x_entry: ++ // top of round ++ and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k ++ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i ++ and v9.16b, v8.16b, v17.16b ++ ushr v8.16b, v8.16b, #4 ++ tbl v5.16b, {$invhi},v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k ++ tbl v13.16b, {$invhi},v9.16b ++ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j ++ eor v9.16b, v9.16b, v8.16b ++ tbl v3.16b, {$invlo},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i ++ tbl v11.16b, {$invlo},v8.16b ++ tbl v4.16b, {$invlo},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j ++ tbl v12.16b, {$invlo},v9.16b ++ eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k ++ eor v11.16b, v11.16b, v13.16b ++ eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k ++ eor v12.16b, v12.16b, v13.16b ++ tbl v2.16b, {$invlo},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak ++ tbl v10.16b, {$invlo},v11.16b ++ tbl v3.16b, {$invlo},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak ++ tbl v11.16b, {$invlo},v12.16b ++ eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io ++ eor v10.16b, v10.16b, v9.16b ++ eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo ++ eor v11.16b, v11.16b, v8.16b ++ ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 ++ cbnz w8, .Lenc_2x_loop ++ ++ // middle of last round ++ add x10, x11, #0x80 ++ // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo ++ // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 ++ tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou ++ tbl v12.16b, {$sbou}, v10.16b ++ ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] ++ tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t ++ tbl v8.16b, {$sbot}, v11.16b ++ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k ++ eor v12.16b, v12.16b, v16.16b ++ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A ++ eor v8.16b, v8.16b, v12.16b ++ tbl v0.16b, {v0.16b},v1.16b // vpshufb %xmm1, %xmm0, %xmm0 ++ tbl v1.16b, {v8.16b},v1.16b ++ ret ++.size _vpaes_encrypt_2x,.-_vpaes_encrypt_2x ++___ ++} ++{ ++my ($inp,$bits,$out,$dir)=("x0","w1","x2","w3"); ++my ($invlo,$invhi,$iptlo,$ipthi,$rcon) = map("v$_.16b",(18..21,8)); ++ ++$code.=<<___; ++######################################################## ++## ## ++## AES key schedule ## ++## ## ++######################################################## ++.type _vpaes_key_preheat,%function ++.align 4 ++_vpaes_key_preheat: ++ adrp x10, :pg_hi21:.Lk_inv ++ add x10, x10, :lo12:.Lk_inv ++ movi v16.16b, #0x5b // .Lk_s63 ++ adrp x11, :pg_hi21:.Lk_sb1 ++ add x11, x11, :lo12:.Lk_sb1 ++ movi v17.16b, #0x0f // .Lk_s0F ++ ld1 {v18.2d-v21.2d}, [x10] // .Lk_inv, .Lk_ipt ++ adrp x10, :pg_hi21:.Lk_dksd ++ add x10, x10, :lo12:.Lk_dksd ++ ld1 {v22.2d-v23.2d}, [x11] // .Lk_sb1 ++ adrp x11, :pg_hi21:.Lk_mc_forward ++ add x11, x11, :lo12:.Lk_mc_forward ++ ld1 {v24.2d-v27.2d}, [x10],#64 // .Lk_dksd, .Lk_dksb ++ ld1 {v28.2d-v31.2d}, [x10],#64 // .Lk_dkse, .Lk_dks9 ++ ld1 {v8.2d}, [x10] // .Lk_rcon ++ ld1 {v9.2d}, [x11] // .Lk_mc_forward[0] ++ ret ++.size _vpaes_key_preheat,.-_vpaes_key_preheat ++ ++.type _vpaes_schedule_core,%function ++.align 4 ++_vpaes_schedule_core: ++ AARCH64_SIGN_LINK_REGISTER ++ stp x29, x30, [sp,#-16]! ++ add x29,sp,#0 ++ ++ bl _vpaes_key_preheat // load the tables ++ ++ ld1 {v0.16b}, [$inp],#16 // vmovdqu (%rdi), %xmm0 # load key (unaligned) ++ ++ // input transform ++ mov v3.16b, v0.16b // vmovdqa %xmm0, %xmm3 ++ bl _vpaes_schedule_transform ++ mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7 ++ ++ adrp x10, :pg_hi21:.Lk_sr // lea .Lk_sr(%rip),%r10 ++ add x10, x10, :lo12:.Lk_sr ++ ++ add x8, x8, x10 ++ ++ // encrypting, output zeroth round key after transform ++ st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) ++ ++ cmp $bits, #192 // cmp \$192, %esi ++ b.hi .Lschedule_256 ++ b.eq .Lschedule_192 ++ // 128: fall though ++ ++## ++## .schedule_128 ++## ++## 128-bit specific part of key schedule. ++## ++## This schedule is really simple, because all its parts ++## are accomplished by the subroutines. ++## ++.Lschedule_128: ++ mov $inp, #10 // mov \$10, %esi ++ ++.Loop_schedule_128: ++ sub $inp, $inp, #1 // dec %esi ++ bl _vpaes_schedule_round ++ cbz $inp, .Lschedule_mangle_last ++ bl _vpaes_schedule_mangle // write output ++ b .Loop_schedule_128 ++ ++## ++## .aes_schedule_192 ++## ++## 192-bit specific part of key schedule. ++## ++## The main body of this schedule is the same as the 128-bit ++## schedule, but with more smearing. The long, high side is ++## stored in %xmm7 as before, and the short, low side is in ++## the high bits of %xmm6. ++## ++## This schedule is somewhat nastier, however, because each ++## round produces 192 bits of key material, or 1.5 round keys. ++## Therefore, on each cycle we do 2 rounds and produce 3 round ++## keys. ++## ++.align 4 ++.Lschedule_192: ++ sub $inp, $inp, #8 ++ ld1 {v0.16b}, [$inp] // vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned) ++ bl _vpaes_schedule_transform // input transform ++ mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save short part ++ eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 # clear 4 ++ ins v6.d[0], v4.d[0] // vmovhlps %xmm4, %xmm6, %xmm6 # clobber low side with zeros ++ mov $inp, #4 // mov \$4, %esi ++ ++.Loop_schedule_192: ++ sub $inp, $inp, #1 // dec %esi ++ bl _vpaes_schedule_round ++ ext v0.16b, v6.16b, v0.16b, #8 // vpalignr \$8,%xmm6,%xmm0,%xmm0 ++ bl _vpaes_schedule_mangle // save key n ++ bl _vpaes_schedule_192_smear ++ bl _vpaes_schedule_mangle // save key n+1 ++ bl _vpaes_schedule_round ++ cbz $inp, .Lschedule_mangle_last ++ bl _vpaes_schedule_mangle // save key n+2 ++ bl _vpaes_schedule_192_smear ++ b .Loop_schedule_192 ++ ++## ++## .aes_schedule_256 ++## ++## 256-bit specific part of key schedule. ++## ++## The structure here is very similar to the 128-bit ++## schedule, but with an additional "low side" in ++## %xmm6. The low side's rounds are the same as the ++## high side's, except no rcon and no rotation. ++## ++.align 4 ++.Lschedule_256: ++ ld1 {v0.16b}, [$inp] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) ++ bl _vpaes_schedule_transform // input transform ++ mov $inp, #7 // mov \$7, %esi ++ ++.Loop_schedule_256: ++ sub $inp, $inp, #1 // dec %esi ++ bl _vpaes_schedule_mangle // output low result ++ mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6 ++ ++ // high round ++ bl _vpaes_schedule_round ++ cbz $inp, .Lschedule_mangle_last ++ bl _vpaes_schedule_mangle ++ ++ // low round. swap xmm7 and xmm6 ++ dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0 ++ movi v4.16b, #0 ++ mov v5.16b, v7.16b // vmovdqa %xmm7, %xmm5 ++ mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7 ++ bl _vpaes_schedule_low_round ++ mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7 ++ ++ b .Loop_schedule_256 ++ ++## ++## .aes_schedule_mangle_last ++## ++## Mangler for last round of key schedule ++## Mangles %xmm0 ++## when encrypting, outputs out(%xmm0) ^ 63 ++## when decrypting, outputs unskew(%xmm0) ++## ++## Always called right before return... jumps to cleanup and exits ++## ++.align 4 ++.Lschedule_mangle_last: ++ // schedule last round key from xmm0 ++ adrp x11, :pg_hi21:.Lk_deskew // lea .Lk_deskew(%rip),%r11 # prepare to deskew ++ add x11, x11, :lo12:.Lk_deskew ++ ++ cbnz $dir, .Lschedule_mangle_last_dec ++ ++ // encrypting ++ ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1 ++ adrp x11, :pg_hi21:.Lk_opt // lea .Lk_opt(%rip), %r11 # prepare to output transform ++ add x11, x11, :lo12:.Lk_opt ++ add $out, $out, #32 // add \$32, %rdx ++ tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute ++ ++.Lschedule_mangle_last_dec: ++ ld1 {v20.2d-v21.2d}, [x11] // reload constants ++ sub $out, $out, #16 // add \$-16, %rdx ++ eor v0.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm0 ++ bl _vpaes_schedule_transform // output transform ++ st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) # save last key ++ ++ // cleanup ++ eor v0.16b, v0.16b, v0.16b // vpxor %xmm0, %xmm0, %xmm0 ++ eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 ++ eor v2.16b, v2.16b, v2.16b // vpxor %xmm2, %xmm2, %xmm2 ++ eor v3.16b, v3.16b, v3.16b // vpxor %xmm3, %xmm3, %xmm3 ++ eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 ++ eor v5.16b, v5.16b, v5.16b // vpxor %xmm5, %xmm5, %xmm5 ++ eor v6.16b, v6.16b, v6.16b // vpxor %xmm6, %xmm6, %xmm6 ++ eor v7.16b, v7.16b, v7.16b // vpxor %xmm7, %xmm7, %xmm7 ++ ldp x29, x30, [sp],#16 ++ AARCH64_VALIDATE_LINK_REGISTER ++ ret ++.size _vpaes_schedule_core,.-_vpaes_schedule_core ++ ++## ++## .aes_schedule_192_smear ++## ++## Smear the short, low side in the 192-bit key schedule. ++## ++## Inputs: ++## %xmm7: high side, b a x y ++## %xmm6: low side, d c 0 0 ++## %xmm13: 0 ++## ++## Outputs: ++## %xmm6: b+c+d b+c 0 0 ++## %xmm0: b+c+d b+c b a ++## ++.type _vpaes_schedule_192_smear,%function ++.align 4 ++_vpaes_schedule_192_smear: ++ movi v1.16b, #0 ++ dup v0.4s, v7.s[3] ++ ins v1.s[3], v6.s[2] // vpshufd \$0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0 ++ ins v0.s[0], v7.s[2] // vpshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a ++ eor v6.16b, v6.16b, v1.16b // vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0 ++ eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 ++ eor v6.16b, v6.16b, v0.16b // vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a ++ mov v0.16b, v6.16b // vmovdqa %xmm6, %xmm0 ++ ins v6.d[0], v1.d[0] // vmovhlps %xmm1, %xmm6, %xmm6 # clobber low side with zeros ++ ret ++.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear ++ ++## ++## .aes_schedule_round ++## ++## Runs one main round of the key schedule on %xmm0, %xmm7 ++## ++## Specifically, runs subbytes on the high dword of %xmm0 ++## then rotates it by one byte and xors into the low dword of ++## %xmm7. ++## ++## Adds rcon from low byte of %xmm8, then rotates %xmm8 for ++## next rcon. ++## ++## Smears the dwords of %xmm7 by xoring the low into the ++## second low, result into third, result into highest. ++## ++## Returns results in %xmm7 = %xmm0. ++## Clobbers %xmm1-%xmm4, %r11. ++## ++.type _vpaes_schedule_round,%function ++.align 4 ++_vpaes_schedule_round: ++ // extract rcon from xmm8 ++ movi v4.16b, #0 // vpxor %xmm4, %xmm4, %xmm4 ++ ext v1.16b, $rcon, v4.16b, #15 // vpalignr \$15, %xmm8, %xmm4, %xmm1 ++ ext $rcon, $rcon, $rcon, #15 // vpalignr \$15, %xmm8, %xmm8, %xmm8 ++ eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 ++ ++ // rotate ++ dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0 ++ ext v0.16b, v0.16b, v0.16b, #1 // vpalignr \$1, %xmm0, %xmm0, %xmm0 ++ ++ // fall through... ++ ++ // low round: same as high round, but no rotation and no rcon. ++_vpaes_schedule_low_round: ++ // smear xmm7 ++ ext v1.16b, v4.16b, v7.16b, #12 // vpslldq \$4, %xmm7, %xmm1 ++ eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 ++ ext v4.16b, v4.16b, v7.16b, #8 // vpslldq \$8, %xmm7, %xmm4 ++ ++ // subbytes ++ and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k ++ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i ++ eor v7.16b, v7.16b, v4.16b // vpxor %xmm4, %xmm7, %xmm7 ++ tbl v2.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k ++ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j ++ tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i ++ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k ++ tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j ++ eor v7.16b, v7.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm7, %xmm7 ++ tbl v3.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak ++ eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k ++ tbl v2.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak ++ eor v3.16b, v3.16b, v1.16b // vpxor %xmm1, %xmm3, %xmm3 # 2 = io ++ eor v2.16b, v2.16b, v0.16b // vpxor %xmm0, %xmm2, %xmm2 # 3 = jo ++ tbl v4.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou ++ tbl v1.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t ++ eor v1.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output ++ ++ // add in smeared stuff ++ eor v0.16b, v1.16b, v7.16b // vpxor %xmm7, %xmm1, %xmm0 ++ eor v7.16b, v1.16b, v7.16b // vmovdqa %xmm0, %xmm7 ++ ret ++.size _vpaes_schedule_round,.-_vpaes_schedule_round ++ ++## ++## .aes_schedule_transform ++## ++## Linear-transform %xmm0 according to tables at (%r11) ++## ++## Requires that %xmm9 = 0x0F0F... as in preheat ++## Output in %xmm0 ++## Clobbers %xmm1, %xmm2 ++## ++.type _vpaes_schedule_transform,%function ++.align 4 ++_vpaes_schedule_transform: ++ and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 ++ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 ++ // vmovdqa (%r11), %xmm2 # lo ++ tbl v2.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2 ++ // vmovdqa 16(%r11), %xmm1 # hi ++ tbl v0.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0 ++ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 ++ ret ++.size _vpaes_schedule_transform,.-_vpaes_schedule_transform ++ ++## ++## .aes_schedule_mangle ++## ++## Mangle xmm0 from (basis-transformed) standard version ++## to our version. ++## ++## On encrypt, ++## xor with 0x63 ++## multiply by circulant 0,1,1,1 ++## apply shiftrows transform ++## ++## On decrypt, ++## xor with 0x63 ++## multiply by "inverse mixcolumns" circulant E,B,D,9 ++## deskew ++## apply shiftrows transform ++## ++## ++## Writes out to (%rdx), and increments or decrements it ++## Keeps track of round number mod 4 in %r8 ++## Preserves xmm0 ++## Clobbers xmm1-xmm5 ++## ++.type _vpaes_schedule_mangle,%function ++.align 4 ++_vpaes_schedule_mangle: ++ mov v4.16b, v0.16b // vmovdqa %xmm0, %xmm4 # save xmm0 for later ++ // vmovdqa .Lk_mc_forward(%rip),%xmm5 ++ ++ // encrypting ++ eor v4.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm4 ++ add $out, $out, #16 // add \$16, %rdx ++ tbl v4.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm4 ++ tbl v1.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm1 ++ tbl v3.16b, {v1.16b}, v9.16b // vpshufb %xmm5, %xmm1, %xmm3 ++ eor v4.16b, v4.16b, v1.16b // vpxor %xmm1, %xmm4, %xmm4 ++ ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 ++ eor v3.16b, v3.16b, v4.16b // vpxor %xmm4, %xmm3, %xmm3 ++ ++.Lschedule_mangle_both: ++ tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 ++ add x8, x8, #64-16 // add \$-16, %r8 ++ and x8, x8, #~(1<<6) // and \$0x30, %r8 ++ st1 {v3.2d}, [$out] // vmovdqu %xmm3, (%rdx) ++ ret ++.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle ++ ++.globl GFp_vpaes_set_encrypt_key ++.type GFp_vpaes_set_encrypt_key,%function ++.align 4 ++GFp_vpaes_set_encrypt_key: ++ AARCH64_SIGN_LINK_REGISTER ++ stp x29,x30,[sp,#-16]! ++ add x29,sp,#0 ++ stp d8,d9,[sp,#-16]! // ABI spec says so ++ ++ lsr w9, $bits, #5 // shr \$5,%eax ++ add w9, w9, #5 // \$5,%eax ++ str w9, [$out,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; ++ ++ mov $dir, #0 // mov \$0,%ecx ++ mov x8, #0x30 // mov \$0x30,%r8d ++ bl _vpaes_schedule_core ++ eor x0, x0, x0 ++ ++ ldp d8,d9,[sp],#16 ++ ldp x29,x30,[sp],#16 ++ AARCH64_VALIDATE_LINK_REGISTER ++ ret ++.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key ++___ ++} ++{ ++my ($inp,$out,$len,$key,$ivec) = map("x$_",(0..4)); ++my ($ctr, $ctr_tmp) = ("w6", "w7"); ++ ++# void GFp_vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len, ++# const AES_KEY *key, const uint8_t ivec[16]); ++$code.=<<___; ++.globl GFp_vpaes_ctr32_encrypt_blocks ++.type GFp_vpaes_ctr32_encrypt_blocks,%function ++.align 4 ++GFp_vpaes_ctr32_encrypt_blocks: ++ AARCH64_SIGN_LINK_REGISTER ++ stp x29,x30,[sp,#-16]! ++ add x29,sp,#0 ++ stp d8,d9,[sp,#-16]! // ABI spec says so ++ stp d10,d11,[sp,#-16]! ++ stp d12,d13,[sp,#-16]! ++ stp d14,d15,[sp,#-16]! ++ ++ cbz $len, .Lctr32_done ++ ++ // Note, unlike the other functions, $len here is measured in blocks, ++ // not bytes. ++ mov x17, $len ++ mov x2, $key ++ ++ // Load the IV and counter portion. ++ ldr $ctr, [$ivec, #12] ++ ld1 {v7.16b}, [$ivec] ++ ++ bl _vpaes_encrypt_preheat ++ tst x17, #1 ++ rev $ctr, $ctr // The counter is big-endian. ++ b.eq .Lctr32_prep_loop ++ ++ // Handle one block so the remaining block count is even for ++ // _vpaes_encrypt_2x. ++ ld1 {v6.16b}, [$inp], #16 // Load input ahead of time ++ bl _vpaes_encrypt_core ++ eor v0.16b, v0.16b, v6.16b // XOR input and result ++ st1 {v0.16b}, [$out], #16 ++ subs x17, x17, #1 ++ // Update the counter. ++ add $ctr, $ctr, #1 ++ rev $ctr_tmp, $ctr ++ mov v7.s[3], $ctr_tmp ++ b.ls .Lctr32_done ++ ++.Lctr32_prep_loop: ++ // _vpaes_encrypt_core takes its input from v7, while _vpaes_encrypt_2x ++ // uses v14 and v15. ++ mov v15.16b, v7.16b ++ mov v14.16b, v7.16b ++ add $ctr, $ctr, #1 ++ rev $ctr_tmp, $ctr ++ mov v15.s[3], $ctr_tmp ++ ++.Lctr32_loop: ++ ld1 {v6.16b,v7.16b}, [$inp], #32 // Load input ahead of time ++ bl _vpaes_encrypt_2x ++ eor v0.16b, v0.16b, v6.16b // XOR input and result ++ eor v1.16b, v1.16b, v7.16b // XOR input and result (#2) ++ st1 {v0.16b,v1.16b}, [$out], #32 ++ subs x17, x17, #2 ++ // Update the counter. ++ add $ctr_tmp, $ctr, #1 ++ add $ctr, $ctr, #2 ++ rev $ctr_tmp, $ctr_tmp ++ mov v14.s[3], $ctr_tmp ++ rev $ctr_tmp, $ctr ++ mov v15.s[3], $ctr_tmp ++ b.hi .Lctr32_loop ++ ++.Lctr32_done: ++ ldp d14,d15,[sp],#16 ++ ldp d12,d13,[sp],#16 ++ ldp d10,d11,[sp],#16 ++ ldp d8,d9,[sp],#16 ++ ldp x29,x30,[sp],#16 ++ AARCH64_VALIDATE_LINK_REGISTER ++ ret ++.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks ++___ ++} ++ ++print $code; ++ ++close STDOUT or die "error closing STDOUT"; +diff --git a/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl +new file mode 100644 +index 0000000..7e52ad6 +--- /dev/null ++++ b/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl +@@ -0,0 +1,294 @@ ++#! /usr/bin/env perl ++# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. ++# ++# Licensed under the OpenSSL license (the "License"). You may not use ++# this file except in compliance with the License. You can obtain a copy ++# in the file LICENSE in the source distribution or at ++# https://www.openssl.org/source/license.html ++ ++# ==================================================================== ++# Written by Andy Polyakov for the OpenSSL ++# project. The module is, however, dual licensed under OpenSSL and ++# CRYPTOGAMS licenses depending on where you obtain it. For further ++# details see http://www.openssl.org/~appro/cryptogams/. ++# ==================================================================== ++ ++# This file was adapted to AArch64 from the 32-bit version in ghash-armv4.pl. It ++# implements the multiplication algorithm described in: ++# ++# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software ++# Polynomial Multiplication on ARM Processors using the NEON Engine. ++# ++# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf ++# ++# The main distinction to keep in mind between 32-bit NEON and AArch64 SIMD is ++# AArch64 cannot compute over the upper halves of SIMD registers. In 32-bit ++# NEON, the low and high halves of the 128-bit register q0 are accessible as ++# 64-bit registers d0 and d1, respectively. In AArch64, dN is the lower half of ++# vN. Where the 32-bit version would use the upper half, this file must keep ++# halves in separate registers. ++# ++# The other distinction is in syntax. 32-bit NEON embeds lane information in the ++# instruction name, while AArch64 uses suffixes on the registers. For instance, ++# left-shifting 64-bit lanes of a SIMD register in 32-bit would be written: ++# ++# vshl.i64 q0, q0, #1 ++# ++# in 64-bit, it would be written: ++# ++# shl v0.2d, v0.2d, #1 ++# ++# See Programmer's Guide for ARMv8-A, section 7 for details. ++# http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf ++# ++# Finally, note the 8-bit and 64-bit polynomial multipliers in AArch64 differ ++# only by suffix. pmull vR.8h, vA.8b, vB.8b multiplies eight 8-bit polynomials ++# and is always available. pmull vR.1q, vA.1d, vB.1d multiplies a 64-bit ++# polynomial and is conditioned on the PMULL extension. This file emulates the ++# latter with the former. ++ ++use strict; ++ ++my $flavour = shift; ++my $output; ++if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } ++else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } ++ ++if ($flavour && $flavour ne "void") { ++ $0 =~ m/(.*[\/\\])[^\/\\]+$/; ++ my $dir = $1; ++ my $xlate; ++ ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or ++ ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or ++ die "can't locate arm-xlate.pl"; ++ ++ open OUT,"| \"$^X\" $xlate $flavour $output"; ++ *STDOUT=*OUT; ++} else { ++ open OUT,">$output"; ++ *STDOUT=*OUT; ++} ++ ++my ($Xi, $Htbl, $inp, $len) = map("x$_", (0..3)); # argument block ++my ($Xl, $Xm, $Xh, $INlo, $INhi) = map("v$_", (0..4)); ++my ($Hlo, $Hhi, $Hhl) = map("v$_", (5..7)); ++# d8-d15 are callee-saved, so avoid v8-v15. AArch64 SIMD has plenty of registers ++# to spare. ++my ($t0, $t1, $t2, $t3) = map("v$_", (16..19)); ++my ($t0l_t1l, $t0h_t1h, $t2l_t3l, $t2h_t3h) = map("v$_", (20..23)); ++my ($k48_k32, $k16_k0) = map("v$_", (24..25)); ++ ++my $code = ""; ++ ++# clmul64x64 emits code which emulates pmull $r.1q, $a.1d, $b.1d. $r, $a, and $b ++# must be distinct from $t* and $k*. $t* are clobbered by the emitted code. ++sub clmul64x64 { ++my ($r, $a, $b) = @_; ++$code .= <<___; ++ ext $t0.8b, $a.8b, $a.8b, #1 // A1 ++ pmull $t0.8h, $t0.8b, $b.8b // F = A1*B ++ ext $r.8b, $b.8b, $b.8b, #1 // B1 ++ pmull $r.8h, $a.8b, $r.8b // E = A*B1 ++ ext $t1.8b, $a.8b, $a.8b, #2 // A2 ++ pmull $t1.8h, $t1.8b, $b.8b // H = A2*B ++ ext $t3.8b, $b.8b, $b.8b, #2 // B2 ++ pmull $t3.8h, $a.8b, $t3.8b // G = A*B2 ++ ext $t2.8b, $a.8b, $a.8b, #3 // A3 ++ eor $t0.16b, $t0.16b, $r.16b // L = E + F ++ pmull $t2.8h, $t2.8b, $b.8b // J = A3*B ++ ext $r.8b, $b.8b, $b.8b, #3 // B3 ++ eor $t1.16b, $t1.16b, $t3.16b // M = G + H ++ pmull $r.8h, $a.8b, $r.8b // I = A*B3 ++ ++ // Here we diverge from the 32-bit version. It computes the following ++ // (instructions reordered for clarity): ++ // ++ // veor \$t0#lo, \$t0#lo, \$t0#hi @ t0 = P0 + P1 (L) ++ // vand \$t0#hi, \$t0#hi, \$k48 ++ // veor \$t0#lo, \$t0#lo, \$t0#hi ++ // ++ // veor \$t1#lo, \$t1#lo, \$t1#hi @ t1 = P2 + P3 (M) ++ // vand \$t1#hi, \$t1#hi, \$k32 ++ // veor \$t1#lo, \$t1#lo, \$t1#hi ++ // ++ // veor \$t2#lo, \$t2#lo, \$t2#hi @ t2 = P4 + P5 (N) ++ // vand \$t2#hi, \$t2#hi, \$k16 ++ // veor \$t2#lo, \$t2#lo, \$t2#hi ++ // ++ // veor \$t3#lo, \$t3#lo, \$t3#hi @ t3 = P6 + P7 (K) ++ // vmov.i64 \$t3#hi, #0 ++ // ++ // \$kN is a mask with the bottom N bits set. AArch64 cannot compute on ++ // upper halves of SIMD registers, so we must split each half into ++ // separate registers. To compensate, we pair computations up and ++ // parallelize. ++ ++ ext $t3.8b, $b.8b, $b.8b, #4 // B4 ++ eor $t2.16b, $t2.16b, $r.16b // N = I + J ++ pmull $t3.8h, $a.8b, $t3.8b // K = A*B4 ++ ++ // This can probably be scheduled more efficiently. For now, we just ++ // pair up independent instructions. ++ zip1 $t0l_t1l.2d, $t0.2d, $t1.2d ++ zip1 $t2l_t3l.2d, $t2.2d, $t3.2d ++ zip2 $t0h_t1h.2d, $t0.2d, $t1.2d ++ zip2 $t2h_t3h.2d, $t2.2d, $t3.2d ++ eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b ++ eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b ++ and $t0h_t1h.16b, $t0h_t1h.16b, $k48_k32.16b ++ and $t2h_t3h.16b, $t2h_t3h.16b, $k16_k0.16b ++ eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b ++ eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b ++ zip1 $t0.2d, $t0l_t1l.2d, $t0h_t1h.2d ++ zip1 $t2.2d, $t2l_t3l.2d, $t2h_t3h.2d ++ zip2 $t1.2d, $t0l_t1l.2d, $t0h_t1h.2d ++ zip2 $t3.2d, $t2l_t3l.2d, $t2h_t3h.2d ++ ++ ext $t0.16b, $t0.16b, $t0.16b, #15 // t0 = t0 << 8 ++ ext $t1.16b, $t1.16b, $t1.16b, #14 // t1 = t1 << 16 ++ pmull $r.8h, $a.8b, $b.8b // D = A*B ++ ext $t3.16b, $t3.16b, $t3.16b, #12 // t3 = t3 << 32 ++ ext $t2.16b, $t2.16b, $t2.16b, #13 // t2 = t2 << 24 ++ eor $t0.16b, $t0.16b, $t1.16b ++ eor $t2.16b, $t2.16b, $t3.16b ++ eor $r.16b, $r.16b, $t0.16b ++ eor $r.16b, $r.16b, $t2.16b ++___ ++} ++ ++$code .= <<___; ++#include ++ ++.text ++ ++.global GFp_gcm_init_neon ++.type GFp_gcm_init_neon,%function ++.align 4 ++GFp_gcm_init_neon: ++ AARCH64_VALID_CALL_TARGET ++ // This function is adapted from gcm_init_v8. xC2 is t3. ++ ld1 {$t1.2d}, [x1] // load H ++ movi $t3.16b, #0xe1 ++ shl $t3.2d, $t3.2d, #57 // 0xc2.0 ++ ext $INlo.16b, $t1.16b, $t1.16b, #8 ++ ushr $t2.2d, $t3.2d, #63 ++ dup $t1.4s, $t1.s[1] ++ ext $t0.16b, $t2.16b, $t3.16b, #8 // t0=0xc2....01 ++ ushr $t2.2d, $INlo.2d, #63 ++ sshr $t1.4s, $t1.4s, #31 // broadcast carry bit ++ and $t2.16b, $t2.16b, $t0.16b ++ shl $INlo.2d, $INlo.2d, #1 ++ ext $t2.16b, $t2.16b, $t2.16b, #8 ++ and $t0.16b, $t0.16b, $t1.16b ++ orr $INlo.16b, $INlo.16b, $t2.16b // H<<<=1 ++ eor $Hlo.16b, $INlo.16b, $t0.16b // twisted H ++ st1 {$Hlo.2d}, [x0] // store Htable[0] ++ ret ++.size GFp_gcm_init_neon,.-GFp_gcm_init_neon ++ ++.global GFp_gcm_gmult_neon ++.type GFp_gcm_gmult_neon,%function ++.align 4 ++GFp_gcm_gmult_neon: ++ AARCH64_VALID_CALL_TARGET ++ ld1 {$INlo.16b}, [$Xi] // load Xi ++ ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H ++ ld1 {$Hhi.1d}, [$Htbl] ++ adrp x9, :pg_hi21:.Lmasks // load constants ++ add x9, x9, :lo12:.Lmasks ++ ld1 {$k48_k32.2d, $k16_k0.2d}, [x9] ++ rev64 $INlo.16b, $INlo.16b // byteswap Xi ++ ext $INlo.16b, $INlo.16b, $INlo.16b, #8 ++ eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing ++ ++ mov $len, #16 ++ b .Lgmult_neon ++.size GFp_gcm_gmult_neon,.-GFp_gcm_gmult_neon ++ ++.global GFp_gcm_ghash_neon ++.type GFp_gcm_ghash_neon,%function ++.align 4 ++GFp_gcm_ghash_neon: ++ AARCH64_VALID_CALL_TARGET ++ ld1 {$Xl.16b}, [$Xi] // load Xi ++ ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H ++ ld1 {$Hhi.1d}, [$Htbl] ++ adrp x9, :pg_hi21:.Lmasks // load constants ++ add x9, x9, :lo12:.Lmasks ++ ld1 {$k48_k32.2d, $k16_k0.2d}, [x9] ++ rev64 $Xl.16b, $Xl.16b // byteswap Xi ++ ext $Xl.16b, $Xl.16b, $Xl.16b, #8 ++ eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing ++ ++.Loop_neon: ++ ld1 {$INlo.16b}, [$inp], #16 // load inp ++ rev64 $INlo.16b, $INlo.16b // byteswap inp ++ ext $INlo.16b, $INlo.16b, $INlo.16b, #8 ++ eor $INlo.16b, $INlo.16b, $Xl.16b // inp ^= Xi ++ ++.Lgmult_neon: ++ // Split the input into $INlo and $INhi. (The upper halves are unused, ++ // so it is okay to leave them alone.) ++ ins $INhi.d[0], $INlo.d[1] ++___ ++&clmul64x64 ($Xl, $Hlo, $INlo); # H.lo·Xi.lo ++$code .= <<___; ++ eor $INlo.8b, $INlo.8b, $INhi.8b // Karatsuba pre-processing ++___ ++&clmul64x64 ($Xm, $Hhl, $INlo); # (H.lo+H.hi)·(Xi.lo+Xi.hi) ++&clmul64x64 ($Xh, $Hhi, $INhi); # H.hi·Xi.hi ++$code .= <<___; ++ ext $t0.16b, $Xl.16b, $Xh.16b, #8 ++ eor $Xm.16b, $Xm.16b, $Xl.16b // Karatsuba post-processing ++ eor $Xm.16b, $Xm.16b, $Xh.16b ++ eor $Xm.16b, $Xm.16b, $t0.16b // Xm overlaps Xh.lo and Xl.hi ++ ins $Xl.d[1], $Xm.d[0] // Xh|Xl - 256-bit result ++ // This is a no-op due to the ins instruction below. ++ // ins $Xh.d[0], $Xm.d[1] ++ ++ // equivalent of reduction_avx from ghash-x86_64.pl ++ shl $t1.2d, $Xl.2d, #57 // 1st phase ++ shl $t2.2d, $Xl.2d, #62 ++ eor $t2.16b, $t2.16b, $t1.16b // ++ shl $t1.2d, $Xl.2d, #63 ++ eor $t2.16b, $t2.16b, $t1.16b // ++ // Note Xm contains {Xl.d[1], Xh.d[0]}. ++ eor $t2.16b, $t2.16b, $Xm.16b ++ ins $Xl.d[1], $t2.d[0] // Xl.d[1] ^= t2.d[0] ++ ins $Xh.d[0], $t2.d[1] // Xh.d[0] ^= t2.d[1] ++ ++ ushr $t2.2d, $Xl.2d, #1 // 2nd phase ++ eor $Xh.16b, $Xh.16b,$Xl.16b ++ eor $Xl.16b, $Xl.16b,$t2.16b // ++ ushr $t2.2d, $t2.2d, #6 ++ ushr $Xl.2d, $Xl.2d, #1 // ++ eor $Xl.16b, $Xl.16b, $Xh.16b // ++ eor $Xl.16b, $Xl.16b, $t2.16b // ++ ++ subs $len, $len, #16 ++ bne .Loop_neon ++ ++ rev64 $Xl.16b, $Xl.16b // byteswap Xi and write ++ ext $Xl.16b, $Xl.16b, $Xl.16b, #8 ++ st1 {$Xl.16b}, [$Xi] ++ ++ ret ++.size GFp_gcm_ghash_neon,.-GFp_gcm_ghash_neon ++ ++.section .rodata ++.align 4 ++.Lmasks: ++.quad 0x0000ffffffffffff // k48 ++.quad 0x00000000ffffffff // k32 ++.quad 0x000000000000ffff // k16 ++.quad 0x0000000000000000 // k0 ++.asciz "GHASH for ARMv8, derived from ARMv4 version by " ++.align 2 ++___ ++ ++foreach (split("\n",$code)) { ++ s/\`([^\`]*)\`/eval $1/geo; ++ ++ print $_,"\n"; ++} ++close STDOUT or die "error closing STDOUT"; # enforce flush +-- +Efraim Flashner רנשלפ םירפא +GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 +Confidentiality cannot be guaranteed on emails sent or received unencrypted + -- cgit v1.2.3 From b6d04ddda0b4a69540ea5c31c90a26ef3e9c2f56 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 22 May 2023 22:25:41 +0300 Subject: gnu: rust-ring-0.16: Enable tests. * gnu/packages/crates-io.scm (rust-ring-0.16)[source]: Add a patch with the missing test file. [arguments]: Don't skip tests. * gnu/packages/patches/rust-ring-0.16-test-files.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. --- gnu/local.mk | 1 + gnu/packages/crates-io.scm | 6 +-- .../patches/rust-ring-0.16-test-files.patch | 54 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/rust-ring-0.16-test-files.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index eeb3bb9c9e..cb440156a9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1913,6 +1913,7 @@ dist_patch_DATA = \ %D%/packages/patches/rustc-1.54.0-src.patch \ %D%/packages/patches/rust-1.64-fix-riscv64-bootstrap.patch \ %D%/packages/patches/rust-ring-0.16-missing-files.patch \ + %D%/packages/patches/rust-ring-0.16-test-files.patch \ %D%/packages/patches/i3status-rust-enable-unstable-features.patch \ %D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch \ %D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch \ diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm index 8c2c86280a..6420d909a2 100644 --- a/gnu/packages/crates-io.scm +++ b/gnu/packages/crates-io.scm @@ -52098,7 +52098,8 @@ Digital Signature Algorithm} (ECDSA).") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "1z682xp7v38ayq9g9nkbhhfpj6ygralmlx7wdmsfv8rnw99cylrh")) - (patches (search-patches "rust-ring-0.16-missing-files.patch")) + (patches (search-patches "rust-ring-0.16-missing-files.patch" + "rust-ring-0.16-test-files.patch")) (modules '((guix build utils))) (snippet '(begin @@ -52112,8 +52113,7 @@ Digital Signature Algorithm} (ECDSA).") (format #t ""))))))) (build-system cargo-build-system) (arguments - `(#:tests? #false ;missing file - #:cargo-inputs + `(#:cargo-inputs (("rust-libc" ,rust-libc-0.2) ("rust-once-cell" ,rust-once-cell-1) ("rust-spin" ,rust-spin-0.5) diff --git a/gnu/packages/patches/rust-ring-0.16-test-files.patch b/gnu/packages/patches/rust-ring-0.16-test-files.patch new file mode 100644 index 0000000000..dbe5c0f4ee --- /dev/null +++ b/gnu/packages/patches/rust-ring-0.16-test-files.patch @@ -0,0 +1,54 @@ +This file exists in the upstream repository at the commit which +corresponds to the ring-0.16.20 release, but was excluded from the +release tarball. + +--- + tests/ed25519_verify_tests.txt | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + create mode 100644 tests/ed25519_verify_tests.txt + +diff --git a/tests/ed25519_verify_tests.txt b/tests/ed25519_verify_tests.txt +new file mode 100644 +index 0000000..74c94b3 +--- /dev/null ++++ b/tests/ed25519_verify_tests.txt +@@ -0,0 +1,34 @@ ++# BoringSSL TEST(Ed25519Test Malleability) ++ ++# Control; S is in range. ++MESSAGE = 54657374 ++SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d ++PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa ++Result = P ++ ++# Same as above, but with the order L added to S so it is out of range. ++# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21 ++MESSAGE = 54657374 ++SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d ++PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa ++Result = F ++ ++ ++# BoringSSL commit 3094902fcdc2db2cc832fa854b9a6a8be383926c ++MESSAGE = 124e583f8b8eca58bb29c271b41d36986bbc45541f8e51f9cb0133eca447601e ++SIG = dac119d6ca87fc59ae611c157048f4d4fc932a149dbe20ec6effd1436abf83ea05c7df0fef06147241259113909bc71bd3c53ba4464ffcad3c0968f2ffffff0f ++PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86 ++Result = P ++ ++# Control. Same key as above; same message and signature as below, except S is in range. ++PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86 ++MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0 ++SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4f58ac9d20ec563133cabc6230b1db8625f8446639ede46ad4df4053000000000 ++Result = P ++ ++# Same key as above, but S is out of range. ++# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21 ++PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86 ++MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0 ++SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4e25ebf2f2928766b1248bec6e91697775f8446639ede46ad4df4053000000010 ++Result = F +-- +Efraim Flashner רנשלפ םירפא +GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 +Confidentiality cannot be guaranteed on emails sent or received unencrypted + -- cgit v1.2.3 From c08da95daed1c9af66b18c82dd87c8a58d98bb2d Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Sun, 6 Aug 2023 10:22:00 +0300 Subject: gnu: Add maturin. * gnu/packages/rust-apps.scm (maturin): New variable. * gnu/packages/patches/maturin-no-cross-compile.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. --- gnu/local.mk | 1 + .../patches/maturin-no-cross-compile.patch | 55 +++++++ gnu/packages/rust-apps.scm | 165 +++++++++++++++++++++ 3 files changed, 221 insertions(+) create mode 100644 gnu/packages/patches/maturin-no-cross-compile.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index cb440156a9..4ce4775b82 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1596,6 +1596,7 @@ dist_patch_DATA = \ %D%/packages/patches/libmemcached-build-with-gcc7.patch \ %D%/packages/patches/libmhash-hmac-fix-uaf.patch \ %D%/packages/patches/libsigrokdecode-python3.9-fix.patch \ + %D%/packages/patches/maturin-no-cross-compile.patch \ %D%/packages/patches/mecab-variable-param.patch \ %D%/packages/patches/memtest86+-build-reproducibly.patch \ %D%/packages/patches/mercurial-hg-extension-path.patch \ diff --git a/gnu/packages/patches/maturin-no-cross-compile.patch b/gnu/packages/patches/maturin-no-cross-compile.patch new file mode 100644 index 0000000000..7394d0854e --- /dev/null +++ b/gnu/packages/patches/maturin-no-cross-compile.patch @@ -0,0 +1,55 @@ +Remove dependencies on xwin and zig. We're not offering cross-compilation +options using these crates. + +diff --git a/Cargo.toml b/Cargo.toml +index 6cbdca3..22ea5ef 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -76,16 +76,6 @@ version = "0.1.4" + [dependencies.cargo-options] + version = "0.6.0" + +-[dependencies.cargo-xwin] +-version = "0.14.3" +-optional = true +-default-features = false +- +-[dependencies.cargo-zigbuild] +-version = "0.16.10" +-optional = true +-default-features = false +- + [dependencies.cargo_metadata] + version = "0.15.3" + +@@ -310,8 +300,6 @@ version = "4.3.0" + [features] + cli-completion = ["dep:clap_complete_command"] + cross-compile = [ +- "zig", +- "xwin", + ] + default = [ + "full", +@@ -330,7 +318,6 @@ log = ["tracing-subscriber"] + native-tls = [ + "dep:native-tls", + "ureq?/native-tls", +- "cargo-xwin?/native-tls", + "dep:rustls-pemfile", + ] + password-storage = [ +@@ -340,7 +327,6 @@ password-storage = [ + rustls = [ + "dep:rustls", + "ureq?/tls", +- "cargo-xwin?/rustls-tls", + "dep:rustls-pemfile", + ] + scaffolding = [ +@@ -358,5 +344,3 @@ upload = [ + "wild", + "dep:dirs", + ] +-xwin = ["cargo-xwin"] +-zig = ["cargo-zigbuild"] diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm index f572a3404e..a291282325 100644 --- a/gnu/packages/rust-apps.scm +++ b/gnu/packages/rust-apps.scm @@ -41,6 +41,7 @@ (define-module (gnu packages rust-apps) #:use-module (guix build-system cargo) + #:use-module (guix build-system pyproject) #:use-module (guix deprecation) #:use-module (guix download) #:use-module (guix gexp) @@ -74,6 +75,8 @@ #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages python) + #:use-module (gnu packages python-build) #:use-module (gnu packages python-xyz) #:use-module (gnu packages rust) #:use-module (gnu packages tls) @@ -734,6 +737,168 @@ replacement for i3status, written in pure Rust. It provides a way to display bar. It is also compatible with sway.") (license license:gpl3))) +(define-public maturin + (package + (name "maturin") + (version "1.1.0") + (source (origin + (method url-fetch) + (uri (crate-uri "maturin" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0asdljd396kdsvnx9kbsr5s0x6w73b59kdpx732333dhm13qgn03")) + (patches (search-patches "maturin-no-cross-compile.patch")))) + (build-system cargo-build-system) + (arguments + `(#:modules ((guix build cargo-build-system) + ((guix build pyproject-build-system) #:prefix py:) + (guix build utils)) + #:imported-modules ((guix build cargo-build-system) + (guix build cargo-utils) + ,@%pyproject-build-system-modules) + #:install-source? #f + #:cargo-test-flags + '("--release" "--" + ;; Not all files are included. + "--skip=build_options::test::test_find_bridge_bin" + "--skip=build_options::test::test_find_bridge_cffi" + "--skip=build_options::test::test_find_bridge_pyo3" + "--skip=build_options::test::test_find_bridge_pyo3_abi3" + "--skip=build_options::test::test_find_bridge_pyo3_feature" + "--skip=metadata::test::test_implicit_readme" + "--skip=metadata::test::test_merge_metadata_from_pyproject_dynamic_license_test" + "--skip=metadata::test::test_merge_metadata_from_pyproject_toml" + "--skip=metadata::test::test_merge_metadata_from_pyproject_toml_with_customized_python_source_dir" + "--skip=pyproject_toml::tests::test_warn_missing_maturin_version") + #:cargo-inputs + (("rust-anyhow" ,rust-anyhow-1) + ("rust-base64" ,rust-base64-0.21) + ("rust-bytesize" ,rust-bytesize-1) + ("rust-cargo-config2" ,rust-cargo-config2-0.1) + ("rust-cargo-options" ,rust-cargo-options-0.6) + ;("rust-cargo-xwin" ,rust-cargo-xwin-0.14) + ;("rust-cargo-zigbuild" ,rust-cargo-zigbuild-0.16) + ("rust-cargo-metadata" ,rust-cargo-metadata-0.15) + ("rust-cbindgen" ,rust-cbindgen-0.24) + ("rust-cc" ,rust-cc-1) + ("rust-clap" ,rust-clap-4) + ("rust-clap-complete-command" ,rust-clap-complete-command-0.5) + ("rust-configparser" ,rust-configparser-3) + ("rust-console" ,rust-console-0.15) + ("rust-dialoguer" ,rust-dialoguer-0.10) + ("rust-dirs" ,rust-dirs-5) + ("rust-dunce" ,rust-dunce-1) + ("rust-fat-macho" ,rust-fat-macho-0.4) + ("rust-flate2" ,rust-flate2-1) + ("rust-fs-err" ,rust-fs-err-2) + ("rust-glob" ,rust-glob-0.3) + ("rust-goblin" ,rust-goblin-0.6) + ("rust-ignore" ,rust-ignore-0.4) + ("rust-indexmap" ,rust-indexmap-1) + ("rust-itertools" ,rust-itertools-0.10) + ("rust-keyring" ,rust-keyring-2) + ("rust-lddtree" ,rust-lddtree-0.3) + ("rust-minijinja" ,rust-minijinja-0.34) + ("rust-multipart" ,rust-multipart-0.18) + ("rust-native-tls" ,rust-native-tls-0.2) + ("rust-normpath" ,rust-normpath-1) + ("rust-once-cell" ,rust-once-cell-1) + ("rust-pep440-rs" ,rust-pep440-rs-0.3) + ("rust-pep508-rs" ,rust-pep508-rs-0.2) + ("rust-platform-info" ,rust-platform-info-2) + ("rust-pyproject-toml" ,rust-pyproject-toml-0.6) + ("rust-python-pkginfo" ,rust-python-pkginfo-0.5) + ("rust-regex" ,rust-regex-1) + ("rust-rustc-version" ,rust-rustc-version-0.4) + ("rust-rustls" ,rust-rustls-0.20) + ("rust-rustls-pemfile" ,rust-rustls-pemfile-1) + ("rust-same-file" ,rust-same-file-1) + ("rust-semver" ,rust-semver-1) + ("rust-serde" ,rust-serde-1) + ("rust-serde-json" ,rust-serde-json-1) + ("rust-sha2" ,rust-sha2-0.10) + ("rust-tar" ,rust-tar-0.4) + ("rust-target-lexicon" ,rust-target-lexicon-0.12) + ("rust-tempfile" ,rust-tempfile-3) + ("rust-textwrap" ,rust-textwrap-0.16) + ("rust-thiserror" ,rust-thiserror-1) + ("rust-time" ,rust-time-0.3) + ("rust-toml" ,rust-toml-0.7) + ("rust-toml-edit" ,rust-toml-edit-0.19) + ("rust-tracing" ,rust-tracing-0.1) + ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.3) + ("rust-ureq" ,rust-ureq-2) + ("rust-url" ,rust-url-2) + ("rust-wild" ,rust-wild-2) + ("rust-zip" ,rust-zip-0.6)) + #:cargo-development-inputs + (("rust-indoc" ,rust-indoc-2) + ("rust-pretty-assertions" ,rust-pretty-assertions-1) + ("rust-rustversion" ,rust-rustversion-1) + ("rust-time" ,rust-time-0.3) + ("rust-trycmd" ,rust-trycmd-0.14) + ("rust-which" ,rust-which-4)) + #:phases + (modify-phases %standard-phases + (add-after 'build 'build-python-module + (lambda _ + ;; Match the features from the cargo-build-system and Cargo.toml. + (setenv "MATURIN_SETUP_ARGS" "--features=default") + ((assoc-ref py:%standard-phases 'build)))) + + ;; We can't use the pyproject install phase because maturin is a + ;; binary, not a python script. + (add-after 'install 'install-python-module + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (wheel (car (find-files "dist" "\\.whl$"))) + (site-dir (py:site-packages inputs outputs)) + (pyversion + (string-append "python" + (py:python-version + (assoc-ref inputs "python-wrapper"))))) + (invoke "python" "-m" "zipfile" "-e" wheel site-dir) + (mkdir-p (string-append out "/bin")) + (for-each delete-file + (find-files (string-append out "/lib/" pyversion) + "^maturin$"))))) + (add-after 'install 'install-completions + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (share (string-append out "/share")) + (maturin (string-append out "/bin/maturin"))) + ;; TODO? fig, nushell, powershell + (mkdir-p (string-append share "/bash-completion/completions")) + (with-output-to-file + (string-append share "/bash-completion/completions/maturin") + (lambda _ (invoke maturin "completions" "bash"))) + (mkdir-p (string-append share "/fish/vendor_completions.d")) + (with-output-to-file + (string-append share "/fish/vendor_completions.d/maturin.fish") + (lambda _ (invoke maturin "completions" "fish"))) + (mkdir-p (string-append share "/zsh/site-functions")) + (with-output-to-file + (string-append share "/zsh/site-functions/_maturin") + (lambda _ (invoke maturin "completions" "zsh"))) + (mkdir-p (string-append share "/elvish/lib")) + (with-output-to-file + (string-append share "/elvish/lib/maturin") + (lambda _ (invoke maturin "completions" "elvish"))))))))) + (propagated-inputs + (list python-tomli)) + (native-inputs + (list perl + python-wheel + python-wrapper + python-setuptools-rust)) + (home-page "https://github.com/pyo3/maturin") + (synopsis "Build and publish crates and python packages") + (description + "Build and publish crates with @code{pyo3}, @code{rust-cpython} and +@code{cffi} bindings as well as rust binaries as python packages.") + (license (list license:expat license:asl2.0)))) + (define-public ripgrep (package (name "ripgrep") -- cgit v1.2.3 From d55d2a971b995ee2b653ddd513c610d159998992 Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Tue, 15 Aug 2023 00:11:31 +0200 Subject: gnu: fbreader: Fix icon. * gnu/packages/patches/fbreader-fix-icon.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/ebook.scm (fbreader)[source]<#:patches>: Add it. --- gnu/local.mk | 1 + gnu/packages/ebook.scm | 3 ++- gnu/packages/patches/fbreader-fix-icon.patch | 29 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/fbreader-fix-icon.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 4ce4775b82..f4db78830f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1137,6 +1137,7 @@ dist_patch_DATA = \ %D%/packages/patches/fasthenry-spSolve.patch \ %D%/packages/patches/fasthenry-spFactor.patch \ %D%/packages/patches/fbreader-curl-7.62.patch \ + %D%/packages/patches/fbreader-fix-icon.patch \ %D%/packages/patches/fenics-dolfin-algorithm.patch \ %D%/packages/patches/fenics-dolfin-demo-init.patch \ %D%/packages/patches/fenics-dolfin-boost.patch \ diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index 6962547c75..16d4fcd6e3 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -454,7 +454,8 @@ designed to be used in a generic text renderer.") (sha256 (base32 "0c0s4silpax74kwfz3dfmzn4lkv6jsyb800vfak166vii0hvbv3d")) - (patches (search-patches "fbreader-curl-7.62.patch")))) + (patches (search-patches "fbreader-curl-7.62.patch" + "fbreader-fix-icon.patch")))) (build-system gnu-build-system) (inputs `(("curl" ,curl) diff --git a/gnu/packages/patches/fbreader-fix-icon.patch b/gnu/packages/patches/fbreader-fix-icon.patch new file mode 100644 index 0000000000..635abf6a43 --- /dev/null +++ b/gnu/packages/patches/fbreader-fix-icon.patch @@ -0,0 +1,29 @@ +Author: Danny Milosavljevic +Date: 2023-08-15 + +--- orig/jswba9mn9nh43l7g4w2qslmr7i3q64vy-fbreader-0.99.6-checkout/fbreader/desktop/desktop 2023-08-14 23:56:03.092567740 +0200 ++++ jswba9mn9nh43l7g4w2qslmr7i3q64vy-fbreader-0.99.6-checkout/fbreader/desktop/desktop 2023-08-14 23:56:59.936213278 +0200 +@@ -25,5 +25,5 @@ + StartupNotify=true + Terminal=false + Type=Application +-Icon=FBReader.png ++Icon=FBReader + Categories=Office;Viewer;Literature; +--- orig/jswba9mn9nh43l7g4w2qslmr7i3q64vy-fbreader-0.99.6-checkout/fbreader/desktop/Makefile 2023-08-14 23:56:03.092567740 +0200 ++++ jswba9mn9nh43l7g4w2qslmr7i3q64vy-fbreader-0.99.6-checkout/fbreader/desktop/Makefile 2023-08-15 00:23:19.046691430 +0200 +@@ -10,6 +10,14 @@ + @install -m 0644 desktop $(DESTDIR)/usr/share/applications/$(TARGET).desktop + @install -d $(DESTDIR)$(IMAGEDIR) + @install -m 0644 ../data/icons/application/$(TARGET_ARCH).png $(DESTDIR)$(IMAGEDIR)/FBReader.png ++ @install -d $(DESTDIR)$(SHAREDIR)/icons/hicolor/16x16/apps ++ @install -m 0644 ../data/icons/application/16x16.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/16x16/apps/FBReader.png ++ @install -d $(DESTDIR)$(SHAREDIR)/icons/hicolor/32x32/apps ++ @install -m 0644 ../data/icons/application/32x32.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/32x32/apps/FBReader.png ++ @install -d $(DESTDIR)$(SHAREDIR)/icons/hicolor/48x48/apps ++ @install -m 0644 ../data/icons/application/48x48.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/48x48/apps/FBReader.png ++ @install -d $(DESTDIR)$(SHAREDIR)/icons/hicolor/64x64/apps ++ @install -m 0644 ../data/icons/application/64x64.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/64x64/apps/FBReader.png + @install -m 0644 ../data/default/config.desktop.xml $(SHARE_FBREADER)/default/config.xml + @install -m 0644 ../data/default/keymap.desktop.xml $(SHARE_FBREADER)/default/keymap.xml + @install -m 0644 ../data/default/styles.desktop.xml $(SHARE_FBREADER)/default/styles.xml -- cgit v1.2.3 From 820bf78cbc487d28457acc6cb790f4cbd7cc49b9 Mon Sep 17 00:00:00 2001 From: gemmaro Date: Mon, 7 Aug 2023 23:05:41 +0900 Subject: gnu: highlight: Add "gui" output. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/pretty-print.scm (highlight): Add gui output. [source]: Add patch for GUI data directory. [outputs]: Add gui. [arguments]{fix-search-for-lua}: Fix Lua package name for GUI. {build-gui}: Add phase to build GUI. {install}: Set PREFIX variable. {install-gui}: Add phase to install GUI. [inputs]: Add qtbase-5. * gnu/packages/patches/highlight-gui-data-dir.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. Signed-off-by: Ludovic Courtès --- gnu/local.mk | 1 + gnu/packages/patches/highlight-gui-data-dir.patch | 51 ++++++++++++++++++ gnu/packages/pretty-print.scm | 66 +++++++++++++++++------ 3 files changed, 103 insertions(+), 15 deletions(-) create mode 100644 gnu/packages/patches/highlight-gui-data-dir.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index f4db78830f..1bf33377a4 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1373,6 +1373,7 @@ dist_patch_DATA = \ %D%/packages/patches/hdf-eos5-fortrantests.patch \ %D%/packages/patches/heimdal-CVE-2022-45142.patch \ %D%/packages/patches/helm-fix-gcc-9-build.patch \ + %D%/packages/patches/highlight-gui-data-dir.patch \ %D%/packages/patches/http-parser-CVE-2020-8287.patch \ %D%/packages/patches/htslib-for-stringtie.patch \ %D%/packages/patches/hubbub-sort-entities.patch \ diff --git a/gnu/packages/patches/highlight-gui-data-dir.patch b/gnu/packages/patches/highlight-gui-data-dir.patch new file mode 100644 index 0000000000..33f40d309c --- /dev/null +++ b/gnu/packages/patches/highlight-gui-data-dir.patch @@ -0,0 +1,51 @@ +This patch distinguishes between the data directory path for GUI and the one +for non-GUI by allowing to set the former path. + +highlight package has two outputs: out and gui. Both outputs have files which +will be in the same directory /share/highlight/ without this patch (see also +install and install-gui tasks in makefile). In the gui's data directory, +there are GUI specific files in /share/highlight/gui-files/{l10n,ext}/. + +diff --git a/src/gui-qt/main.cpp b/src/gui-qt/main.cpp +index 4700dc1..3567745 100644 +--- a/src/gui-qt/main.cpp ++++ b/src/gui-qt/main.cpp +@@ -47,8 +47,8 @@ int main(int argc, char *argv[]) + { + QApplication app(argc, argv); + QTranslator translator; +-#ifdef DATA_DIR +- translator.load(QString("%1/gui_files/l10n/highlight_%2").arg(DATA_DIR).arg(QLocale::system().name())); ++#ifdef GUI_DATA_DIR ++ translator.load(QString("%1/gui_files/l10n/highlight_%2").arg(GUI_DATA_DIR).arg(QLocale::system().name())); + #else + translator.load(QString("%1/gui_files/l10n/highlight_%2").arg(QDir::currentPath()).arg(QLocale::system().name())); + #endif +diff --git a/src/gui-qt/mainwindow.cpp b/src/gui-qt/mainwindow.cpp +index 3a21ad2..f060431 100644 +--- a/src/gui-qt/mainwindow.cpp ++++ b/src/gui-qt/mainwindow.cpp +@@ -2131,8 +2131,8 @@ QString MainWindow::getDistFileFilterPath(){ + #ifdef Q_OS_OSX + return QCoreApplication::applicationDirPath()+"/../Resources/gui_files/ext/fileopenfilter.conf"; + #else +- #ifdef DATA_DIR +- return QString(DATA_DIR) + "/gui_files/ext/fileopenfilter.conf"; ++ #ifdef GUI_DATA_DIR ++ return QString(GUI_DATA_DIR) + "/gui_files/ext/fileopenfilter.conf"; + #else + return QDir::currentPath()+"/gui_files/ext/fileopenfilter.conf"; + #endif +diff --git a/src/makefile b/src/makefile +index b1d7988..2963105 100644 +--- a/src/makefile ++++ b/src/makefile +@@ -118,7 +118,7 @@ gui-qt: highlight-gui + + highlight-gui: libhighlight.a ${GUI_OBJECTS} + cd gui-qt && \ +- ${QMAKE} 'DEFINES+=DATA_DIR=\\\"${HL_DATA_DIR}\\\" CONFIG_DIR=\\\"${HL_CONFIG_DIR}\\\" DOC_DIR=\\\"${HL_DOC_DIR}\\\" ' && \ ++ ${QMAKE} 'DEFINES+=DATA_DIR=\\\"${HL_DATA_DIR}\\\" CONFIG_DIR=\\\"${HL_CONFIG_DIR}\\\" DOC_DIR=\\\"${HL_DOC_DIR}\\\" GUI_DATA_DIR=\\\"${GUI_DATA_DIR}\\\" ' && \ + $(MAKE) + + $(OBJECTFILES) : makefile diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm index 1b2cf4becf..f8763b7b74 100644 --- a/gnu/packages/pretty-print.scm +++ b/gnu/packages/pretty-print.scm @@ -52,7 +52,8 @@ #:use-module (gnu packages lua) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) - #:use-module (gnu packages swig)) + #:use-module (gnu packages swig) + #:use-module (gnu packages qt)) (define-public a2ps (package @@ -352,13 +353,15 @@ seen in a terminal.") (package (name "highlight") (version "4.7") + (outputs (list "out" "gui")) (source (origin (method url-fetch) (uri (string-append "http://www.andre-simon.de/zip/highlight-" version ".tar.bz2")) (sha256 (base32 - "1cl21qpgy92w1x53vrn1bgq84mkh6fgayc9k38mz4xmz2yw01nv1")))) + "1cl21qpgy92w1x53vrn1bgq84mkh6fgayc9k38mz4xmz2yw01nv1")) + (patches (search-patches "highlight-gui-data-dir.patch")))) (build-system gnu-build-system) (arguments (list #:tests? #f ;no tests @@ -371,17 +374,44 @@ seen in a terminal.") (delete 'configure) ;no configure script (add-after 'unpack 'fix-search-for-lua (lambda _ - (substitute* "src/makefile" - (("(LUA_PKG_NAME=).*" _ assignment) - (string-append assignment "lua-" - #$(version-major+minor (package-version - lua)) - "\n"))) - (substitute* "extras/swig/makefile" - (("lua") - (string-append "lua-" - #$(version-major+minor (package-version - lua))))))) + (let ((ver #$(version-major+minor (package-version + lua)))) + (substitute* "src/makefile" + (("(LUA_PKG_NAME=).*" _ assignment) + (string-append assignment "lua-" ver "\n"))) + (substitute* "src/gui-qt/highlight.pro" + (("(PKGCONFIG \\+= lua)" _ assignment) + (string-append assignment "-" ver))) + (substitute* "extras/swig/makefile" + (("lua") + (string-append "lua-" ver)))))) + (add-after 'build 'build-gui + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (data (string-append out + "/share/highlight/")) + (conf (string-append out "/etc/highlight/")) + (doc (string-append out + "/share/doc/highlight/")) + (gui (assoc-ref outputs "gui")) + (gui-data (string-append gui + "/share/highlight/"))) + ;; modified version of gui task in makefile + (invoke "make" + "-C" + "./src" + "-f" + "./makefile" + (string-append "HL_DATA_DIR=" data) + (string-append "HL_CONFIG_DIR=" conf) + (string-append "HL_DOC_DIR=" doc) + (string-append "GUI_DATA_DIR=" gui-data) + "gui-qt")))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (invoke "make" "install" + (string-append "PREFIX=" out))))) (add-after 'install 'install-perl-bindings (lambda* (#:key outputs #:allow-other-keys) (let* ((perldir (string-append (assoc-ref outputs @@ -394,8 +424,14 @@ seen in a terminal.") (invoke "make" "perl") (invoke "perl" "-I" "." "testmod.pl") (install-file "highlight.pm" perldir) - (install-file "highlight.so" autodir)))))))) - (inputs (list lua boost perl)) + (install-file "highlight.so" autodir))))) + (add-after 'install 'install-gui + (lambda* (#:key outputs #:allow-other-keys) + (let ((gui (assoc-ref outputs "gui"))) + (mkdir-p (string-append gui "/bin")) + (invoke "make" "install-gui" + (string-append "PREFIX=" gui)))))))) + (inputs (list lua boost perl qtbase-5)) (native-inputs (list pkg-config swig)) (home-page "http://www.andre-simon.de/doku/highlight/en/highlight.php") (synopsis "Convert code to documents with syntax highlighting") -- cgit v1.2.3 From b8ee6b8a59bf02f47a6668e016905308b441523e Mon Sep 17 00:00:00 2001 From: Felix Lechner Date: Sun, 28 May 2023 16:36:31 -0700 Subject: services: Add cachefilesd service. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks to Bruno Victal "mirai" for cooperating on this patch and for generously sharing a wealth of insights about Guix services. Thanks to Jean-Baptiste Note for an early version of this service! * doc/guix.texi (Linux Services)[Cachefilesd Service]: New heading. * gnu/services/linux.scm (serialize-string, non-negative-integer?) (serialize-non-negative-integer, string, non-negative-integer) (make-option-serializer, make-percentage-threshold-serializer): New procedures. (cachefilesd-configuration): New record type. (cachefilesd-service-type): New variable. * gnu/tests/cachefilesd.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. Co-authored-by: Bruno Victal Signed-off-by: Ludovic Courtès --- doc/guix.texi | 89 +++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/linux.scm | 199 +++++++++++++++++++++++++++++++++++++++++++++- gnu/tests/cachefilesd.scm | 71 +++++++++++++++++ 4 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 gnu/tests/cachefilesd.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index b50feed4c4..22590b4f9c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -117,6 +117,7 @@ Copyright @copyright{} 2023 Karl Hallsby@* Copyright @copyright{} 2023 Nathaniel Nicandro@* Copyright @copyright{} 2023 Tanguy Le Carrour@* Copyright @copyright{} 2023 Brian Cully@* +Copyright @copyright{} 2023 Felix Lechner@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -38659,6 +38660,94 @@ parameters, can be done as follow: @end lisp @end defvar +@subsubheading Cachefilesd Service + +@cindex cachefilesd +@cindex fscache, file system caching (Linux) +The Cachefilesd service starts a daemon that caches network file system +data locally. It is especially useful for NFS and AFS shares, where it +reduces latencies for repeated access when reading files. + +The daemon can be configured as follows: + +@lisp +(service cachefilesd-service-type + (cachefilesd-configuration + (cache-directory "/var/cache/fscache"))) +@end lisp + +@defvar cachefilesd-service-type +The service type for starting @command{cachefilesd}. The value for this +service type is a @code{cachefilesd-configuration}, whose only required +field is @var{cache-directory}. + +@end defvar + +@c %start of fragment +@deftp {Data Type} cachefilesd-configuration +Available @code{cachefilesd-configuration} fields are: + +@table @asis +@item @code{cachefilesd} (default: @code{cachefilesd}) (type: file-like) +The cachefilesd package to use. + +@item @code{debug-output?} (default: @code{#f}) (type: boolean) +Print debugging output to stderr. + +@item @code{use-syslog?} (default: @code{#t}) (type: boolean) +Log to syslog facility instead of stdout. + +@item @code{scan?} (default: @code{#t}) (type: boolean) +Scan for cachable objects. + +@item @code{cache-directory} (type: maybe-string) +Location of the cache directory. + +@item @code{cache-name} (default: @code{"CacheFiles"}) (type: maybe-string) +Name of cache (keep unique). + +@item @code{security-context} (type: maybe-string) +SELinux security context. + +@item @code{pause-culling-for-block-percentage} (default: @code{7}) (type: maybe-non-negative-integer) +Pause culling when available blocks exceed this percentage. + +@item @code{pause-culling-for-file-percentage} (default: @code{7}) (type: maybe-non-negative-integer) +Pause culling when available files exceed this percentage. + +@item @code{resume-culling-for-block-percentage} (default: @code{5}) (type: maybe-non-negative-integer) +Start culling when available blocks drop below this percentage. + +@item @code{resume-culling-for-file-percentage} (default: @code{5}) (type: maybe-non-negative-integer) +Start culling when available files drop below this percentage. + +@item @code{pause-caching-for-block-percentage} (default: @code{1}) (type: maybe-non-negative-integer) +Pause further allocations when available blocks drop below this +percentage. + +@item @code{pause-caching-for-file-percentage} (default: @code{1}) (type: maybe-non-negative-integer) +Pause further allocations when available files drop below this +percentage. + +@item @code{log2-table-size} (default: @code{12}) (type: maybe-non-negative-integer) +Size of tables holding cullable objects in logarithm of base 2. + +@item @code{cull?} (default: @code{#t}) (type: boolean) +Create free space by culling (consumes system load). + +@item @code{trace-function-entry-in-kernel-module?} (default: @code{#f}) (type: boolean) +Trace function entry in the kernel module (for debugging). + +@item @code{trace-function-exit-in-kernel-module?} (default: @code{#f}) (type: boolean) +Trace function exit in the kernel module (for debugging). + +@item @code{trace-internal-checkpoints-in-kernel-module?} (default: @code{#f}) (type: boolean) +Trace internal checkpoints in the kernel module (for debugging). + +@end table +@end deftp +@c %end of fragment + @cindex rasdaemon @cindex Platform Reliability, Availability and Serviceability daemon @subsubheading Rasdaemon Service diff --git a/gnu/local.mk b/gnu/local.mk index 1bf33377a4..5ed399adb0 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -770,6 +770,7 @@ GNU_SYSTEM_MODULES = \ %D%/tests.scm \ %D%/tests/audio.scm \ %D%/tests/base.scm \ + %D%/tests/cachefilesd.scm \ %D%/tests/ci.scm \ %D%/tests/cups.scm \ %D%/tests/databases.scm \ diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm index d105c42850..d17f492e15 100644 --- a/gnu/services/linux.scm +++ b/gnu/services/linux.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2021 B. Wilson ;;; Copyright © 2022 Josselin Poiret ;;; Copyright © 2023 Bruno Victal +;;; Copyright © 2023 Felix Lechner ;;; ;;; This file is part of GNU Guix. ;;; @@ -67,6 +68,28 @@ kernel-module-loader-service-type + cachefilesd-configuration + cachefilesd-configuration? + cachefilesd-configuration-cachefilesd + cachefilesd-configuration-debug-output? + cachefilesd-configuration-use-syslog? + cachefilesd-configuration-scan? + cachefilesd-configuration-cache-directory + cachefilesd-configuration-cache-name + cachefilesd-configuration-security-context + cachefilesd-configuration-pause-culling-for-block-percentage + cachefilesd-configuration-pause-culling-for-file-percentage + cachefilesd-configuration-resume-culling-for-block-percentage + cachefilesd-configuration-resume-culling-for-file-percentage + cachefilesd-configuration-pause-caching-for-block-percentage + cachefilesd-configuration-pause-caching-for-file-percentage + cachefilesd-configuration-log2-table-size + cachefilesd-configuration-cull? + cachefilesd-configuration-trace-function-entry-in-kernel-module + cachefilesd-configuration-trace-function-exit-in-kernel-module + cachefilesd-configuration-trace-internal-checkpoints-in-kernel-module + cachefilesd-service-type + rasdaemon-configuration rasdaemon-configuration? rasdaemon-configuration-record? @@ -306,6 +329,180 @@ more information)." (extend append) (default-value '()))) + +;;; +;;; Cachefilesd, an FS-Cache daemon +;;; + +(define (serialize-string variable-symbol value) + #~(format #f "~a ~a~%" #$(symbol->string variable-symbol) #$value)) + +(define-maybe string) + +(define (non-negative-integer? val) + (and (exact-integer? val) (not (negative? val)))) + +(define (serialize-non-negative-integer variable-symbol value) + #~(format #f "~a ~d~%" #$(symbol->string variable-symbol) #$value)) + +(define-maybe non-negative-integer) + +(define (make-option-serializer option-symbol) + (lambda (variable-symbol text) + (if (maybe-value-set? text) + #~(format #f "~a ~a~%" #$(symbol->string option-symbol) #$text) + ""))) + +(define (make-percentage-threshold-serializer threshold-symbol) + (lambda (variable-symbol percentage) + (if (maybe-value-set? percentage) + #~(format #f "~a ~a%~%" #$(symbol->string threshold-symbol) #$percentage) + ""))) + +(define-configuration cachefilesd-configuration + (cachefilesd + (file-like cachefilesd) + "The cachefilesd package to use." + (serializer empty-serializer)) + + ;; command-line options + (debug-output? + (boolean #f) + "Print debugging output to stderr." + (serializer empty-serializer)) + + (use-syslog? + (boolean #t) + "Log to syslog facility instead of stdout." + (serializer empty-serializer)) + + ;; culling is part of the configuration file + ;; despite the name of the command-line option + (scan? + (boolean #t) + "Scan for cachable objects." + (serializer empty-serializer)) + + ;; sole required field in the configuration file + (cache-directory + maybe-string + "Location of the cache directory." + (serializer (make-option-serializer 'dir))) + + (cache-name + (maybe-string "CacheFiles") + "Name of cache (keep unique)." + (serializer (make-option-serializer 'tag))) + + (security-context + maybe-string + "SELinux security context." + (serializer (make-option-serializer 'secctx))) + + ;; percentage thresholds in the configuration file + (pause-culling-for-block-percentage + (maybe-non-negative-integer 7) + "Pause culling when available blocks exceed this percentage." + (serializer (make-percentage-threshold-serializer 'brun))) + + (pause-culling-for-file-percentage + (maybe-non-negative-integer 7) + "Pause culling when available files exceed this percentage." + (serializer (make-percentage-threshold-serializer 'frun))) + + (resume-culling-for-block-percentage + (maybe-non-negative-integer 5) + "Start culling when available blocks drop below this percentage." + (serializer (make-percentage-threshold-serializer 'bcull))) + + (resume-culling-for-file-percentage + (maybe-non-negative-integer 5) + "Start culling when available files drop below this percentage." + (serializer (make-percentage-threshold-serializer 'fcull))) + + (pause-caching-for-block-percentage + (maybe-non-negative-integer 1) + "Pause further allocations when available blocks drop below this percentage." + (serializer (make-percentage-threshold-serializer 'bstop))) + + (pause-caching-for-file-percentage + (maybe-non-negative-integer 1) + "Pause further allocations when available files drop below this percentage." + (serializer (make-percentage-threshold-serializer 'fstop))) + + ;; run time optimizations in the configuration file + (log2-table-size + (maybe-non-negative-integer 12) + "Size of tables holding cullable objects in logarithm of base 2." + (serializer (make-option-serializer 'culltable))) + + (cull? + (boolean #t) + "Create free space by culling (consumes system load)." + (serializer + (lambda (variable-symbol value) + (if value "" "nocull\n")))) + + ;; kernel module debugging in the configuration file + (trace-function-entry-in-kernel-module? + (boolean #f) + "Trace function entry in the kernel module (for debugging)." + (serializer empty-serializer)) + + (trace-function-exit-in-kernel-module? + (boolean #f) + "Trace function exit in the kernel module (for debugging)." + (serializer empty-serializer)) + + (trace-internal-checkpoints-in-kernel-module? + (boolean #f) + "Trace internal checkpoints in the kernel module (for debugging)." + (serializer empty-serializer))) + +(define (serialize-cachefilesd-configuration configuration) + (mixed-text-file + "cachefilesd.conf" + (serialize-configuration configuration cachefilesd-configuration-fields))) + +(define (cachefilesd-shepherd-service config) + "Return a list of for cachefilesd for CONFIG." + (match-record + config (cachefilesd + debug-output? + use-syslog? + scan? + cache-directory) + (let ((configuration-file (serialize-cachefilesd-configuration config))) + (shepherd-service + (documentation "Run the cachefilesd daemon for FS-Cache.") + (provision '(cachefilesd)) + (requirement (append '(file-systems) + (if use-syslog? '(syslogd) '()))) + (start #~(begin + (and=> #$(maybe-value cache-directory) mkdir-p) + (make-forkexec-constructor + `(#$(file-append cachefilesd "/sbin/cachefilesd") + ;; do not detach + "-n" + #$@(if debug-output? '("-d") '()) + #$@(if use-syslog? '() '("-s")) + #$@(if scan? '() '("-N")) + "-f" #$configuration-file)))) + (stop #~(make-kill-destructor)))))) + +(define cachefilesd-service-type + (service-type + (name 'cachefilesd) + (description + "Run the file system cache daemon @command{cachefilesd}, which relies on +the Linux @code{cachefiles} module.") + (extensions + (list (service-extension kernel-module-loader-service-type + (const '("cachefiles"))) + (service-extension shepherd-root-service-type + (compose list cachefilesd-shepherd-service)))) + (default-value (cachefilesd-configuration)))) + ;;; ;;; Reliability, Availability, and Serviceability (RAS) daemon @@ -351,7 +548,7 @@ more information)." ;;; -;;; Kernel module loader. +;;; Zram device ;;; (define-record-type* diff --git a/gnu/tests/cachefilesd.scm b/gnu/tests/cachefilesd.scm new file mode 100644 index 0000000000..7f5d513067 --- /dev/null +++ b/gnu/tests/cachefilesd.scm @@ -0,0 +1,71 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Peter Mikkelsen +;;; Copyright © 2022 Bruno Victal +;;; Copyright © 2023 Felix Lechner +;;; +;;; 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 tests cachefilesd) + #:use-module (gnu tests) + #:use-module (gnu system) + #:use-module (gnu system vm) + #:use-module (gnu services) + #:use-module (gnu services linux) + #:use-module (guix gexp) + #:export (%test-cachefilesd)) + +(define %cachefilesd-os + (simple-operating-system + (service cachefilesd-service-type + (cachefilesd-configuration + (cache-directory "/var/cache/fscache"))))) + +(define (run-cachefilesd-test) + "Run tests in %cachefilesd-os, which has cachefilesd running." + (define os + (marionette-operating-system + %cachefilesd-os + #:imported-modules '((gnu services herd)))) + + (define vm + (virtual-machine os)) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-64) + (gnu build marionette)) + (define marionette + (make-marionette (list #$vm))) + + (test-runner-current (system-test-runner #$output)) + (test-begin "cachefilesd") + + (test-assert "service is running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'cachefilesd)) + marionette)) + + (test-end)))) + (gexp->derivation "cachefilesd-test" test)) + +(define %test-cachefilesd + (system-test + (name "cachefilesd") + (description "Test that the cachefilesd runs when started.") + (value (run-cachefilesd-test)))) -- cgit v1.2.3 From 880ada0bdb9e694573ec42200d48658b27744b9b Mon Sep 17 00:00:00 2001 From: kiasoc5 Date: Mon, 5 Jun 2023 19:18:20 -0400 Subject: gnu: Move stalonetray to (gnu packages xdisorg). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See . * gnu/packages/stalonetray.scm (stalonetray): Move from here… * gnu/packages/xdisorg.scm (stalonetray): …to here. * gnu/local.mk (GNU_SYSTEM_MODULES): Adjust accordingly. Signed-off-by: Ludovic Courtès --- gnu/local.mk | 1 - gnu/packages/stalonetray.scm | 69 -------------------------------------------- gnu/packages/xdisorg.scm | 41 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 70 deletions(-) delete mode 100644 gnu/packages/stalonetray.scm (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 5ed399adb0..9b75e16fb3 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -588,7 +588,6 @@ GNU_SYSTEM_MODULES = \ %D%/packages/squirrel.scm \ %D%/packages/ssh.scm \ %D%/packages/sssd.scm \ - %D%/packages/stalonetray.scm \ %D%/packages/statistics.scm \ %D%/packages/stb.scm \ %D%/packages/stenography.scm \ diff --git a/gnu/packages/stalonetray.scm b/gnu/packages/stalonetray.scm deleted file mode 100644 index 37b5cdaae3..0000000000 --- a/gnu/packages/stalonetray.scm +++ /dev/null @@ -1,69 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 Raimon Grau -;;; Copyright © 2016 Efraim Flashner -;;; -;;; 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 packages stalonetray) - #:use-module (guix gexp) - #:use-module (guix packages) - #:use-module (guix git-download) - #:use-module (guix build-system gnu) - #:use-module ((guix licenses) #:select (gpl2+)) - #:use-module (gnu packages autotools) - #:use-module (gnu packages docbook) - #:use-module (gnu packages xml) - #:use-module (gnu packages xorg)) - -(define-public stalonetray - (package - (name "stalonetray") - (version "0.8.5") - (source - (origin - (method git-fetch) - (uri - (git-reference - (url "https://github.com/kolbusa/stalonetray") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "074wy1xppfycillbxq6fwrq87ik9glc95083df5vgm20mhzni7pz")))) - (arguments - (list - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'fix-docbook-root - (lambda _ - (substitute* "configure.ac" - (("AC_SUBST\\(DOCBOOK_ROOT\\)" all) - (string-append "DOCBOOK_ROOT=" - #$(this-package-native-input "docbook-xsl") - "/xml/xsl/docbook-xsl-" - #$(package-version (this-package-native-input "docbook-xsl")) - "; " all)))))))) - (inputs (list libx11 libxpm)) - (native-inputs (list autoconf automake libxslt docbook-xsl)) - (build-system gnu-build-system) - (home-page "https://kolbusa.github.io/stalonetray") - (synopsis "Standalone freedesktop.org and KDE systray implementation") - (description - "Stalonetray is a stand-alone freedesktop.org and KDE system -tray (notification area) for X Window System/X11 (e.g. X.Org or XFree86). It -has full XEMBED support and minimal dependencies: an X11 lib only. Stalonetray -works with virtually any EWMH-compliant window manager.") - (license gpl2+))) diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index e9167eab5f..32afa3a921 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -103,6 +103,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages cpp) #:use-module (gnu packages datastructures) + #:use-module (gnu packages docbook) #:use-module (gnu packages documentation) #:use-module (gnu packages flex) #:use-module (gnu packages fontutils) @@ -2053,6 +2054,46 @@ border, and background. It also supports multihead setups, customized mouse actions, a built-in clock, a battery monitor and a system tray.") (license license:gpl2))) +(define-public stalonetray + (package + (name "stalonetray") + (version "0.8.5") + (source + (origin + (method git-fetch) + (uri + (git-reference + (url "https://github.com/kolbusa/stalonetray") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "074wy1xppfycillbxq6fwrq87ik9glc95083df5vgm20mhzni7pz")))) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-docbook-root + (lambda _ + (substitute* "configure.ac" + (("AC_SUBST\\(DOCBOOK_ROOT\\)" all) + (string-append "DOCBOOK_ROOT=" + #$(this-package-native-input "docbook-xsl") + "/xml/xsl/docbook-xsl-" + #$(package-version (this-package-native-input "docbook-xsl")) + "; " all)))))))) + (inputs (list libx11 libxpm)) + (native-inputs (list autoconf automake docbook-xsl libxslt)) + (build-system gnu-build-system) + (home-page "https://kolbusa.github.io/stalonetray") + (synopsis "Standalone freedesktop.org and KDE systray implementation") + (description + "Stalonetray is a stand-alone freedesktop.org and KDE system +tray (notification area) for X Window System/X11 (e.g. X.Org or XFree86). It +has full XEMBED support and minimal dependencies: an X11 lib only. Stalonetray +works with virtually any EWMH-compliant window manager.") + (license license:gpl2+))) + (define-public tofi (package (name "tofi") -- cgit v1.2.3 From 352c49e1a5c48eb76389ee384eb95fc2e4a6ab32 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Wed, 16 Aug 2023 10:29:25 -0400 Subject: gnu: po4a: Apply patch to translate partial Texinfo menus. Fixes . * gnu/packages/gettext.scm (po4a) [source]: Apply patch. * gnu/packages/patches/po4a-partial-texinfo-menu-fix.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. --- gnu/local.mk | 1 + gnu/packages/gettext.scm | 6 +- .../patches/po4a-partial-texinfo-menu-fix.patch | 242 +++++++++++++++++++++ 3 files changed, 247 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/po4a-partial-texinfo-menu-fix.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 9b75e16fb3..5f0f373054 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1781,6 +1781,7 @@ dist_patch_DATA = \ %D%/packages/patches/plib-CVE-2011-4620.patch \ %D%/packages/patches/plib-CVE-2012-4552.patch \ %D%/packages/patches/plotutils-spline-test.patch \ + %D%/packages/patches/po4a-partial-texinfo-menu-fix.patch \ %D%/packages/patches/polkit-disable-systemd.patch \ %D%/packages/patches/portaudio-audacity-compat.patch \ %D%/packages/patches/portmidi-modular-build.patch \ diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm index f2e01e6a3f..1408cc4cb4 100644 --- a/gnu/packages/gettext.scm +++ b/gnu/packages/gettext.scm @@ -240,11 +240,13 @@ from Markdown files.") (version "0.69") (source (origin (method url-fetch) - (uri (string-append "https://github.com/mquinson/po4a/releases/download/v" + (uri (string-append "https://github.com/mquinson/po4a" + "/releases/download/v" version "/po4a-" version ".tar.gz")) (sha256 (base32 - "15llrfdp4ilbrxy65hmmxka86xj0mrbqfiyzv715wrk16vqszm3w")))) + "15llrfdp4ilbrxy65hmmxka86xj0mrbqfiyzv715wrk16vqszm3w")) + (patches (search-patches "po4a-partial-texinfo-menu-fix.patch")))) (build-system perl-build-system) (arguments (list diff --git a/gnu/packages/patches/po4a-partial-texinfo-menu-fix.patch b/gnu/packages/patches/po4a-partial-texinfo-menu-fix.patch new file mode 100644 index 0000000000..8a075fa74c --- /dev/null +++ b/gnu/packages/patches/po4a-partial-texinfo-menu-fix.patch @@ -0,0 +1,242 @@ +Submitted upstream: https://github.com/mquinson/po4a/pull/437 + +From 43db5c0b14ec2a8ba44d338bce024df87256457b Mon Sep 17 00:00:00 2001 +From: Maxim Cournoyer +Date: Thu, 27 Jul 2023 17:44:49 -0400 +Subject: [PATCH] lib: Texinfo: Translate partial menu node names. + +Fixes . + +* lib/Locale/Po4a/Texinfo.pm (translate_buffer_menuentry): Refine +regexp, so that it matches menu entries lacking a description. +Only call 'translate_buffer' on the description if it was provided. +* t/fmt/texinfo/partialmenus.trans: New file. +* t/fmt/texinfo/partialmenus.texi: Likewise. +* t/fmt/texinfo/partialmenus.pot: Likewise. +* t/fmt/texinfo/partialmenus.po: Likewise. +* t/fmt/texinfo/partialmenus.norm: Likewise. +* t/fmt-texinfo.t: Register the new 'partialmenus' test. +--- + lib/Locale/Po4a/Texinfo.pm | 7 +++--- + t/fmt-texinfo.t | 2 +- + t/fmt/texinfo/partialmenus.norm | 21 +++++++++++++++++ + t/fmt/texinfo/partialmenus.po | 40 ++++++++++++++++++++++++++++++++ + t/fmt/texinfo/partialmenus.pot | 40 ++++++++++++++++++++++++++++++++ + t/fmt/texinfo/partialmenus.texi | 14 +++++++++++ + t/fmt/texinfo/partialmenus.trans | 21 +++++++++++++++++ + 7 files changed, 141 insertions(+), 4 deletions(-) + create mode 100644 t/fmt/texinfo/partialmenus.norm + create mode 100644 t/fmt/texinfo/partialmenus.po + create mode 100644 t/fmt/texinfo/partialmenus.pot + create mode 100644 t/fmt/texinfo/partialmenus.texi + create mode 100644 t/fmt/texinfo/partialmenus.trans + +diff --git a/lib/Locale/Po4a/Texinfo.pm b/lib/Locale/Po4a/Texinfo.pm +index b4750699..1c3a4bae 100644 +--- a/lib/Locale/Po4a/Texinfo.pm ++++ b/lib/Locale/Po4a/Texinfo.pm +@@ -336,7 +336,7 @@ sub translate_buffer_menuentry { + + my $translated_buffer = ""; + +- if ( $buffer =~ m/^(.*?)(::)\s+(.*)$/s ++ if ( $buffer =~ m/^(.*?)(::)(?:\s+(.*))?$/s + or $buffer =~ m/^(.*?: .*?)(\.)\s+(.*)$/s ) + { + my ( $name, $sep, $description ) = ( $1, $2, $3 ); +@@ -347,8 +347,9 @@ sub translate_buffer_menuentry { + $translated_buffer .= ' ' x ( $menu_sep_width - 1 - $l ); + $l = $menu_sep_width - 1; + } +- ( $t, @e ) = $self->translate_buffer( $description, $no_wrap, @env ); +- ++ if ($description) { ++ ( $t, @e ) = $self->translate_buffer( $description, $no_wrap, @env ); ++ } + # Replace newlines with space for proper wrapping + # See https://github.com/mquinson/po4a/issues/122 + $t =~ s/\n/ /sg; +diff --git a/t/fmt-texinfo.t b/t/fmt-texinfo.t +index 4b067e43..d9ed5df3 100644 +--- a/t/fmt-texinfo.t ++++ b/t/fmt-texinfo.t +@@ -10,7 +10,7 @@ use Testhelper; + + my @tests; + +-for my $test (qw(longmenu comments tindex)) { ++for my $test (qw(longmenu partialmenus comments tindex)) { + push @tests, + { + 'format' => 'texinfo', +diff --git a/t/fmt/texinfo/partialmenus.norm b/t/fmt/texinfo/partialmenus.norm +new file mode 100644 +index 00000000..99240682 +--- /dev/null ++++ b/t/fmt/texinfo/partialmenus.norm +@@ -0,0 +1,21 @@ ++\input texinfo ++@c =========================================================================== ++@c ++@c This file was generated with po4a. Translate the source file. ++@c ++@c =========================================================================== ++ ++ ++@c These menus do not contain a description, which used to cause a ++@c Texinfo menu entry to not be translated. ++@menu ++* A menu entry without any description:: A menu entry without any ++ description ++* Optional menu name: The menu node:: Optional menu name: The menu node ++@end menu ++ ++@node A menu entry without any description ++@chapter A menu entry without any description ++ ++@node The menu node ++@chapter Optional menu name +diff --git a/t/fmt/texinfo/partialmenus.po b/t/fmt/texinfo/partialmenus.po +new file mode 100644 +index 00000000..31a14443 +--- /dev/null ++++ b/t/fmt/texinfo/partialmenus.po +@@ -0,0 +1,40 @@ ++# SOME DESCRIPTIVE TITLE ++# Copyright (C) YEAR Free Software Foundation, Inc. ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy ++msgid "" ++msgstr "" ++"Project-Id-Version: PACKAGE VERSION\n" ++"POT-Creation-Date: 2023-07-27 17:29-0400\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"Language: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#. type: chapter ++#: partialmenus.texi:8 partialmenus.texi:10 partialmenus.texi:11 ++#, no-wrap ++msgid "A menu entry without any description" ++msgstr "A MENU ENTRY WITHOUT ANY DESCRIPTION" ++ ++#. type: menuentry ++#: partialmenus.texi:8 ++msgid "Optional menu name: The menu node" ++msgstr "OPTIONAL MENU NAME: THE MENU NODE" ++ ++#. type: node ++#: partialmenus.texi:13 ++#, no-wrap ++msgid "The menu node" ++msgstr "THE MENU NODE" ++ ++#. type: chapter ++#: partialmenus.texi:14 ++#, no-wrap ++msgid "Optional menu name" ++msgstr "OPTIONAL MENU NAME" +diff --git a/t/fmt/texinfo/partialmenus.pot b/t/fmt/texinfo/partialmenus.pot +new file mode 100644 +index 00000000..0379f805 +--- /dev/null ++++ b/t/fmt/texinfo/partialmenus.pot +@@ -0,0 +1,40 @@ ++# SOME DESCRIPTIVE TITLE ++# Copyright (C) YEAR Free Software Foundation, Inc. ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy ++msgid "" ++msgstr "" ++"Project-Id-Version: PACKAGE VERSION\n" ++"POT-Creation-Date: 2023-08-16 09:47-0400\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"Language: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#. type: chapter ++#: partialmenus.texi:8 partialmenus.texi:10 partialmenus.texi:11 ++#, no-wrap ++msgid "A menu entry without any description" ++msgstr "" ++ ++#. type: menuentry ++#: partialmenus.texi:8 ++msgid "Optional menu name: The menu node" ++msgstr "" ++ ++#. type: node ++#: partialmenus.texi:13 ++#, no-wrap ++msgid "The menu node" ++msgstr "" ++ ++#. type: chapter ++#: partialmenus.texi:14 ++#, no-wrap ++msgid "Optional menu name" ++msgstr "" +diff --git a/t/fmt/texinfo/partialmenus.texi b/t/fmt/texinfo/partialmenus.texi +new file mode 100644 +index 00000000..f8663a2b +--- /dev/null ++++ b/t/fmt/texinfo/partialmenus.texi +@@ -0,0 +1,14 @@ ++\input texinfo ++ ++@c These menus do not contain a description, which used to cause a ++@c Texinfo menu entry to not be translated. ++@menu ++* A menu entry without any description:: ++* Optional menu name: The menu node:: ++@end menu ++ ++@node A menu entry without any description ++@chapter A menu entry without any description ++ ++@node The menu node ++@chapter Optional menu name +diff --git a/t/fmt/texinfo/partialmenus.trans b/t/fmt/texinfo/partialmenus.trans +new file mode 100644 +index 00000000..0ef742a1 +--- /dev/null ++++ b/t/fmt/texinfo/partialmenus.trans +@@ -0,0 +1,21 @@ ++\input texinfo ++@c =========================================================================== ++@c ++@c This file was generated with po4a. Translate the source file. ++@c ++@c =========================================================================== ++ ++ ++@c These menus do not contain a description, which used to cause a ++@c Texinfo menu entry to not be translated. ++@menu ++* A MENU ENTRY WITHOUT ANY DESCRIPTION:: A MENU ENTRY WITHOUT ANY ++ DESCRIPTION ++* OPTIONAL MENU NAME: THE MENU NODE:: OPTIONAL MENU NAME: THE MENU NODE ++@end menu ++ ++@node A MENU ENTRY WITHOUT ANY DESCRIPTION ++@chapter A MENU ENTRY WITHOUT ANY DESCRIPTION ++ ++@node THE MENU NODE ++@chapter OPTIONAL MENU NAME + +base-commit: 5b1cd768afdf4e9445812c5d43428495a0fde3c6 +-- +2.41.0 + -- cgit v1.2.3 From 132ddca5a4fb6d789f98866b5bf85be95306c969 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Thu, 27 Jul 2023 12:49:30 -0400 Subject: gnu: elogind: Update to 252.9. * gnu/packages/freedesktop.scm (elogind): Update to 252.9. [source]: Replace elogind-revert-polkit-detection.patch with elogind-fix-rpath.patch in patches. [configure-flags]: Add the dbussystemservicedir, dbussessionservicedir, dbussystemservicedir and dbus-interfaces-dir flags. [phases] Update list of patched files. Update substitutions, and skip the copy_holes test. [native-inputs]: Add python-jinja2. [inputs]: Add util-linux:lib. * gnu/services/desktop.scm (elogind-dbus-service) : Add a symlink to elogind's share/dbus-1/system.d to expose D-Bus policy configurations. * gnu/tests/desktop.scm (run-elogind-test): Adjust expected result for the new "linger" value. * gnu/packages/patches/elogind-revert-polkit-detection.patch: Delete file. * gnu/packages/patches/elogind-fix-rpath.patch: New file. * gnu/local.mk (dist_patch_DATA): Update. Series-to: 64938@debbugs.gnu.org Series-prefix: elogind-updates Series-version: 2 Series-changes: 2 - Fix elogind system test - Install D-Bus policy files in elogind-dbus-service-wrapper - Remove duplicate 'dbussystemservicedir' configure flag --- gnu/local.mk | 2 +- gnu/packages/freedesktop.scm | 53 +++++++++++-------- gnu/packages/patches/elogind-fix-rpath.patch | 60 ++++++++++++++++++++++ .../patches/elogind-revert-polkit-detection.patch | 41 --------------- gnu/services/desktop.scm | 4 ++ gnu/tests/desktop.scm | 2 +- 6 files changed, 98 insertions(+), 64 deletions(-) create mode 100644 gnu/packages/patches/elogind-fix-rpath.patch delete mode 100644 gnu/packages/patches/elogind-revert-polkit-detection.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 5f0f373054..1be15b4200 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1089,7 +1089,7 @@ dist_patch_DATA = \ %D%/packages/patches/elm-ghc9.2.patch \ %D%/packages/patches/elm-offline-package-registry.patch \ %D%/packages/patches/elm-reactor-static-files.patch \ - %D%/packages/patches/elogind-revert-polkit-detection.patch \ + %D%/packages/patches/elogind-fix-rpath.patch \ %D%/packages/patches/emacs-deferred-fix-number-of-arguments.patch \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-ess-fix-obsolete-function-alias.patch \ diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm index 60d8dfe9fd..7eba464036 100644 --- a/gnu/packages/freedesktop.scm +++ b/gnu/packages/freedesktop.scm @@ -643,7 +643,7 @@ the freedesktop.org XDG Base Directory specification.") (define-public elogind (package (name "elogind") - (version "246.10") + (version "252.9") (source (origin (method git-fetch) (uri (git-reference @@ -652,16 +652,21 @@ the freedesktop.org XDG Base Directory specification.") (file-name (git-file-name name version)) (sha256 (base32 - "16045bhpwjq2nqgswln67ipg1zrz2djxlgkfngqng3jqpwagmnzq")) - (patches (search-patches - "elogind-revert-polkit-detection.patch")))) + "049cfv97975x700s7lx4p9i22nv6v7j046iwkspxba7kr5qq7akw")) + (patches (search-patches "elogind-fix-rpath.patch")))) (build-system meson-build-system) (arguments `(#:configure-flags ,#~(let* ((out #$output) (sysconf (string-append out "/etc")) (libexec (string-append out "/libexec/elogind")) - (dbuspolicy (string-append out "/etc/dbus-1/system.d")) + (dbus-data (string-append out "/share/dbus-1")) + (dbuspolicy (string-append dbus-data "/system.d")) + (dbussessionservice (string-append dbus-data "/services")) + (dbussystemservice (string-append dbus-data + "/system-services")) + (dbusinterfaces (string-append dbus-data "/interfaces")) + #$@(if (not (target-riscv64?)) #~((kexec-tools #$(this-package-input "kexec-tools"))) #~()) @@ -679,6 +684,9 @@ the freedesktop.org XDG Base Directory specification.") (string-append "-Dsysconfdir=" sysconf) (string-append "-Drootlibexecdir=" libexec) (string-append "-Ddbuspolicydir=" dbuspolicy) + (string-append "-Ddbussessionservicedir=" dbussessionservice) + (string-append "-Ddbussystemservicedir=" dbussystemservice) + (string-append "-Ddbus-interfaces-dir=" dbusinterfaces) (string-append "-Dc_link_args=-Wl,-rpath=" libexec) (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec) (string-append "-Dhalt-path=" halt-path) @@ -703,21 +711,28 @@ the freedesktop.org XDG Base Directory specification.") ;; XXX There is no run-time setting to set this per-process, only a ;; build-time, hard-coded list of global directories. (lambda _ - (substitute* (list "src/login/elogind-dbus.c" - "src/sleep/sleep.c") + (substitute* (list "src/login/logind-core.c" + "src/login/logind-dbus.c" + "src/sleep/sleep.c" + "src/shared/sleep-config.c") (("PKGSYSCONFDIR") "\"/etc/elogind\"")))) (add-after 'unpack 'adjust-tests (lambda _ - ;; Skip the following test, which depends on users such as 'root' - ;; existing in the build environment. - (invoke "sed" "/src\\/test\\/test-user-util.c/,+2s/^/#/g" - "-i" "src/test/meson.build") + ;; Skip the user-util tests, which depends on users such as + ;; 'root' existing in the build environment. + (substitute* "src/test/meson.build" + ((".*'test-user-util.c'.*") "") + ((".*'test-cgroup.c'.*") "")) ;; This test tries to copy some bytes from /usr/lib/os-release, ;; which does not exist in the build container. Choose something ;; more likely to be available. (substitute* "src/test/test-copy.c" (("/usr/lib/os-release") - "/etc/passwd")) + "/etc/passwd") + ;; Skip the copy_holes test, which fails for unknown reasons + ;; (see: https://github.com/elogind/elogind/issues/261). + (("TEST_RET\\(copy_holes).*" all) + (string-append all " return 77;\n"))) ;; Use a shebang that works in the build container. (substitute* "src/test/test-exec-util.c" (("#!/bin/sh") @@ -742,12 +757,6 @@ the freedesktop.org XDG Base Directory specification.") ;; loopback device, but that fails because /sys is unavailable. (substitute* "src/libelogind/sd-device/test-sd-device-thread.c" ((".*sd_device_new_from_syspath.*/sys/class/net/lo.*") - "return 77;")) - ;; Most of these tests require cgroups or an actual live - ;; logind system so that it can flicker the monitor, etc. - ;; Just skip it until a more narrow selection can be made. - (substitute* "src/libelogind/sd-login/test-login.c" - (("test_login\\(\\);") "return 77;")))) (add-after 'unpack 'change-pid-file-path (lambda _ @@ -763,6 +772,7 @@ the freedesktop.org XDG Base Directory specification.") m4 pkg-config python + python-jinja2 libxslt)) (inputs (append @@ -771,9 +781,10 @@ the freedesktop.org XDG Base Directory specification.") '()) (list linux-pam libcap - shadow ; for 'nologin' - shepherd ; for 'halt' and 'reboot', invoked - ; when pressing the power button + `(,util-linux "lib") ;for 'libmount' + shadow ;for 'nologin' + shepherd ;for 'halt' and 'reboot', invoked + ;when pressing the power button dbus eudev acl))) ; to add individual users to ACLs on /dev nodes diff --git a/gnu/packages/patches/elogind-fix-rpath.patch b/gnu/packages/patches/elogind-fix-rpath.patch new file mode 100644 index 0000000000..2a76cc467f --- /dev/null +++ b/gnu/packages/patches/elogind-fix-rpath.patch @@ -0,0 +1,60 @@ +Retrieved from https://github.com/elogind/elogind/issues/258 + +From: Mark Hindley +Date: Wed, 24 May 2023 10:39:41 +0100 +Subject: Fixup_executable_rpath + +./meson.build sets + + install_rpath : rootlibexecdir + +however src/shared/meson.build sets + +libshared = shared_library( + [snip] + install_dir : rootpkglibdir + ) +--- + meson.build | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/meson.build b/meson.build +index 694a2fd..a575f69 100644 +--- a/meson.build ++++ b/meson.build +@@ -2903,7 +2903,7 @@ executable('elogind', + dependencies : [threads, + libacl, + libudev], +- install_rpath : rootlibexecdir, ++ install_rpath : rootpkglibdir, + install : true, + install_dir : rootlibexecdir) + +@@ -2913,7 +2913,7 @@ exe = executable('loginctl', + link_with : [libshared], + dependencies : [threads, + libudev], +- install_rpath : rootlibexecdir, ++ install_rpath : rootpkglibdir, + install : true, + install_dir : rootbindir) + public_programs += [exe] +@@ -2923,7 +2923,7 @@ exe = executable('elogind-inhibit', + include_directories : includes, + link_with : [libshared], + dependencies : [threads], +- install_rpath : rootlibexecdir, ++ install_rpath : rootpkglibdir, + install : true, + install_dir : rootbindir) + public_programs += [exe] +@@ -4283,7 +4283,7 @@ executable('elogind-uaccess-command', + libshared], + dependencies: [libacl, + libudev], +- install_rpath : rootlibexecdir, ++ install_rpath : rootpkglibdir, + install : true, + install_dir : rootlibexecdir) + #endif // 0 diff --git a/gnu/packages/patches/elogind-revert-polkit-detection.patch b/gnu/packages/patches/elogind-revert-polkit-detection.patch deleted file mode 100644 index 43dd1684b6..0000000000 --- a/gnu/packages/patches/elogind-revert-polkit-detection.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 715ce0a6459e418f92e74c7ce52df3244c18f383 Mon Sep 17 00:00:00 2001 -From: Sven Eden -Date: Mon, 8 Mar 2021 08:40:08 +0100 -Subject: [PATCH] Revert "Disable polkit support if libpolkit is not installed" - -This reverts commit 1194dec4f8f2d1b8bd14e1625f34418ecfce817e. - -Removing polkit support with -Dpolkit=auto when libpolkit is not -installed, removes the whole interface. This makes it impossible to -add polkit support as a runtime dependency. - -Bug: #167 -Closes: #206 -Signed-off-by: Sven Eden ---- - meson.build | 9 --------- - 1 file changed, 9 deletions(-) - -diff --git a/meson.build b/meson.build -index 2dd05db3c..f38551f55 100644 ---- a/meson.build -+++ b/meson.build -@@ -1157,15 +1157,6 @@ if want_polkit != 'false' and not skip_deps - message('Old polkit detected, will install pkla files') - install_polkit_pkla = true - endif --#if 1 /// Disable polkit completely if libpolkit is not there. See elogind issue #167 -- if not libpolkit.found() -- if want_polkit != 'auto' -- error('Polkit requested but libpolkit was not found.') -- endif -- install_polkit = false -- want_polkit = false -- endif --#endif // 1 - endif - conf.set10('ENABLE_POLKIT', install_polkit) - --- -2.33.1 - diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index 01aec64bee..4996d1a3d9 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -1165,6 +1165,10 @@ started~%") (string-append #$output service-directory)) (symlink (string-append #$elogind "/etc") ;for etc/dbus-1 (string-append #$output "/etc")) + ;; Also expose the D-Bus policy configurations (.conf) files, now + ;; installed under '/share' instead of the legacy '/etc' prefix. + (symlink (string-append #$elogind "/share/dbus-1/system.d") + (string-append #$output "/share/dbus-1/system.d")) ;; Replace the "Exec=" line of the 'org.freedesktop.login1.service' ;; file with one that refers to WRAPPER instead of elogind. diff --git a/gnu/tests/desktop.scm b/gnu/tests/desktop.scm index 137260ea93..ef30442886 100644 --- a/gnu/tests/desktop.scm +++ b/gnu/tests/desktop.scm @@ -55,7 +55,7 @@ (test-equal "login on tty1" '(("c1" "0" "root" "seat0" "tty1") ;session ("seat0") ;seat - ("0" "root")) ;user + ("0" "root" "no")) ;user (begin ;; Wait for tty1. -- cgit v1.2.3 From 1bd44b425b79e9da160b33a9b19d01973b44772e Mon Sep 17 00:00:00 2001 From: Bruno Victal Date: Sun, 16 Jul 2023 19:47:48 +0100 Subject: gnu: ddclient: Remove package. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ddclient is unmaintained as of 2023-07-04 [1]. This reverts changes related to commit 0bc2d3e42b8800e875f24973f999739297f1f502. [1]: * gnu/packages/dns.scm (ddclient): Remove variable. * gnu/packages/patches/ddclient-skip-test.patch: Remove file. * gnu/local.mk: Unregister it. Signed-off-by: Ludovic Courtès --- gnu/local.mk | 1 - gnu/packages/dns.scm | 71 +-------------------------- gnu/packages/patches/ddclient-skip-test.patch | 43 ---------------- 3 files changed, 2 insertions(+), 113 deletions(-) delete mode 100644 gnu/packages/patches/ddclient-skip-test.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 1be15b4200..2e9954c5a1 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1056,7 +1056,6 @@ dist_patch_DATA = \ %D%/packages/patches/dbus-c++-gcc-compat.patch \ %D%/packages/patches/dbus-c++-threading-mutex.patch \ %D%/packages/patches/dbxfs-remove-sentry-sdk.patch \ - %D%/packages/patches/ddclient-skip-test.patch \ %D%/packages/patches/debops-constants-for-external-program-names.patch \ %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \ %D%/packages/patches/dee-vapi.patch \ diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index fdd10a6611..d6bea61ca7 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2016, 2020 Marius Bakke ;;; Copyright © 2017 Vasile Dumitrascu ;;; Copyright © 2017 Gregor Giesen -;;; Copyright © 2018, 2022 Oleg Pykhalov +;;; Copyright © 2022 Oleg Pykhalov ;;; Copyright © 2019 Mathieu Othacehe ;;; Copyright © 2019 Chris Marusich ;;; Copyright © 2019 Rutger Helling @@ -91,8 +91,7 @@ #:use-module (guix build-system copy) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) - #:use-module (guix build-system meson) - #:use-module (guix build-system trivial)) + #:use-module (guix build-system meson)) (define-public cloudflare-cli (let ((commit "2d986d3ec1b0e3158c4bd40e8918947cb74aa392") @@ -1067,72 +1066,6 @@ LuaJIT, both a resolver library and a daemon.") license:cc0 license:lgpl2.0)))) -(define-public ddclient - (package - (name "ddclient") - (version "3.10.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ddclient/ddclient") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0l87d72apwrg6ipc9gix5gv64d4hr1ykxmss8x4r8d8mgj6j8rf1")) - (modules '((guix build utils))) - (snippet - ;; XXX: erroneous version value, this is fixed in master - #~(begin - (substitute* "configure.ac" - (("3.10.0_2") #$version)))) - (patches (search-patches "ddclient-skip-test.patch")))) - (build-system gnu-build-system) - (native-inputs - (list autoconf automake libtool - perl-test-warnings perl-test-mockmodule)) - (inputs - (list inetutils ; logger - net-tools - bash-minimal ;for 'wrap-program' - perl - perl-digest-sha1 - perl-io-socket-ssl - perl-io-socket-inet6 ;; XXX: this is likely to be removed in a future ddclient release - ;; https://github.com/ddclient/ddclient/issues/461 - perl-json)) - (arguments - (list - #:configure-flags #~(list "--localstatedir=/var") - #:phases - #~(modify-phases %standard-phases - (replace 'install - (lambda _ - ;; XXX: Do not create /var - (invoke "make" "localstatedir=/tmp/discard" "install"))) - (add-after 'wrap 'wrap-ddclient - (lambda* (#:key inputs #:allow-other-keys) - (wrap-program (string-append #$output "/bin/ddclient") - `("PERL5LIB" ":" prefix ,(string-split (getenv "PERL5LIB") #\:)) - `("PATH" prefix ,(map (lambda (x) - (string-append (assoc-ref inputs x) "/bin")) - '("inetutils" "net-tools"))))))))) - (native-search-paths - (list $SSL_CERT_DIR $SSL_CERT_FILE)) - (home-page "https://ddclient.net/") - (synopsis "Address updating utility for dynamic DNS services") - (description "This package provides a client to update dynamic IP -addresses with several dynamic DNS service providers, such as -@uref{https://www.dyndns.com/account/login.html,DynDNS.com}. - -This makes it possible to use a fixed hostname (such as myhost.dyndns.org) to -access a machine with a dynamic IP address. - -The client supports both dynamic and (near) static services, as well as MX -record and alternative name management. It caches the address, and only -attempts the update when it has changed.") - (license license:gpl2+))) - (define-public hnsd (package (name "hnsd") diff --git a/gnu/packages/patches/ddclient-skip-test.patch b/gnu/packages/patches/ddclient-skip-test.patch deleted file mode 100644 index 28d748997b..0000000000 --- a/gnu/packages/patches/ddclient-skip-test.patch +++ /dev/null @@ -1,43 +0,0 @@ -From e5657802025f238b39581534f3b4d408565c8943 Mon Sep 17 00:00:00 2001 -From: Bruno Victal -Date: Sun, 5 Feb 2023 21:05:00 +0000 -Subject: [PATCH] Disable sandbox incompatible tests. - -See: https://github.com/ddclient/ddclient/issues/465 ---- - t/get_ip_from_if.pl | 21 --------------------- - 1 file changed, 21 deletions(-) - -diff --git a/t/get_ip_from_if.pl b/t/get_ip_from_if.pl -index 6f08e5d..d78c3d0 100644 ---- a/t/get_ip_from_if.pl -+++ b/t/get_ip_from_if.pl -@@ -39,25 +39,4 @@ subtest "get_ip_from_interface tests" => sub { - } - }; - --subtest "Get default interface and IP for test system" => sub { -- my $interface = ddclient::get_default_interface(4); -- if ($interface) { -- isnt($interface, "lo", "Check for loopback 'lo'"); -- isnt($interface, "lo0", "Check for loopback 'lo0'"); -- my $ip1 = ddclient::get_ip_from_interface("default", 4); -- my $ip2 = ddclient::get_ip_from_interface($interface, 4); -- is($ip1, $ip2, "Check IPv4 from default interface"); -- ok(ddclient::is_ipv4($ip1), "Valid IPv4 from get_ip_from_interface($interface)"); -- } -- $interface = ddclient::get_default_interface(6); -- if ($interface) { -- isnt($interface, "lo", "Check for loopback 'lo'"); -- isnt($interface, "lo0", "Check for loopback 'lo0'"); -- my $ip1 = ddclient::get_ip_from_interface("default", 6); -- my $ip2 = ddclient::get_ip_from_interface($interface, 6); -- is($ip1, $ip2, "Check IPv6 from default interface"); -- ok(ddclient::is_ipv6($ip1), "Valid IPv6 from get_ip_from_interface($interface)"); -- } --}; -- - done_testing(); --- -2.38.1 - -- cgit v1.2.3 From 11c974335041440341196882dae048c0868a143a Mon Sep 17 00:00:00 2001 From: Janneke Nieuwenhuizen Date: Wed, 16 Aug 2023 16:54:04 +0200 Subject: gnu: mcrl2: Update to 202206.1. * gnu/packages/maths.scm (mcrl2): Update to 202206.1. [source]: Remove patches. * gnu/packages/patches/mcrl2-fix-1687.patch, gnu/packages/patches/mcrl2-fix-counterexample.patch: Remove files. * gnu/local.mk (dist_patch_DATA): Remove their references. --- gnu/local.mk | 2 - gnu/packages/maths.scm | 6 +- gnu/packages/patches/mcrl2-fix-1687.patch | 337 --------------------- .../patches/mcrl2-fix-counterexample.patch | 32 -- 4 files changed, 2 insertions(+), 375 deletions(-) delete mode 100644 gnu/packages/patches/mcrl2-fix-1687.patch delete mode 100644 gnu/packages/patches/mcrl2-fix-counterexample.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 2e9954c5a1..1ec6ba4523 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1589,8 +1589,6 @@ dist_patch_DATA = \ %D%/packages/patches/maxima-defsystem-mkdir.patch \ %D%/packages/patches/maven-generate-component-xml.patch \ %D%/packages/patches/maven-generate-javax-inject-named.patch \ - %D%/packages/patches/mcrl2-fix-1687.patch \ - %D%/packages/patches/mcrl2-fix-counterexample.patch \ %D%/packages/patches/mcrypt-CVE-2012-4409.patch \ %D%/packages/patches/mcrypt-CVE-2012-4426.patch \ %D%/packages/patches/mcrypt-CVE-2012-4527.patch \ diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 420f1894f3..8b765e886b 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -6555,17 +6555,15 @@ reduction.") (define-public mcrl2 (package (name "mcrl2") - (version "202206.0") + (version "202206.1") (source (origin (method url-fetch) (uri (string-append "https://www.mcrl2.org/download/release/mcrl2-" version ".tar.gz")) - (patches (search-patches "mcrl2-fix-1687.patch" - "mcrl2-fix-counterexample.patch")) (sha256 (base32 - "0alpck09pbvwk4axqmrvcjmsabsn20yayq5b3apq284n0hcbf01q")))) + "1rbfyw47bi31qla1sa4fd1npryb5kbdr0vijmdc2gg1zhpqfv0ia")))) (inputs (list boost glu mesa qtbase-5)) (build-system cmake-build-system) diff --git a/gnu/packages/patches/mcrl2-fix-1687.patch b/gnu/packages/patches/mcrl2-fix-1687.patch deleted file mode 100644 index 449ecbf638..0000000000 --- a/gnu/packages/patches/mcrl2-fix-1687.patch +++ /dev/null @@ -1,337 +0,0 @@ -Taken from upstream: - https://github.com/mCRL2org/mCRL2/commit/f38998be5198236bc5bf5a957b0e132d6d6d8bee - -Fixes bug in ltsconvert: - https://listserver.tue.nl/pipermail/mcrl2-users/2022-June/000395.html - -From f38998be5198236bc5bf5a957b0e132d6d6d8bee Mon Sep 17 00:00:00 2001 -From: Jan Friso Groote -Date: Tue, 28 Jun 2022 12:27:47 +0200 -Subject: [PATCH] Solved bug report #1687 - -Hidden actions were not properly recognized in ltsconvert. Multiactions -that were partly hidden compared with the default action label, and had -to be compared with a tau-action. This caused multiple tau-actions to be -listed in the list of actions of an lts, and this caused other tools to -go astray. - -The code to rename actions has completely be rewritten. - -This should solve #1687. - -A test have been added. ---- - libraries/lts/include/mcrl2/lts/lts.h | 95 ++++++++++++++++++++++--- - libraries/lts/test/lts_test.cpp | 61 ++++++++-------- - tools/release/ltsconvert/ltsconvert.cpp | 3 +- - 3 files changed, 116 insertions(+), 43 deletions(-) - -diff --git a/libraries/lts/include/mcrl2/lts/lts.h b/libraries/lts/include/mcrl2/lts/lts.h -index 095031e7c..8562eb900 100644 ---- a/libraries/lts/include/mcrl2/lts/lts.h -+++ b/libraries/lts/include/mcrl2/lts/lts.h -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include "mcrl2/lts/transition.h" - #include "mcrl2/lts/lts_type.h" - -@@ -482,40 +483,112 @@ class lts: public LTS_BASE - return; - } - -+ std::map action_rename_map; - for (labels_size_type i=0; i< num_action_labels(); ++i) - { - ACTION_LABEL_T a=action_label(i); - a.hide_actions(tau_actions); -- if (a==ACTION_LABEL_T()) -+ if (a==ACTION_LABEL_T::tau_action()) - { -- m_hidden_label_set.insert(i); -+ if (i!=const_tau_label_index) -+ { -+ m_hidden_label_set.insert(i); -+ } - } - else if (a!=action_label(i)) - { -- set_action_label(i,a); -+ /* In this the action_label i is changed by the tau_actions but not renamed to tau. -+ We check whether a maps onto another action label index. If yes, it is added to -+ the rename map, and we explicitly rename transition labels with this label afterwards. -+ If no, we rename the action label. -+ */ -+ bool found=false; -+ for (labels_size_type j=0; !found && j< num_action_labels(); ++j) -+ { -+ if (a==action_label(j)) -+ { -+ if (i!=j) -+ { -+ action_rename_map[i]=j; -+ } -+ found=true; -+ } -+ } -+ if (!found) // a!=action_label(j) for any j, then rename action_label(i) to a. -+ { -+ set_action_label(i,a); -+ } -+ } -+ } -+ -+ if (action_rename_map.size()>0) // Check whether there are action labels that must be renamed, and -+ { -+ for(transition& t: m_transitions) -+ { -+ auto i = action_rename_map.find(t.label()); -+ if (i!=action_rename_map.end()) -+ { -+ t=transition(t.from(),i->second,t.to()); -+ } - } - } - } - -- /** \brief Apply the recorded actions that are renamed to internal actions to the lts. -- * \details After hiding actions, it checks whether action labels are -- * equal and merges actions with the same labels in the lts. -+ /** \brief Rename the hidden actions in the lts. -+ * \details Multiactions can be partially renamed. I.e. a|b becomes a if b is hidden. -+ * In such a case the new action a is mapped onto an existing action a; if such -+ * a label a does not exist, the action a|b is renamed to a. - * \param[in] tau_actions Vector with strings indicating which actions must be - * transformed to tau's */ -- void apply_hidden_actions(void) -+ void apply_hidden_actions(const std::vector& tau_actions) - { -- if (m_hidden_label_set.size()>0) // Check whether there is something to rename. -+ if (tau_actions.size()==0) -+ { -+ return; -+ } -+ -+ std::map action_rename_map; -+ for (labels_size_type i=0; i< num_action_labels(); ++i) -+ { -+ ACTION_LABEL_T a=action_label(i); -+ a.hide_actions(tau_actions); -+#ifndef NDEBUG -+ ACTION_LABEL_T b=a; -+ b.hide_actions(tau_actions); -+ assert(a==b); // hide_actions applied twice yields the same result as applying it once. -+#endif -+ bool found=false; -+ for (labels_size_type j=0; !found && j< num_action_labels(); ++j) -+ { -+ if (a==action_label(j)) -+ { -+ if (i!=j) -+ { -+ action_rename_map[i]=j; -+ } -+ found=true; -+ } -+ } -+ if (!found) // a!=action_label(j) for any j, then rename action_label(i) to a. -+ { -+ set_action_label(i,a); -+ } -+ } -+ -+ -+ if (action_rename_map.size()>0) // Check whether there is something to rename. - { - for(transition& t: m_transitions) - { -- if (m_hidden_label_set.count(t.label())) -+ auto i = action_rename_map.find(t.label()); -+ if (i!=action_rename_map.end()) - { -- t=transition(t.from(),tau_label_index(),t.to()); -+ t=transition(t.from(),i->second,t.to()); - } - } -- m_hidden_label_set.clear(); // Empty the hidden label set. - } - } -+ - /** \brief Checks whether this LTS has state values associated with its states. - * \retval true if the LTS has state information; - * \retval false otherwise. -diff --git a/libraries/lts/test/lts_test.cpp b/libraries/lts/test/lts_test.cpp -index 5840393d9..ad69f6275 100644 ---- a/libraries/lts/test/lts_test.cpp -+++ b/libraries/lts/test/lts_test.cpp -@@ -149,7 +149,7 @@ static void reduce_lts_in_various_ways(const std::string& test_description, - BOOST_CHECK(is_deterministic(l)); - } - --static void reduce_simple_loop() -+BOOST_AUTO_TEST_CASE(reduce_simple_loop) - { - std::string SIMPLE_AUT = - "des (0,2,2)\n" -@@ -173,7 +173,7 @@ static void reduce_simple_loop() - reduce_lts_in_various_ways("Simple loop", SIMPLE_AUT, expected); - } - --static void reduce_simple_loop_with_tau() -+BOOST_AUTO_TEST_CASE(reduce_simple_loop_with_tau) - { - std::string SIMPLE_AUT = - "des (0,2,2)\n" -@@ -200,7 +200,7 @@ static void reduce_simple_loop_with_tau() - /* The example below was encountered by David Jansen. The problem is that - * for branching bisimulations the tau may supersede the b, not leading to the - * necessary splitting into two equivalence classes. */ --static void tricky_example_for_branching_bisimulation() -+BOOST_AUTO_TEST_CASE(tricky_example_for_branching_bisimulation) - { - std::string TRICKY_BB = - "des (0,3,2)\n" -@@ -226,7 +226,7 @@ static void tricky_example_for_branching_bisimulation() - } - - --static void reduce_abp() -+BOOST_AUTO_TEST_CASE(reduce_abp) - { - std::string ABP_AUT = - "des (0,92,74)\n" -@@ -342,7 +342,7 @@ static void reduce_abp() - - // Peterson's protocol has the interesting property that the number of states modulo branching bisimulation - // differs from the number of states modulo weak bisimulation, as observed by Rob van Glabbeek. --static void reduce_peterson() -+BOOST_AUTO_TEST_CASE(reduce_peterson) - { - std::string PETERSON_AUT = - "des (0,59,35)\n" -@@ -423,7 +423,7 @@ static void reduce_peterson() - reduce_lts_in_various_ways("Peterson protocol", PETERSON_AUT, expected); - } - --static void test_reachability() -+BOOST_AUTO_TEST_CASE(test_reachability) - { - std::string REACH = - "des (0,4,5) \n" -@@ -449,7 +449,7 @@ static void test_reachability() - - // The example below caused failures in the GW mlogn branching bisimulation - // algorithm when cleaning the code up. --static void failing_test_groote_wijs_algorithm() -+BOOST_AUTO_TEST_CASE(failing_test_groote_wijs_algorithm) - { - std::string GWLTS = - "des(0,29,10)\n" -@@ -511,7 +511,7 @@ static void failing_test_groote_wijs_algorithm() - // It has not been implemented fully. The problem is that it is difficult to - // prescribe the order in which refinements have to be done. - --static void counterexample_jk_1(std::size_t k) -+void counterexample_jk_1(std::size_t k) - { - // numbering scheme of states: - // states 0..k-1 are the blue squares -@@ -571,7 +571,7 @@ static void counterexample_jk_1(std::size_t k) - - // In the meantime, the bug is corrected: this is why the first part of the - // algorithm now follows a much simpler line than previously. --static void counterexample_postprocessing() -+BOOST_AUTO_TEST_CASE(counterexample_postprocessing) - { - std::string POSTPROCESS_AUT = - "des(0,33,13)\n" -@@ -634,7 +634,7 @@ static void counterexample_postprocessing() - test_lts("postprocessing problem (branching bisimulation signature [Blom/Orzan 2003])",l,expected_label_count, expected_state_count, expected_transition_count); - } - --static void regression_delete_old_bb_slice() -+BOOST_AUTO_TEST_CASE(regression_delete_old_bb_slice) - { - std::string POSTPROCESS_AUT = - "des(0,163,100)\n" -@@ -824,7 +824,7 @@ static void regression_delete_old_bb_slice() - test_lts("regression test for GJKW bug (branching bisimulation signature [Blom/Orzan 2003])",l,expected_label_count, expected_state_count, expected_transition_count); - } - --void is_deterministic_test1() -+BOOST_AUTO_TEST_CASE(is_deterministic_test1) - { - std::string automaton = - "des(0,2,2)\n" -@@ -837,7 +837,7 @@ void is_deterministic_test1() - BOOST_CHECK(is_deterministic(l_det)); - } - --void is_deterministic_test2() -+BOOST_AUTO_TEST_CASE(is_deterministic_test2) - { - std::string automaton = - "des(0,2,2)\n" -@@ -850,24 +850,25 @@ void is_deterministic_test2() - BOOST_CHECK(!is_deterministic(l_det)); - } - --void test_is_deterministic() -+BOOST_AUTO_TEST_CASE(hide_actions1) - { -- is_deterministic_test1(); -- is_deterministic_test2(); --} -+ std::string automaton = -+ "des (0,4,3)\n" -+ "(0,\"\",1)\n" -+ "(1,\"return|hello\",2)\n" -+ "(1,\"return\",2)\n" -+ "(2,\"world\",1)\n"; -+ -+ std::istringstream is(automaton); -+ lts::lts_aut_t l; -+ l.load(is); -+ std::vectorhidden_actions(1,"hello"); -+ l.apply_hidden_actions(hidden_actions); -+ reduce(l,lts::lts_eq_bisim); -+ std::size_t expected_label_count = 5; -+ std::size_t expected_state_count = 3; -+ std::size_t expected_transition_count = 3; -+ test_lts("regression test for GJKW bug (branching bisimulation [Jansen/Groote/Keiren/Wijs 2019])",l,expected_label_count, expected_state_count, expected_transition_count); -+ - --BOOST_AUTO_TEST_CASE(test_main) --{ -- reduce_simple_loop(); -- reduce_simple_loop_with_tau(); -- tricky_example_for_branching_bisimulation(); -- reduce_abp(); -- reduce_peterson(); -- test_reachability(); -- test_is_deterministic(); -- failing_test_groote_wijs_algorithm(); -- counterexample_jk_1(3); -- counterexample_postprocessing(); -- regression_delete_old_bb_slice(); -- // TODO: Add groote wijs branching bisimulation and add weak bisimulation tests. For the last Peterson is a good candidate. - } -diff --git a/tools/release/ltsconvert/ltsconvert.cpp b/tools/release/ltsconvert/ltsconvert.cpp -index 231deabe2..5645d31d1 100644 ---- a/tools/release/ltsconvert/ltsconvert.cpp -+++ b/tools/release/ltsconvert/ltsconvert.cpp -@@ -123,8 +123,7 @@ class ltsconvert_tool : public input_output_tool - - LTS_TYPE l; - l.load(tool_options.infilename); -- l.record_hidden_actions(tool_options.tau_actions); -- l.apply_hidden_actions(); -+ l.apply_hidden_actions(tool_options.tau_actions); - - if (tool_options.check_reach) - { --- -2.35.1 - diff --git a/gnu/packages/patches/mcrl2-fix-counterexample.patch b/gnu/packages/patches/mcrl2-fix-counterexample.patch deleted file mode 100644 index abf541f50c..0000000000 --- a/gnu/packages/patches/mcrl2-fix-counterexample.patch +++ /dev/null @@ -1,32 +0,0 @@ -Taken from upstream: - https://github.com/mCRL2org/mCRL2/commit/435421429dde9dcc5956e8a978597111a3947ec1 - -Fixes bug in ltscompare: - https://listserver.tue.nl/pipermail/mcrl2-users/2022-June/000396.html - -From 435421429dde9dcc5956e8a978597111a3947ec1 Mon Sep 17 00:00:00 2001 -From: Maurice Laveaux -Date: Wed, 29 Jun 2022 10:27:58 +0200 -Subject: [PATCH] Write counterexample's structured output trace on single - line. - ---- - libraries/lts/include/mcrl2/lts/detail/counter_example.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libraries/lts/include/mcrl2/lts/detail/counter_example.h b/libraries/lts/include/mcrl2/lts/detail/counter_example.h -index c339cfde4..ca3967768 100644 ---- a/libraries/lts/include/mcrl2/lts/detail/counter_example.h -+++ b/libraries/lts/include/mcrl2/lts/detail/counter_example.h -@@ -139,7 +139,7 @@ class counter_example_constructor - if (m_structured_output) - { - std::cout << m_name << ": "; -- result.save("", mcrl2::lts::trace::tfPlain); // Write to stdout. -+ result.save("", mcrl2::lts::trace::tfLine); // Write to stdout. - } - else - { --- -2.35.1 - -- cgit v1.2.3 From 0421160f4a350de72422f4a51d7fd101b3764376 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Thu, 27 Jul 2023 11:05:09 +0200 Subject: gnu: texlive: Reinstate the monolithic texlive package. This goes back essentially to commit ad457d01147b8d6fcb4ee64b2dc2d699caa1d1ee and defines the monolithic texlive packages independently of the modular ones. It also downgrades their version to 2021. Not using dashes in the names of texlivebin and texlivetexmf prevents the profile hook for font mapping from being run during the command "guix shell -D texlive". * gnu/packages/tex.scm (texlive-bin-full): Remove variable. (biber): Remove variable deprecation. (texlive-texm, texlive): Move variables from here... * gnu/packages/texlive.scm (texlivetexm, texlive): ...to this new file. (%texlive-date, %texlive-version, %texlive-tag, %texlive-revision, texlive-extra-src, texlive-texmf-src, texlivebin): New variables. (biber): Add variable again. * gnu/packages/patches/biber-adapt-perl-5.36.patch: Add file again. * gnu/local.mk (GNU_SYSTEM_MODULES, dist_patch_DATA): Register files. --- gnu/local.mk | 2 + gnu/packages/patches/biber-adapt-perl-5.36.patch | 40 ++ gnu/packages/tex.scm | 263 --------- gnu/packages/texlive.scm | 688 +++++++++++++++++++++++ 4 files changed, 730 insertions(+), 263 deletions(-) create mode 100644 gnu/packages/patches/biber-adapt-perl-5.36.patch create mode 100644 gnu/packages/texlive.scm (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 1ec6ba4523..10cf532d89 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -610,6 +610,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/terraform.scm \ %D%/packages/texinfo.scm \ %D%/packages/tex.scm \ + %D%/packages/texlive.scm \ %D%/packages/textutils.scm \ %D%/packages/text-editors.scm \ %D%/packages/time.scm \ @@ -945,6 +946,7 @@ dist_patch_DATA = \ %D%/packages/patches/bazaar-CVE-2017-14176.patch \ %D%/packages/patches/bc-fix-cross-compilation.patch \ %D%/packages/patches/bdb-5.3-atomics-on-gcc-9.patch \ + %D%/packages/patches/biber-adapt-perl-5.36.patch \ %D%/packages/patches/bind-re-add-attr-constructor-priority.patch \ %D%/packages/patches/brightnessctl-elogind-support.patch \ %D%/packages/patches/bsd-games-2.17-64bit.patch \ diff --git a/gnu/packages/patches/biber-adapt-perl-5.36.patch b/gnu/packages/patches/biber-adapt-perl-5.36.patch new file mode 100644 index 0000000000..895813c1f2 --- /dev/null +++ b/gnu/packages/patches/biber-adapt-perl-5.36.patch @@ -0,0 +1,40 @@ +From d9e961710074d266ad6bdf395c98868d91952088 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Wed, 25 May 2022 12:41:59 +0200 +Subject: [PATCH] Adapt to Perl 5.36 + +A developmental release of Perl 5.36.0 fails to run tests with: + + $ perl -Ilib t/basic-misc.t + 1..72 + Can't modify undef operator in scalar assignment at lib/Biber/Section.pm line 433, near "undef;" + Compilation failed in require at lib/Biber.pm line 24. + BEGIN failed--compilation aborted at lib/Biber.pm line 24. + Compilation failed in require at t/basic-misc.t line 11. + BEGIN failed--compilation aborted at t/basic-misc.t line 11. + # Looks like your test exited with 255 before it could output anything. + +This is because of a missing semicolon between commands in +del_everykeys(). The new perl is more strict and raises a compile-time +error: + + $ perl -e '$a = undef $b = undef;' + Can't modify undef operator in scalar assignment at -e line 1, near "undef;" + Execution of -e aborted due to compilation errors. +--- + lib/Biber/Section.pm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/Biber/Section.pm b/lib/Biber/Section.pm +index 03ed69a51..a78942f57 100644 +--- a/lib/Biber/Section.pm ++++ b/lib/Biber/Section.pm +@@ -429,7 +429,7 @@ sub add_everykey { + + sub del_everykeys { + my $self = shift; +- $self->{everykey} = undef ++ $self->{everykey} = undef; + $self->{everykey_lc} = undef; + return; + } diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm index 4d9bb4bb2a..877040ade5 100644 --- a/gnu/packages/tex.scm +++ b/gnu/packages/tex.scm @@ -38665,267 +38665,6 @@ documents as well as DVI output.") (define-deprecated-package texlive-generic-pdftex texlive-pdftex) -(define texlive-bin-full - (package/inherit texlive-bin - (name "texlive-bin-full") - (arguments - (substitute-keyword-arguments (package-arguments texlive-bin) - ((#:configure-flags _) - #~(let ((kpathsea #$(this-package-input "texlive-libkpathsea"))) - (list "--with-banner-add=/GNU Guix" - "--enable-shared" - "--disable-native-texlive-build" - "--disable-static" - "--disable-kpathsea" - "--with-system-cairo" - "--with-system-freetype2" - "--with-system-gd" - "--with-system-gmp" - "--with-system-graphite2" - "--with-system-harfbuzz" - "--with-system-icu" - "--with-system-libgs" - "--with-system-libpaper" - "--with-system-libpng" - "--with-system-mpfr" - "--with-system-pixman" - "--with-system-potrace" - "--with-system-teckit" - "--with-system-zlib" - "--with-system-zziplib" - ;; Help locating external kpathsea. For some reason - ;; PKG-CONFIG is unable to find it. - "--with-system-kpathsea" - (format #f "--with-kpathsea-includes=~a/include" kpathsea) - (format #f "--with-kpathsea-lib=~a/lib" kpathsea) - ;; LuaJIT is not ported to some architectures yet. - #$@(if (or (target-ppc64le?) - (target-riscv64?)) - '("--disable-luajittex" - "--disable-luajithbtex" - "--disable-mfluajit") - '())))) - ((#:phases phases) - #~(modify-phases #$phases - (add-after 'install 'symlink-kpathsea-binaries - (lambda _ - (let ((bin (string-append - #$(this-package-input "texlive-libkpathsea") - "/bin")) - (files - '("kpseaccess" "kpsereadlink" "kpsestat" "kpsewhich"))) - (with-directory-excursion (string-append #$output "/bin") - (for-each (lambda (b) (symlink (string-append bin "/" b) b)) - files))))) - (add-after 'install 'merge-core-scripts - (lambda* (#:key inputs native-inputs #:allow-other-keys) - (let ((texlive-scripts - (dirname - (dirname - (search-input-file (or native-inputs inputs) - "tlpkg/texlive.tlpdb")))) - (tlpkg (string-append #$output "/share/tlpkg"))) - ;; "tlpkg" directory is neither provided by texlive-bin nor - ;; by texlive-texmf. - (mkdir-p tlpkg) - (copy-recursively (string-append texlive-scripts "/tlpkg") - tlpkg) - ;; texlive-bin source doesn't provide this Perl script. - ;; Yet, it is referenced in "fmtutil.pl" so we need to move - ;; it here too. - (install-file - (string-append texlive-scripts - "/texmf-dist/scripts/texlive/mktexlsr.pl") - (string-append #$output - "/share/texmf-dist/scripts/texlive"))))) - (add-after 'merge-core-scripts 'patch-core-scripts - (lambda _ - (with-directory-excursion - (string-append #$output "/share/texmf-dist/scripts/texlive") - ;; Make sure that fmtutil can find its Perl modules. - (substitute* "fmtutil.pl" - (("\\$TEXMFROOT/") - (string-append #$output "/share/"))) - ;; Likewise for updmap.pl. - (substitute* "updmap.pl" - (("\\$TEXMFROOT/tlpkg") - (string-append #$output "/share/tlpkg"))) - ;; Likewise for the tlmgr. - (substitute* "tlmgr.pl" - ((".*\\$::installerdir = \\$Master.*" all) - (format #f " $Master = ~s;~%~a" - (string-append #$output "/share") - all)))))) - (add-after 'patch-core-scripts 'patch-shell-scripts - (lambda _ - (with-directory-excursion - (string-append #$output "/share/texmf-dist/scripts") - ;; First patch shell scripts with ".sh" extension. - (let* ((scripts (find-files "." "\\.sh$")) - (commands '("awk" "basename" "cat" "grep" "mkdir" "rm" - "sed" "sort" "uname")) - (command-regexp - (format #f "\\b(~a)\\b" (string-join commands "|"))) - (iso-8859-1-encoded-scripts - '("./texlive-extra/rubibtex.sh" - "./texlive-extra/rumakeindex.sh"))) - (define (substitute-commands scripts) - (substitute* scripts - ((command-regexp dummy command) - (which command)))) - (substitute-commands - (lset-difference string= scripts iso-8859-1-encoded-scripts)) - (with-fluids ((%default-port-encoding "ISO-8859-1")) - (substitute-commands iso-8859-1-encoded-scripts))) - ;; Then patch scripts without such extension. - (let ((dirs (map (compose dirname which) - (list "awk" "cat" "grep" "sed")))) - (substitute* (find-files "texlive" "^mktex(mf|pk|tfm)$") - (("^version=" m) - (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a" - dirs m))))))))))) - (native-inputs - (modify-inputs (package-native-inputs texlive-bin) - (append (package-source texlive-scripts)))) - (inputs - (modify-inputs (package-inputs texlive-bin) - (append texlive-libkpathsea))) - (propagated-inputs '()))) - -(define texlive-texmf - (package - (name "texlive-texmf") - (version (package-version texlive-bin)) - (source (origin - (method url-fetch) - (uri (string-append "ftp://tug.org/historic/systems/texlive/" - (string-take version 4) - "/texlive-" version "-texmf.tar.xz")) - (sha256 - (base32 - "0lqjm11pr9vasvivaci3k9xcmdyd08ldnh31zf8avjjs09xcfkac")))) - (build-system copy-build-system) - (arguments - (list - #:modules '((guix build copy-build-system) - (guix build utils) - (srfi srfi-1) - (srfi srfi-26)) - ;; This package takes 4 GiB, which we can't afford to distribute from - ;; our servers. - #:substitutable? #f - #:install-plan #~'(("texmf-dist/" "share/texmf-dist")) - #:phases - #~(modify-phases %standard-phases - (add-after 'install 'texmf-config - (lambda* (#:key inputs native-inputs #:allow-other-keys) - (let* ((share (string-append #$output "/share")) - (texmf-dist (string-append share "/texmf-dist")) - (web2c (string-append texmf-dist "/web2c")) - (fmtutil.cnf (string-append web2c "/fmtutil.cnf")) - (texlive-bin - #$(this-package-native-input "texlive-bin-full"))) - ;; LuaJIT is not ported to powerpc64* yet. - (if #$(target-ppc64le?) - (substitute* fmtutil.cnf - (("^(luajittex|luajithbtex|mfluajit)" m) - (string-append "#! " m)))) - ;; Register paths in texmfcnf.lua, needed for context. - (substitute* (string-append web2c "/texmfcnf.lua") - (("selfautodir:") #$output) - (("selfautoparent:") (string-append share "/"))) - ;; Set path to TeXLive Perl modules - (setenv "PERL5LIB" - (string-append (getenv "PERL5LIB") ":" - (string-append texlive-bin - "/share/tlpkg"))) - ;; Configure the texmf-dist tree. - (setenv "GUIX_TEXMF" texmf-dist) - (setenv "PATH" - (string-append (getenv "PATH") ":" texlive-bin "/bin:")) - (let ((updmap.cfg (string-append web2c "/updmap.cfg"))) - (invoke (string-append texlive-bin "/bin/updmap-sys") - "--nohash" "--syncwithtrees" - (string-append "--cnffile=" updmap.cfg))) - (invoke (string-append texlive-bin "/bin/fmtutil-sys") - "--cnffile" fmtutil.cnf - "--all" - "--fmtdir" web2c))))))) - (native-inputs (list texlive-bin-full)) - (inputs (list lua perl python-wrapper ruby tcsh)) - (properties `((max-silent-time . 9600))) ; don't time out while grafting - (synopsis "TeX Live, a package of the TeX typesetting system") - (description - "TeX Live provides a comprehensive TeX document production system. -It includes all the major TeX-related programs, macro packages, and fonts -that are free software, including support for many languages around the -world. - -This package contains the complete tree of texmf-dist data.") - (license (license:fsf-free "https://www.tug.org/texlive/copying.html")) - (home-page "https://www.tug.org/texlive/"))) - -(define-public texlive - (package - (name "texlive") - (version (package-version texlive-bin)) - (source #f) - (build-system trivial-build-system) - (arguments - (list - #:modules '((guix build utils)) - #:builder - ;; Build the union of texlive-bin-full and texlive-texmf, but take the - ;; conflicting subdirectory share/texmf-dist from texlive-texmf. - #~(begin - (use-modules (guix build utils)) - (let ((bin #$(this-package-input "texlive-bin-full")) - (texmf #$(this-package-input "texlive-texmf"))) - (mkdir #$output) - (with-directory-excursion #$output - ;; "include/" and "lib/" directories. - (for-each - (lambda (name) - (symlink (string-append bin "/" name) name)) - '("include" "lib")) - ;; "bin/" directory. - (mkdir "bin") - (with-directory-excursion "bin" - (for-each - (lambda (name) (symlink name (basename name))) - (find-files (string-append bin "/bin/") ""))) - ;; "share/info", "share/man", share/texmf-dist/" and - ;; "share/tlpkg/" directories. - (mkdir "share") - (with-directory-excursion "share" - (for-each - (lambda (name) - (symlink (string-append bin "/share/" name) name)) - '("info" "man" "tlpkg")) - (symlink (string-append texmf "/share/texmf-dist") - "texmf-dist")) - ;; Now everything is in place, generate ls-R file. - (setenv "PATH" - (string-append - (getenv "PATH") ":" - #$(this-package-input "texlive-bin-full") "/bin")) - (invoke (string-append bin "/bin/mktexlsr"))))))) - (inputs (list texlive-bin-full texlive-texmf)) - (propagated-inputs (list texlive-libkpathsea)) - (native-search-paths - (list (search-path-specification - (variable "TEXMFLOCAL") - (files '("share/texmf-local"))))) - (synopsis "TeX Live, a package of the TeX typesetting system") - (description - "TeX Live provides a comprehensive TeX document production system. -It includes all the major TeX-related programs, macro packages, and fonts that -are free software, including support for many languages around the world. - -This package contains the complete TeX Live distribution.") - (license (license:fsf-free "https://www.tug.org/texlive/copying.html")) - (home-page "https://www.tug.org/texlive/"))) - (define-public texlive-biber (package (name "texlive-biber") @@ -39022,8 +38761,6 @@ UTF-8, can (re)-encode input and output, supports highly configurable sorting, dynamic bibliography sets and many other features.") (license license:artistic2.0))) -(define-deprecated-package biber texlive-biber) - (define-public rubber (package (name "rubber") diff --git a/gnu/packages/texlive.scm b/gnu/packages/texlive.scm new file mode 100644 index 0000000000..6c3989ec0d --- /dev/null +++ b/gnu/packages/texlive.scm @@ -0,0 +1,688 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge +;;; Copyright © 2014 Eric Bavier +;;; Copyright © 2015 Mark H Weaver +;;; Copyright © 2016 Roel Janssen +;;; Copyright © 2016, 2018, 2019, 2020, 2021 Efraim Flashner +;;; Copyright © 2016 Federico Beffa +;;; Copyright © 2016 Thomas Danckaert +;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus +;;; Copyright © 2017 Leo Famulari +;;; Copyright © 2017, 2020, 2021 Marius Bakke +;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice +;;; Copyright © 2018 Danny Milosavljevic +;;; Copyright © 2018, 2020 Arun Isaac +;;; Copyright © 2020 Vincent Legoll +;;; Copyright © 2020, 2021 Paul Garlick +;;; Copyright © 2021 Maxim Cournoyer +;;; Copyright © 2021 Leo Le Bouter +;;; Copyright © 2021 Xinglu Chen +;;; Copyright © 2021 Ivan Gankevich +;;; Copyright © 2021 Julien Lepiller +;;; Copyright © 2021 Thiago Jung Bauermann +;;; +;;; 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 packages texlive) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (guix build-system perl) + #:use-module (guix build-system trivial) + #:use-module (guix utils) + #:use-module (guix git-download) + #:use-module (guix svn-download) + #:use-module (gnu packages) + #:use-module (gnu packages autotools) + #:use-module (gnu packages bash) + #:use-module (gnu packages compression) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages gd) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages groff) + #:use-module (gnu packages gtk) + #:use-module (gnu packages icu4c) + #:use-module (gnu packages image) + #:use-module (gnu packages lua) + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages pdf) + #:use-module (gnu packages perl) + #:use-module (gnu packages perl-check) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages ruby) + #:use-module (gnu packages shells) + #:use-module (gnu packages web) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg)) + +;; The starting point for this file is +;; commit ad457d01147b8d6fcb4ee64b2dc2d699caa1d1ee + + +;; These variables specify the SVN tag and the matching SVN revision. They +;; are taken from https://www.tug.org/svn/texlive/tags/ +(define %texlive-tag "texlive-2021.3") +(define %texlive-revision 59745) + +(define %texlive-date "20210325") +(define %texlive-version (string-take %texlive-date 4)) + +(define texlive-extra-src + (origin + (method url-fetch) + (uri (string-append "ftp://tug.org/historic/systems/texlive/" + %texlive-version "/texlive-" + %texlive-date "-extra.tar.xz")) + (sha256 (base32 + "171kg1n9zapw3d2g47d8l0cywa99bl9m54xkqvp9625ks22z78s6")))) + +(define texlive-texmf-src + (origin + (method url-fetch) + (uri (string-append "ftp://tug.org/historic/systems/texlive/" + %texlive-version "/texlive-" + %texlive-date "-texmf.tar.xz")) + (sha256 (base32 + "070gczcm1h9rx29w2f02xd3nhd84c4k28nfmm8qgp69yq8vd84pz")))) + +(define-public texlivebin + (package + (name "texlivebin") + (version %texlive-version) + (source + (origin + (method url-fetch) + (uri (string-append "ftp://tug.org/historic/systems/texlive/" + %texlive-version "/texlive-" + %texlive-date "-source.tar.xz")) + (sha256 + (base32 + "0jsq1p66l46k2qq0gbqmx25flj2nprsz4wrd1ybn286p11kdkvvs")) + (modules '((guix build utils) + (ice-9 ftw))) + (snippet + ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too. + '(with-directory-excursion "libs" + (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf"))) + ;; Delete bundled software, except Lua which cannot easily be + ;; used as an external dependency, pplib and xpdf which aren't + ;; supported as system libraries (see m4/kpse-xpdf-flags.m4). + (for-each delete-file-recursively + (scandir "." + (lambda (file) + (and (not (member file preserved-directories)) + (eq? 'directory (stat:type (stat file)))))))))))) + (build-system gnu-build-system) + (inputs + `(("texlive-extra-src" ,texlive-extra-src) + ("config" ,config) + ("texlive-scripts" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/scripts/texlive")) + (revision %texlive-revision))) + (file-name (string-append "texlive-scripts-" + (number->string %texlive-revision) + "-checkout")) + (sha256 + (base32 + "1jrphfjhmw17rp1yqsl70shmvka3vg0g8841q6zx2lfn48p7vqf3")))) + ("cairo" ,cairo) + ("fontconfig" ,fontconfig) + ("fontforge" ,fontforge) + ("freetype" ,freetype) + ("gd" ,gd) + ("gmp" ,gmp) + ("ghostscript" ,ghostscript) + ("graphite2" ,graphite2) + ("harfbuzz" ,harfbuzz) + ("icu4c" ,icu4c) + ("libpaper" ,libpaper) + ("libpng" ,libpng) + ("libxaw" ,libxaw) + ("libxt" ,libxt) + ("mpfr" ,mpfr) + ("perl" ,perl) + ("pixman" ,pixman) + ("potrace" ,potrace) + ("python" ,python) + ("ruby" ,ruby-2.7) + ("tcsh" ,tcsh) + ("teckit" ,teckit) + ("zlib" ,zlib) + ("zziplib" ,zziplib))) + (native-inputs + (list pkg-config)) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 ftw) + (srfi srfi-1) + (srfi srfi-26)) + #:out-of-source? #t + #:configure-flags + '("--disable-static" + "--disable-native-texlive-build" + "--enable-shared" + "--with-banner-add=/GNU Guix" + "--with-system-cairo" + "--with-system-freetype2" + "--with-system-gd" + "--with-system-gmp" + "--with-system-graphite2" + "--with-system-harfbuzz" + "--with-system-icu" + "--with-system-libgs" + "--with-system-libpaper" + "--with-system-libpng" + "--with-system-mpfr" + "--with-system-pixman" + "--with-system-potrace" + "--with-system-teckit" + "--with-system-zlib" + "--with-system-zziplib" + ;; LuaJIT is not ported to some architectures yet. + ,@(if (or (target-ppc64le?) + (target-riscv64?)) + '("--disable-luajittex" + "--disable-luajithbtex" + "--disable-mfluajit") + '())) + + ;; Disable tests on some architectures to cope with a failure of + ;; luajiterr.test. + ;; XXX FIXME fix luajit properly on these architectures. + #:tests? ,(let ((s (or (%current-target-system) + (%current-system)))) + (not (or (string-prefix? "aarch64" s) + (string-prefix? "mips64" s) + (string-prefix? "powerpc64le" s)))) + + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-psutils-test + (lambda _ + ;; This test fails due to a rounding difference with libpaper 1.2: + ;; https://github.com/rrthomas/libpaper/issues/23 + ;; Adjust the expected outcome to account for the minute difference. + (substitute* "texk/psutils/tests/playres.ps" + (("844\\.647799") + "844.647797")))) + (add-after 'unpack 'configure-ghostscript-executable + ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows, + ;; and the "gs" ghostscript executable on Unix. It detects Unix by + ;; checking for the existence of the /usr/bin directory. Since + ;; Guix System does not have /usr/bin, it is also detected as Windows. + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl" + (("gswin32c") "gs")) + (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl" + (("\"gs\"") + (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\""))))) + (add-after 'unpack 'patch-dvisvgm-build-files + (lambda _ + ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so + ;; the appropriate linker flags are not added. + (substitute* "texk/dvisvgm/configure" + (("^have_libgs=yes" all) + (string-append all "\nHAVE_LIBGS=1"))))) + (add-after 'unpack 'disable-failing-test + (lambda _ + ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28: + ;; . + (substitute* "texk/web2c/omegafonts/check.test" + (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1") + "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77")))) + ,@(if (or (target-ppc32?) + (target-riscv64?)) + ;; Some mendex tests fail on some architectures. + `((add-after 'unpack 'skip-mendex-tests + (lambda _ + (substitute* '("texk/mendexk/tests/mendex.test" + "texk/upmendex/tests/upmendex.test") + (("srcdir/tests/pprecA-0.ind pprecA-0.ind1 \\|\\| exit 1") + "srcdir/tests/pprecA-0.ind pprecA-0.ind1 || exit 77"))))) + '()) + (add-after 'unpack 'unpack-texlive-extra + (lambda* (#:key inputs #:allow-other-keys) + (mkdir "texlive-extra") + (with-directory-excursion "texlive-extra" + (apply (assoc-ref %standard-phases 'unpack) + (list #:source (assoc-ref inputs "texlive-extra-src")))))) + (add-after 'unpack-texlive-extra 'unpack-texlive-scripts + (lambda* (#:key inputs #:allow-other-keys) + (mkdir "texlive-scripts") + (with-directory-excursion "texlive-scripts" + (apply (assoc-ref %standard-phases 'unpack) + (list #:source (assoc-ref inputs "texlive-scripts"))) + ;; Configure the version string for some scripts. + ;; Normally this would be done by Subversion. + ;; See . + (for-each (lambda (file) + (substitute* file + (("\\$Id\\$") + (format #f "$Id: ~a ~a ~a nobody $" + file + ,%texlive-revision + ,%texlive-date)) + (("\\$Revision\\$") + (format #f "$Revision: ~a $" + ,%texlive-revision)) + (("\\$Date\\$") + (format #f "$Date: ~a $" + ,%texlive-date)))) + '("fmtutil.pl" + "mktexlsr" + "mktexlsr.pl" + "mktexmf" + "mktexpk" + "mktextfm" + "tlmgr.pl" + "tlmgrgui.pl" + "updmap.pl"))))) + (add-after 'unpack-texlive-scripts 'patch-scripts + (lambda _ + (let* ((scripts (append (find-files "texk/kpathsea" "^mktex") + (find-files "texk/texlive/linked_scripts" + "\\.sh$") + (find-files "texlive-scripts" "\\.sh$"))) + (commands '("awk" "basename" "cat" "grep" "mkdir" "rm" + "sed" "sort" "uname")) + (command-regexp (format #f "\\b(~a)\\b" + (string-join commands "|"))) + (iso-8859-1-encoded-scripts + '("texk/texlive/linked_scripts/texlive-extra/rubibtex.sh" + "texk/texlive/linked_scripts/texlive-extra/rumakeindex.sh"))) + + (define (substitute-commands scripts) + (substitute* scripts + ((command-regexp dummy command) + (which command)))) + + (substitute-commands (lset-difference string= scripts + iso-8859-1-encoded-scripts)) + + (with-fluids ((%default-port-encoding "ISO-8859-1")) + (substitute-commands iso-8859-1-encoded-scripts))))) + ;; When ST_NLINK_TRICK is set, kpathsea attempts to avoid work when + ;; searching files by assuming that a directory with exactly two + ;; links has no subdirectories. This assumption does not hold in our + ;; case, so some directories with symlinked subdirectories would not + ;; be traversed. + (add-after 'patch-scripts 'patch-directory-traversal + (lambda _ + (substitute* "texk/kpathsea/config.h" + (("#define ST_NLINK_TRICK") "")))) + + ,@(if (target-arm32?) + `((add-after 'unpack 'skip-faulty-test + (lambda _ + ;; Skip this faulty test on armhf-linux: + ;; https://issues.guix.gnu.org/54055 + (substitute* '("texk/mendexk/tests/mendex.test" + "texk/upmendex/tests/upmendex.test") + (("^TEXMFCNF=" all) + (string-append "exit 77 # skip\n" all)))))) + '()) + + (add-after 'check 'customize-texmf.cnf + ;; The default texmf.cnf is provided by this package, texlive-bin. + ;; Every variable of interest is set relatively to the GUIX_TEXMF + ;; environment variable defined via a search path specification + ;; further below. The configuration file is patched after the test + ;; suite has run, as it relies on the default configuration to find + ;; its paths (and the GUIX_TEXMF variable isn't set yet). + (lambda _ + ;; The current directory is build/ because of the out-of-tree + ;; build. + (let* ((source (first (scandir ".." (cut string-suffix? + "source" <>)))) + (texmf.cnf (string-append "../" source + "/texk/kpathsea/texmf.cnf"))) + (substitute* texmf.cnf + (("^TEXMFROOT = .*") + "TEXMFROOT = {$GUIX_TEXMF}/..\n") + (("^TEXMF = .*") + "TEXMF = {$GUIX_TEXMF}\n") + (("^%TEXMFCNF = .*") + "TEXMFCNF = {$GUIX_TEXMF}/web2c\n") + ;; Don't truncate lines. + (("^error_line = .*$") "error_line = 254\n") + (("^half_error_line = .*$") "half_error_line = 238\n") + (("^max_print_line = .*$") "max_print_line = 1000\n"))))) + (add-after 'install 'post-install + (lambda* (#:key inputs outputs #:allow-other-keys #:rest args) + (let* ((out (assoc-ref outputs "out")) + (patch-source-shebangs (assoc-ref %standard-phases + 'patch-source-shebangs)) + (share (string-append out "/share")) + (scripts (string-append share + "/texmf-dist/scripts/texlive")) + (source (string-append + "../" (first (scandir ".." (cut string-suffix? + "source" <>))))) + (tl-extra-root (string-append source "/texlive-extra")) + (tl-extra-dir (first + (scandir tl-extra-root + (negate + (cut member <> '("." "..")))))) + (tlpkg-src (string-append tl-extra-root "/" tl-extra-dir + "/tlpkg")) + (config.guess (search-input-file inputs + "/bin/config.guess"))) + + ;; Create symbolic links for the latex variants and their man + ;; pages. We link lualatex to luahbtex; see issue #51252 for + ;; details. + (with-directory-excursion (string-append out "/bin/") + (for-each symlink + '("pdftex" "pdftex" "xetex" "luahbtex") + '("latex" "pdflatex" "xelatex" "lualatex"))) + (with-directory-excursion (string-append share "/man/man1/") + (symlink "luatex.1" "lualatex.1")) + + ;; Install tlpkg. + (copy-recursively tlpkg-src (string-append share "/tlpkg")) + + ;; Install texlive-scripts. + (copy-recursively (string-append + source "/texlive-scripts/source/") + scripts) + + ;; Patch them. + (let ((dirs (map dirname (list (which "sed") (which "awk"))))) + (with-directory-excursion scripts + (substitute* '("mktexpk" "mktexmf" "mktexlsr") + (("^version=" m) + (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a" + dirs m))))) + + ;; Make sure that fmtutil can find its Perl modules. + (substitute* (string-append scripts "/fmtutil.pl") + (("\\$TEXMFROOT/") + (string-append share "/"))) + + ;; Likewise for updmap.pl. + (substitute* (string-append scripts "/updmap.pl") + (("\\$TEXMFROOT/tlpkg") + (string-append share "/tlpkg"))) + + ;; Likewise for the tlmgr. + (substitute* (string-append scripts "/tlmgr.pl") + ((".*\\$::installerdir = \\$Master.*" all) + (format #f " $Master = ~s;~%~a" share all))) + + ;; Install the config.guess script, required by tlmgr. + (with-directory-excursion share + (mkdir-p "tlpkg/installer/") + (symlink config.guess "tlpkg/installer/config.guess")) + + ;; texlua shebangs are not patched by the patch-source-shebangs + ;; phase because the texlua executable does not exist at that + ;; time. + (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin")) + (with-directory-excursion out + (patch-source-shebangs)))))))) + (native-search-paths + (list (search-path-specification + (variable "GUIX_TEXMF") + (files '("share/texmf-dist"))))) + (synopsis "TeX Live, a package of the TeX typesetting system") + (description + "TeX Live provides a comprehensive TeX document production system. +It includes all the major TeX-related programs, macro packages, and fonts +that are free software, including support for many languages around the +world. + +This package contains the binaries.") + (license (license:fsf-free "https://www.tug.org/texlive/copying.html")) + (home-page "https://www.tug.org/texlive/"))) + + +(define-public texlivetexmf + (package + (name "texlivetexmf") + (version %texlive-version) + (source texlive-texmf-src) + (build-system gnu-build-system) + (inputs + `(("texlive-bin" ,texlivebin) + ("lua" ,lua) + ("perl" ,perl) + ("python" ,python) + ("ruby" ,ruby) + ("tcsh" ,tcsh))) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-26)) + + ;; This package takes 4 GiB, which we can't afford to distribute from + ;; our servers. + #:substitutable? #f + + #:phases + (modify-phases (map (cut assq <> %standard-phases) + '(set-paths unpack patch-source-shebangs)) + (add-after 'unpack 'unset-environment-variables + (lambda _ + (unsetenv "TEXMF") + (unsetenv "TEXMFCNF") + #t)) + (add-after 'patch-source-shebangs 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((share (string-append (assoc-ref outputs "out") "/share"))) + (mkdir-p share) + (invoke "mv" "texmf-dist" share)))) + (add-after 'install 'texmf-config + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (share (string-append out "/share")) + (texmfroot (string-append share "/texmf-dist/web2c")) + (texmfcnf (string-append texmfroot "/texmf.cnf")) + (texlive-bin (assoc-ref inputs "texlive-bin")) + (texbin (string-append texlive-bin "/bin")) + (tlpkg (string-append texlive-bin "/share/tlpkg"))) + ;; LuaJIT is not ported to powerpc64* yet. + (if ,(target-ppc64le?) + (substitute* fmtutilcnf + (("^(luajittex|luajithbtex|mfluajit)" m) + (string-append "#! " m)))) + ;; Register SHARE as TEXMFROOT in texmf.cnf. + (substitute* texmfcnf + (("TEXMFROOT = \\$SELFAUTOPARENT") + (string-append "TEXMFROOT = " share)) + (("TEXMFLOCAL = \\$SELFAUTOGRANDPARENT/texmf-local") + "TEXMFLOCAL = $SELFAUTODIR/share/texmf-local") + (("!!\\$TEXMFLOCAL") "$TEXMFLOCAL")) + ;; Register paths in texmfcnf.lua, needed for context. + (substitute* (string-append texmfroot "/texmfcnf.lua") + (("selfautodir:") out) + (("selfautoparent:") (string-append share "/"))) + ;; Set path to TeXLive Perl modules + (setenv "PERL5LIB" + (string-append (getenv "PERL5LIB") ":" tlpkg)) + ;; Configure the texmf-dist tree; inspired from + ;; http://slackbuilds.org/repository/13.37/office/texlive/ + (setenv "PATH" (string-append (getenv "PATH") ":" texbin)) + (setenv "TEXMFCNF" texmfroot) + (invoke "updmap-sys" "--nohash" "--syncwithtrees") + (invoke "mktexlsr") + (invoke "fmtutil-sys" "--all"))))))) + (properties `((max-silent-time . 9600))) ; don't time out while grafting + (synopsis "TeX Live, a package of the TeX typesetting system") + (description + "TeX Live provides a comprehensive TeX document production system. +It includes all the major TeX-related programs, macro packages, and fonts +that are free software, including support for many languages around the +world. + +This package contains the complete tree of texmf-dist data.") + (license (license:fsf-free "https://www.tug.org/texlive/copying.html")) + (home-page "https://www.tug.org/texlive/"))) + +(define-public texlive + (package + (name "texlive") + (version %texlive-version) + (source #f) + (build-system trivial-build-system) + (inputs `(("bash" ,bash-minimal) ;for wrap-program + ("texlive-bin" ,texlivebin) + ("texlive-texmf" ,texlivetexmf))) + (native-search-paths + (list (search-path-specification + (variable "TEXMFLOCAL") + (files '("share/texmf-local"))))) + (arguments + `(#:modules ((guix build utils)) + #:builder + ;; Build the union of texlive-bin and texlive-texmf, but take the + ;; conflicting subdirectory share/texmf-dist from texlive-texmf. + (begin + (use-modules (guix build utils)) + (let ((out (assoc-ref %outputs "out")) + (bin (assoc-ref %build-inputs "texlive-bin")) + (texmf (assoc-ref %build-inputs "texlive-texmf")) + (bash (assoc-ref %build-inputs "bash"))) + (mkdir out) + (with-directory-excursion out + (for-each + (lambda (name) + (symlink (string-append bin "/" name) name)) + '("include" "lib")) + (mkdir "bin") + (with-directory-excursion "bin" + (setenv "PATH" (string-append bash "/bin")) + (for-each + (lambda (name) + (symlink name (basename name)) + (wrap-program + (basename name) + `("TEXMFCNF" = + (,(string-append texmf "/share/texmf-dist/web2c"))))) + (find-files (string-append bin "/bin/") ""))) + (mkdir "share") + (with-directory-excursion "share" + (for-each + (lambda (name) + (symlink (string-append bin "/share/" name) name)) + '("info" "man" "tlpkg")) + (for-each + (lambda (name) + (symlink (string-append texmf "/share/" name) name)) + '("texmf-dist" "texmf-var")))) + #t)))) + (synopsis "TeX Live, a package of the TeX typesetting system") + (description + "TeX Live provides a comprehensive TeX document production system. +It includes all the major TeX-related programs, macro packages, and fonts +that are free software, including support for many languages around the +world. + +This package contains the complete TeX Live distribution.") + (license (license:fsf-free "https://www.tug.org/texlive/copying.html")) + (home-page "https://www.tug.org/texlive/"))) + +(define-public biber + (package + ;; Note: When updating Biber, make sure it matches our BibLaTeX version by + ;; checking the Biber/BibLaTeX compatibility matrix in the BibLaTeX manual + ;; at . + (name "biber") + (version "2.16") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/plk/biber/") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0586q8y1f2k23mvb02ccm3qsb35cwskafksixsjaih7a7xcf5gxx")) + (patches (search-patches "biber-adapt-perl-5.36.patch")))) + (build-system perl-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'install 'wrap-programs + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (perl5lib (getenv "PERL5LIB"))) + (wrap-program (string-append out "/bin/biber") + `("PERL5LIB" ":" prefix + (,(string-append perl5lib ":" out + "/lib/perl5/site_perl")))))))))) + (inputs + (list perl-autovivification + perl-class-accessor + perl-data-dump + perl-data-compare + perl-data-uniqid + perl-datetime-format-builder + perl-datetime-calendar-julian + perl-file-slurper + perl-io-string + perl-ipc-cmd + perl-ipc-run3 + perl-list-allutils + perl-list-moreutils + perl-mozilla-ca + perl-regexp-common + perl-log-log4perl + perl-parse-recdescent + perl-unicode-collate + perl-unicode-normalize + perl-unicode-linebreak + perl-encode-eucjpascii + perl-encode-jis2k + perl-encode-hanextra + perl-xml-libxml + perl-xml-libxml-simple + perl-xml-libxslt + perl-xml-writer + perl-sort-key + perl-text-csv + perl-text-csv-xs + perl-text-roman + perl-uri + perl-text-bibtex + perl-libwww + perl-lwp-protocol-https + perl-business-isbn + perl-business-issn + perl-business-ismn + perl-lingua-translit)) + (native-inputs + `(("perl-config-autoconf" ,perl-config-autoconf) + ("perl-extutils-libbuilder" ,perl-extutils-libbuilder) + ("perl-module-build" ,perl-module-build) + ;; for tests + ("perl-file-which" ,perl-file-which) + ("perl-test-more" ,perl-test-most) ; FIXME: "more" would be sufficient + ("perl-test-differences" ,perl-test-differences))) + (home-page "https://biblatex-biber.sourceforge.net/") + (synopsis "Backend for the BibLaTeX citation management tool") + (description "Biber is a BibTeX replacement for users of biblatex. Among +other things it comes with full Unicode support.") + (license license:artistic2.0))) + -- cgit v1.2.3 From 6274dcbdbd2c1f8c539d7dbc8675e713d14d1af8 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Mon, 7 Aug 2023 18:13:48 +0200 Subject: gnu: biber: Update to 2.19. * gnu/packages/texlive.scm (biber): Update to 2.19. Remove patch. * gnu/packages/patches/biber-adapt-perl-5.36.patch: Remove file. * gnu/local.mk (dist_patch_DATA): Unregister patch. --- gnu/local.mk | 1 - gnu/packages/patches/biber-adapt-perl-5.36.patch | 40 ------------------------ gnu/packages/texlive.scm | 5 ++- 3 files changed, 2 insertions(+), 44 deletions(-) delete mode 100644 gnu/packages/patches/biber-adapt-perl-5.36.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 10cf532d89..abe8964f4d 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -946,7 +946,6 @@ dist_patch_DATA = \ %D%/packages/patches/bazaar-CVE-2017-14176.patch \ %D%/packages/patches/bc-fix-cross-compilation.patch \ %D%/packages/patches/bdb-5.3-atomics-on-gcc-9.patch \ - %D%/packages/patches/biber-adapt-perl-5.36.patch \ %D%/packages/patches/bind-re-add-attr-constructor-priority.patch \ %D%/packages/patches/brightnessctl-elogind-support.patch \ %D%/packages/patches/bsd-games-2.17-64bit.patch \ diff --git a/gnu/packages/patches/biber-adapt-perl-5.36.patch b/gnu/packages/patches/biber-adapt-perl-5.36.patch deleted file mode 100644 index 895813c1f2..0000000000 --- a/gnu/packages/patches/biber-adapt-perl-5.36.patch +++ /dev/null @@ -1,40 +0,0 @@ -From d9e961710074d266ad6bdf395c98868d91952088 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= -Date: Wed, 25 May 2022 12:41:59 +0200 -Subject: [PATCH] Adapt to Perl 5.36 - -A developmental release of Perl 5.36.0 fails to run tests with: - - $ perl -Ilib t/basic-misc.t - 1..72 - Can't modify undef operator in scalar assignment at lib/Biber/Section.pm line 433, near "undef;" - Compilation failed in require at lib/Biber.pm line 24. - BEGIN failed--compilation aborted at lib/Biber.pm line 24. - Compilation failed in require at t/basic-misc.t line 11. - BEGIN failed--compilation aborted at t/basic-misc.t line 11. - # Looks like your test exited with 255 before it could output anything. - -This is because of a missing semicolon between commands in -del_everykeys(). The new perl is more strict and raises a compile-time -error: - - $ perl -e '$a = undef $b = undef;' - Can't modify undef operator in scalar assignment at -e line 1, near "undef;" - Execution of -e aborted due to compilation errors. ---- - lib/Biber/Section.pm | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/Biber/Section.pm b/lib/Biber/Section.pm -index 03ed69a51..a78942f57 100644 ---- a/lib/Biber/Section.pm -+++ b/lib/Biber/Section.pm -@@ -429,7 +429,7 @@ sub add_everykey { - - sub del_everykeys { - my $self = shift; -- $self->{everykey} = undef -+ $self->{everykey} = undef; - $self->{everykey_lc} = undef; - return; - } diff --git a/gnu/packages/texlive.scm b/gnu/packages/texlive.scm index 591c71b3ec..b6bc3f30f7 100644 --- a/gnu/packages/texlive.scm +++ b/gnu/packages/texlive.scm @@ -455,7 +455,7 @@ This package contains the complete TeX Live distribution.") ;; checking the Biber/BibLaTeX compatibility matrix in the BibLaTeX manual ;; at . (name "biber") - (version "2.17") + (version "2.19") (source (origin (method git-fetch) (uri (git-reference @@ -464,8 +464,7 @@ This package contains the complete TeX Live distribution.") (file-name (git-file-name name version)) (sha256 (base32 - "0b8a8lldz9xx3yr1h5bh2akbqq1ljydqyhr6bdf6qd7ncqvsrpaf")) - (patches (search-patches "biber-adapt-perl-5.36.patch")))) + "1cl7hrflbw61wc95rnjdwyx8cip3jmpn3ic2zjfm0pdp86f2i9rj")))) (build-system perl-build-system) (arguments `(#:phases -- cgit v1.2.3 From 18b6e309cec3a0c9c7401b131e18612914f1fcf9 Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Sat, 17 Jun 2023 22:20:20 +0200 Subject: gnu: fluxbox: Fix build. * gnu/packages/patches/fluxbox-1.3.7-gcc.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/wm.scm (fluxbox)[source](patches): Add it. --- gnu/local.mk | 1 + gnu/packages/patches/fluxbox-1.3.7-gcc.patch | 16 ++++++++++++++++ gnu/packages/wm.scm | 3 ++- 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/fluxbox-1.3.7-gcc.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index b17e20310e..e4f5b2078a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1153,6 +1153,7 @@ dist_patch_DATA = \ %D%/packages/patches/flatpak-fix-path.patch \ %D%/packages/patches/flatpak-unset-gdk-pixbuf-for-sandbox.patch \ %D%/packages/patches/fluxbox-1.3.7-no-dynamic-cursor.patch \ + %D%/packages/patches/fluxbox-1.3.7-gcc.patch \ %D%/packages/patches/fontconfig-cache-ignore-mtime.patch \ %D%/packages/patches/fontforge-hurd.patch \ %D%/packages/patches/foobillard++-pkg-config.patch \ diff --git a/gnu/packages/patches/fluxbox-1.3.7-gcc.patch b/gnu/packages/patches/fluxbox-1.3.7-gcc.patch new file mode 100644 index 0000000000..0c805251ac --- /dev/null +++ b/gnu/packages/patches/fluxbox-1.3.7-gcc.patch @@ -0,0 +1,16 @@ +Author: Danny Milosavljevic +Date: 2023-06-12 +License: expat + +diff -ur orig/fluxbox-1.3.7/util/fluxbox-remote.cc fluxbox-1.3.7/util/fluxbox-remote.cc +--- orig/fluxbox-1.3.7/util/fluxbox-remote.cc 1970-01-01 01:00:01.000000000 +0100 ++++ fluxbox-1.3.7/util/fluxbox-remote.cc 2023-05-01 01:11:52.225547895 +0200 +@@ -73,7 +73,7 @@ + if (strcmp(cmd, "result") == 0) { + XTextProperty text_prop; + if (XGetTextProperty(disp, root, &text_prop, atom_result) != 0 +- && text_prop.value > 0 ++ && text_prop.value != NULL + && text_prop.nitems > 0) { + + printf("%s", text_prop.value); diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm index 3185fa860c..febd45314b 100644 --- a/gnu/packages/wm.scm +++ b/gnu/packages/wm.scm @@ -1073,7 +1073,8 @@ drags, snap-to-border support, and virtual desktops.") (base32 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w")) (patches - (search-patches "fluxbox-1.3.7-no-dynamic-cursor.patch")))) + (search-patches "fluxbox-1.3.7-no-dynamic-cursor.patch" + "fluxbox-1.3.7-gcc.patch")))) (build-system gnu-build-system) (arguments `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility -- cgit v1.2.3 From 1ce3424e22bc89e01f9cc3a2eb01232715495bd3 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 6 Aug 2023 21:50:01 +0200 Subject: home: services: Add dicod. * gnu/home/services/dict.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * gnu/services/dict.scm ()[home-service?]: New field. (dicod-shepherd-service): Do not map /dev/log when 'home-service?' is true. Remove 'user-processes' requirement when 'home-service?' is true. (dicod-shepherd-service): Set #:user and #:group to #f when 'home-service?' is true. * doc/guix.texi (Miscellaneous Home Services): New node. (Miscellaneous Services): Add cross-reference. --- doc/guix.texi | 45 +++++++++++++++++++++++++++++++++++++++++++++ gnu/home/services/dict.scm | 32 ++++++++++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/dict.scm | 27 ++++++++++++++++++--------- 4 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 gnu/home/services/dict.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index efb4cec9ef..5463fb6998 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -450,6 +450,7 @@ Home Services * Mail: Mail Home Services. Services for managing mail. * Messaging: Messaging Home Services. Services for managing messaging. * Media: Media Home Services. Services for managing media. +* Miscellaneous: Miscellaneous Home Services. More services. Platforms @@ -39082,6 +39083,12 @@ implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). You can add @command{open localhost} to your @file{~/.dico} file to make @code{localhost} the default server for @command{dico} client (@pxref{Initialization File,,, dico, GNU Dico Manual}). + +@quotation Note +This service is also available for Guix Home, where it runs directly +with your user privileges (@pxref{Miscellaneous Home Services, +@code{home-dicod-service-type}}). +@end quotation @end defvar @deftp {Data Type} dicod-configuration @@ -42972,6 +42979,7 @@ services)}. * Mail: Mail Home Services. Services for managing mail. * Messaging: Messaging Home Services. Services for managing messaging. * Media: Media Home Services. Services for managing media. +* Miscellaneous: Miscellaneous Home Services. More services. @end menu @c In addition to that Home Services can provide @@ -44561,6 +44569,43 @@ kodi} for more information. @end table @end deftp +@node Miscellaneous Home Services +@subsection Miscellaneous Home Services + +This section lists Home services that lack a better place. + +@subsubheading Dictionary Service + +@cindex dictionary service, for Home +The @code{(gnu home services dict)} module provides the following service: + +@defvar home-dicod-service-type +This is the type of the service that runs the @command{dicod} daemon, an +implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). + +You can add @command{open localhost} to your @file{~/.dico} file to make +@code{localhost} the default server for @command{dico} client +(@pxref{Initialization File,,, dico, GNU Dico Manual}). +@end defvar + +This service is a direct mapping of the @code{dicod-service-type} system +service (@pxref{Miscellaneous Services, Dictionary Service}). You can +use it like this: + +@lisp +(service home-dicod-service-type) +@end lisp + +You may specify a custom configuration by providing a +@code{dicod-configuration} record, exactly like for +@code{dicod-service-type}, but wrapping it in @code{for-home}: + +@lisp +(service home-dicod-service-type + (for-home + (dicod-configuration @dots{}))) +@end lisp + @node Invoking guix home @section Invoking @command{guix home} diff --git a/gnu/home/services/dict.scm b/gnu/home/services/dict.scm new file mode 100644 index 0000000000..b8a4653276 --- /dev/null +++ b/gnu/home/services/dict.scm @@ -0,0 +1,32 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Ludovic Courtès +;;; +;;; 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 home services dict) + #:use-module (gnu home services) + #:use-module (gnu services) + #:use-module (gnu services dict) + #:use-module ((gnu system shadow) #:select (account-service-type)) + #:export (home-dicod-service-type) + #:re-export (dicod-configuration)) + +(define home-dicod-service-type + (service-type + (inherit (system->home-service-type + (remove-service-extensions dicod-service-type + (list account-service-type)))) + (default-value (for-home (dicod-configuration))))) diff --git a/gnu/local.mk b/gnu/local.mk index e4f5b2078a..a85f9561a6 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -91,6 +91,7 @@ GNU_SYSTEM_MODULES = \ %D%/home.scm \ %D%/home/services.scm \ %D%/home/services/desktop.scm \ + %D%/home/services/dict.scm \ %D%/home/services/symlink-manager.scm \ %D%/home/services/fontutils.scm \ %D%/home/services/gnupg.scm \ diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm index f542921302..a4e25f5302 100644 --- a/gnu/services/dict.scm +++ b/gnu/services/dict.scm @@ -56,7 +56,9 @@ (handlers dicod-configuration-handlers ;list of (default '())) (databases dicod-configuration-databases ;list of - (default (list %dicod-database:gcide)))) + (default (list %dicod-database:gcide))) + (home-service? dicod-configuration-home-service? ;boolean + (default for-home?) (innate))) (define-record-type* dicod-handler make-dicod-handler @@ -152,20 +154,26 @@ database { (define (dicod-shepherd-service config) (let* ((dicod.conf (dicod-configuration-file config)) (interfaces (dicod-configuration-interfaces config)) + (home-service? (dicod-configuration-home-service? config)) + (mappings `(,@(if home-service? + '() + (list (file-system-mapping + (source "/dev/log") + (target source)))) + ,(file-system-mapping + (source dicod.conf) + (target source)))) (dicod (least-authority-wrapper (file-append (dicod-configuration-dico config) "/bin/dicod") #:name "dicod" - #:mappings (list (file-system-mapping - (source "/dev/log") - (target source)) - (file-system-mapping - (source dicod.conf) - (target source))) + #:mappings mappings #:namespaces (delq 'net %namespaces)))) (list (shepherd-service (provision '(dicod)) - (requirement '(user-processes)) + (requirement (if home-service? + '() + '(user-processes))) (documentation "Run the dicod daemon.") (start #~(make-inetd-constructor (list #$dicod "--inetd" "--foreground" @@ -176,7 +184,8 @@ database { (car (getaddrinfo interface "dict"))))) '#$interfaces) #:requirements '#$requirement - #:user "dicod" #:group "dicod" + #:user #$(and (not home-service?) "dicod") + #:group #$(and (not home-service?) "dicod") #:service-name-stem "dicod")) (stop #~(make-inetd-destructor)) (actions (list (shepherd-configuration-action dicod.conf))))))) -- cgit v1.2.3 From 7605c01fccb20b387f5a0d98d6b81074b3039e23 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 6 Aug 2023 22:11:55 +0200 Subject: home: services: Add Syncthing. * gnu/home/services/syncthing.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * gnu/services/syncthing.scm ()[home-service?]: New field. Adjust 'provision' and 'requirement' depending on 'home-service?', and likewise for #:user and #:group. Use 'filter' + 'negate' instead of 'remove'. * doc/guix.texi (Networking Services): Add note and cross-reference to "Networking Home Services". (Networking Home Services): New node. --- doc/guix.texi | 51 ++++++++++++++++++++++++++++++++++++++++- gnu/home/services/syncthing.scm | 30 ++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/syncthing.scm | 26 +++++++++++++-------- 4 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 gnu/home/services/syncthing.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index 5463fb6998..3c81082f3f 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -450,6 +450,7 @@ Home Services * Mail: Mail Home Services. Services for managing mail. * Messaging: Messaging Home Services. Services for managing messaging. * Media: Media Home Services. Services for managing media. +* Networking: Networking Home Services. Networking services. * Miscellaneous: Miscellaneous Home Services. More services. Platforms @@ -21304,6 +21305,8 @@ client. @end table @end deftp +@cindex Syncthing, file synchronization service +@cindex backup service, Syncthing The @code{(gnu services syncthing)} module provides the following services: @cindex syncthing @@ -21321,7 +21324,14 @@ syncthing} daemon, The value for this service type is a (syncthing-configuration (user "alice"))) @end lisp +@quotation Note +This service is also available for Guix Home, where it runs directly +with your user privileges (@pxref{Networking Home Services, +@code{home-syncthing-service-type}}). +@end quotation + See below for details about @code{syncthing-configuration}. +@end defvar @deftp {Data Type} syncthing-configuration Data type representing the configuration for @code{syncthing-service-type}. @@ -21351,7 +21361,6 @@ directory is @file{$HOME} of the specified Syncthing @code{user}. @end table @end deftp -@end defvar Furthermore, @code{(gnu services ssh)} provides the following services. @cindex SSH @@ -42979,6 +42988,7 @@ services)}. * Mail: Mail Home Services. Services for managing mail. * Messaging: Messaging Home Services. Services for managing messaging. * Media: Media Home Services. Services for managing media. +* Networking: Networking Home Services. Networking services. * Miscellaneous: Miscellaneous Home Services. More services. @end menu @c In addition to that Home Services can provide @@ -44569,6 +44579,45 @@ kodi} for more information. @end table @end deftp +@node Networking Home Services +@subsection Networking Home Services + +This section lists services somewhat networking-related that you may use +with Guix Home. + +@cindex Syncthing, file synchronization service +@cindex backup service, Syncthing +The @code{(gnu home services syncthing)} module provides a service to +set up the @uref{Syncthing, https://syncthing.net} continuous file +backup service. + +@defvar home-syncthing-service-type +This is the service type for the @command{syncthing} daemon; it is the +Home counterpart of the @code{syncthing-service-type} system service +(@pxref{Networking Services, @code{syncthing-service-type}}). The value +for this service type is a @command{syncthing-configuration}. + +Here is how you would set it up with the default configuration: + +@lisp +(service home-syncthing-service-type) +@end lisp + +For a custom configuration, wrap you @code{syncthing-configuration} in +@code{for-home}, as in this example: + +@lisp +(service home-syncthing-service-type + (for-home + (syncthing-configuration (logflags 5)))) +@end lisp + +For details about @code{syncthing-configuration}, check out the +documentation of the system service (@pxref{Networking Services, +@code{syncthing-service-type}}). +@end defvar + + @node Miscellaneous Home Services @subsection Miscellaneous Home Services diff --git a/gnu/home/services/syncthing.scm b/gnu/home/services/syncthing.scm new file mode 100644 index 0000000000..9c9eb94ea1 --- /dev/null +++ b/gnu/home/services/syncthing.scm @@ -0,0 +1,30 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Ludovic Courtès +;;; +;;; 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 home services syncthing) + #:use-module (gnu services) + #:use-module (gnu home services) + #:use-module (gnu services syncthing) + #:export (home-syncthing-service-type) + #:re-export (syncthing-configuration + syncthing-configuration?)) + +(define home-syncthing-service-type + (service-type + (inherit (system->home-service-type syncthing-service-type)) + (default-value (for-home (syncthing-configuration))))) diff --git a/gnu/local.mk b/gnu/local.mk index a85f9561a6..011ababfb7 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -104,6 +104,7 @@ GNU_SYSTEM_MODULES = \ %D%/home/services/shepherd.scm \ %D%/home/services/sound.scm \ %D%/home/services/ssh.scm \ + %D%/home/services/syncthing.scm \ %D%/home/services/mcron.scm \ %D%/home/services/utils.scm \ %D%/home/services/xdg.scm \ diff --git a/gnu/services/syncthing.scm b/gnu/services/syncthing.scm index e03e8e40b6..2f7c822827 100644 --- a/gnu/services/syncthing.scm +++ b/gnu/services/syncthing.scm @@ -49,32 +49,38 @@ (group syncthing-configuration-group ;string (default "users")) (home syncthing-configuration-home ;string - (default #f))) + (default #f)) + (home-service? syncthing-configuration-home-service? + (default for-home?) (innate))) (define syncthing-shepherd-service (match-record-lambda - (syncthing arguments logflags user group home) + (syncthing arguments logflags user group home home-service?) (list (shepherd-service - (provision (list (string->symbol (string-append "syncthing-" user)))) + (provision (if home-service? + '(syncthing) + (list (string->symbol + (string-append "syncthing-" user))))) (documentation "Run syncthing.") - (requirement '(loopback)) + (requirement (if home-service? '() '(loopback))) (start #~(make-forkexec-constructor (append (list (string-append #$syncthing "/bin/syncthing") "--no-browser" "--no-restart" (string-append "--logflags=" (number->string #$logflags))) '#$arguments) - #:user #$user - #:group #$group + #:user #$(and (not home-service?) user) + #:group #$(and (not home-service?) group) #:environment-variables (append (list (string-append "HOME=" (or #$home (passwd:dir (getpw #$user)))) "SSL_CERT_DIR=/etc/ssl/certs" "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt") - (remove (lambda (str) - (or (string-prefix? "HOME=" str) - (string-prefix? "SSL_CERT_DIR=" str) - (string-prefix? "SSL_CERT_FILE=" str))) + (filter (negate ;XXX: 'remove' is not in (guile) + (lambda (str) + (or (string-prefix? "HOME=" str) + (string-prefix? "SSL_CERT_DIR=" str) + (string-prefix? "SSL_CERT_FILE=" str)))) (environ))))) (respawn? #f) (stop #~(make-kill-destructor)))))) -- cgit v1.2.3 From 1717c8a233b7fda3a10aabc061168c71317f883e Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Fri, 11 Aug 2023 15:26:14 -0400 Subject: gnu: qtdeclarative: Disable QML cache to avoid stale cache issues. Fixes and similar reports. * gnu/packages/patches/qtdeclarative-5-disable-qmlcache.patch: New patch. * gnu/packages/patches/qtdeclarative-disable-qmlcache.patch: Likewise. * gnu/local.mk (dist_patch_DATA): Register them. * gnu/packages/qt.scm (qtdeclarative-5, qtdeclarative): Apply them. Reported-by: Distopico Vegan --- gnu/local.mk | 2 ++ .../patches/qtdeclarative-5-disable-qmlcache.patch | 16 ++++++++++++++++ .../patches/qtdeclarative-disable-qmlcache.patch | 16 ++++++++++++++++ gnu/packages/qt.scm | 6 ++++-- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/qtdeclarative-5-disable-qmlcache.patch create mode 100644 gnu/packages/patches/qtdeclarative-disable-qmlcache.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 011ababfb7..6e2f70cdaa 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1733,6 +1733,8 @@ dist_patch_DATA = \ %D%/packages/patches/python-typeguard-python3.10.patch \ %D%/packages/patches/python-w3lib-fix-test-failure.patch \ %D%/packages/patches/python-wxwidgets-type-errors.patch \ + %D%/packages/patches/qtdeclarative-5-disable-qmlcache.patch \ + %D%/packages/patches/qtdeclarative-disable-qmlcache.patch \ %D%/packages/patches/quodlibet-fix-invalid-glob.patch \ %D%/packages/patches/quodlibet-fix-mtime-tests.patch \ %D%/packages/patches/qxlsx-fix-include-directory.patch \ diff --git a/gnu/packages/patches/qtdeclarative-5-disable-qmlcache.patch b/gnu/packages/patches/qtdeclarative-5-disable-qmlcache.patch new file mode 100644 index 0000000000..2f1cf0dd4e --- /dev/null +++ b/gnu/packages/patches/qtdeclarative-5-disable-qmlcache.patch @@ -0,0 +1,16 @@ +Retrieved from +https://github.com/NixOS/nixpkgs/raw/master/pkgs/development/libraries/qt-5/5.15/qtdeclarative-default-disable-qmlcache.patch + +diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp +index 1d66e75..827567a 100644 +--- a/src/qml/qml/qqmltypeloader.cpp ++++ b/src/qml/qml/qqmltypeloader.cpp +@@ -727,7 +727,7 @@ bool QQmlTypeLoader::Blob::isDebugging() const + + bool QQmlTypeLoader::Blob::diskCacheEnabled() const + { +- return (!disableDiskCache() && !isDebugging()) || forceDiskCache(); ++ return forceDiskCache(); + } + + bool QQmlTypeLoader::Blob::qmldirDataAvailable(const QQmlRefPointer &data, QList *errors) diff --git a/gnu/packages/patches/qtdeclarative-disable-qmlcache.patch b/gnu/packages/patches/qtdeclarative-disable-qmlcache.patch new file mode 100644 index 0000000000..5f06ec53b4 --- /dev/null +++ b/gnu/packages/patches/qtdeclarative-disable-qmlcache.patch @@ -0,0 +1,16 @@ +Retrieved from +https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/libraries/qt-6/patches/qtdeclarative-default-disable-qmlcache.patch + +diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp +index 852cde9e..165f1b57 100644 +--- a/src/qml/jsruntime/qv4engine.cpp ++++ b/src/qml/jsruntime/qv4engine.cpp +@@ -2093,7 +2093,7 @@ void ExecutionEngine::registerModule(const QString &_name, const QJSValue &modul + + bool ExecutionEngine::diskCacheEnabled() const + { +- return (!disableDiskCache() && !debugger()) || forceDiskCache(); ++ return forceDiskCache(); + } + + void ExecutionEngine::callInContext(QV4::Function *function, QObject *self, diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 9708cd6486..e98957ccba 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -1231,7 +1231,8 @@ xmlpatternsvalidator."))) (uri (qt-url name version)) (sha256 (base32 - "1kb8nj17vmnky0ayiwypim7kf6rmlmfcjf6gnrw8rydmp61w0vh2")))) + "1kb8nj17vmnky0ayiwypim7kf6rmlmfcjf6gnrw8rydmp61w0vh2")) + (patches (search-patches "qtdeclarative-5-disable-qmlcache.patch")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg-5) ((#:tests? _ #f) #f) ;TODO: Enable the tests @@ -1277,7 +1278,8 @@ with JavaScript and C++."))) (uri (qt-url name version)) (sha256 (base32 - "1hbw63828pp8vm9b46i2pkcbcpr4mq9nblhmpwrw2pflq0fi24xq")))) + "1hbw63828pp8vm9b46i2pkcbcpr4mq9nblhmpwrw2pflq0fi24xq")) + (patches (search-patches "qtdeclarative-disable-qmlcache.patch")))) (build-system cmake-build-system) (arguments (list -- cgit v1.2.3 From e89704d84ac30c739e780a5869bf8add50f407cc Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 15 Aug 2023 16:20:05 -0400 Subject: gnu: qtwayland-5: Update to 5.15.10. * gnu/packages/qt.scm (qtwayland-5): Update to 5.15.10. [source]: Remove qtwayland-gcc-11.patch patch. * gnu/packages/patches/qtwayland-gcc-11.patch: Delete file. * gnu/local.mk (dist_patch_DATA): De-register it. --- gnu/local.mk | 1 - gnu/packages/patches/qtwayland-gcc-11.patch | 18 ------------------ gnu/packages/qt.scm | 7 +++---- 3 files changed, 3 insertions(+), 23 deletions(-) delete mode 100644 gnu/packages/patches/qtwayland-gcc-11.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 6e2f70cdaa..eb6f622349 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1880,7 +1880,6 @@ dist_patch_DATA = \ %D%/packages/patches/quagga-reproducible-build.patch \ %D%/packages/patches/quickswitch-fix-dmenu-check.patch \ %D%/packages/patches/quilt-grep-compat.patch \ - %D%/packages/patches/qtwayland-gcc-11.patch \ %D%/packages/patches/qtwayland-dont-recreate-callbacks.patch \ %D%/packages/patches/qtwayland-cleanup-callbacks.patch \ %D%/packages/patches/ragel-char-signedness.patch \ diff --git a/gnu/packages/patches/qtwayland-gcc-11.patch b/gnu/packages/patches/qtwayland-gcc-11.patch deleted file mode 100644 index 06983ff2f3..0000000000 --- a/gnu/packages/patches/qtwayland-gcc-11.patch +++ /dev/null @@ -1,18 +0,0 @@ -Add missing import for newer libstdc++. - -Taken from upstream: - - https://github.com/qt/qtwayland/commit/1aa6ec2c778504d96543f6cdc2b9199a7b066fc1 - -diff --git a/tests/auto/client/shared/corecompositor.cpp b/tests/auto/client/shared/corecompositor.cpp -index 5c6c83baa..fa9b7662a 100644 ---- a/tests/auto/client/shared/corecompositor.cpp -+++ b/tests/auto/client/shared/corecompositor.cpp -@@ -27,6 +27,7 @@ - ****************************************************************************/ - - #include "corecompositor.h" -+#include - - namespace MockCompositor { - diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 9194895c2f..54b138c0d0 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -1729,16 +1729,15 @@ set of plugins for interacting with pulseaudio and GStreamer.") (package (inherit qtsvg-5) (name "qtwayland") - (version "5.15.8") + (version "5.15.10") (source (origin (method url-fetch) (uri (qt-url name version)) - (patches (search-patches "qtwayland-gcc-11.patch" - "qtwayland-dont-recreate-callbacks.patch" + (patches (search-patches "qtwayland-dont-recreate-callbacks.patch" "qtwayland-cleanup-callbacks.patch")) (sha256 (base32 - "0aa5jcvvap6qca6imdkhs1mhv5bnaxn466mmpl7x78jx1za7n3ps")))) + "1w9nclz1lfg5haq3m6ihils0kl2n1pqagdyh71ry1m281w8gvly8")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg-5) ((#:phases phases) -- cgit v1.2.3 From 9c08ba358e47c52953cc63ee1baae6e6208faebf Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 22 Aug 2023 10:53:23 -0400 Subject: gnu: python-shiboken-2: Update to 5.15.10. * gnu/packages/qt.scm (python-shiboken-2): Update to 5.15.10. [source]: Use mirror://qt for the source URL. Delete patches. * gnu/packages/patches/python-shiboken-2-compat.patch: Delete file. * gnu/local.mk (dist_patch_DATA): De-register it. --- gnu/local.mk | 1 - gnu/packages/patches/python-shiboken-2-compat.patch | 15 --------------- gnu/packages/qt.scm | 10 ++++------ 3 files changed, 4 insertions(+), 22 deletions(-) delete mode 100644 gnu/packages/patches/python-shiboken-2-compat.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index eb6f622349..ee4567c857 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1728,7 +1728,6 @@ dist_patch_DATA = \ %D%/packages/patches/python-pypdf-annotate-tests-appropriately.patch \ %D%/packages/patches/python-sip-include-dirs.patch \ %D%/packages/patches/python-sgmllib3k-assertions.patch \ - %D%/packages/patches/python-shiboken-2-compat.patch \ %D%/packages/patches/python-telingo-fix-comparison.patch \ %D%/packages/patches/python-typeguard-python3.10.patch \ %D%/packages/patches/python-w3lib-fix-test-failure.patch \ diff --git a/gnu/packages/patches/python-shiboken-2-compat.patch b/gnu/packages/patches/python-shiboken-2-compat.patch deleted file mode 100644 index 48aa74173b..0000000000 --- a/gnu/packages/patches/python-shiboken-2-compat.patch +++ /dev/null @@ -1,15 +0,0 @@ -Backport a fix from 5.15.9, mentioned in [1]. - -[1] https://bugreports.qt.io/browse/PYSIDE-2176 - ---- pyside-setup-opensource-src-5.15.8/sources/shiboken2/libshiboken/pep384impl.cpp 2023-04-24 11:05:48.770934499 +0200 -+++ pyside-setup-opensource-src-5.15.8/sources/shiboken2/libshiboken/pep384impl.cpp 2023-04-24 11:04:51.566943936 +0200 -@@ -751,7 +751,7 @@ - #endif // IS_PY2 - Shiboken::AutoDecRef privateobj(PyObject_GetAttr( - reinterpret_cast(Py_TYPE(self)), Shiboken::PyMagicName::name())); --#ifndef Py_LIMITED_API -+#ifdef IS_PY2 - return _Py_Mangle(privateobj, name); - #else - // PYSIDE-1436: _Py_Mangle is no longer exposed; implement it always. diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 811b42fef5..be882f964c 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -4179,17 +4179,15 @@ color-related widgets.") (define-public python-shiboken-2 (package (name "python-shiboken-2") - (version "5.15.8") + (version "5.15.10") (source (origin (method url-fetch) - (uri (string-append "https://download.qt.io/official_releases" - "/QtForPython/pyside2/PySide2-" version - "-src/pyside-setup-opensource-src-" + (uri (string-append "mirror://qt/QtForPython/pyside2/PySide2-" + version "-src/pyside-setup-opensource-src-" version ".tar.xz")) (sha256 (base32 - "0pbbdypwkn3vrgy8ww207fl8pqq4jv80bck9qz5v9dfyr0166hr3")) - (patches (search-patches "python-shiboken-2-compat.patch")))) + "0fnkx8ax2lkin3bpqbz4zbdrdin2ixb4d6s3c0xghh9sc79r3xia")))) (build-system cmake-build-system) (inputs (list clang-toolchain -- cgit v1.2.3