gnu: OpenSSH: Update to 7.9p1.
[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 texinfo)
38 #:use-module (gnu packages xml))
39
40 (define-public elfutils
41 (package
42 (name "elfutils")
43 (version "0.173")
44 (source (origin
45 (method url-fetch)
46 (uri (string-append "https://sourceware.org/elfutils/ftp/"
47 version "/elfutils-" version ".tar.bz2"))
48 (sha256
49 (base32
50 "1zq0l12k64hrbjmdjc4llrad96c25i427hpma1id9nk87w9qqvdp"))
51 (patches (search-patches "elfutils-tests-ptrace.patch"))))
52 (build-system gnu-build-system)
53
54 ;; Separate programs because that's usually not what elfutils users want,
55 ;; and because they duplicate what Binutils provides.
56 (outputs '("out" ; libelf.so, elfutils/*.h, etc.
57 "bin")) ; ld, nm, objdump, etc.
58
59 (arguments
60 ;; Programs don't have libelf.so in their RUNPATH and libraries don't
61 ;; know where to find each other.
62 `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
63 (assoc-ref %outputs "out")
64 "/lib"))
65
66 ;; Disable tests on MIPS (without changing
67 ;; the arguments list on other systems).
68 ,@(if (string-prefix? "mips" (or (%current-target-system)
69 (%current-system)))
70 '(#:tests? #f)
71 '())
72
73 #:phases
74 (modify-phases %standard-phases
75 ;; No reason has been found for this test to reliably fail on aarch64-linux.
76 (add-after 'unpack 'disable-failing-aarch64-tests
77 (lambda _
78 (substitute* "tests/Makefile.in"
79 (("run-backtrace-native.sh") ""))
80 #t)))))
81
82 (native-inputs `(("m4" ,m4)))
83 (inputs `(("zlib" ,zlib)))
84 (home-page "https://sourceware.org/elfutils/")
85 (synopsis "Linker and ELF manipulation tools")
86 (description
87 "This package provides command-line tools to manipulate binaries in the
88 Executable and Linkable Format (@dfn{ELF}). This includes @command{ld},
89 @command{ar}, @command{objdump}, @command{addr2line}, and more.")
90
91 ;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
92 (license lgpl3+)))
93
94 (define-public libabigail
95 (package
96 (name "libabigail")
97 (home-page "https://sourceware.org/libabigail/")
98 (version "1.4")
99 (source (origin
100 (method url-fetch)
101 (uri (string-append "https://sourceware.org/pub/" name
102 "/" name "-" version ".tar.gz"))
103 (sha256
104 (base32
105 "17r8i60lxykvdd9pdidmnvkzgf9k8zman0c1czl3zbx0znhlx497"))))
106 (build-system gnu-build-system)
107 (arguments
108 `(#:configure-flags '("--disable-static"
109 "--enable-bash-completion"
110 "--enable-manual")
111 #:make-flags '("V=1")
112 #:phases (modify-phases %standard-phases
113 (add-after 'unpack 'patch-source
114 (lambda _
115 (substitute* "build-aux/ltmain.sh"
116 ;; Don't add -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
117 ;; to the GCC command line.
118 (("compiler_flags=\"-specs=.*")
119 "compiler_flags=\n"))
120 #t))
121 (add-after 'build 'build-documentation
122 (lambda _
123 (invoke "make" "-C" "doc/manuals" "html-doc" "man" "info")))
124 (add-before 'check 'set-test-environment
125 (lambda _
126 (setenv "XDG_CACHE_HOME" "/tmp")
127 #t))
128 (add-after 'install 'install-documentation
129 (lambda _
130 (invoke "make" "-C" "doc/manuals"
131 "install-man-and-info-doc")))
132 (add-after 'install-documentation 'install-bash-completion
133 (lambda* (#:key outputs #:allow-other-keys)
134 (for-each (lambda (file)
135 (install-file
136 file (string-append (assoc-ref outputs "out")
137 "/share/bash-completion"
138 "/completions")))
139 (find-files "bash-completion" ".*abi.*"))
140 #t)))))
141 (native-inputs
142 `(("pkg-config" ,pkg-config)
143 ("makeinfo" ,texinfo)
144 ("python-sphinx" ,python-sphinx)
145 ("python" ,python))) ;for tests
146 (propagated-inputs
147 `(("elfutils" ,elfutils) ;libabigail.la says -lelf
148 ("libxml2" ,libxml2))) ;in Requires.private of libabigail.pc
149 (synopsis "Analyze application binary interfaces (ABIs)")
150 (description
151 "@dfn{ABIGAIL} stands for the Application Binary Interface Generic
152 Analysis and Instrumentation Library. It is a framework which aims at
153 helping developers and software distributors to spot ABI-related issues
154 like interface incompatibility in ELF shared libraries by performing a
155 static analysis of the ELF binaries at hand.")
156 (license lgpl3+)))
157
158 (define-public libelf
159 (package
160 (name "libelf")
161 (version "0.8.13")
162 (source (origin
163 (method url-fetch)
164 (uri (string-append "http://www.mr511.de/software/libelf-"
165 version ".tar.gz"))
166 (sha256
167 (base32
168 "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr"))))
169 (build-system gnu-build-system)
170 (arguments
171 `(#:phases
172 (modify-phases %standard-phases
173 (replace 'configure
174 (lambda* (#:key outputs #:allow-other-keys)
175 ;; This old `configure' script doesn't support
176 ;; variables passed as arguments.
177 (let ((out (assoc-ref outputs "out")))
178 (setenv "CONFIG_SHELL" (which "bash"))
179 (invoke "./configure"
180 (string-append "--prefix=" out)
181 ,@(if (string=? "aarch64-linux"
182 (%current-system))
183 '("--host=aarch64-unknown-linux-gnu")
184 '()))))))))
185 (home-page "http://www.mr511.de/software/english.html")
186 (synopsis "ELF object file access library")
187 (description "Libelf is a C library to access ELF object files.")
188 (license lgpl2.0+)))
189
190 (define-public patchelf
191 (package
192 (name "patchelf")
193 (version "0.8")
194 (source (origin
195 (method url-fetch)
196 (uri (string-append
197 "https://nixos.org/releases/patchelf/patchelf-"
198 version
199 "/patchelf-" version ".tar.bz2"))
200 (sha256
201 (base32
202 "1rqpg84wrd3fa16wa9vqdvasnc05yz49w207cz1l0wrl4k8q97y9"))
203 (patches (search-patches "patchelf-page-size.patch"))))
204 (build-system gnu-build-system)
205
206 ;; XXX: The upstream 'patchelf' doesn't support ARM. The only available
207 ;; patch makes significant changes to the algorithm, possibly
208 ;; introducing bugs. So, we apply the patch only on ARM systems.
209 (inputs
210 (if (target-arm32?)
211 `(("patch/rework-for-arm" ,(search-patch
212 "patchelf-rework-for-arm.patch")))
213 '()))
214 (arguments
215 (if (target-arm32?)
216 `(#:phases
217 (modify-phases %standard-phases
218 (add-after 'unpack 'patch/rework-for-arm
219 (lambda* (#:key inputs #:allow-other-keys)
220 (let ((patch-file (assoc-ref inputs "patch/rework-for-arm")))
221 (invoke "patch" "--force" "-p1" "--input" patch-file))))))
222 '()))
223
224 (home-page "https://nixos.org/patchelf.html")
225 (synopsis "Modify the dynamic linker and RPATH of ELF executables")
226 (description
227 "PatchELF allows the ELF \"interpreter\" and RPATH of an ELF binary to be
228 changed.")
229 (license gpl3+)))