Merge branch 'master' into staging
[jackhill/guix/guix.git] / gnu / packages / elf.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
6 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
7 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
8 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
9 ;;;
10 ;;; This file is part of GNU Guix.
11 ;;;
12 ;;; GNU Guix is free software; you can redistribute it and/or modify it
13 ;;; under the terms of the GNU General Public License as published by
14 ;;; the Free Software Foundation; either version 3 of the License, or (at
15 ;;; your option) any later version.
16 ;;;
17 ;;; GNU Guix is distributed in the hope that it will be useful, but
18 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
19 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ;;; GNU General Public License for more details.
21 ;;;
22 ;;; You should have received a copy of the GNU General Public License
23 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
24
25 (define-module (gnu packages elf)
26 #:use-module (guix utils)
27 #:use-module (guix packages)
28 #:use-module (guix download)
29 #:use-module (guix build-system gnu)
30 #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
31 #:use-module (gnu packages)
32 #:use-module (gnu packages compression)
33 #:use-module (gnu packages documentation)
34 #:use-module (gnu packages m4)
35 #:use-module (gnu packages pkg-config)
36 #:use-module (gnu packages python)
37 #:use-module (gnu packages python-xyz)
38 #:use-module (gnu packages texinfo)
39 #:use-module (gnu packages xml))
40
41 (define-public elfutils
42 (package
43 (name "elfutils")
44 (version "0.176")
45 (source (origin
46 (method url-fetch)
47 (uri (string-append "https://sourceware.org/elfutils/ftp/"
48 version "/elfutils-" version ".tar.bz2"))
49 (sha256
50 (base32
51 "08qhrl4g6qqr4ga46jhh78y56a47p3msa5b2x1qhzbxhf71lfmzb"))
52 (patches (search-patches "elfutils-tests-ptrace.patch"))))
53 (build-system gnu-build-system)
54
55 ;; Separate programs because that's usually not what elfutils users want,
56 ;; and because they duplicate what Binutils provides.
57 (outputs '("out" ; libelf.so, elfutils/*.h, etc.
58 "bin")) ; ld, nm, objdump, etc.
59
60 (arguments
61 ;; Programs don't have libelf.so in their RUNPATH and libraries don't
62 ;; know where to find each other.
63 `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
64 (assoc-ref %outputs "out")
65 "/lib"))
66
67 ;; Disable tests on MIPS (without changing
68 ;; the arguments list on other systems).
69 ,@(if (string-prefix? "mips" (or (%current-target-system)
70 (%current-system)))
71 '(#:tests? #f)
72 '())
73
74 #:phases
75 (modify-phases %standard-phases
76 ;; No reason has been found for this test to reliably fail on aarch64-linux.
77 (add-after 'unpack 'disable-failing-aarch64-tests
78 (lambda _
79 (substitute* "tests/Makefile.in"
80 (("run-backtrace-native.sh") ""))
81 #t)))))
82
83 (native-inputs `(("m4" ,m4)))
84 (inputs `(("zlib" ,zlib)))
85 (home-page "https://sourceware.org/elfutils/")
86 (synopsis "Linker and ELF manipulation tools")
87 (description
88 "This package provides command-line tools to manipulate binaries in the
89 Executable and Linkable Format (@dfn{ELF}). This includes @command{ld},
90 @command{ar}, @command{objdump}, @command{addr2line}, and more.")
91
92 ;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
93 (license lgpl3+)))
94
95 (define-public libabigail
96 (package
97 (name "libabigail")
98 (home-page "https://sourceware.org/libabigail/")
99 (version "1.5")
100 (source (origin
101 (method url-fetch)
102 (uri (string-append "https://sourceware.org/pub/" name
103 "/" name "-" version ".tar.gz"))
104 (sha256
105 (base32
106 "0srfnkbm386sl2n85686nl28da6ksbs7jgnfks9k0n61c772aas4"))))
107 (build-system gnu-build-system)
108 (arguments
109 `(#:configure-flags '("--disable-static"
110 "--enable-bash-completion"
111 "--enable-manual")
112 #:make-flags '("V=1")
113 #:phases (modify-phases %standard-phases
114 (add-after 'unpack 'patch-source
115 (lambda _
116 (substitute* "build-aux/ltmain.sh"
117 ;; Don't add -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
118 ;; to the GCC command line.
119 (("compiler_flags=\"-specs=.*")
120 "compiler_flags=\n"))
121 #t))
122 (add-after 'build 'build-documentation
123 (lambda _
124 (invoke "make" "-C" "doc/manuals" "html-doc" "man" "info")))
125 (add-before 'check 'set-test-environment
126 (lambda _
127 (setenv "XDG_CACHE_HOME" "/tmp")
128 #t))
129 (add-after 'install 'install-documentation
130 (lambda _
131 (invoke "make" "-C" "doc/manuals"
132 "install-man-and-info-doc")))
133 (add-after 'install-documentation 'install-bash-completion
134 (lambda* (#:key outputs #:allow-other-keys)
135 (for-each (lambda (file)
136 (install-file
137 file (string-append (assoc-ref outputs "out")
138 "/share/bash-completion"
139 "/completions")))
140 (find-files "bash-completion" ".*abi.*"))
141 #t)))))
142 (native-inputs
143 `(("pkg-config" ,pkg-config)
144 ("makeinfo" ,texinfo)
145 ("python-sphinx" ,python-sphinx)
146 ("python" ,python))) ;for tests
147 (propagated-inputs
148 `(("elfutils" ,elfutils) ;libabigail.la says -lelf
149 ("libxml2" ,libxml2))) ;in Requires.private of libabigail.pc
150 (synopsis "Analyze application binary interfaces (ABIs)")
151 (description
152 "@dfn{ABIGAIL} stands for the Application Binary Interface Generic
153 Analysis and Instrumentation Library. It is a framework which aims at
154 helping developers and software distributors to spot ABI-related issues
155 like interface incompatibility in ELF shared libraries by performing a
156 static analysis of the ELF binaries at hand.")
157 (license lgpl3+)))
158
159 (define-public libelf
160 (package
161 (name "libelf")
162 (version "0.8.13")
163 (source (origin
164 (method url-fetch)
165 (uri (string-append "http://www.mr511.de/software/libelf-"
166 version ".tar.gz"))
167 (sha256
168 (base32
169 "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr"))))
170 (build-system gnu-build-system)
171 (arguments
172 `(#:phases
173 (modify-phases %standard-phases
174 (replace 'configure
175 (lambda* (#:key outputs #:allow-other-keys)
176 ;; This old `configure' script doesn't support
177 ;; variables passed as arguments.
178 (let ((out (assoc-ref outputs "out")))
179 (setenv "CONFIG_SHELL" (which "bash"))
180 (invoke "./configure"
181 (string-append "--prefix=" out)
182 ,@(if (string=? "aarch64-linux"
183 (%current-system))
184 '("--host=aarch64-unknown-linux-gnu")
185 '()))))))))
186 (home-page "http://www.mr511.de/software/english.html")
187 (synopsis "ELF object file access library")
188 (description "Libelf is a C library to access ELF object files.")
189 (license lgpl2.0+)))
190
191 (define-public patchelf
192 (package
193 (name "patchelf")
194 (version "0.8")
195 (source (origin
196 (method url-fetch)
197 (uri (string-append
198 "https://nixos.org/releases/patchelf/patchelf-"
199 version
200 "/patchelf-" version ".tar.bz2"))
201 (sha256
202 (base32
203 "1rqpg84wrd3fa16wa9vqdvasnc05yz49w207cz1l0wrl4k8q97y9"))
204 (patches (search-patches "patchelf-page-size.patch"))))
205 (build-system gnu-build-system)
206
207 ;; XXX: The upstream 'patchelf' doesn't support ARM. The only available
208 ;; patch makes significant changes to the algorithm, possibly
209 ;; introducing bugs. So, we apply the patch only on ARM systems.
210 (inputs
211 (if (target-arm32?)
212 `(("patch/rework-for-arm" ,(search-patch
213 "patchelf-rework-for-arm.patch")))
214 '()))
215 (arguments
216 (if (target-arm32?)
217 `(#:phases
218 (modify-phases %standard-phases
219 (add-after 'unpack 'patch/rework-for-arm
220 (lambda* (#:key inputs #:allow-other-keys)
221 (let ((patch-file (assoc-ref inputs "patch/rework-for-arm")))
222 (invoke "patch" "--force" "-p1" "--input" patch-file))))))
223 '()))
224
225 (home-page "https://nixos.org/patchelf.html")
226 (synopsis "Modify the dynamic linker and RPATH of ELF executables")
227 (description
228 "PatchELF allows the ELF \"interpreter\" and RPATH of an ELF binary to be
229 changed.")
230 (license gpl3+)))