diff options
author | Stuart Shelton <stuart@shelton.me> | 2017-10-02 07:06:50 +0100 |
---|---|---|
committer | Stuart Shelton <stuart@shelton.me> | 2017-10-03 23:04:20 +0100 |
commit | b55e0c2371cab2af0b9258a847cdca78937567e4 (patch) | |
tree | f4fd63f1cb70a0c078e91875f11849a5cc20c6fe | |
parent | Add sys-libs/db-5.3.28-r3, sys-libs/db-6.0.35-r1, update sys-libs/db-5.1.29-r... (diff) | |
download | srcshelton-b55e0c2371cab2af0b9258a847cdca78937567e4.tar.gz srcshelton-b55e0c2371cab2af0b9258a847cdca78937567e4.tar.bz2 srcshelton-b55e0c2371cab2af0b9258a847cdca78937567e4.zip |
Add dev-util/pkgconfig-0.29.1, dev-vcs/cvs-1.12.13.1-r2, update README.md with details of macOS 10.13 printf() fixes
-rw-r--r-- | README.md | 24 | ||||
-rw-r--r-- | dev-util/pkgconfig/Manifest | 4 | ||||
-rw-r--r-- | dev-util/pkgconfig/files/pkgconfig-0.29-vasnprintf.patch | 16 | ||||
-rw-r--r-- | dev-util/pkgconfig/pkgconfig-0.29.1.ebuild | 132 | ||||
-rw-r--r-- | dev-vcs/cvs/Manifest | 3 | ||||
-rw-r--r-- | dev-vcs/cvs/cvs-1.12.13.1-r2.ebuild | 2 | ||||
-rw-r--r-- | dev-vcs/cvs/files/cvs-1.12.13.1-vasnprintf.patch | 11 | ||||
-rw-r--r-- | local/etc/portage/bashrc | 73 | ||||
-rw-r--r-- | local/etc/portage/patches/All/vasnprintf.patch | 15 |
9 files changed, 279 insertions, 1 deletions
@@ -23,6 +23,30 @@ main portage tree, but which still have the stock upstream package installed. * www-apps/rpi-monitor * Raspberry Pi monitoring web-interface from [rpi-experiences.blogspot.fr](http://rpi-experiences.blogspot.fr/) +# Fixes for compiling prefix packages on macOS 10.13 (High Sierra) and later + +For the High Sierra release, Apple have fixed a known vulnerability by causing +code which uses the '`%n`' `printf()` format in a string stored in writable +memory to crash with an `illegal instruction: 4` error. Sadly, this is a +runtime error rather than a compiler error, making it difficult to detect. +Known failures currently exist in `vasnprintf()` implementations - these cases +are automatically detected and patched by deploying the Portage `bashrc` +override file from [local/etc/portage/bashrc](/local/etc/portage/bashrc) +to `${EPREFIX}/etc/portage/` and copying the accomdanying patch from +[local/etc/portage/patches/All/vasnprintf.patch](/local/etc/portage/patches/All/vasnprintf.patch) +to `${EPREFIX}/etc/portage/patches/All/`. + +Two affected packages which use an older `vasnprintf()` implementation which is +incompatible with the supplied patch are as follows: + +* dev-util/pkgconfig +* dev-vcs/cvs + +... which are explicitly patched in an overlay package. + +It is unlikely that this change affects only `vasnprintf()` code and no other, +so further patches will likely also be required... + # Fixes for compiling prefix packages under macOS using LLVM/clang Some packages will fail with `illegal instruction: 4` if compiled with certain diff --git a/dev-util/pkgconfig/Manifest b/dev-util/pkgconfig/Manifest new file mode 100644 index 00000000..c5518c94 --- /dev/null +++ b/dev-util/pkgconfig/Manifest @@ -0,0 +1,4 @@ +AUX pkgconfig-0.29-vasnprintf.patch 478 SHA256 dddd1c513f455023433ddb1f5c6a529365d2bab510c0f75216435d4048e6e5a5 SHA512 aeb40856a76bd439d1678ca614b1ad58dcbc31ed82b69d30cd0ac19865982bc9edbfeb7557aff3adab868a9c720f98ce71cdf0c849d1d67e25953f138fb22c86 WHIRLPOOL 959eb1d79190acf12952b2bb96d52ceb6ebda320b0b5c26cf415f5fe88933770e0830ee09dd92803c6b15ac1b16269d97682a03973a27f1dea0df64f313e8962 +DIST pkg-config-0.29.1.tar.gz 2013454 SHA256 beb43c9e064555469bd4390dcfd8030b1536e0aa103f08d7abf7ae8cac0cb001 SHA512 d2963355929d7aae0fbadad445d67b5c6762934fc4963a10a4b72ae90f7f6df4e6a38694884b924ff37eedaf636b49f3f521fe4eb3009e0322a402f330f1b4c2 WHIRLPOOL 6e7ff88253a4ff2e5b8c7e07bd9b5ab9b78b7f13dfe3af0a8607a8a20205a2340d02a400857d43aca5265ddb299c889b4a71c0c840c2d1b0e956434eb1980341 +DIST pkgconfig-glib-cygwin-patches-2.38.2.zip 7057 SHA256 08a006bc73175cb942179be3cfc38656e855c71c012aaf284271237a4803db13 SHA512 a9b8c0bfec83b022cfb74a4a4b53b17f29ea3b3b0cb12fed8e34a27258b5524c87ddbae1e2d88e452408948795a09506e6782dc87916cb4748a455261f583b62 WHIRLPOOL 390b040d9d1f16a427ffa04a8820cd7de9a756ba9c1f32cbe22d560b385f9eb38441569b68ec1ac38319123bd585f82dd52d19764e6a2520b74bbc9dcd37c631 +EBUILD pkgconfig-0.29.1.ebuild 4221 SHA256 e0d6e5096735acb8e4613c7052a8e26dfb4d0001c2c4e09b8f823c195d5e0f0a SHA512 9a3de79ab2b7ea3e6b9a581295cb0cc27ba4359b2d9d3aeaa3940ad0af4d628ca069dbd4da7a135daf9945d6c94244ad8b27155d52cdf80ddfed396e0f5a3310 WHIRLPOOL 23d04ea11b1a56de7dee1c4b6de2aa34a7a4371d18816dac7deeab93a818a4ab79e8e37c6b94d7dd6a430af634f41d4cc9a15bdd7c60a8781608734f4d890eae diff --git a/dev-util/pkgconfig/files/pkgconfig-0.29-vasnprintf.patch b/dev-util/pkgconfig/files/pkgconfig-0.29-vasnprintf.patch new file mode 100644 index 00000000..fd865ed9 --- /dev/null +++ b/dev-util/pkgconfig/files/pkgconfig-0.29-vasnprintf.patch @@ -0,0 +1,16 @@ +--- a/glib/glib/gnulib/vasnprintf.c ++++ b/glib/glib/gnulib/vasnprintf.c +@@ -696,9 +696,13 @@ vasnprintf (char *resultbuf, size_t *len + } + *p = dp->conversion; + #if HAVE_SNPRINTF ++# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + p[1] = '%'; + p[2] = 'n'; + p[3] = '\0'; ++# else ++ p[1] = '\0'; ++# endif + #else + p[1] = '\0'; + #endif diff --git a/dev-util/pkgconfig/pkgconfig-0.29.1.ebuild b/dev-util/pkgconfig/pkgconfig-0.29.1.ebuild new file mode 100644 index 00000000..bcac8d5f --- /dev/null +++ b/dev-util/pkgconfig/pkgconfig-0.29.1.ebuild @@ -0,0 +1,132 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=6 + +# Do not inherit autotools in non-live ebuild - causes circular dependency, bug #550856 +inherit eutils flag-o-matic libtool multilib multilib-minimal + +MY_P=pkg-config-${PV} + +if [[ ${PV} == *9999* ]]; then + # 1.12 is only needed for tests due to some am__check_pre / LOG_DRIVER + # weirdness with "/bin/bash /bin/sh" in arguments chain with >=1.13 + WANT_AUTOMAKE=1.12 + EGIT_REPO_URI="git://anongit.freedesktop.org/pkg-config" + EGIT_CHECKOUT_DIR=${WORKDIR}/${MY_P} + inherit autotools git-r3 +else + KEYWORDS="~ppc-aix ~x64-cygwin ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" + SRC_URI="https://pkgconfig.freedesktop.org/releases/${MY_P}.tar.gz" + INTERNAL_GLIB_CYGWIN_PATCHES=2.38.2 +fi + +[[ -n ${INTERNAL_GLIB_CYGWIN_PATCHES} ]] && +SRC_URI+=" internal-glib? ( elibc_Cygwin? ( + https://github.com/haubi/pkgconfig-glib-cygwin-patches/archive/v${INTERNAL_GLIB_CYGWIN_PATCHES}.zip + -> pkgconfig-glib-cygwin-patches-${INTERNAL_GLIB_CYGWIN_PATCHES}.zip +) )" + +DESCRIPTION="Package config system that manages compile/link flags" +HOMEPAGE="https://pkgconfig.freedesktop.org/wiki/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="elibc_FreeBSD elibc_glibc elibc_Cygwin hardened internal-glib" + +RDEPEND="!internal-glib? ( >=dev-libs/glib-2.34.3[${MULTILIB_USEDEP}] ) + !dev-util/pkgconf[pkg-config] + !dev-util/pkg-config-lite + !dev-util/pkgconfig-openbsd[pkg-config] + virtual/libintl" +DEPEND="${RDEPEND}" + +S=${WORKDIR}/${MY_P} + +DOCS=( AUTHORS NEWS README ) + +src_prepare() { + sed -i -e "s|^prefix=/usr\$|prefix=${EPREFIX}/usr|" check/simple.pc || die #434320 + + [[ -n ${INTERNAL_GLIB_CYGWIN_PATCHES} ]] && + use internal-glib && use elibc_Cygwin && + EPATCH_FORCE=yes EPATCH_SUFFIX=patch \ + epatch "${WORKDIR}"/pkgconfig-glib-cygwin-patches-${INTERNAL_GLIB_CYGWIN_PATCHES} + + epatch "${FILESDIR}"/${PN}-0.29-vasnprintf.patch + + eapply_user + + if [[ ${PV} == *9999* ]]; then + eautoreconf + else + elibtoolize # Required for FreeMiNT wrt #333429 + fi + + if [[ ${CHOST} == *-solaris* ]] ; then + # fix standards conflicts + sed -i \ + -e 's/\<\(_XOPEN_SOURCE_EXTENDED\)\>/\1_DISABLED/' \ + -e '/\<_XOPEN_SOURCE\>/s/2/600/' \ + glib/configure || die + fi +} + +multilib_src_configure() { + local myconf + + if use internal-glib; then + myconf+=' --with-internal-glib' + # non-glibc platforms use GNU libiconv, but configure needs to + # know about that not to get confused when it finds something + # outside the prefix too + if use prefix && use !elibc_glibc ; then + myconf+=" --with-libiconv=gnu" + # add the libdir for libtool, otherwise it'll make love with system + # installed libiconv + append-ldflags "-L${EPREFIX}/usr/$(get_libdir)" + # the glib objects reference symbols from these frameworks, + # not good, esp. since Carbon should be deprecated + [[ ${CHOST} == *-darwin* ]] && \ + append-ldflags -framework CoreFoundation -framework Carbon + if [[ ${CHOST} == *-solaris* ]] ; then + # required due to __EXTENSIONS__ + append-cppflags -DENABLE_NLS + # similar to Darwin + append-ldflags -lintl + fi + fi + else + if ! has_version dev-util/pkgconfig; then + export GLIB_CFLAGS="-I${EPREFIX}/usr/include/glib-2.0 -I${EPREFIX}/usr/$(get_libdir)/glib-2.0/include" + export GLIB_LIBS="-lglib-2.0" + fi + fi + + use ppc64 && use hardened && replace-flags -O[2-3] -O1 + + # Force using all the requirements when linking, so that needed -pthread + # lines are inherited between libraries + use elibc_FreeBSD && myconf+=' --enable-indirect-deps' + + [[ ${PV} == *9999* ]] && myconf+=' --enable-maintainer-mode' + + ECONF_SOURCE=${S} \ + econf \ + --docdir="${EPREFIX}"/usr/share/doc/${PF}/html \ + --with-system-include-path="${EPREFIX}"/usr/include \ + --with-system-library-path="${EPREFIX}"/usr/$(get_libdir) \ + ${myconf} +} + +multilib_src_install() { + emake DESTDIR="${D}" install + + if use prefix; then + # Add an explicit reference to $EPREFIX to PKG_CONFIG_PATH to + # simplify cross-prefix builds + echo "PKG_CONFIG_PATH=${EPREFIX}/usr/$(get_libdir)/pkgconfig:${EPREFIX}/usr/share/pkgconfig" >> "${T}"/99${PN} + doenvd "${T}"/99${PN} + fi +} diff --git a/dev-vcs/cvs/Manifest b/dev-vcs/cvs/Manifest index 824fec46..259b4a68 100644 --- a/dev-vcs/cvs/Manifest +++ b/dev-vcs/cvs/Manifest @@ -19,6 +19,7 @@ AUX cvs-1.12.13.1-fix-gnulib-SEGV-vasnprintf.patch 1296 SHA256 e13db2acebad3ca5b AUX cvs-1.12.13.1-gl-mempcpy.patch 902 SHA256 9aa20504eaa38bea9933a14115fd0d7f84b84884e5f9d2f521a219d6fafdcb8a SHA512 6825f04238a15fa89dd39f865d30105d434c850cd03cb4404f79f268db1777670a254810ddd2110f24c4512530fe622ee637ac572de32b803b2cbf71f4fd6485 WHIRLPOOL 3edd1700bcc05ec7b16eeec870549b47f53c3985c74159d0c3069d769bdc14eadb49afb8927e3b1b274437190a88a6f4ebbfd89e4c1742c1ecd717a97f2dd3fb AUX cvs-1.12.13.1-hash-nameclash.patch 1056 SHA256 4faeef2d4169799dad63a934f26d90ae9d6d47d1d88d37b0c4b39423b46ce40f SHA512 2913cfee49bbb5a0ecbbb40c85a935e8965a01735c3e936be9095f7537dd0e260975eccbc0ebf1c6d672774cc0c7b07b766e2e73e03c3b2359557e89607f8db2 WHIRLPOOL 23c321bab543dedfaffa432f858bffa5d44a14d2a39db62b979912795f89deb79aaf482d7b16a4858cbe80dd25bcf5d07cf23b6616f582bc86d05938fd35703a AUX cvs-1.12.13.1-use-include_next.patch 1048 SHA256 2ba7058e0acf86d985fb31eab7c3025bea784eff8d05ff75fed7fd2917f00517 SHA512 d6fa7e20815bebe6b765e15dc0405ff3b45880e2121562b30cca4f09897cb2a39b9c7c47b64047d88ad8f81f036d29054385a9d9275374e92206997db90c899c WHIRLPOOL a533d9785a9a888fb644c0f27ac35b4ffb50c53c02a1283effd4edd358e546067f99c781b8406ebdef3740edaf71add245fd4c0feea9151887e9e8c41bb2eb42 +AUX cvs-1.12.13.1-vasnprintf.patch 453 SHA256 2116f45e4f750178d3edabe326cc77ed1d3b9ff16bb38743d326b4b6db46a84e SHA512 3dabd774427c8131ebd7ea1f08874e9cdaa6dc897a971a6a005b1bd8d2d874fb9a3c07fdccbfa27c4c11d245e476e735ab43b40e82ffaf2324cac6ee3447c8ec WHIRLPOOL 90d6a5b35202efdbc301b100a7ee57f4049ca04876339d3ccdff92edb48a6d8ff5bd966a719df739f9fd2bf19f1b4c01c8388f6d41394136ecd8f772cae8d36f AUX cvspserver.xinetd.d 282 SHA256 71b62c4f278ed17bf3cac8eacb2bfb17b6125bfe77f83b46fa5742395b74ef5f SHA512 6845a5fc38ed9d8f9194f14137066c3f2640f09ebc1dce7e9fa7c49761534003e5b1c59593496ba9f88a6c9b1196980bc145a2e2fdcbf662360d1b1ca8821411 WHIRLPOOL 949abc87f0d7c8f104ce8a896fdfd94e3db8f60d5aaa948d3358e348b17de942f19ba68fe545ec2af0026643d7b5efd5bc3bc26ccc7da47c70c544d01879646a DIST cederqvist-1.11.23.html.bz2 112336 SHA256 7b44791e77d3cc56e2ce970303f4003a8a759e432cfa97de93fa45c4d78f80d9 SHA512 671d9d0d364c7ec21c8b5ae357bf7be097447342053b6eb442d6b367ff1b79e17b8494cac21a08c7a897c039ede7e08992d4af158fb2a68847506f7841f98789 WHIRLPOOL c58dba2bf0ca96a17099f5488f34b1343385e67a22a20697a0de4c9affb30f21fbd790b5fd874487e5f40ce2978ee961e8b876910ac520da35ec7ceb07edf139 DIST cederqvist-1.11.23.pdf 1134081 SHA256 0ef6dc37510e43be1bcae50c635dedcbb2d56f16968946ff0a304a43f87a7d59 SHA512 6b5f7603ff38eaf0747d364f74960c5bb3ba172fd93436440644396ba9e94538cc3c258c8c44d5fc3437c73eacc8727381f0caa94651227a74353bb46029d490 WHIRLPOOL 31d5e9ff2abe0bf93f9be6f8657690a24c55037d621bc54e735d078a7ac1b089d55d0ea57b8450c47611d6ea7aff54aeed7f7bfbe1ff02188b25abcea164bcd0 @@ -29,4 +30,4 @@ DIST cederqvist-1.12.13.ps 1280573 SHA256 a955722b89155e390635b1220fa67a096c9714 DIST cvs-1.11.23.tar.bz2 2942652 SHA256 400f51b59d85116e79b844f2d5dbbad4759442a789b401a94aa5052c3d7a4aa9 SHA512 d84360b51b966f19ac3f1728265ff25e46d3a3ce6d9e7e30b154f0975bb10ce4f82f5ca3f308d2ff169c2b5dd97b0243e910d2e8ad59a5857aef7a70b9026b19 WHIRLPOOL 0f4a14989c29ee76a911edcbcb9b946f3710d1015391e7a219c841bf3cd03678994d572f23a66975030e9ca2eb64abc7f7665a535203bc81653d754491039252 DIST cvs-1.12.13.1.tar.bz2 4075630 SHA256 de7f374d8c4ac414c04e8d44ce9a5d3da919825a6a332d747e299dc7a80c2218 SHA512 db318c0c70b47283bd469d792bdfe5335e5375e3b25beb79a7aea8435209b944cfa7ba51bdef9935f708e3a26a06b72defdb698974f2951cc9afd615f970986b WHIRLPOOL 3369e59e9f598cf6de28577302d62d3f6b00f705a0a5729c7ebf7b956d899e85afaaa160be2c4f7a4c710c1dd8860301ad1855c874229e39dbe60a5acc91a884 EBUILD cvs-1.11.23.ebuild 2193 SHA256 80d1e5913b8acaa10ae0e7223b738eb97cdf33c3c88fd9150876ef0fb8dc1193 SHA512 974a7925deac598148b872a95dc68d4409e6a3ff62de29c72fe8bf09a39a7850a3bdda801aca202aa5c8795605cdb5f33992e16efb45c9b06afd7d8d95fa2b2f WHIRLPOOL d909bbbea0ca414f37acbde0345b62cdc81be4e8cf6e5e818cb916a046940636e0c16e5af3938b2f892139ad49e5009e0c907eb88b7312ca988e8b8156ad9b5d -EBUILD cvs-1.12.13.1-r2.ebuild 5224 SHA256 594ffbf09a06b1526869b71d23ddc5514e546a242a6d3f52410a8305bcc528b5 SHA512 307fd9535ee558115d2feabb33511b7feedc84b07cae8b97001a7a5c4f0f4f2863e2f7c2b3c00f3b066264da7d3535d829ddb2ced6a045c096354159e0c11e66 WHIRLPOOL e289f8a77495aac41f0fc7f7dfe28a1f53281c3bbfa3a75121a7adadb906a6e757a5a2720a4cd03eddace06b2be4f41934695a2419e62fe11c31377dd31ee45a +EBUILD cvs-1.12.13.1-r2.ebuild 5280 SHA256 d519317a490e1b0b0927c81f47fc903fd9f79c41a3d819f0c98b3e95614b01e3 SHA512 7418cef5ec06cf4b3364c6314919b161ec40af075c9a90912c6a26d36ea2add219a0689a20e9cef7754bd3bd73bcb4e7f39ee4277a806587a856d4ea7414539e WHIRLPOOL 1f7e19412a6a09fe346e433c3dc8d5cf72b52725bdc5866b5b0313bd3e860a522d078aa6906d0ef54cdf82eb37f1a0e66aca93d71186f9c1330b3e363bdf2449 diff --git a/dev-vcs/cvs/cvs-1.12.13.1-r2.ebuild b/dev-vcs/cvs/cvs-1.12.13.1-r2.ebuild index d068152b..65ab757a 100644 --- a/dev-vcs/cvs/cvs-1.12.13.1-r2.ebuild +++ b/dev-vcs/cvs/cvs-1.12.13.1-r2.ebuild @@ -51,6 +51,8 @@ src_prepare() { #epatch "${FILESDIR}"/${PN}-1.12.13-openat.patch #epatch "${FILESDIR}"/${PN}-1.12.13-zlib.patch + epatch "${FILESDIR}"/${PN}-1.12.13.1-vasnprintf.patch + # this testcase was not updated #sed -i.orig -e '/unrecognized keyword.*BogusOption/s,98,73,g' \ # ${S}/src/sanity.sh diff --git a/dev-vcs/cvs/files/cvs-1.12.13.1-vasnprintf.patch b/dev-vcs/cvs/files/cvs-1.12.13.1-vasnprintf.patch new file mode 100644 index 00000000..e47d291b --- /dev/null +++ b/dev-vcs/cvs/files/cvs-1.12.13.1-vasnprintf.patch @@ -0,0 +1,11 @@ +--- a/lib/vasnprintf.c ++++ b/lib/vasnprintf.c +@@ -560,7 +560,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *l + } + *p = dp->conversion; + #if USE_SNPRINTF +-# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) ++# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + p[1] = '%'; + p[2] = 'n'; + p[3] = '\0'; diff --git a/local/etc/portage/bashrc b/local/etc/portage/bashrc new file mode 100644 index 00000000..1005abba --- /dev/null +++ b/local/etc/portage/bashrc @@ -0,0 +1,73 @@ + +# portage overrides + +universal_epatch_user() { + # See https://wiki.gentoo.org/wiki//etc/portage/patches - ensure that + # epatch_user is run for all ebuilds, regardless of whether they import + # eutils or not... + + [[ ${EAPI:-0} == [012345] ]] || return + if ! type estack_push > /dev/null 2>&1; then + local estack_names="eshopts_push eshopts_pop evar_push evar_push_set evar_pop estack_push estack_pop" + source <(awk "/^# @(FUNCTION|VARIABLE): / { p = 0 } /^# @(FUNCTION|VARIABLE): (${estack_names// /|})\$/ { p = 1 } p { print }" ${PORTDIR}/eclass/estack.eclass) + fi + if ! type epatch_user > /dev/null 2>&1; then + local epatch_names="EPATCH_SOURCE EPATCH_USER_SOURCE epatch_user_death_notice epatch_user epatch" + source <(awk "/^# @(FUNCTION|VARIABLE): / { p = 0 } /^# @(FUNCTION|VARIABLE): (${epatch_names// /|})\$/ { p = 1 } p { print }" ${PORTDIR}/eclass/epatch.eclass) + fi + + epatch_user + + for name in $epatch_names; do + unset $name + done + for name in $estack_names; do + unset $name + done +} # universal_epatch_user + +darwin_epatch_vasnprintf() { + if [[ ! "${CHOST}" =~ ^x86_64-apple-darwin ]] || [[ "${CHOST}" < 'x86_64-apple-darwin17' ]]; then + return + fi + + # Try to fix the intentional runtime failure of *printf functions when + # the '%n' format is used... + if [[ "${PWD}" =~ /(dev-util/pkgconfig|dev-vcs/cvs)- ]]; then + einfo "Skipping vasnprintf() patching for specifically patched package ${CATEGORY}/${PN}" + + elif type -pf patch >/dev/null 2>&1 && [[ -r "${EPREFIX:-}"/etc/portage/patches/all/vasnprintf.patch ]]; then + ebegin "Checking source for 'vasnprintf()' source" + + local d f + while read -r d; do + if [[ -e "${d}"/vasnprintf.c ]]; then + eend 1 "vasnprintf source found" + ewarn "Found vasnprintf.c in directory '$( readlink -e "${d}" 2>/dev/null || echo "${d}" )'" + if pushd "${d}" >/dev/null 2>&1; then + if patch -stNp2 --dry-run -i "${EPREFIX:-}"/etc/portage/patches/all/vasnprintf.patch; then + ebegin "Applying 'vasnprintf()' patch for macOS High Sierra" + patch -stNp2 --backup-if-mismatch -i "${EPREFIX:-}"/etc/portage/patches/all/vasnprintf.patch + eend ${?} "'vasnprintf()' patch failed to apply in directory '$( pwd )'" # && + #echo "${CATEGORY}/${PVR} patched" >> "${EPREFIX:-}"/etc/portage/patches/vasnprintf.log + else + eerror "'vasnprintf()' patch for macOS High Sierra at '${EPREFIX:-}/etc/portage/patches/all/vasnprintf.patch' is not compatible with code in directory '$( pwd )'" + #echo "${CATEGORY}/${PVR} incompatible" >> "${EPREFIX:-}"/etc/portage/patches/vasnprintf.log + fi + popd >/dev/null 2>&1 || die "Could not store original directory" + else + eerror "Cannot chdir() to '${d}': ${?}" + fi + else + eend 0 "No instance of 'vasnprintf.c' found" + fi + done < <( find . -type d -name lib -print ) + else + eerror "Cannot find pre-requisites required to patch 'vasnprintf()' source for macOS High Sierra" + fi +} # darwin_epatch_vasnprintf + +pre_src_prepare() { + #universal_epatch_user + darwin_epatch_vasnprintf +} diff --git a/local/etc/portage/patches/All/vasnprintf.patch b/local/etc/portage/patches/All/vasnprintf.patch new file mode 100644 index 00000000..8347c1a4 --- /dev/null +++ b/local/etc/portage/patches/All/vasnprintf.patch @@ -0,0 +1,15 @@ +# With format string strictness, High Sierra also enforces that %n isn't used +# in dynamic format strings, but we should just disable its use on darwin in +# general. + +--- a/lib/vasnprintf.c ++++ b/lib/vasnprintf.c +@@ -4858,7 +4858,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t * + #endif + *fbp = dp->conversion; + #if USE_SNPRINTF +-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) ++# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + fbp[1] = '%'; + fbp[2] = 'n'; + fbp[3] = '\0'; |