about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/libelf
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libelf')
-rw-r--r--nixpkgs/pkgs/development/libraries/libelf/default.nix57
-rw-r--r--nixpkgs/pkgs/development/libraries/libelf/dont-hardcode-ar.patch11
-rw-r--r--nixpkgs/pkgs/development/libraries/libelf/preprocessor-warnings.patch264
3 files changed, 332 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libelf/default.nix b/nixpkgs/pkgs/development/libraries/libelf/default.nix
new file mode 100644
index 000000000000..6d894da17d0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libelf/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchurl, autoreconfHook, gettext, netbsd
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "libelf";
+  version = "0.8.13";
+
+  src = fetchurl {
+    url = "https://fossies.org/linux/misc/old/${pname}-${version}.tar.gz";
+    sha256 = "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr";
+  };
+
+  patches = [
+    ./dont-hardcode-ar.patch
+    # Fix warnings from preprocessor instructions.
+    # https://github.com/NixOS/nixpkgs/issues/59929
+    ./preprocessor-warnings.patch
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  configureFlags = []
+       # Configure check for dynamic lib support is broken, see
+       # http://lists.uclibc.org/pipermail/uclibc-cvs/2005-August/019383.html
+    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "mr_cv_target_elf=yes"
+       # Libelf's custom NLS macros fail to determine the catalog file extension
+       # on Darwin, so disable NLS for now.
+    ++ lib.optional stdenv.hostPlatform.isDarwin "--disable-nls";
+
+  strictDeps = true;
+  nativeBuildInputs =
+    if stdenv.hostPlatform.isNetBSD then [ netbsd.gencat ] else [ gettext ]
+       # Need to regenerate configure script with newer version in order to pass
+       # "mr_cv_target_elf=yes", but `autoreconfHook` brings in `makeWrapper`
+       # which doesn't work with the bootstrapTools bash, so can only do this
+       # for cross builds when `stdenv.shell` is a newer bash.
+    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) autoreconfHook;
+
+  meta = {
+    description = "ELF object file access library";
+
+    homepage = "https://github.com/Distrotech/libelf";
+
+    license = lib.licenses.lgpl2Plus;
+
+    platforms = lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/libelf/dont-hardcode-ar.patch b/nixpkgs/pkgs/development/libraries/libelf/dont-hardcode-ar.patch
new file mode 100644
index 000000000000..e282d9005dbb
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libelf/dont-hardcode-ar.patch
@@ -0,0 +1,11 @@
+--- a/lib/Makefile.in
++++ b/lib/Makefile.in
+@@ -27,7 +27,7 @@ installdirs = $(libdir) $(includedir) $(includedir)/libelf
+ 
+ CC = @CC@
+ LD = @LD@
+-AR = ar
++AR ?= ar
+ MV = mv -f
+ RM = rm -f
+ LN_S = @LN_S@
diff --git a/nixpkgs/pkgs/development/libraries/libelf/preprocessor-warnings.patch b/nixpkgs/pkgs/development/libraries/libelf/preprocessor-warnings.patch
new file mode 100644
index 000000000000..e04c8ee202a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libelf/preprocessor-warnings.patch
@@ -0,0 +1,264 @@
+diff --git a/lib/elf_repl.h b/lib/elf_repl.h
+index c5cf90f..7e1e8df 100644
+--- a/lib/elf_repl.h
++++ b/lib/elf_repl.h
+@@ -45,7 +45,7 @@ typedef __libelf_u32_t		Elf32_Word;
+ #define ELF32_FSZ_SWORD		4
+ #define ELF32_FSZ_WORD		4
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ 
+ typedef __libelf_u64_t		Elf64_Addr;
+ typedef __libelf_u16_t		Elf64_Half;
+@@ -93,7 +93,7 @@ typedef struct {
+     Elf32_Half		e_shstrndx;
+ } Elf32_Ehdr;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     unsigned char	e_ident[EI_NIDENT];
+     Elf64_Half		e_type;
+@@ -307,7 +307,7 @@ typedef struct {
+     Elf32_Word		sh_entsize;
+ } Elf32_Shdr;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Word		sh_name;
+     Elf64_Word		sh_type;
+@@ -434,7 +434,7 @@ typedef struct {
+     Elf32_Half		st_shndx;
+ } Elf32_Sym;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Word		st_name;
+     unsigned char	st_info;
+@@ -457,7 +457,7 @@ typedef struct {
+ #define ELF32_ST_TYPE(i)	((i)&0xf)
+ #define ELF32_ST_INFO(b,t)	(((b)<<4)+((t)&0xf))
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ #define ELF64_ST_BIND(i)	((i)>>4)
+ #define ELF64_ST_TYPE(i)	((i)&0xf)
+ #define ELF64_ST_INFO(b,t)	(((b)<<4)+((t)&0xf))
+@@ -495,7 +495,7 @@ typedef struct {
+  * Macros for manipulating st_other
+  */
+ #define ELF32_ST_VISIBILITY(o)	((o)&0x3)
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ #define ELF64_ST_VISIBILITY(o)	((o)&0x3)
+ #endif /* __LIBELF64 */
+ 
+@@ -521,7 +521,7 @@ typedef struct {
+     Elf32_Sword		r_addend;
+ } Elf32_Rela;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Addr		r_offset;
+     Elf64_Xword		r_info;
+@@ -541,7 +541,7 @@ typedef struct {
+ #define ELF32_R_TYPE(i)		((unsigned char)(i))
+ #define ELF32_R_INFO(s,t)	(((s)<<8)+(unsigned char)(t))
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ #define ELF64_R_SYM(i)		((Elf64_Xword)(i)>>32)
+ #define ELF64_R_TYPE(i)		((i)&0xffffffffL)
+ #define ELF64_R_INFO(s,t)	(((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
+@@ -556,7 +556,7 @@ typedef struct {
+     Elf32_Word		n_type;		/* descriptor type */
+ } Elf32_Nhdr;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ /* Solaris and GNU use this layout.  Be compatible. */
+ /* XXX: Latest ELF specs say it's 64-bit!!! */
+ typedef struct {
+@@ -587,7 +587,7 @@ typedef struct {
+     Elf32_Word		p_align;
+ } Elf32_Phdr;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Word		p_type;
+     Elf64_Word		p_flags;
+@@ -654,7 +654,7 @@ typedef struct {
+     } d_un;
+ } Elf32_Dyn;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Sxword	d_tag;
+     union {
+@@ -798,7 +798,7 @@ typedef struct {
+     Elf32_Half		si_flags;
+ } Elf32_Syminfo;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Half		si_boundto;
+     Elf64_Half		si_flags;
+@@ -863,7 +863,7 @@ typedef struct {
+ 
+ typedef Elf32_Half	Elf32_Versym;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ 
+ typedef struct {
+     Elf64_Half		vd_version;
+@@ -933,7 +933,7 @@ typedef Elf64_Half	Elf64_Versym;
+ /*
+  * Move section
+  */
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ 
+ typedef struct {
+     Elf32_Lword		m_value;
+@@ -973,7 +973,7 @@ typedef struct {
+     } c_un;
+ } Elf32_Cap;
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ 
+ typedef struct {
+     Elf64_Xword     	c_tag;
+diff --git a/lib/gelf.h b/lib/gelf.h
+index 5af0558..98a759c 100644
+--- a/lib/gelf.h
++++ b/lib/gelf.h
+@@ -22,15 +22,15 @@
+ #ifndef _GELF_H
+ #define _GELF_H
+ 
+-#if __LIBELF_INTERNAL__
++#if defined(__LIBELF_INTERNAL__)
+ #include <libelf.h>
+ #else /* __LIBELF_INTERNAL__ */
+ #include <libelf/libelf.h>
+ #endif /* __LIBELF_INTERNAL__ */
+ 
+-#if __LIBELF_NEED_LINK_H
++#if defined(__LIBELF_NEED_LINK_H)
+ #include <link.h>
+-#elif __LIBELF_NEED_SYS_LINK_H
++#elif defined(__LIBELF_NEED_SYS_LINK_H)
+ #include <sys/link.h>
+ #endif /* __LIBELF_NEED_LINK_H */
+ 
+@@ -46,7 +46,7 @@ extern "C" {
+ # endif /* __STDC__ || defined(__cplusplus) */
+ #endif /* __P */
+ 
+-#if !__LIBELF64
++#if !defined(__LIBELF64)
+ 
+ #error "GElf is not supported on this system."
+ 
+@@ -71,7 +71,7 @@ typedef Elf64_Sym	GElf_Sym;
+ /*
+  * Symbol versioning
+  */
+-#if __LIBELF_SYMBOL_VERSIONS
++#if defined(__LIBELF_SYMBOL_VERSIONS)
+ typedef Elf64_Verdef	GElf_Verdef;
+ typedef Elf64_Verneed	GElf_Verneed;
+ typedef Elf64_Verdaux	GElf_Verdaux;
+diff --git a/lib/libelf.h b/lib/libelf.h
+index 3ebd0f3..788482d 100644
+--- a/lib/libelf.h
++++ b/lib/libelf.h
+@@ -25,7 +25,7 @@
+ #include <stddef.h>	/* for size_t */
+ #include <sys/types.h>
+ 
+-#if __LIBELF_INTERNAL__
++#if defined(__LIBELF_INTERNAL__)
+ #include <sys_elf.h>
+ #else /* __LIBELF_INTERNAL__ */
+ #include <libelf/sys_elf.h>
+@@ -224,7 +224,7 @@ extern Elf_Data *elf32_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src,
+  */
+ extern long elf32_checksum __P((Elf *__elf));
+ 
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ /*
+  * 64-bit ELF functions
+  * Not available on all platforms
+diff --git a/lib/sys_elf.h.in b/lib/sys_elf.h.in
+index b71a20d..722051b 100644
+--- a/lib/sys_elf.h.in
++++ b/lib/sys_elf.h.in
+@@ -68,7 +68,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ #ifdef __LIBELF_HEADER_ELF_H
+ # include __LIBELF_HEADER_ELF_H
+ #else /* __LIBELF_HEADER_ELF_H */
+-# if __LIBELF_INTERNAL__
++# if defined(__LIBELF_INTERNAL__)
+ #  include <elf_repl.h>
+ # else /* __LIBELF_INTERNAL__ */
+ #  include <libelf/elf_repl.h>
+@@ -92,7 +92,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ #  define STN_UNDEF	0
+ # endif /* STN_UNDEF */
+ 
+-# if __LIBELF64
++# if defined(__LIBELF64)
+ 
+ #  ifndef ELF64_FSZ_ADDR
+ #   define ELF64_FSZ_ADDR	8
+@@ -116,7 +116,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ #   define ELF64_R_INFO(s,t)	(((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
+ #  endif /* ELF64_R_SYM */
+ 
+-#  if __LIBELF64_LINUX
++#  if defined(__LIBELF64_LINUX)
+ typedef __libelf_u64_t	Elf64_Addr;
+ typedef __libelf_u16_t	Elf64_Half;
+ typedef __libelf_u64_t	Elf64_Off;
+diff --git a/lib/sys_elf.h.w32 b/lib/sys_elf.h.w32
+index 0f93c55..7360104 100644
+--- a/lib/sys_elf.h.w32
++++ b/lib/sys_elf.h.w32
+@@ -68,7 +68,7 @@
+ #ifdef __LIBELF_HEADER_ELF_H

+ # include __LIBELF_HEADER_ELF_H

+ #else /* __LIBELF_HEADER_ELF_H */

+-# if __LIBELF_INTERNAL__

++# if defined(__LIBELF_INTERNAL__)

+ #  include <elf_repl.h>

+ # else /* __LIBELF_INTERNAL__ */

+ #  include <libelf/elf_repl.h>

+@@ -92,7 +92,7 @@
+ #  define STN_UNDEF	0

+ # endif /* STN_UNDEF */

+ 

+-# if __LIBELF64

++# if defined(__LIBELF64)

+ 

+ #  ifndef ELF64_FSZ_ADDR

+ #   define ELF64_FSZ_ADDR	8

+@@ -116,7 +116,7 @@
+ #   define ELF64_R_INFO(s,t)	(((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))

+ #  endif /* ELF64_R_SYM */

+ 

+-#  if __LIBELF64_LINUX

++#  if defined(__LIBELF64_LINUX)

+ typedef __libelf_u64_t	Elf64_Addr;

+ typedef __libelf_u16_t	Elf64_Half;

+ typedef __libelf_u64_t	Elf64_Off;