guix_mirror_bot pushed a commit to branch javascript-team in repository guix.
commit 0ba4994536b8a1b9e9e01b2e620b368e286808d5 Author: Maxim Cournoyer <[email protected]> AuthorDate: Thu Sep 17 08:50:45 2026 +0900 gnu: Add lief. * gnu/packages/elf.scm (lief): New variable. * gnu/packages/patches/lief-utfcpp-4.2.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. --- gnu/local.mk | 1 + gnu/packages/elf.scm | 73 +++++++++++++++++++++++++++++- gnu/packages/patches/lief-utfcpp-4.2.patch | 35 ++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) diff --git a/gnu/local.mk b/gnu/local.mk index fb291d8e4e1..a18e498c911 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1766,6 +1766,7 @@ dist_patch_DATA = \ %D%/packages/patches/libvirt-respect-modules-path.patch \ %D%/packages/patches/libzmf-doxygen-1.14.patch \ %D%/packages/patches/libziparchive-add-includes.patch \ + %D%/packages/patches/lief-utfcpp-4.2.patch \ %D%/packages/patches/linphone-desktop-cmake-belcard.patch \ %D%/packages/patches/linphone-desktop-cmake-find-modules.patch \ %D%/packages/patches/localed-xorg-keyboard.patch \ diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm index 3ed2cde0428..83a11245834 100644 --- a/gnu/packages/elf.scm +++ b/gnu/packages/elf.scm @@ -15,7 +15,7 @@ ;;; Copyright © 2024 Zheng Junjie <[email protected]> ;;; Copyright © 2025 John Kehayias <[email protected]> ;;; Copyright © 2025 Nicolas Graves <[email protected]> -;;; Copyright © 2025 Maxim Cournoyer <[email protected]> +;;; Copyright © 2025, 2026 Maxim Cournoyer <[email protected]> ;;; Copyright © 2025 Artyom V. Poptsov <[email protected]> ;;; ;;; This file is part of GNU Guix. @@ -39,6 +39,7 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix build-system cmake) #:use-module (guix build-system meson) #:use-module (guix build-system gnu) #:use-module ((guix licenses) #:prefix license:) @@ -47,16 +48,20 @@ #:use-module (gnu packages compression) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages cpp) #:use-module (gnu packages digest) #:use-module (gnu packages docbook) #:use-module (gnu packages documentation) #:use-module (gnu packages gawk) #:use-module (gnu packages gcc) + #:use-module (gnu packages logging) #:use-module (gnu packages m4) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages sphinx) #:use-module (gnu packages texinfo) + #:use-module (gnu packages textutils) + #:use-module (gnu packages tls) #:use-module (gnu packages xml) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26)) @@ -324,6 +329,72 @@ static analysis of the ELF binaries at hand.") #~(append #$flags '("CFLAGS=-fPIC"))))) (properties `((hidden? . #t) ,@(package-properties libelf))))) +(define-public lief + (package + (name "lief") + (version "1.0.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/lief-project/LIEF") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2")) + (modules '((guix build utils))) + (snippet '(delete-file-recursively "third-party")) + (patches (search-patches "lief-utfcpp-4.2.patch")))) + (build-system cmake-build-system) + (arguments + (list #:configure-flags + #~(list "-DLIEF_OPT_EXTERNAL_EXPECTED=ON" + "-DLIEF_OPT_EXTERNAL_SPAN=ON" + "-DLIEF_EXTERNAL_SPDLOG=ON" + "-DLIEF_OPT_FROZEN_EXTERNAL=ON" + "-DLIEF_OPT_MBEDTLS_EXTERNAL=ON" + "-DLIEF_OPT_NLOHMANN_JSON_EXTERNAL=ON" + "-DLIEF_OPT_UTFCPP_EXTERNAL=ON" + "-DBUILD_SHARED_LIBS=ON") + ;; The test suite is disabled by default, and requires to + ;; download/extract a 350 MiB compressed archive of test data. + #:tests? #f)) + (inputs + (list frozen + mbedtls-4.0 ;<https://github.com/lief-project/LIEF/issues/1381> + nlohmann-json + spdlog + utfcpp)) ;<https://github.com/lief-project/LIEF/issues/1382> + (propagated-inputs + ;; Included in the include/LIEF/third-party headers. + (list libexpected + tcbrindle-span)) + (home-page "https://lief.re/") + (synopsis "Library to instrument executable formats") + (description "The @acronym{LIEF, Library to Instrument Executable Formats} +library can parse, modify and abstract ELF, PE, MachO and other formats. It +provides an abstraction over common features like sections, symbols and entry +points. This package provides the C/C++ API. The table below lists its main +features in more details: +@table @asis +@item Parsing +LIEF can parse ELF, PE, MachO, COFF, OAT, DEX, VDEX, ART and provides a +user-friendly API to access their internals. + +@item Modify +LIEF can be used to modify some parts of these formats (adding a section, +changing a symbol's name, etc.) + +@item Abstract +Three formats have common features like sections, symbols, entry point, etc. LIEF +factors them. + +@item API +The LIEF API is available for C/C++ (this package), Python (@code{python-lief}), +and other languages. +@end table") + (license license:asl2.0))) + (define-public patchelf (package (name "patchelf") diff --git a/gnu/packages/patches/lief-utfcpp-4.2.patch b/gnu/packages/patches/lief-utfcpp-4.2.patch new file mode 100644 index 00000000000..a0767774e93 --- /dev/null +++ b/gnu/packages/patches/lief-utfcpp-4.2.patch @@ -0,0 +1,35 @@ +Upstream-status: <https://github.com/lief-project/LIEF/pull/1380> + +From 029bba8595a6747805e11fde8ed1443eee2349f6 Mon Sep 17 00:00:00 2001 +From: Daeho Ro <[email protected]> +Date: Wed, 16 Sep 2026 22:12:02 +0900 +Subject: [PATCH] core: support utfcpp 4.2 + +--- + src/utils.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/utils.cpp b/src/utils.cpp +index c5246b6fc6..2df012ff6f 100644 +--- a/src/utils.cpp ++++ b/src/utils.cpp +@@ -38,8 +38,8 @@ template<typename octet_iterator> + result<uint32_t> next(octet_iterator& it, octet_iterator end) { + using namespace utf8; + using namespace utf8::internal; +- utfchar32_t cp = 0; +- internal::utf_error err_code = validate_next(it, end, cp); ++ octet_iterator start = it; ++ internal::utf_error err_code = validate_next(it, end); + switch (err_code) { + case UTF8_OK: break; + case NOT_ENOUGH_ROOM: return make_error_code(lief_errors::data_too_large); +@@ -48,7 +48,7 @@ result<uint32_t> next(octet_iterator& it, octet_iterator end) { + case OVERLONG_SEQUENCE: + case INVALID_CODE_POINT: return make_error_code(lief_errors::read_error); + } +- return cp; ++ return utf8::unchecked::next(start); + } + + std::string u16tou8(const char16_t* buffer, size_t size, bool remove_null_char) {
