# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=elfutils
pkgver=0.168
pkgrel=1
pkgdesc="A collection of utilities and DSOs to handle ELF files and DWARF data"
url="http://elfutils.org/"
arch="all"
license="GPL-3.0-or-later and (GPL-2.0-or-later or LGPL-3.0-or-later)"
depends=""
makedepends="bison flex-dev zlib-dev bzip2-dev xz-dev argp-standalone
	bsd-compat-headers autoconf automake libtool"
install=""
subpackages="$pkgname-dev $pkgname-libelf"
source="https://sourceware.org/elfutils/ftp/$pkgver/elfutils-$pkgver.tar.bz2
	0001-Fix-TEMP_FAILURE_RETRY-definition-when-not-defined.patch
	fix-aarch64_fregs.patch
	fix-uninitialized.patch
	musl-accessperms.patch
	musl-canonicalize_file_name.patch
	musl-cdefs.patch
	musl-macros.patch
	musl-qsort_r.patch
	musl-strerror_r.patch
	no-werror.patch
	CVE-2017-7607.patch
	CVE-2017-7608.patch
	"
builddir="$srcdir/elfutils-$pkgver"

# secfixes:
#   0.168-r1:
#   - CVE-2017-7607
#   - CVE-2017-7608

prepare() {
	cd "$builddir"
	default_prepare || return 1
	autoreconf -vif || return 1

	cat > src/error.h <<-EOF
	#ifndef _ERROR_H_
	#define _ERROR_H_

	#include <stdarg.h>
	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
	#include <errno.h>

	static unsigned int error_message_count = 0;

	static inline void error(int status, int errnum, const char* format, ...)
	{
		va_list ap;
		fprintf(stderr, "%s: ", program_invocation_name);
		va_start(ap, format);
		vfprintf(stderr, format, ap);
		va_end(ap);
		if (errnum)
			fprintf(stderr, ": %s", strerror(errnum));
		fprintf(stderr, "\n");
		error_message_count++;
		if (status)
			exit(status);
	}

	#endif	/* _ERROR_H_ */
EOF
	cp src/error.h lib/ || return 1
	cat > lib/libintl.h <<-EOF
	#ifndef LIBINTL_H
	#define LIBINTL_H
	#define _(x) (x)
	#endif
EOF

}
build() {
	cd "$builddir"
	CFLAGS="$CFLAGS -Wno-null-dereference" \
	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--mandir=/usr/share/man \
		--localstatedir=/var \
		--disable-werror \
		--disable-nls \
		|| return 1
	# for now we only build libelf
	cd libelf && make || return 1
}

package() {
	cd "$builddir"/libelf
	make DESTDIR="$pkgdir" install
}

libelf() {
	pkgdesc="libelf from elfutils"
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libelf*.so* "$subpkgdir"/usr/lib/
}

sha512sums="c8f2077ffe6877ad9e9d2f553bf0576361799c601d246f53e1d99a6f7046794c5916e1087b97ad1d1e5f59f9debc20384f864d507ef6c4c75a8e767d15d6eb91  elfutils-0.168.tar.bz2
eb77cb7712d74a67bbaca83ed2ccf169ba3095b423068176dd26bf340964c89b02574315f42bd4be0e4e4890c647b74a813657e890fbc719296508c625cd396c  0001-Fix-TEMP_FAILURE_RETRY-definition-when-not-defined.patch
61d38d47e557b54a2dc35b081a80af1b4e56172cf2d16843299506384e8062078edbef116eca5047021b37eb49a5cb364016f7bb6426942f772ec94f91cb02a1  fix-aarch64_fregs.patch
b9ba55e1b56a8abf694b6d02f022d9a3a0ae6ab53a8c4a71e49552e32411ef410d3a7512fbd1a729696bc2046ac11586829816f0fa3b8226ee77c9dc4b741e58  fix-uninitialized.patch
0d9858c8437b5185975bb6be1340bcd718a5e723c7f9d683be91c8b14e87dc9b94fc620d752d07a655c602cc2e35d85d62b829a91d43d930d8f0b3ffde6e0e32  musl-accessperms.patch
46f53041fcbc8b82190c253faecfed1cbdced465923336925088915824a07140a9bc846d5498b22ee54f0dc4e74f19522bce102a162b79b2b4674cf0c58c14eb  musl-canonicalize_file_name.patch
0198194976782ab13bba59491d2d6bbe6189cba1edab174ca61cc7b942564f03b5d61feb6b787c5d09e66b3b493f08a330a8612e04de02d261b72b7996cc50c3  musl-cdefs.patch
886ab23301f1872d94bcfc3590621196c811252c9a993738e5e480e666c7c3359f25e94c0e873c8fe16dc283e193dba0532a7ced3951e673185dcbb1d062b7c6  musl-macros.patch
f025d6479c8782275090783ff4dd09eb70a7c3eec1126d3176c02d01124f22864d81e08cb96ac4d255e0316205658459b617f5b661b16dbaf1636591720605f4  musl-qsort_r.patch
a0d986100c8ff2ef0595645ec1b2eeb1d517b7442aef5f349ebf27fcb66c76e51fadeda25bed5f04b4bb16a61aa23ac6e86a1f34a0087d2136acf0f64c3fa4d1  musl-strerror_r.patch
26aff757de8c0c67ae7922888c4a842939fb9b4022f3d2fa916591b44921c109f74154175afd431a0e31cf7c876f6d4fbaae26ef283985ae98d96854ea02dce0  no-werror.patch
81c6f19ed3e39aa6f2437e2da09be2952627efccda4769cccdd2616c728205ecdac1ece8a97ead7614a528d161c3885a050980a07436de7bdbc6f2988b348784  CVE-2017-7607.patch
20088019a3cb17d1d9155c421b20e47907d2bdbea31fdd0e469f02c03f8dfe1e7da5c29f0bb0a35be79470a40d7c2df92d2402e32b20d090526bb1f8a71e0707  CVE-2017-7608.patch"
