;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès ;;; Copyright © 2014, 2015 Mark H Weaver ;;; Copyright © 2015 Andreas Enge ;;; Copyright © 2017, 2018, 2019 Efraim Flashner ;;; Copyright © 2017 Leo Famulari ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Marius Bakke ;;; Copyright © 2019 Mark Wielaard ;;; ;;; 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 elf) #:use-module (guix utils) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module ((guix licenses) #:select (gpl2+ gpl3+ lgpl3+ lgpl2.0+ fdl1.3+)) #:use-module (gnu packages) #:use-module (gnu packages backup) #:use-module (gnu packages compression) #:use-module (gnu packages cpio) #:use-module (gnu packages curl) #:use-module (gnu packages documentation) #:use-module (gnu packages gcc) #:use-module (gnu packages gnunet) ; for libmicrohttpd #:use-module (gnu packages linux) ; for iproute #:use-module (gnu packages m4) #:use-module (gnu packages package-management) ; for rpm #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages sphinx) #:use-module (gnu packages sqlite) #:use-module (gnu packages texinfo) #:use-module (gnu packages xml)) (define-public elfutils (package (name "elfutils") (version "0.178") (source (origin (method url-fetch) (uri (string-append "https://sourceware.org/elfutils/ftp/" version "/elfutils-" version ".tar.bz2")) (sha256 (base32 "1wm0yfcih4rjwbg59qgm4jyqmbsdmk6z5qajljyw9sfljq7a1rri")) (patches (search-patches "elfutils-0.178-tests-build-id.patch")))) (build-system gnu-build-system) ;; Separate programs because that's usually not what elfutils users want, ;; and because they duplicate what Binutils provides (but are named ;; differently, using the eu- prefix and can be installed in parallel). (outputs '("out" ; libelf.so, elfutils/*.h, etc. "bin")) ; eu-nm, eu-objdump, etc. (arguments ;; Programs don't have libelf.so in their RUNPATH and libraries don't ;; know where to find each other. `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib")) ;; Disable tests on MIPS (without changing ;; the arguments list on other systems). ,@(if (string-prefix? "mips" (or (%current-target-system) (%current-system))) '(#:tests? #f) '()) #:phases (modify-phases %standard-phases ;; No reason has been found for this test to reliably fail on aarch64-linux. (add-after 'unpack 'disable-failing-aarch64-tests (lambda _ (substitute* "tests/Makefile.in" (("run-backtrace-native.sh") "")) #t))))) (native-inputs `(("iproute", iproute) ;; needed in tests for ss ("m4", m4) ("pkg-config", pkg-config))) (inputs `(("cpio", cpio) ("libarchive", libarchive) ("libmicrohttpd", libmicrohttpd) ("libcurl", curl) ("rpm", rpm) ("sqlite", sqlite) ("zlib" ,zlib))) (home-page "https://sourceware.org/elfutils/") (synopsis "Collection of utilities and libraries to handle ELF files and DWARF data") (description "A collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, symbols, thread state and stacktraces for processes and core files on GNU/Linux. Includes libelf for manipulating ELF files, libdw for inspecting DWARF data and process state and utilities like eu-stack (to show backtraces), eu-nm (for listing symbols from object files), eu-size (for listing the section sizes of an object or archive file), eu-strip (for discarding symbols), eu-readelf (to see the raw ELF file structures), eu-elflint (to check for well-formed ELF files) and eu-elfcompress (to compress or decompress ELF sections).") ;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+. ;; Some documentation is under the GFDL1.3+, without invariant texts. (license (list lgpl3+ gpl2+ gpl3+ fdl1.3+)))) (define-public libabigail (package (name "libabigail") (home-page "https://sourceware.org/libabigail/") (version "1.6") (source (origin (method url-fetch) (uri (string-append "https://sourceware.org/pub/libabigail/" "libabigail-" version ".tar.gz")) (sha256 (base32 "04j07lhvwbp6qp8pdwbf7iqnr7kgpabmqylsw4invpmzwnyp6g6g")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--disable-static" "--enable-bash-completion" "--enable-manual") #:make-flags '("V=1") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-source (lambda _ (substitute* "build-aux/ltmain.sh" ;; Don't add -specs=/usr/lib/rpm/redhat/redhat-hardened-ld ;; to the GCC command line. (("compiler_flags=\"-specs=.*") "compiler_flags=\n")) #t)) (add-after 'build 'build-documentation (lambda _ (invoke "make" "-C" "doc/manuals" "html-doc" "man" "info"))) (add-before 'check 'set-test-environment (lambda _ (setenv "XDG_CACHE_HOME" "/tmp") #t)) (add-after 'install 'install-documentation (lambda _ (invoke "make" "-C" "doc/manuals" "install-man-and-info-doc"))) (add-after 'install-documentation 'install-bash-completion (lambda* (#:key outputs #:allow-other-keys) (for-each (lambda (file) (install-file file (string-append (assoc-ref outputs "out") "/share/bash-completion" "/completions"))) (find-files "bash-completion" ".*abi.*")) #t))))) (native-inputs `(("pkg-config" ,pkg-config) ("makeinfo" ,texinfo) ("python-sphinx" ,python-sphinx) ("python" ,python))) ;for tests (propagated-inputs `(("elfutils" ,elfutils) ;libabigail.la says -lelf ("libxml2" ,libxml2))) ;in Requires.private of libabigail.pc (synopsis "Analyze application binary interfaces (ABIs)") (description "@dfn{ABIGAIL} stands for the Application Binary Interface Generic Analysis and Instrumentation Library. It is a framework which aims at helping developers and software distributors to spot ABI-related issues like interface incompatibility in ELF shared libraries by performing a static analysis of the ELF binaries at hand.") (license lgpl3+))) (define-public libelf (package (name "libelf") (version "0.8.13") (source (origin (method url-fetch) (uri (list ;; As of May 2019, the original URL at mr511.de redirects to a ;; domain that doesn't resolve. Use these two mirrors instead. (string-append "https://fossies.org/linux/misc/old/" "libelf-" version ".tar.gz") (string-append "https://ftp.osuosl.org/pub/blfs/conglomeration/" "libelf/libelf-" version ".tar.gz"))) (sha256 (base32 "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'configure (lambda* (#:key outputs #:allow-other-keys) ;; This old `configure' script doesn't support ;; variables passed as arguments. (let ((out (assoc-ref outputs "out"))) (setenv "CONFIG_SHELL" (which "bash")) (invoke "./configure" (string-append "--prefix=" out) ,@(if (string=? "aarch64-linux" (%current-system)) '("--host=aarch64-unknown-linux-gnu") '())))))))) (home-page (string-append "https://web.archive.org/web/20181111033959/" "http://www.mr511.de/software/english.html")) (synopsis "ELF object file access library") (description "Libelf is a C library to access ELF object files.") (license lgpl2.0+))) (define-public patchelf (package (name "patchelf") (version "0.10") (source (origin (method url-fetch) (uri (string-append "https://nixos.org/releases/patchelf/patchelf-" version "/patchelf-" version ".tar.bz2")) (sha256 (base32 "1wzwvnlyf853hw9zgqq5522bvf8gqadk8icgqa41a5n7593csw7n")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases (add-after 'unpack 'fix-tests ;; Our GCC code ensures that RUNPATH is never empty, it includes ;; at least glibc/lib and gcc:lib/lib. (lambda* (#:key inputs #:allow-other-keys) (substitute* "tests/no-rpath.sh" ;; Disable checking for an empty runpath: (("^if test.*") "") ;; Find libgcc_s.so, which is necessary for the test: (("/xxxxxxxxxxxxxxx") (string-append (assoc-ref inputs "gcc:lib") "/lib"))) #t))))) (native-inputs `(("gcc:lib" ,gcc "lib"))) (home-page "https://nixos.org/patchelf.html") (synopsis "Modify the dynamic linker and RPATH of ELF executables") (description "PatchELF allows the ELF \"interpreter\" and RPATH of an ELF binary to be changed.") (license gpl3+)))