From 25ba268dcd0beee06921d6a0d06739a9fff15871 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Thu, 2 Mar 2023 13:29:04 +0000 Subject: [PATCH] added core/elfutils --- core/elfutils/PKGBUILD | 145 ++++++++++++++++++ core/elfutils/curl_7.85_compat.patch | 60 ++++++++ ...CC0331081B8BC6D0FD4DA08370665B57816A6A.asc | 34 ++++ ...3CFE88F6CA0788774F5C1D1AA44BE649DE760A.asc | 114 ++++++++++++++ 4 files changed, 353 insertions(+) create mode 100644 core/elfutils/PKGBUILD create mode 100644 core/elfutils/curl_7.85_compat.patch create mode 100644 core/elfutils/keys/pgp/47CC0331081B8BC6D0FD4DA08370665B57816A6A.asc create mode 100644 core/elfutils/keys/pgp/EC3CFE88F6CA0788774F5C1D1AA44BE649DE760A.asc diff --git a/core/elfutils/PKGBUILD b/core/elfutils/PKGBUILD new file mode 100644 index 000000000..177a2b618 --- /dev/null +++ b/core/elfutils/PKGBUILD @@ -0,0 +1,145 @@ +# Maintainer: David Runge +# Contributor: Laurent Carlier +# Contributor: Stéphane Gaudreault +# Contributor: Andrej Gelenberg + +# ALARM: Kevin Mihelich +# - remove default debuginfod url pointing to upstream + +pkgbase=elfutils +pkgname=(debuginfod elfutils libelf) +pkgver=0.188 +pkgrel=3.1 +pkgdesc="Handle ELF object files and DWARF debugging information" +arch=(x86_64) +url="https://sourceware.org/elfutils/" +license=(LGPL3 GPL3) +makedepends=(bzip2 curl gcc-libs libarchive libmicrohttpd sqlite xz zlib zstd) +options=(staticlibs) +source=(https://sourceware.org/$pkgbase/ftp/$pkgver/$pkgbase-$pkgver.tar.bz2{,.sig} + curl_7.85_compat.patch) +sha512sums=('585551b2d937d19d1becfc2f28935db1dd1a3d25571a62f322b70ac8da98c1a741a55d070327705df6c3e2ee026652e0b9a3c733b050a0b0ec5f2fc75d5b74b5' + 'SKIP' + '8f731bf2451ffd195a7da939d469486272873fa9fd19c2dc03a5311814840d7a7242b82de42162efc36404bee9a4fb3a6b85e0eb9fbb81e3c15f989cdd288c37') +b2sums=('6b0474f1436eaf6af73b735b9b2ddd5448ab9c03fbaa0be745a31c89ae8f15b0e21a651409c38643ca125794ce82c19d7b46db4a079f3e72cb919d643560e7a4' + 'SKIP' + '92b92aefc011b4be7ed00baca28c3447003baa864be58482bf0c220dcd6ad75133c6e34731eaf7e3cc97dbb3e1f85d1fce88cb532c3da37b36802d2c6e7a9e36') +validpgpkeys=( + '47CC0331081B8BC6D0FD4DA08370665B57816A6A' # Mark J. Wielaard + 'EC3CFE88F6CA0788774F5C1D1AA44BE649DE760A' # Mark Wielaard +) + +_pick() { + local p="$1" f d; shift + for f; do + d="$srcdir/$p/${f#$pkgdir/}" + mkdir -p "$(dirname "$d")" + mv "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +prepare() { + cd $pkgbase-$pkgver + # Use CURLOPT_PROTOCOLS_STR for libcurl >= 7.85.0 + # https://sourceware.org/git/?p=elfutils.git;a=commit;h=6560fb26a62ef135a804357ef4f15a47de3e49b3 + patch -Np1 < ../curl_7.85_compat.patch + cd .. + + # remove failing test due to missing glibc debug package during test: https://bugs.archlinux.org/task/74875 + sed -e 's/run-backtrace-native.sh//g' -i $pkgbase-$pkgver/tests/Makefile.am + ( + cd $pkgbase-$pkgver + autoreconf -fiv + ) + + cp -av $pkgbase-$pkgver $pkgbase-test-$pkgver +} + + +build() { + local configure_options=( + --prefix=/usr + --sysconfdir=/etc + --program-prefix="eu-" + --enable-deterministic-archives + ) + + ( + # fat-lto-objects is required for non-mangled .a files in libelf + CFLAGS+=" -ffat-lto-objects" + cd $pkgbase-$pkgver + ./configure "${configure_options[@]}" + make + ) + ( + cd $pkgbase-test-$pkgver + # debugging information is required for test-suite + CFLAGS+=" -g" + # fat-lto-objects is required for non-mangled .a files in libelf + CFLAGS+=" -ffat-lto-objects" + ./configure "${configure_options[@]}" + make + ) +} + +check() { + make check -C $pkgbase-test-$pkgver +} + +package_debuginfod() { + pkgdesc+=" (debuginfod)" + depends=( + gcc-libs + glibc + libarchive libarchive.so + libelf=$pkgver + libmicrohttpd libmicrohttpd.so + sqlite libsqlite3.so + ) + optdepends=("elfutils=$pkgver: for translations") + + make DESTDIR="$pkgdir" install -C $pkgbase-$pkgver + install -vDm 644 $pkgbase-$pkgver/{AUTHORS,ChangeLog,NEWS,NOTES,README} -t "$pkgdir/usr/share/doc/$pkgname/" + + # set the default DEBUGINFOD_URLS environment variable to the distribution's debuginfod URL + #printf "https://debuginfod.archlinux.org\n" > "$pkgdir/etc/debuginfod/archlinux.urls" + + ( + cd "$pkgdir" + + _pick libelf etc/debuginfod/* + _pick libelf etc/profile.d/* + _pick libelf usr/{include,lib} + _pick elfutils usr/bin/eu-* + _pick elfutils usr/share/locale + _pick elfutils usr/share/man/man1/eu-* + _pick elfutils usr/share/man/man3/elf_* + ) + +} + +package_elfutils() { + pkgdesc+=" (utilities)" + depends=(gcc-libs glibc libelf=$pkgver) + + mv -v elfutils/* "$pkgdir" + install -vDm 644 $pkgbase-$pkgver/{AUTHORS,ChangeLog,NEWS,NOTES,README} -t "$pkgdir/usr/share/doc/$pkgname/" +} + +package_libelf() { + pkgdesc+=" (libraries)" + depends=( + bzip2 libbz2.so + curl libcurl.so + gcc-libs + glibc + xz liblzma.so + zlib + zstd libzstd.so + ) + # NOTE: the shared objects can not be added to provides as they are not versioned + + mv -v libelf/* "$pkgdir" + install -vDm 644 $pkgbase-$pkgver/{AUTHORS,ChangeLog,NEWS,NOTES,README} -t "$pkgdir/usr/share/doc/$pkgname/" +} diff --git a/core/elfutils/curl_7.85_compat.patch b/core/elfutils/curl_7.85_compat.patch new file mode 100644 index 000000000..4167b9fd7 --- /dev/null +++ b/core/elfutils/curl_7.85_compat.patch @@ -0,0 +1,60 @@ +diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c +index a16165bd1..1ce456327 100644 +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -1336,8 +1336,13 @@ debuginfod_query_server (debuginfod_client *c, + + /* Only allow http:// + https:// + file:// so we aren't being + redirected to some unsupported protocol. */ ++#if CURL_AT_LEAST_VERSION(7, 85, 0) ++ curl_easy_setopt_ck(data[i].handle, CURLOPT_PROTOCOLS_STR, ++ "http,https,file"); ++#else + curl_easy_setopt_ck(data[i].handle, CURLOPT_PROTOCOLS, + (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FILE)); ++#endif + curl_easy_setopt_ck(data[i].handle, CURLOPT_URL, data[i].url); + if (vfd >= 0) + curl_easy_setopt_ck(data[i].handle, CURLOPT_ERRORBUFFER, +diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c +index 8873fcc8c..692aeccec 100644 +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -1456,7 +1456,7 @@ debuginfod_query_server (debuginfod_client *c, + deflate-compressing proxies, this number is likely to be + unavailable, so -1 may show. */ + CURLcode curl_res; +-#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T ++#if CURL_AT_LEAST_VERSION(7, 55, 0) + curl_off_t cl; + curl_res = curl_easy_getinfo(target_handle, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, +@@ -1491,7 +1491,7 @@ debuginfod_query_server (debuginfod_client *c, + if (target_handle) /* we've committed to a server; report its download progress */ + { + CURLcode curl_res; +-#ifdef CURLINFO_SIZE_DOWNLOAD_T ++#if CURL_AT_LEAST_VERSION(7, 55, 0) + curl_off_t dl; + curl_res = curl_easy_getinfo(target_handle, + CURLINFO_SIZE_DOWNLOAD_T, +diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c +index 692aeccec..a16165bd1 100644 +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -105,6 +105,13 @@ void debuginfod_end (debuginfod_client *c) { } + #include + #endif + ++/* Older curl.h don't define CURL_AT_LEAST_VERSION. */ ++#ifndef CURL_AT_LEAST_VERSION ++ #define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) ++ #define CURL_AT_LEAST_VERSION(x,y,z) \ ++ (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) ++#endif ++ + #include + + static pthread_once_t init_control = PTHREAD_ONCE_INIT; +-- +2.31.1 diff --git a/core/elfutils/keys/pgp/47CC0331081B8BC6D0FD4DA08370665B57816A6A.asc b/core/elfutils/keys/pgp/47CC0331081B8BC6D0FD4DA08370665B57816A6A.asc new file mode 100644 index 000000000..a377b1e3e --- /dev/null +++ b/core/elfutils/keys/pgp/47CC0331081B8BC6D0FD4DA08370665B57816A6A.asc @@ -0,0 +1,34 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBE1EKM4BCADLzsfxrLC/dr0NXdfrBHAo7XC5tlPjl+tiRM1AR9ganh2HOZvE +HjtqSEsvV3hyC6RhqI+FA0KS/Uf4o3rIO2HO2DLDvoNSMqr0SRnN4ac6+SS0Ngsk +PRh4CK5VGKDg6jKgD0XSruXjLGG734hzQdwqBG2+c8cHZKYHYfROT/YTn18b0I2m ++fVe4rsNzU5eM3YYp2ec9BPtP28EBgBRP0JjcRDcGds0TindD/tHm+i+xkgJ7Vpi +kA39w/9K+cK0fGVC2DGIvpUG5Y9EbIL1E2qFdNeY4yQcLX9WGeL/1pIkYU/UwJXv +t7v5Y89VwuuQXDocIjLH7HBbgt6woBKyirqFABEBAAG0IU1hcmsgSi4gV2llbGFh +cmQgPG1hcmtAa2xvbXAub3JnPokBVwQTAQgAQQIbAwULCQgHAwUVCgkICwUWAgMB +AAIeAQIXgAIZARYhBEfMAzEIG4vG0P1NoINwZltXgWpqBQJcTjgYBQkQx6pKAAoJ +EINwZltXgWpq43QH/jbspiZP2PZSIKmCEg5Rgfkieg7d+9vPBCJYdln4gePQ3ghZ +Mwi3I4g4paohU6iw9237RlmFFKygqCq8C6MUJK0OE5f/NUw4aSlI1UV1fvfp035+ +vr8rMFvHWDCfk8mMqxC9rNlIUCyaHiAHdApbLC9twyaukd/NRQw7ry+JyOoHW35T +Inn2ilDlCf++6Ozr5t2Xaswo4fF6651DUXo9LmZgX15S4W7UX3YMy6L+SMoohWM8 +gXQJubq7IKaZL8aCPmHs8uGPb2n7gvIsd3R3eekeOZkTVL1xGQh2nCzUp0h3Ligh +rhCBrHWeML8R2WxWbN9MLWIILQyVCMq+Z7el56O0Hk1hcmsgSi4gV2llbGFhcmQg +PG1qd0BnbnUub3JnPokBVAQTAQgAPgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIX +gBYhBEfMAzEIG4vG0P1NoINwZltXgWpqBQJcTjgiBQkQx6pKAAoJEINwZltXgWpq +KaAH/3vAW/tWzRujPRfLT0Ng0iUCneUe5sf2mba/bNewUJxmCm9SiAhmmf3L2qte +pH7QwllBzmtIebF/z/XRZjSYdGeY0B9sO1XX+kHDPyZJsdPhbSF+3509UBiFCYQG +3/niQjrgaxCPNeJOyo9pnVJZ8cfsLBGwwunalsCFqZcRdvdFKhgfY17orZ4PdN5Z +4rrecHw5dzScaswGlHZ8EOKvk+p0YbDcdcfAnC/OYOz8B/EYhA+mP/4BMXPnw/Hd +rlwhR6shwCUorh+Tx0UJ6KhpkdQtWDQuBz0DGwvHNlZhveYXwCpi/+acE8kjIWgg +0mYxV9hKlq4kp31lRZ7oeqz0a+m0IU1hcmsgSi4gV2llbGFhcmQgPG1qd0ByZWRo +YXQuY29tPokBVAQTAQgAPgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBEfM +AzEIG4vG0P1NoINwZltXgWpqBQJcTjgiBQkQx6pKAAoJEINwZltXgWpqM+QH/id/ +YoYi9knZNrjiUDCWbLSU8uVPpD5szxQXk1qNGZP3R2gBER6UeBsYxA1ClbOQbyLw +5SJL1LMcCf/WgqrCXcMgx32JrerPQUHs3SsEHb/Q/BL/NIDDz2xTsZe67dAqPKbr +u50IAYA1aTsahEGRgs8mi6CUUGK5mqtzsQ2Y7OMnZRHAM2RDe5genPbX+dYDq6BF +hRr3vpcYZtOseoZEPILyzfHFMdiFsdG2hMsFh2iNEGLKxTSxT/Eg1idypcvjO1V/ +LD/N0yO1buwPd9HbecSz+ZMR5e2CE3uQVjHU1zvlF0PsFEY4Uuu5t7+TeEk8yiCz +hd8xHCV0KnKlQlqTUGA= +=dqmX +-----END PGP PUBLIC KEY BLOCK----- diff --git a/core/elfutils/keys/pgp/EC3CFE88F6CA0788774F5C1D1AA44BE649DE760A.asc b/core/elfutils/keys/pgp/EC3CFE88F6CA0788774F5C1D1AA44BE649DE760A.asc new file mode 100644 index 000000000..92aaab8f4 --- /dev/null +++ b/core/elfutils/keys/pgp/EC3CFE88F6CA0788774F5C1D1AA44BE649DE760A.asc @@ -0,0 +1,114 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +ZbQkMQ== +=28Gd +-----END PGP PUBLIC KEY BLOCK-----