aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Shelton <stuart@shelton.me>2017-10-02 07:06:50 +0100
committerStuart Shelton <stuart@shelton.me>2017-10-03 23:04:20 +0100
commitb55e0c2371cab2af0b9258a847cdca78937567e4 (patch)
treef4fd63f1cb70a0c078e91875f11849a5cc20c6fe
parentAdd sys-libs/db-5.3.28-r3, sys-libs/db-6.0.35-r1, update sys-libs/db-5.1.29-r... (diff)
downloadsrcshelton-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.md24
-rw-r--r--dev-util/pkgconfig/Manifest4
-rw-r--r--dev-util/pkgconfig/files/pkgconfig-0.29-vasnprintf.patch16
-rw-r--r--dev-util/pkgconfig/pkgconfig-0.29.1.ebuild132
-rw-r--r--dev-vcs/cvs/Manifest3
-rw-r--r--dev-vcs/cvs/cvs-1.12.13.1-r2.ebuild2
-rw-r--r--dev-vcs/cvs/files/cvs-1.12.13.1-vasnprintf.patch11
-rw-r--r--local/etc/portage/bashrc73
-rw-r--r--local/etc/portage/patches/All/vasnprintf.patch15
9 files changed, 279 insertions, 1 deletions
diff --git a/README.md b/README.md
index e0a8e531..0e8e1c8d 100644
--- a/README.md
+++ b/README.md
@@ -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';