public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/
@ 2020-06-20 13:06 Kent Fredric
  0 siblings, 0 replies; 6+ messages in thread
From: Kent Fredric @ 2020-06-20 13:06 UTC (permalink / raw
  To: gentoo-commits

commit:     80bf6a8420ffc005391f048f093679ac417bf5c5
Author:     Kent Fredric <kentnl <AT> gentoo <DOT> org>
AuthorDate: Sat Jun 20 13:04:43 2020 +0000
Commit:     Kent Fredric <kentnl <AT> gentoo <DOT> org>
CommitDate: Sat Jun 20 13:06:25 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=80bf6a84

dev-lang/perl: Add unkeyworded -r2 version with WIP features

This is a work in-progress experiment, hence, it is unkeyworded until
I can get more eyes on the changes, and fully test the consequences at
scale.

Important Changes:
- Convert to EAPI7
- Remove inherit on eutils
- Replace calls to "epatch" to "eapply", but resulting in a loss of
  nice output
- Add new hidden feature PERL_SINGLE_SLOT, which, when set, installs
  perl into a directory named after SUBSLOT (eg: 5.30) as opposed to one
  following the explicit name (eg: 5.30.2), which aims to pre-emptively
  solve (in both direction) the problem faced by shipping binpkg's,
  where the built perl has only one set of INC dirs (eg: 5.30.2), but a
  binpkg was built with a different, but compatible perl (eg: 5.30.1),
  and subsequently, installs to an @INC dir that is not visible to the
  built perl. Instead, all perl's that are defined to be
  inter-compatible share the same directory for both arch-dependent and
  arch-independent code, so binpkg's only need to be regenerated when:
  - Upgrading/downgrading between major revisions
  - Flipping USE="debug" or USE="ithreads".
  Under PERL_SINGLE_SLOT, directories that should be compatible, and are
  available, but built under the previous scheme, are also inhaled into
  @INC for ease of transition.
  The name of this flag is subject to change, and may become a USE flag.
- Add a new hidden feature PERL_SUPPORT_SINGLE_SLOT, which builds perl
  the same way as in previous versions, but also probes for version'd
  directories generated by installing packages on perl's built with
  PERL_SINGLE_SLOT, as a fallback mechaism for transitioning away from a
  perl built with PERL_SINGLE_SLOT.
  The name of this flag is subject to change, and may become a USE flag
- Add a patch to various parts of Configure, perl.c, and friends, to
  facilitate the above, which exposes itself as -Dgentoolibdirs=, and
  has the same syntax as -Dotherlibdirs, but doesn't pollute everything
  by adding its own arch-dirs when they weren't asked for. This patch
  may also later help facilitate building perl's without
  PERL_SINGLE_SLOT, but with other @INC dirs forced into place, for the
  same purpose, but implemented differently, as the previous mechanism,
  -Dinc_version_list is limited in that it:
    - Excludes internally directories that don't exist
    - Mangles directories sometimes trashing @INC entirely, throwing
      away litterally all the versions you passed.

- Fixed a very embarrasing typo in the einfo code, ${EROO%/T} ...
- Restructured the @INC discovery/cleanup logic into dedicated functions
- Add more error handling in the discovery path, especially adding loud
  error output if directories that *need* to be traversed for compat
  discovery cannot be traversed, due to misconfigured permissions.
- Fix an embarrasing bug in @INC list stripping, that due to inherently
  being a *substring* match, not a *fullstring* match, could have
  excluded 5.30.20 from the @INC path for 5.30.2, even though they're
  intercompatible. This became more obvious, when one was trying to
  strip '5.30' from a list that contained '5.30.1', '5.30.2', because it
  just ate everything!

Questions:
- Why do we have bzip2 in RDEPEND? Surely, that should be BDEPEND-only
- Are we even using bzip2 anymore?
- Should we migrate the patch ball to being a more-common-these-days set
  of numerically ordered patches, and potentially reduce the handling
  complexity in the ebuild as a result?

Package-Manager: Portage-2.3.100, Repoman-2.3.22
Signed-off-by: Kent Fredric <kentnl <AT> gentoo.org>

 .../perl/files/perl-5.30.3-gentoo-libdirs.patch    | 135 ++++
 dev-lang/perl/perl-5.30.3-r2.ebuild                | 752 +++++++++++++++++++++
 2 files changed, 887 insertions(+)

diff --git a/dev-lang/perl/files/perl-5.30.3-gentoo-libdirs.patch b/dev-lang/perl/files/perl-5.30.3-gentoo-libdirs.patch
new file mode 100644
index 00000000000..b9e36223a94
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.30.3-gentoo-libdirs.patch
@@ -0,0 +1,135 @@
+From 7572be1afb16621a537e9da02f96cf04cb10b655 Mon Sep 17 00:00:00 2001
+From: Kent Fredric <kentnl@gentoo.org>
+Date: Sat, 20 Jun 2020 22:14:22 +1200
+Subject: Add support for -Dgentoolibdirs
+
+Which just adds the libdirs verbatim in the right place without
+having perl molest it in the process.
+---
+ Configure        | 26 ++++++++++++++++++++++++++
+ config_h.SH      |  5 +++++
+ perl.c           |  1 +
+ perl_inc_macro.h |  8 ++++++++
+ uconfig.sh       |  1 +
+ 5 files changed, 41 insertions(+)
+
+diff --git a/Configure b/Configure
+index cef8c3c078..77258e8f43 100755
+--- a/Configure
++++ b/Configure
+@@ -1181,6 +1181,8 @@ orderlib=''
+ ranlib=''
+ d_perl_otherlibdirs=''
+ otherlibdirs=''
++gentoolibdirs=''
++d_gentoolibdirs=''
+ package=''
+ spackage=''
+ pager=''
+@@ -8101,6 +8103,28 @@ esac
+ set d_perl_otherlibdirs
+ eval $setvar
+ 
++case "$gentoolibdirs" in
++''|' ') dflt='none' ;;
++*) dflt="$gentoolibdirs" ;;
++esac
++$cat <<EOM
++Enter a colon-seperated list of explicit gentoo paths to stuff in @INC
++unmolested, or enter 'none' for no extra paths
++
++EOM
++rp='Colon-seperated list of gentoo-specific perl library search dirs?'
++. ./myread
++case "$ans" in
++' '|''|none) gentoolibdirs=' ';;
++*) gentoolibdirs="$ans" ;;
++esac
++case "$gentoolibdirs" in
++' ') val=$undef ;;
++*) val=$define ;;
++esac
++set d_gentoolibdirs
++eval $setvar
++
+ : DTrace support
+ dflt_dtrace='/usr/sbin/dtrace'
+ $test -x /usr/bin/dtrace && dflt_dtrace='/usr/bin/dtrace'
+@@ -24402,6 +24426,7 @@ d_openat='$d_openat'
+ d_pathconf='$d_pathconf'
+ d_pause='$d_pause'
+ d_perl_otherlibdirs='$d_perl_otherlibdirs'
++d_gentoolibdirs='$d_gentoolibdirs'
+ d_phostname='$d_phostname'
+ d_pipe2='$d_pipe2'
+ d_pipe='$d_pipe'
+@@ -24937,6 +24962,7 @@ orderlib='$orderlib'
+ osname='$osname'
+ osvers='$osvers'
+ otherlibdirs='$otherlibdirs'
++gentoolibdirs='$gentoolibdirs'
+ package='$package'
+ pager='$pager'
+ passcat='$passcat'
+diff --git a/config_h.SH b/config_h.SH
+index 08c5923ef8..5563082969 100755
+--- a/config_h.SH
++++ b/config_h.SH
+@@ -1308,6 +1308,11 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
+  */
+ #$d_perl_otherlibdirs PERL_OTHERLIBDIRS "$otherlibdirs"		/**/
+ 
++/* GENTOO_LIBDIRS:
++ * Like PERL_OTHERLIBDIRS, but doesn't stuff ARCH dirs in when not wanted
++ */
++#$d_gentoolibdirs GENTOO_LIBDIRS "$gentoolibdirs"		/**/
++
+ /* PRIVLIB:
+  *	This symbol contains the name of the private library for this package.
+  *	The library is private in the sense that it needn't be in anyone's
+diff --git a/perl.c b/perl.c
+index 2013a76026..62e67cfaa2 100644
+--- a/perl.c
++++ b/perl.c
+@@ -4750,6 +4750,7 @@ S_init_perllib(pTHX)
+     INCPUSH_ARCHLIB_EXP
+     INCPUSH_PRIVLIB_EXP
+     INCPUSH_PERL_OTHERLIBDIRS
++    INCPUSH_GENTOO_LIBDIRS
+     INCPUSH_PERL5LIB
+     INCPUSH_APPLLIB_OLD_EXP
+     INCPUSH_SITELIB_STEM
+diff --git a/perl_inc_macro.h b/perl_inc_macro.h
+index 5a2f20dfae..4b69b39199 100644
+--- a/perl_inc_macro.h
++++ b/perl_inc_macro.h
+@@ -143,6 +143,14 @@
+ 		      INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
+ #endif
+ 
++#ifdef GENTOO_LIBDIRS
++# define INCPUSH_GENTOO_LIBDIRS S_incpush_use_sep(aTHX_ STR_WITH_LEN(GENTOO_LIBDIRS), \
++    INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
++#endif
++#ifndef INCPUSH_GENTOO_LIBDIRS
++# define INCPUSH_GENTOO_LIBDIRS
++#endif
++
+ #ifdef PERL_OTHERLIBDIRS
+ #	define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY  S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \
+ 		      INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+diff --git a/uconfig.sh b/uconfig.sh
+index 1d4a0f4a57..fba825acad 100644
+--- a/uconfig.sh
++++ b/uconfig.sh
+@@ -185,6 +185,7 @@ d_futimes='undef'
+ d_gai_strerror='undef'
+ d_gdbm_ndbm_h_uses_prototypes='undef'
+ d_gdbmndbm_h_uses_prototypes='undef'
++d_gentoolibdirs='undef'
+ d_getaddrinfo='undef'
+ d_getcwd='undef'
+ d_getespwnam='undef'
+-- 
+2.27.0
+

diff --git a/dev-lang/perl/perl-5.30.3-r2.ebuild b/dev-lang/perl/perl-5.30.3-r2.ebuild
new file mode 100644
index 00000000000..2483914929e
--- /dev/null
+++ b/dev-lang/perl/perl-5.30.3-r2.ebuild
@@ -0,0 +1,752 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit alternatives flag-o-matic toolchain-funcs multilib multiprocessing
+
+PATCH_VER=1
+CROSS_VER=1.3.4
+PATCH_BASE="perl-5.30.0-patches-${PATCH_VER}"
+PATCH_DEV=dilfridge
+
+DIST_AUTHOR=XSAWYERX
+
+# Greatest first, don't include yourself
+# Devel point-releases are not ABI-intercompatible, but stable point releases are
+# BIN_OLDVERSEN is contains only C-ABI-intercompatible versions
+PERL_BIN_OLDVERSEN="5.30.0 5.30.1 5.30.2"
+
+if [[ "${PV##*.}" == "9999" ]]; then
+	DIST_VERSION=5.30.0
+else
+	DIST_VERSION="${PV/_rc/-RC}"
+fi
+SHORT_PV="${DIST_VERSION%.*}"
+# Even numbered major versions are ABI intercompatible
+# Odd numbered major versions are not
+if [[ $(( ${SHORT_PV#*.} % 2 )) == 1 ]]; then
+	SUBSLOT="${DIST_VERSION%-RC*}"
+else
+	SUBSLOT="${DIST_VERSION%.*}"
+fi
+# Used only in tar paths
+MY_P="perl-${DIST_VERSION}"
+# Used in library paths
+MY_PV="${DIST_VERSION%-RC*}"
+
+DESCRIPTION="Larry Wall's Practical Extraction and Report Language"
+
+SRC_URI="
+	mirror://cpan/src/5.0/${MY_P}.tar.xz
+	mirror://cpan/authors/id/${DIST_AUTHOR:0:1}/${DIST_AUTHOR:0:2}/${DIST_AUTHOR}/${MY_P}.tar.xz
+	https://github.com/gentoo-perl/perl-patchset/releases/download/${PATCH_BASE}/${PATCH_BASE}.tar.xz
+	mirror://gentoo/${PATCH_BASE}.tar.xz
+	https://dev.gentoo.org/~${PATCH_DEV}/distfiles/${PATCH_BASE}.tar.xz
+	https://github.com/arsv/perl-cross/releases/download/${CROSS_VER}/perl-cross-${CROSS_VER}.tar.gz
+"
+HOMEPAGE="https://www.perl.org/"
+
+LICENSE="|| ( Artistic GPL-1+ )"
+SLOT="0/${SUBSLOT}"
+
+if [[ "${PV##*.}" != "9999" ]] && [[ "${PV/rc//}" == "${PV}" ]] ; then
+# SOMEWHAT EXPERIMENTAL CODE, DO NOT USE WITHOUT AN ADULT PRESENT, CHECK CHANGELOG
+# FOR DETAILS
+KEYWORDS=""
+# KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+fi
+
+IUSE="berkdb debug doc gdbm ithreads"
+
+RDEPEND="
+	berkdb? ( sys-libs/db:= )
+	gdbm? ( >=sys-libs/gdbm-1.8.3:= )
+	app-arch/bzip2
+	sys-libs/zlib
+"
+DEPEND="${RDEPEND}"
+BDEPEND="${RDEPEND}"
+
+PDEPEND="
+	>=app-admin/perl-cleaner-2.5
+	>=virtual/perl-File-Temp-0.230.400-r2
+	>=virtual/perl-Data-Dumper-2.154.0
+	virtual/perl-Test-Harness
+"
+# bug 390719, bug 523624
+# virtual/perl-Test-Harness is here for the bundled ExtUtils::MakeMaker
+
+S="${WORKDIR}/${MY_P}"
+
+dual_scripts() {
+	src_remove_dual      perl-core/Archive-Tar        2.320.0       ptar ptardiff ptargrep
+	src_remove_dual      perl-core/CPAN               2.220.0       cpan
+	src_remove_dual      perl-core/Digest-SHA         6.20.0        shasum
+	src_remove_dual      perl-core/Encode             3.10.0        enc2xs piconv
+	src_remove_dual      perl-core/ExtUtils-MakeMaker 7.340.0       instmodsh
+	src_remove_dual      perl-core/ExtUtils-ParseXS   3.400.0       xsubpp
+	src_remove_dual      perl-core/IO-Compress        2.84.0        zipdetails
+	src_remove_dual      perl-core/JSON-PP            4.20.0        json_pp
+	src_remove_dual      perl-core/Module-CoreList    5.202.6.13.0_rc corelist
+	src_remove_dual      perl-core/Pod-Parser         1.630.0       pod2usage podchecker podselect
+	src_remove_dual      perl-core/Pod-Perldoc        3.280.100     perldoc
+	src_remove_dual      perl-core/Test-Harness       3.420.0       prove
+	src_remove_dual      perl-core/podlators          4.110.0       pod2man pod2text
+	src_remove_dual_man  perl-core/podlators          4.110.0       /usr/share/man/man1/perlpodstyle.1
+}
+
+check_rebuild() {
+	# Fresh install
+	if [[ -z "${REPLACING_VERSIONS}" ]]; then
+		return 0;
+	# Major Upgrade
+	# doesn't matter if there's multiple copies, it still needs a rebuild
+	# if the string is anything other than "5.CURRENTMAJOR"
+	elif [[ "${REPLACING_VERSIONS%.*}" != "${PV%.*}" ]]; then
+		echo ""
+		ewarn "UPDATE THE PERL MODULES:"
+		ewarn "After updating dev-lang/perl the installed Perl modules"
+		ewarn "have to be re-installed. In most cases, this is done automatically"
+		ewarn "by the package manager, but subsequent steps are still recommended"
+		ewarn "to ensure system consistency."
+		ewarn
+		ewarn "You should start with a depclean to remove any unused perl dependencies"
+		ewarn "that may confuse portage in future. Regular depcleans are also encouraged"
+		ewarn "as part of your regular update cycle, as that will keep perl upgrades working."
+		ewarn "Recommended: emerge --depclean -va"
+		ewarn
+		ewarn "You should then call perl-cleaner to clean up any old files and trigger any"
+		ewarn "remaining rebuilds portage may have missed."
+		ewarn "Use: perl-cleaner --all"
+		return 0;
+
+	# Reinstall w/ USE Change
+	elif (   use ithreads && ! has_version dev-lang/perl[ithreads] ) || \
+		 ( ! use ithreads &&   has_version dev-lang/perl[ithreads] ) || \
+		 (   use debug    && ! has_version dev-lang/perl[debug]    ) || \
+		 ( ! use debug    &&   has_version dev-lang/perl[debug]    ) ; then
+		echo ""
+		ewarn "TOGGLED USE-FLAGS WARNING:"
+		ewarn "You changed one of the use-flags ithreads or debug."
+		ewarn "You must rebuild all perl-modules installed."
+		ewarn "Use: perl-cleaner --modules ; perl-cleaner --force --libperl"
+	fi
+}
+
+pkg_setup() {
+	case ${CHOST} in
+		*-freebsd*)   osname="freebsd" ;;
+		*-dragonfly*) osname="dragonfly" ;;
+		*-netbsd*)    osname="netbsd" ;;
+		*-openbsd*)   osname="openbsd" ;;
+		*-darwin*)    osname="darwin" ;;
+		*-solaris*)   osname="solaris" ;;
+		*-interix*)   osname="interix" ;;
+		*-aix*)       osname="aix" ;;
+		*-cygwin*)    osname="cygwin" ;;
+		*)            osname="linux" ;;
+	esac
+
+	myarch="${CHOST%%-*}-${osname}"
+	if use debug ; then
+		myarch+="-debug"
+	fi
+	if use ithreads ; then
+		mythreading="-multi"
+		myarch+="-thread"
+	fi
+
+	PRIV_BASE="/usr/$(get_libdir)/perl5"
+	SITE_BASE="/usr/local/$(get_libdir)/perl5"
+	VENDOR_BASE="/usr/$(get_libdir)/perl5/vendor_perl"
+
+	LIBPERL="libperl$(get_libname ${MY_PV} )"
+
+	# This ENV var tells perl to build with a directory like "5.30"
+	# regardless of its patch version. This is for experts only
+	# at this point.
+	if [[ -z "${PERL_SINGLE_SLOT}" ]]; then
+		PRIV_LIB="${PRIV_BASE}/${MY_PV}"
+		ARCH_LIB="${PRIV_BASE}/${MY_PV}/${myarch}${mythreading}"
+		SITE_LIB="${SITE_BASE}/${MY_PV}"
+		SITE_ARCH="${SITE_BASE}/${MY_PV}/${myarch}${mythreading}"
+		VENDOR_LIB="${VENDOR_BASE}/${MY_PV}"
+		VENDOR_ARCH="${VENDOR_BASE}/${MY_PV}/${myarch}${mythreading}"
+	else
+		PRIV_LIB="${PRIV_BASE}/${SUBSLOT}"
+		ARCH_LIB="${PRIV_BASE}/${SUBSLOT}/${myarch}${mythreading}"
+		SITE_LIB="${SITE_BASE}/${SUBSLOT}"
+		SITE_ARCH="${SITE_BASE}/${SUBSLOT}/${myarch}${mythreading}"
+		VENDOR_LIB="${VENDOR_BASE}/${SUBSLOT}"
+		VENDOR_ARCH="${VENDOR_BASE}/${SUBSLOT}/${myarch}${mythreading}"
+	fi
+
+	dual_scripts
+}
+
+src_remove_dual_file() {
+	local i pkg ver
+	pkg="$1"
+	ver="$2"
+	shift 2
+	case "${EBUILD_PHASE:-none}" in
+		postinst|postrm)
+			for i in "$@" ; do
+				alternatives_auto_makesym "${i}" "${i}-[0-9]*"
+			done
+			;;
+		setup)
+			for i in "$@" ; do
+				if [[ -f ${EROOT}${i} && ! -h ${EROOT}${i} ]] ; then
+					has_version ${pkg} && ewarn "You must reinstall ${pkg} !"
+					break
+				fi
+			done
+			;;
+		install)
+			for i in "$@" ; do
+				if ! [[ -f "${ED}"${i} ]] ; then
+					ewarn "${i} does not exist!"
+					continue
+				fi
+				mv "${ED}"${i}{,-${ver}-${P}} || die
+			done
+			;;
+	esac
+}
+
+src_remove_dual_man() {
+	local i pkg ver ff
+	pkg="$1"
+	ver="$2"
+	shift 2
+	case "${EBUILD_PHASE:-none}" in
+		postinst|postrm)
+			for i in "$@" ; do
+				ff=`echo "${EROOT}${i%.[0-9]}-${ver}-${P}${i#${i%.[0-9]}}"*`
+				ff=${ff##*${i#${i%.[0-9]}}}
+				alternatives_auto_makesym "${i}${ff}" "${i%.[0-9]}-[0-9]*"
+			done
+			;;
+		install)
+			for i in "$@" ; do
+				if ! [[ -f "${ED}"${i} ]] ; then
+					ewarn "${i} does not exist!"
+					continue
+				fi
+				mv "${ED}"${i} "${ED}"${i%.[0-9]}-${ver}-${P}${i#${i%.[0-9]}} || die
+			done
+			;;
+	esac
+}
+
+src_remove_dual() {
+	local i pkg ver
+	pkg="$1"
+	ver="$2"
+	shift 2
+	for i in "$@" ; do
+		src_remove_dual_file  "${pkg}" "${ver}" "/usr/bin/${i}"
+		src_remove_dual_man   "${pkg}" "${ver}" "/usr/share/man/man1/${i}.1"
+	done
+}
+
+src_prepare_update_patchlevel_h() {
+	# Copied and modified from debian:
+	# Copyright 2011 Niko Tyni
+	# This program is free software; you can redistribute it and/or modify
+	# it under the same terms as Perl itself.
+	local patchdir="${WORKDIR}/patches"
+	local prefix
+	local patchoutput="patchlevel-gentoo.h"
+
+	[[ -f ${patchdir}/series ]] || return 0
+
+while read patch
+do
+	patchname=$(echo $patch | sed 's/\.diff$//')
+	< $patchdir/$patch sed -e '/^Subject:/ { N; s/\n / / }' | sed -n -e '
+
+	# massage the patch headers
+	s|^Bug: .*https\?://rt\.perl\.org/.*id=\(.*\).*|[perl #\1]|; tprepend;
+	s|^Bug: .*https\?://rt\.cpan\.org/.*id=\(.*\).*|[rt.cpan.org #\1]|; tprepend;
+	s|^Bug-Gentoo: ||; tprepend;
+	s/^\(Subject\|Description\): //; tappend;
+	s|^Origin: .*http://perl5\.git\.perl\.org/perl\.git/commit\(diff\)\?/\(.......\).*|[\2]|; tprepend;
+
+	# post-process at the end of input
+	$ { x;
+		# include the version number in the patchlevel.h description (if available)
+		s/List packaged patches/&'" for ${PF}(#${PATCH_VER})"'/;
+
+		# escape any backslashes and double quotes
+		s|\\|\\\\|g; s|"|\\"|g;
+
+		# add a prefix
+		s|^|\t,"'"$prefix$patchname"' - |;
+		# newlines away
+		s/\n/ /g; s/  */ /g;
+		# add a suffix
+		s/ *$/"/; p
+	};
+	# stop all processing
+	d;
+	# label: append to the hold space
+	:append H; d;
+	# label: prepend to the hold space
+	:prepend x; H; d;
+	'
+done < "${WORKDIR}"/patches/series > "${S}/${patchoutput}"
+echo "${patchoutput}" >> "${S}/MANIFEST"
+}
+
+src_prepare_perlcross() {
+	cp -a ../perl-cross-${CROSS_VER}/* . || die
+
+	# bug 604072
+	MAKEOPTS+=" -j1"
+	export MAKEOPTS
+}
+src_prepare_dynamic() {
+	ln -s ${LIBPERL} libperl$(get_libname ${SHORT_PV}) || die
+	ln -s ${LIBPERL} libperl$(get_libname ) || die
+}
+
+src_prepare() {
+	local patch
+
+	if use hppa ; then
+		eapply "${FILESDIR}/${PN}-5.26.2-hppa.patch" # bug 634162
+	fi
+
+	if [[ ${CHOST} == *-solaris* ]] ; then
+		# do NOT mess with nsl, on Solaris this is always necessary,
+		# when -lsocket is used e.g. to get h_errno
+		sed -i '/gentoo\/no-nsl-cl\.patch/d' "${WORKDIR}/patches/series" || die
+	fi
+
+	einfo "[ Applying patches from ${PATCH_BASE} ]"
+	while read patch ; do
+		eapply "${WORKDIR}"/patches/${patch}
+	done < "${WORKDIR}"/patches/series
+	einfo "[ Done with ${PATCH_BASE} ]"
+
+	eapply "${FILESDIR}/${PN}-5.30.3-gentoo-libdirs.patch"
+
+	src_prepare_update_patchlevel_h
+
+	tc-is-cross-compiler && src_prepare_perlcross
+
+	tc-is-static-only || src_prepare_dynamic
+
+	if use gdbm; then
+		sed -i "s:INC => .*:INC => \"-I${EROOT}usr/include/gdbm\":g" \
+			ext/NDBM_File/Makefile.PL || die
+	fi
+
+	# Use errno.h from prefix rather than from host system, bug #645804
+	if use prefix && [[ -e "${EPREFIX}"/usr/include/errno.h ]] ; then
+		sed -i "/my..sysroot/s:'':'${EPREFIX}':" ext/Errno/Errno_pm.PL || die
+	fi
+
+	if [[ ${CHOST} == *-solaris* ]] ; then
+		# set a soname, fix linking against just built libperl
+		sed -i -e 's/netbsd\*/netbsd*|solaris*/' Makefile.SH || die
+	fi
+
+	if [[ ${CHOST} == *-darwin* ]] ; then
+		# fix install_name (soname) not to reference $D
+		sed -i -e '/install_name `pwd/s/`pwd`/\\$(shrpdir)/' Makefile.SH || die
+	fi
+
+	default
+}
+
+myconf() {
+	# the myconf array is declared in src_configure
+	myconf=( "${myconf[@]}" "$@" )
+}
+
+# Outputs a list of versions which have been seen in any of the
+# primary perl @INC prefix paths, such as:
+#  /usr/lib64/perl5/<NUMBER>
+#  /usr/local/lib64/perl5/<NUMBER>
+#  /usr/lib64/perl5/vendor_perl/<NUMBER>
+#
+# All values of NUMBER must be like "5.x.y", unless PERL_SUPPORT_SINGLE_SLOT
+# is enabled, where it will also allow numbers like "5.x"
+#
+# PERL_SUPPORT_SINGLE_SLOT should only be used to transition *away* from PERL_SINGLE_SLOT
+# if you used that.
+find_candidate_inc_versions() {
+	local regex='.*/5[.][0-9]+[.][0-9]+$';
+	if [[ ! -z "${PERL_SUPPORT_SINGLE_SLOT}" || ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		regex='.*/5[.][0-9]+\([.][0-9]+\|\)$'
+	fi
+	local dirs=(
+		"${EROOT%/}${PRIV_BASE}"
+		"${EROOT%/}${SITE_BASE}"
+		"${EROOT%/}${VENDOR_BASE}"
+	)
+	for dir in "${dirs[@]}"; do
+		if [[ ! -e "${dir}" ]]; then
+			continue
+		fi
+		# Without access to readdir() on these dirs, find will not be able
+		# to reveal any @INC directories inside them, and will subsequently prune
+		# them from the built perl's @INC support, breaking our compatiblity options
+		# entirely.
+		if [[ ! -r "${dir}" || ! -x "${dir}" ]]; then
+			eerror "Bad permissions on ${dir}, this will probably break things"
+			eerror "Ensure ${dir} is +rx for at least uid=$EUID"
+			eerror "Recommended permission is +rx for all"
+			eerror "> chmod o+rx ${dir}"
+		fi
+	done
+	einfo "Scanning for old @INC dirs matching '$regex' in: ${dirs[*]}"
+	find "${dirs[@]}" -maxdepth 1 -mindepth 1 -type d -regex "${regex}" -printf "%f "  2>/dev/null
+}
+# Sort versions passed versiony-ly, remove self-version if present
+# dedup. Takes each version as an argument
+sanitize_inc_versions() {
+	local vexclude="${DIST_VERSION%-RC}"
+	if [[ ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		vexclude="${SUBSLOT}"
+	fi
+	einfo "Normalizing/Sorting candidate list: $*"
+	einfo " to remove '${vexclude}'"
+	# Note, general numeric sort has to be used
+	# for the last component, or unique will convert
+	#  5.30.0 + 5.30 into just 5.30
+	printf "%s\n" "$@" |\
+		grep -vxF "${vexclude}" |\
+		sort -u -nr -t'.' -k1,1rn -k2,2rn -k3,3rg
+}
+
+versions_to_inclist() {
+	local oldv="${PERL_BIN_OLDVERSEN}"
+	if [[ ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		oldv="${DIST_VERSION%-RC} ${PERL_BIN_OLDVERSEN}"
+	fi
+	for v;	do
+			has "${v}" ${oldv} && echo -n "${v}/${myarch}${mythreading}/ ";
+			echo -n "${v}/ ";
+	done
+}
+versions_to_gentoolibdirs() {
+	local oldv="${PERL_BIN_OLDVERSEN}"
+	local root
+	local v
+	if [[ ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		oldv="${DIST_VERSION%-RC} ${PERL_BIN_OLDVERSEN}"
+	fi
+	for v;	do
+		for root in "${PRIV_BASE}" "${VENDOR_BASE}" "${SITE_BASE}"; do
+			local fullpath="${EROOT%/}${root}/${v}"
+			if [[ -e "${fullpath}" ]]; then
+				has "${v}" ${oldv} && printf "%s:" "${fullpath}/${myarch}${mythreading}";
+				printf "%s:" "${fullpath}"
+			fi
+		done
+	done
+}
+
+src_configure() {
+	declare -a myconf
+
+	export LC_ALL="C"
+	[[ ${COLUMNS:-1} -ge 1 ]] || unset COLUMNS # bug #394091
+
+	# Perl has problems compiling with -Os in your flags with glibc
+	use elibc_uclibc || replace-flags "-Os" "-O2"
+
+	# xlocale.h is going away in glibc-2.26, so it's counterproductive
+	# if we use it and include it in CORE/perl.h ... Perl builds just
+	# fine with glibc and locale.h only.
+	# However, the darwin prefix people have no locale.h ...
+	use elibc_glibc && myconf -Ui_xlocale
+
+	# This flag makes compiling crash in interesting ways
+	filter-flags "-malign-double"
+
+	# Generic LTO broken since 5.28, triggers EUMM failures
+	filter-flags "-flto"
+
+	use sparc && myconf -Ud_longdbl
+
+	export BUILD_BZIP2=0
+	export BZIP2_INCLUDE=${EROOT}/usr/include
+	export BZIP2_LIB=${EROOT}/usr/$(get_libdir)
+
+	export BUILD_ZLIB=False
+	export ZLIB_INCLUDE=${EROOT}/usr/include
+	export ZLIB_LIB=${EROOT}/usr/$(get_libdir)
+
+	# allow either gdbm to provide ndbm (in <gdbm/ndbm.h>) or db1
+	myndbm='U'
+	mygdbm='U'
+	mydb='U'
+	if use gdbm ; then
+		mygdbm='D'
+		if use berkdb ; then
+			myndbm='D'
+		fi
+	fi
+	if use berkdb ; then
+		mydb='D'
+		has_version '=sys-libs/db-1*' && myndbm='D'
+	fi
+
+	myconf "-${myndbm}i_ndbm" "-${mygdbm}i_gdbm" "-${mydb}i_db"
+
+	if use alpha && [[ "$(tc-getCC)" = "ccc" ]] ; then
+		ewarn "Perl will not be built with berkdb support, use gcc if you needed it..."
+		myconf -Ui_db -Ui_ndbm
+	fi
+
+	use ithreads && myconf -Dusethreads
+
+	if use debug ; then
+		append-cflags "-g"
+		myconf -DDEBUGGING
+	elif [[ ${CFLAGS} == *-g* ]] ; then
+		myconf -DDEBUGGING=-g
+	else
+		myconf -DDEBUGGING=none
+	fi
+
+	# Autodiscover all old version directories, some of them will even be newer
+	# if you downgrade
+	if [[ -z ${PERL_OLDVERSEN} ]]; then
+		PERL_OLDVERSEN="$( find_candidate_inc_versions )"
+	fi
+
+	# Fixup versions, removing self match, fixing order and dupes
+	PERL_OLDVERSEN="$( sanitize_inc_versions ${PERL_OLDVERSEN} )"
+
+	# Experts who want a "Pure" install can set PERL_OLDVERSEN to an empty string
+	if [[ -n "${PERL_OLDVERSEN// }" ]]; then
+		local inclist="$( versions_to_inclist ${PERL_OLDVERSEN} )"
+		einfo "This version of perl may partially support modules previously"
+		einfo "installed in any of the following paths:"
+		for incpath in ${inclist}; do
+			[[ -e "${EROOT%/}${VENDOR_BASE}/${incpath}" ]] && einfo " ${EROOT%/}${VENDOR_BASE}/${incpath}"
+			[[ -e "${EROOT%/}${PRIV_BASE}/${incpath}"   ]] && einfo " ${EROOT%/}${PRIV_BASE}/${incpath}"
+			[[ -e "${EROOT%/}${SITE_BASE}/${incpath}"   ]] && einfo " ${EROOT%/}${SITE_BASE}/${incpath}"
+		done
+		einfo "This is a temporary measure and you should aim to cleanup these paths"
+		einfo "via world updates and perl-cleaner"
+		# myconf -Dinc_version_list="${inclist}"
+		myconf -Dgentoolibdirs="$( versions_to_gentoolibdirs ${PERL_OLDVERSEN} )"
+	fi
+
+	[[ ${ELIBC} == "FreeBSD" ]] && myconf "-Dlibc=/usr/$(get_libdir)/libc.a"
+
+	# Make sure we can do the final link #523730, need to set deployment
+	# target to override hardcoded 10.3 which breaks on modern OSX
+	[[ ${CHOST} == *-darwin* ]] && \
+		myconf "-Dld=env MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} $(tc-getCC)"
+
+	# Older macOS with non-Apple GCC chokes on inline in system headers
+	# using c89 mode as injected by cflags.SH
+	[[ ${CHOST} == *-darwin* && ${CHOST##*darwin} -le 9 ]] && tc-is-gcc && \
+		append-cflags -Dinline=__inline__
+
+	# fix unaligned access misdetection
+	# https://rt.perl.org/Public/Bug/Display.html?id=133495
+	# https://rt.perl.org/Public/Bug/Display.html?id=133803
+	# bug #676062, bug #688432
+	use hppa || use sparc || [[ ${CHOST} == sparc*-solaris* ]] || \
+		[[ ${CHOST} == armv5tel* ]] \
+			&& myconf "-Dd_u32align='define'"
+
+	# Prefix: the host system needs not to follow Gentoo multilib stuff, and in
+	# Prefix itself we don't do multilib either, so make sure perl can find
+	# something compatible.
+	if use prefix ; then
+		# Set a hook to check for each detected library whether it actually works.
+		export libscheck="
+			( echo 'main(){}' > '${T}'/conftest.c &&
+			  $(tc-getCC) -o '${T}'/conftest '${T}'/conftest.c -l\$thislib >/dev/null 2>/dev/null
+			) || xxx=/dev/null"
+
+		# Use all host paths that might contain useful stuff, the hook above will filter out bad choices.
+		local paths="/lib/*-linux-gnu /usr/lib/*-linux-gnu /lib64 /lib/64 /usr/lib64 /usr/lib/64 /lib32 /usr/lib32 /lib /usr/lib"
+		myconf "-Dlibpth=${EPREFIX}/$(get_libdir) ${EPREFIX}/usr/$(get_libdir) ${paths}"
+	elif [[ $(get_libdir) != "lib" ]] ; then
+		# We need to use " and not ', as the written config.sh use ' ...
+		myconf "-Dlibpth=/usr/local/$(get_libdir) /$(get_libdir) /usr/$(get_libdir)"
+	fi
+
+	# don't try building ODBM, bug #354453
+	disabled_extensions="ODBM_File"
+
+	if ! use gdbm ; then
+		# workaround for bug #157774: don't try building GDBM related stuff with USE="-gdbm"
+		disabled_extensions="${disabled_extensions} GDBM_File NDBM_File"
+	fi
+
+	myconf -Dnoextensions="${disabled_extensions}"
+
+	[[ "${PV##*.}" == "9999" ]] && myconf -Dusedevel -Uversiononly
+
+	[[ -n "${EXTRA_ECONF}" ]] && ewarn During Perl build, EXTRA_ECONF=${EXTRA_ECONF}
+	# allow fiddling via EXTRA_ECONF, bug 558070
+	eval "local -a EXTRA_ECONF=(${EXTRA_ECONF})"
+
+	# setting -Dld= to tc-getLD breaks perl and all perl things
+	# https://github.com/Perl/perl5/issues/17791#issuecomment-630145202
+	myconf \
+		-Duseshrplib \
+		-Darchname="${myarch}" \
+		-Dcc="$(tc-getCC)" \
+		-Dar="$(tc-getAR)" \
+		-Dnm="$(tc-getNM)" \
+		-Dcpp="$(tc-getCPP)" \
+		-Dranlib="$(tc-getRANLIB)" \
+		-Doptimize="${CFLAGS}" \
+		-Dldflags="${LDFLAGS}" \
+		-Dprefix="${EPREFIX}"'/usr' \
+		-Dsiteprefix="${EPREFIX}"'/usr/local' \
+		-Dvendorprefix="${EPREFIX}"'/usr' \
+		-Dscriptdir="${EPREFIX}"'/usr/bin' \
+		-Dprivlib="${EPREFIX}${PRIV_LIB}" \
+		-Darchlib="${EPREFIX}${ARCH_LIB}" \
+		-Dsitelib="${EPREFIX}${SITE_LIB}" \
+		-Dsitearch="${EPREFIX}${SITE_ARCH}" \
+		-Dvendorlib="${EPREFIX}${VENDOR_LIB}" \
+		-Dvendorarch="${EPREFIX}${VENDOR_ARCH}" \
+		-Dman1dir="${EPREFIX}"/usr/share/man/man1 \
+		-Dman3dir="${EPREFIX}"/usr/share/man/man3 \
+		-Dsiteman1dir="${EPREFIX}"/usr/local/man/man1 \
+		-Dsiteman3dir="${EPREFIX}"/usr/local/man/man3 \
+		-Dvendorman1dir="${EPREFIX}"/usr/share/man/man1 \
+		-Dvendorman3dir="${EPREFIX}"/usr/share/man/man3 \
+		-Dman1ext='1' \
+		-Dman3ext='3pm' \
+		-Dlibperl="${LIBPERL}" \
+		-Dlocincpth="${EPREFIX}"'/usr/include ' \
+		-Dglibpth="${EPREFIX}/$(get_libdir) ${EPREFIX}/usr/$(get_libdir)"' ' \
+		-Duselargefiles \
+		-Dd_semctl_semun \
+		-Dcf_by='Gentoo' \
+		-Dmyhostname='localhost' \
+		-Dperladmin='root@localhost' \
+		-Ud_csh \
+		-Dsh="${EPREFIX}"/bin/sh \
+		-Dtargetsh="${EPREFIX}"/bin/sh \
+		-Uusenm \
+		"${myconf[@]}" \
+		"${EXTRA_ECONF[@]}"
+
+	if tc-is-cross-compiler; then
+		./configure \
+			--target="${CHOST}" \
+			--build="${CBUILD}" \
+			-Dinstallprefix='' \
+			-Dinstallusrbinperl='undef' \
+			-Dusevendorprefix='define' \
+			"${myconf[@]}" \
+			|| die "Unable to configure"
+	else
+		sh Configure \
+			-des \
+			-Dinstallprefix="${EPREFIX}"'/usr' \
+			-Dinstallusrbinperl='n' \
+			"${myconf[@]}" \
+			|| die "Unable to configure"
+	fi
+}
+
+src_test() {
+	export NO_GENTOO_NETWORK_TESTS=1;
+	export GENTOO_ASSUME_SANDBOXED="${GENTOO_ASSUME_SANDBOXED:-1}"
+	export GENTOO_NO_PORTING_TESTS="${GENTOO_NO_PORTING_TESTS:-1}"
+	if [[ ${EUID} == 0 ]] ; then
+		ewarn "Test fails with a sandbox error (#328793) if run as root. Skipping tests..."
+		return 0
+	fi
+	use elibc_uclibc && export MAKEOPTS+=" -j1"
+	TEST_JOBS="$(makeopts_jobs)" make test_harness || die "test failed"
+}
+
+src_install() {
+	local i
+	local coredir="${ARCH_LIB}/CORE"
+
+	emake DESTDIR="${D}" install
+
+	rm -f "${ED}/usr/bin/perl${MY_PV}"
+	ln -s perl "${ED}"/usr/bin/perl${MY_PV} || die
+
+	if ! tc-is-static-only ; then
+		dolib.so "${ED}"${coredir}/${LIBPERL}
+		rm -f "${ED}"${coredir}/${LIBPERL}
+		ln -sf ${LIBPERL} "${ED}"/usr/$(get_libdir)/libperl$(get_libname ${SHORT_PV}) || die
+		ln -sf ${LIBPERL} "${ED}"/usr/$(get_libdir)/libperl$(get_libname) || die
+
+		ln -sf ../../../../${LIBPERL} "${ED}"${coredir}/${LIBPERL} || die
+		ln -sf ../../../../${LIBPERL} "${ED}"${coredir}/libperl$(get_libname ${SHORT_PV}) || die
+		ln -sf ../../../../${LIBPERL} "${ED}"${coredir}/libperl$(get_libname) || die
+	fi
+
+	rm -rf "${ED}"/usr/share/man/man3 || die "Unable to remove module man pages"
+
+	# This removes ${D} from Config.pm
+	for i in $(find "${D}" -iname "Config.pm" ) ; do
+		einfo "Removing ${D} from ${i}..."
+		sed -i -e "s:${D}::" "${i}" || die "Sed failed"
+	done
+
+	dodoc Changes* README AUTHORS
+
+	if use doc ; then
+		# HTML Documentation
+		# We expect errors, warnings, and such with the following.
+
+		dodir /usr/share/doc/${PF}/html
+		LD_LIBRARY_PATH=. ./perl installhtml \
+			--podroot='.' \
+			--podpath='lib:ext:pod:vms' \
+			--recurse \
+			--htmldir="${ED}/usr/share/doc/${PF}/html"
+	fi
+
+	[[ -d ${ED}/usr/local ]] && rm -r "${ED}"/usr/local
+
+	dual_scripts
+}
+
+pkg_preinst() {
+	check_rebuild
+}
+
+pkg_postinst() {
+	dual_scripts
+
+	if [[ "${ROOT}" = "/" ]] ; then
+		local INC DIR file
+		INC=$(perl -e 'for $line (@INC) { next if $line eq "."; next if $line =~ m/'${SHORT_PV}'|etc|local|perl$/; print "$line\n" }')
+		einfo "Removing old .ph files"
+		for DIR in ${INC} ; do
+			if [[ -d "${DIR}" ]] ; then
+				for file in $(find "${DIR}" -name "*.ph" -type f ) ; do
+					rm -f "${file}"
+					einfo "<< ${file}"
+				done
+			fi
+		done
+		# Silently remove the now empty dirs
+		for DIR in ${INC} ; do
+			if [[ -d "${DIR}" ]] ; then
+				find "${DIR}" -depth -type d -print0 | xargs -0 -r rmdir &> /dev/null
+			fi
+		done
+
+	fi
+}
+
+pkg_postrm() {
+	dual_scripts
+}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/
@ 2020-12-26 13:37 Fabian Groffen
  0 siblings, 0 replies; 6+ messages in thread
From: Fabian Groffen @ 2020-12-26 13:37 UTC (permalink / raw
  To: gentoo-commits

commit:     9bf33e97778f172a46b6f0ab5793fb9ae573aea5
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 26 13:35:04 2020 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sat Dec 26 13:35:04 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9bf33e97

dev-lang/perl: add missing darwin 20 patch, #757249

Bug: https://bugs.gentoo.org/757249
Package-Manager: Portage-3.0.9, Repoman-3.0.2
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 .../perl/files/perl-5.30.3-darwin-macos11.patch    | 180 +++++++++++++++++++++
 dev-lang/perl/perl-5.30.3-r1.ebuild                |   4 +
 dev-lang/perl/perl-5.30.3-r2.ebuild                |   4 +
 dev-lang/perl/perl-5.32.0-r1.ebuild                |   4 +
 dev-lang/perl/perl-5.32.0.ebuild                   |   4 +
 5 files changed, 196 insertions(+)

diff --git a/dev-lang/perl/files/perl-5.30.3-darwin-macos11.patch b/dev-lang/perl/files/perl-5.30.3-darwin-macos11.patch
new file mode 100644
index 00000000000..73879b398c4
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.30.3-darwin-macos11.patch
@@ -0,0 +1,180 @@
+https://github.com/Perl/perl5/pull/17946
+https://bugs.gentoo.org/757249
+---
+From b382aafc793fe1007f9058a5145a1d39d56cef70 Mon Sep 17 00:00:00 2001
+From: Adam Hartley <git@ahartley.com>
+Date: Mon, 6 Jul 2020 22:59:42 +0100
+Subject: [PATCH 1/7] Add 11.x support for darwin.sh
+
+---
+ hints/darwin.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hints/darwin.sh b/hints/darwin.sh
+index 0a91bc083c0..c0f06de1cab 100644
+--- a/hints/darwin.sh
++++ b/hints/darwin.sh
+@@ -301,7 +301,7 @@ case "$osvers" in  # Note: osvers is the kernel version, not the 10.x
+    # We now use MACOSX_DEPLOYMENT_TARGET, if set, as an override by
+    # capturing its value and adding it to the flags.
+     case "$MACOSX_DEPLOYMENT_TARGET" in
+-    10.*)
++    10.* | 11.*)
+       add_macosx_version_min ccflags $MACOSX_DEPLOYMENT_TARGET
+       add_macosx_version_min ldflags $MACOSX_DEPLOYMENT_TARGET
+       ;;
+@@ -327,7 +327,7 @@ EOM
+     # "ProductVersion:    10.11"     "10.11"
+         prodvers=`sw_vers|awk '/^ProductVersion:/{print $2}'|awk -F. '{print $1"."$2}'`
+     case "$prodvers" in
+-    10.*)
++    10.* | 11.*)
+       add_macosx_version_min ccflags $prodvers
+       add_macosx_version_min ldflags $prodvers
+       ;;
+
+From 960d1a5c4225d1dd12636a469e10a568464e4e7c Mon Sep 17 00:00:00 2001
+From: Adam Hartley <git@ahartley.com>
+Date: Wed, 8 Jul 2020 19:10:33 +0100
+Subject: [PATCH 3/7] Update error message
+
+---
+ hints/darwin.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hints/darwin.sh b/hints/darwin.sh
+index c0f06de1cab..988b766c4f4 100644
+--- a/hints/darwin.sh
++++ b/hints/darwin.sh
+@@ -313,7 +313,7 @@ case "$osvers" in  # Note: osvers is the kernel version, not the 10.x
+ 
+ *** Unexpected MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
+ ***
+-*** Please either set it to 10.something, or to empty.
++*** Please either set it to 10.something, 11.something or to empty.
+ 
+ EOM
+       exit 1
+
+From d633cced1d5174e19c5f2234a9fb4c7603cfb9db Mon Sep 17 00:00:00 2001
+From: Adam Hartley <git@ahartley.com>
+Date: Sat, 11 Jul 2020 11:41:27 +0100
+Subject: [PATCH 4/7] Update deprecated syscall check for 11.x and greater
+
+---
+ hints/darwin.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hints/darwin.sh b/hints/darwin.sh
+index 988b766c4f4..4f73a9995e7 100644
+--- a/hints/darwin.sh
++++ b/hints/darwin.sh
+@@ -342,11 +342,11 @@ EOM
+       exit 1
+     esac
+ 
+-    # The X in 10.X
++    prodvers_major=$(echo $prodvers|awk -F. '{print $1}')
+     prodvers_minor=$(echo $prodvers|awk -F. '{print $2}')
+ 
+     # macOS (10.12) deprecated syscall().
+-    if [ "$prodvers_minor" -ge 12 ]; then
++    if [[ ( "$prodvers_minor" -ge 12 && "$prodvers_major" -eq 10 ) || "$prodvers_major" -ge 11 ]]; then
+         d_syscall='undef'
+         # If deploying to pre-10.12, suppress Time::HiRes's detection of the system clock_gettime()
+         case "$MACOSX_DEPLOYMENT_TARGET" in
+
+From 9c3890f8521a7db6d9b2aa21561c7d0dae9fb91d Mon Sep 17 00:00:00 2001
+From: Adam Hartley <BytesGuy@users.noreply.github.com>
+Date: Wed, 22 Jul 2020 13:15:30 +0100
+Subject: [PATCH 5/7] Simplify syscall check
+
+---
+ hints/darwin.sh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/hints/darwin.sh b/hints/darwin.sh
+index 4f73a9995e7..40c84cf267a 100644
+--- a/hints/darwin.sh
++++ b/hints/darwin.sh
+@@ -342,11 +342,10 @@ EOM
+       exit 1
+     esac
+ 
+-    prodvers_major=$(echo $prodvers|awk -F. '{print $1}')
+-    prodvers_minor=$(echo $prodvers|awk -F. '{print $2}')
++    darwin_major=$(echo $osvers|awk -F. '{print $1}')
+ 
+-    # macOS (10.12) deprecated syscall().
+-    if [[ ( "$prodvers_minor" -ge 12 && "$prodvers_major" -eq 10 ) || "$prodvers_major" -ge 11 ]]; then
++    # macOS 10.12 (darwin 6.0.0) deprecated syscall().
++    if [ "$darwin_major" -ge 6 ]; then
+         d_syscall='undef'
+         # If deploying to pre-10.12, suppress Time::HiRes's detection of the system clock_gettime()
+         case "$MACOSX_DEPLOYMENT_TARGET" in
+
+From 99ff8934992102a3db63805e8ba9710577de164e Mon Sep 17 00:00:00 2001
+From: Adam Hartley <BytesGuy@users.noreply.github.com>
+Date: Wed, 22 Jul 2020 13:15:53 +0100
+Subject: [PATCH 6/7] Update darwin.sh
+
+---
+ hints/darwin.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hints/darwin.sh b/hints/darwin.sh
+index 40c84cf267a..1709d224f7c 100644
+--- a/hints/darwin.sh
++++ b/hints/darwin.sh
+@@ -344,8 +344,8 @@ EOM
+ 
+     darwin_major=$(echo $osvers|awk -F. '{print $1}')
+ 
+-    # macOS 10.12 (darwin 6.0.0) deprecated syscall().
+-    if [ "$darwin_major" -ge 6 ]; then
++    # macOS 10.12 (darwin 16.0.0) deprecated syscall().
++    if [ "$darwin_major" -ge 16 ]; then
+         d_syscall='undef'
+         # If deploying to pre-10.12, suppress Time::HiRes's detection of the system clock_gettime()
+         case "$MACOSX_DEPLOYMENT_TARGET" in
+
+From 1b712e4b359d9508461a0a832d06baa6e589b955 Mon Sep 17 00:00:00 2001
+From: Adam Hartley <BytesGuy@users.noreply.github.com>
+Date: Thu, 23 Jul 2020 19:53:07 +0100
+Subject: [PATCH 7/7] Future proof version check
+
+---
+ hints/darwin.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/hints/darwin.sh b/hints/darwin.sh
+index 1709d224f7c..fdfbdd4a3b9 100644
+--- a/hints/darwin.sh
++++ b/hints/darwin.sh
+@@ -301,7 +301,7 @@ case "$osvers" in  # Note: osvers is the kernel version, not the 10.x
+    # We now use MACOSX_DEPLOYMENT_TARGET, if set, as an override by
+    # capturing its value and adding it to the flags.
+     case "$MACOSX_DEPLOYMENT_TARGET" in
+-    10.* | 11.*)
++    [1-9][0-9].*)
+       add_macosx_version_min ccflags $MACOSX_DEPLOYMENT_TARGET
+       add_macosx_version_min ldflags $MACOSX_DEPLOYMENT_TARGET
+       ;;
+@@ -313,7 +313,7 @@ case "$osvers" in  # Note: osvers is the kernel version, not the 10.x
+ 
+ *** Unexpected MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
+ ***
+-*** Please either set it to 10.something, 11.something or to empty.
++*** Please either set it to a valid macOS version number (e.g., 10.15) or to empty.
+ 
+ EOM
+       exit 1
+@@ -327,7 +327,7 @@ EOM
+     # "ProductVersion:    10.11"     "10.11"
+         prodvers=`sw_vers|awk '/^ProductVersion:/{print $2}'|awk -F. '{print $1"."$2}'`
+     case "$prodvers" in
+-    10.* | 11.*)
++    [1-9][0-9].*)
+       add_macosx_version_min ccflags $prodvers
+       add_macosx_version_min ldflags $prodvers
+       ;;

diff --git a/dev-lang/perl/perl-5.30.3-r1.ebuild b/dev-lang/perl/perl-5.30.3-r1.ebuild
index e75625597fc..585fc613bd6 100644
--- a/dev-lang/perl/perl-5.30.3-r1.ebuild
+++ b/dev-lang/perl/perl-5.30.3-r1.ebuild
@@ -342,6 +342,10 @@ src_prepare() {
 	if [[ ${CHOST} == *-darwin* ]] ; then
 		# fix install_name (soname) not to reference $D
 		sed -i -e '/install_name `pwd/s/`pwd`/\\$(shrpdir)/' Makefile.SH || die
+
+		# Upstreamed, but not in this version.
+		# Need to recognise macOS 11 / 10.16. #757249
+		eapply "${FILESDIR}/${PN}-5.30.3-darwin-macos11.patch"
 	fi
 
 	default

diff --git a/dev-lang/perl/perl-5.30.3-r2.ebuild b/dev-lang/perl/perl-5.30.3-r2.ebuild
index 0ad5fc03413..019eaaadd99 100644
--- a/dev-lang/perl/perl-5.30.3-r2.ebuild
+++ b/dev-lang/perl/perl-5.30.3-r2.ebuild
@@ -424,6 +424,10 @@ src_prepare() {
 	if [[ ${CHOST} == *-darwin* ]] ; then
 		# fix install_name (soname) not to reference $D
 		sed -i -e '/install_name `pwd/s/`pwd`/\\$(shrpdir)/' Makefile.SH || die
+
+		# Upstreamed, but not in this version.
+		# Need to recognise macOS 11 / 10.16. #757249
+		eapply "${FILESDIR}/${PN}-5.30.3-darwin-macos11.patch"
 	fi
 
 	default

diff --git a/dev-lang/perl/perl-5.32.0-r1.ebuild b/dev-lang/perl/perl-5.32.0-r1.ebuild
index 0791da1fc3b..581b577c6cc 100644
--- a/dev-lang/perl/perl-5.32.0-r1.ebuild
+++ b/dev-lang/perl/perl-5.32.0-r1.ebuild
@@ -427,6 +427,10 @@ src_prepare() {
 	if [[ ${CHOST} == *-darwin* ]] ; then
 		# fix install_name (soname) not to reference $D
 		sed -i -e '/install_name `pwd/s/`pwd`/\\$(shrpdir)/' Makefile.SH || die
+
+		# Upstreamed, but not in this version.
+		# Need to recognise macOS 11 / 10.16. #757249
+		eapply "${FILESDIR}/${PN}-5.30.3-darwin-macos11.patch"
 	fi
 
 	default

diff --git a/dev-lang/perl/perl-5.32.0.ebuild b/dev-lang/perl/perl-5.32.0.ebuild
index 86be1e04a1c..953b8a65caf 100644
--- a/dev-lang/perl/perl-5.32.0.ebuild
+++ b/dev-lang/perl/perl-5.32.0.ebuild
@@ -343,6 +343,10 @@ src_prepare() {
 	if [[ ${CHOST} == *-darwin* ]] ; then
 		# fix install_name (soname) not to reference $D
 		sed -i -e '/install_name `pwd/s/`pwd`/\\$(shrpdir)/' Makefile.SH || die
+
+		# Upstreamed, but not in this version.
+		# Need to recognise macOS 11 / 10.16. #757249
+		eapply "${FILESDIR}/${PN}-5.30.3-darwin-macos11.patch"
 	fi
 
 	default


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/
@ 2021-07-19 21:20 Andreas K. Hüttel
  0 siblings, 0 replies; 6+ messages in thread
From: Andreas K. Hüttel @ 2021-07-19 21:20 UTC (permalink / raw
  To: gentoo-commits

commit:     77c06edd7316762361477ed44b52d02a06d17a32
Author:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 19 21:20:03 2021 +0000
Commit:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Mon Jul 19 21:20:26 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=77c06edd

dev-lang/perl: revbump for cross-compilation bug 794463

Not 100% sure what happens here yet. Needs further analysis.

Bug: https://bugs.gentoo.org/794463
Package-Manager: Portage-3.0.20, Repoman-3.0.3
Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org>

 dev-lang/perl/files/perl-5.34.0-crossfit.patch |  13 +
 dev-lang/perl/perl-5.34.0-r1.ebuild            | 817 +++++++++++++++++++++++++
 2 files changed, 830 insertions(+)

diff --git a/dev-lang/perl/files/perl-5.34.0-crossfit.patch b/dev-lang/perl/files/perl-5.34.0-crossfit.patch
new file mode 100644
index 00000000000..e33e6d01845
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.34.0-crossfit.patch
@@ -0,0 +1,13 @@
+diff --git a/cnf/configure_path.sh b/cnf/configure_path.sh
+index fe7eac7..f55317f 100644
+--- a/cnf/configure_path.sh
++++ b/cnf/configure_path.sh
+@@ -67,6 +67,8 @@ define d_inc_version_list 'undef'
+ define otherlibdirs ''
+ define d_perl_otherlibdirs 'undef'
+ 
++define d_gentoolibdirs 'undef'
++
+ define siteman1dir "$man1dir"
+ define siteman3dir "$man3dir"
+ define sitehtml1dir "$html1dir"

diff --git a/dev-lang/perl/perl-5.34.0-r1.ebuild b/dev-lang/perl/perl-5.34.0-r1.ebuild
new file mode 100644
index 00000000000..6d709db3098
--- /dev/null
+++ b/dev-lang/perl/perl-5.34.0-r1.ebuild
@@ -0,0 +1,817 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit alternatives flag-o-matic toolchain-funcs multilib multiprocessing
+
+PATCH_VER=1
+CROSS_VER=1.3.6
+PATCH_BASE="perl-5.34.0-patches-${PATCH_VER}"
+PATCH_DEV=dilfridge
+
+DIST_AUTHOR=XSAWYERX
+
+# Greatest first, don't include yourself
+# Devel point-releases are not ABI-intercompatible, but stable point releases are
+# BIN_OLDVERSEN is contains only C-ABI-intercompatible versions
+PERL_BIN_OLDVERSEN=""
+
+# Yes we can.
+PERL_SINGLE_SLOT=y
+
+if [[ "${PV##*.}" == "9999" ]]; then
+	DIST_VERSION=5.30.0
+else
+	DIST_VERSION="${PV/_rc/-RC}"
+fi
+SHORT_PV="${DIST_VERSION%.*}"
+# Even numbered major versions are ABI intercompatible
+# Odd numbered major versions are not
+if [[ $(( ${SHORT_PV#*.} % 2 )) == 1 ]]; then
+	SUBSLOT="${DIST_VERSION%-RC*}"
+else
+	SUBSLOT="${DIST_VERSION%.*}"
+fi
+# Used only in tar paths
+MY_P="perl-${DIST_VERSION}"
+# Used in library paths
+MY_PV="${DIST_VERSION%-RC*}"
+
+DESCRIPTION="Larry Wall's Practical Extraction and Report Language"
+
+SRC_URI="
+	mirror://cpan/src/5.0/${MY_P}.tar.xz
+	mirror://cpan/authors/id/${DIST_AUTHOR:0:1}/${DIST_AUTHOR:0:2}/${DIST_AUTHOR}/${MY_P}.tar.xz
+	https://github.com/gentoo-perl/perl-patchset/releases/download/${PATCH_BASE}/${PATCH_BASE}.tar.xz
+	https://dev.gentoo.org/~${PATCH_DEV}/distfiles/${PATCH_BASE}.tar.xz
+	https://github.com/arsv/perl-cross/releases/download/${CROSS_VER}/perl-cross-${CROSS_VER}.tar.gz
+"
+HOMEPAGE="https://www.perl.org/"
+
+LICENSE="|| ( Artistic GPL-1+ )"
+SLOT="0/${SUBSLOT}"
+
+if [[ "${PV##*.}" != "9999" ]] && [[ "${PV/rc//}" == "${PV}" ]] ; then
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+fi
+
+IUSE="berkdb debug doc gdbm ithreads minimal"
+
+RDEPEND="
+	berkdb? ( sys-libs/db:= )
+	gdbm? ( >=sys-libs/gdbm-1.8.3:= )
+	app-arch/bzip2
+	sys-libs/zlib
+	virtual/libcrypt:=
+"
+DEPEND="${RDEPEND}"
+BDEPEND="${RDEPEND}"
+
+PDEPEND="
+	!minimal? (
+		>=app-admin/perl-cleaner-2.5
+		>=virtual/perl-File-Temp-0.230.400-r2
+		>=virtual/perl-Data-Dumper-2.154.0
+		virtual/perl-Test-Harness
+	)
+"
+# bug 390719, bug 523624
+# virtual/perl-Test-Harness is here for the bundled ExtUtils::MakeMaker
+
+S="${WORKDIR}/${MY_P}"
+
+dual_scripts() {
+	src_remove_dual      perl-core/Archive-Tar        2.380.0       ptar ptardiff ptargrep
+	src_remove_dual      perl-core/CPAN               2.280.0       cpan
+	src_remove_dual      perl-core/Digest-SHA         6.20.0        shasum
+	src_remove_dual      perl-core/Encode             3.80.0        enc2xs piconv
+	src_remove_dual      perl-core/ExtUtils-MakeMaker 7.620.0       instmodsh
+	src_remove_dual      perl-core/ExtUtils-ParseXS   3.430.0       xsubpp
+	src_remove_dual      perl-core/IO-Compress        2.102.0        zipdetails
+	src_remove_dual      perl-core/JSON-PP            4.60.0        json_pp
+	src_remove_dual      perl-core/Module-CoreList    5.202.105.200 corelist
+	src_remove_dual      perl-core/Pod-Checker        1.740.0       podchecker
+	src_remove_dual      perl-core/Pod-Perldoc        3.280.100     perldoc
+	src_remove_dual      perl-core/Pod-Usage          2.10.0       pod2usage
+	src_remove_dual      perl-core/Test-Harness       3.430.0       prove
+	src_remove_dual      perl-core/podlators          4.140.0       pod2man pod2text
+	src_remove_dual_man  perl-core/podlators          4.140.0       /usr/share/man/man1/perlpodstyle.1
+}
+
+check_rebuild() {
+	# Fresh install
+	if [[ -z "${REPLACING_VERSIONS}" ]]; then
+		return 0;
+	# Major Upgrade
+	# doesn't matter if there's multiple copies, it still needs a rebuild
+	# if the string is anything other than "5.CURRENTMAJOR"
+	elif [[ "${REPLACING_VERSIONS%.*}" != "${PV%.*}" ]]; then
+		echo ""
+		ewarn "UPDATE THE PERL MODULES:"
+		ewarn "After updating dev-lang/perl the installed Perl modules"
+		ewarn "have to be re-installed. In most cases, this is done automatically"
+		ewarn "by the package manager, but subsequent steps are still recommended"
+		ewarn "to ensure system consistency."
+		ewarn
+		ewarn "You should start with a depclean to remove any unused perl dependencies"
+		ewarn "that may confuse portage in future. Regular depcleans are also encouraged"
+		ewarn "as part of your regular update cycle, as that will keep perl upgrades working."
+		ewarn "Recommended: emerge --depclean -va"
+		ewarn
+		ewarn "You should then call perl-cleaner to clean up any old files and trigger any"
+		ewarn "remaining rebuilds portage may have missed."
+		ewarn "Use: perl-cleaner --all"
+		return 0;
+
+	# Reinstall w/ USE Change
+	elif (   use ithreads && ! has_version dev-lang/perl[ithreads] ) || \
+		 ( ! use ithreads &&   has_version dev-lang/perl[ithreads] ) || \
+		 (   use debug    && ! has_version dev-lang/perl[debug]    ) || \
+		 ( ! use debug    &&   has_version dev-lang/perl[debug]    ) ; then
+		echo ""
+		ewarn "TOGGLED USE-FLAGS WARNING:"
+		ewarn "You changed one of the use-flags ithreads or debug."
+		ewarn "You must rebuild all perl-modules installed."
+		ewarn "Use: perl-cleaner --modules ; perl-cleaner --force --libperl"
+	fi
+}
+
+pkg_setup() {
+	case ${CHOST} in
+		*-freebsd*)   osname="freebsd" ;;
+		*-dragonfly*) osname="dragonfly" ;;
+		*-netbsd*)    osname="netbsd" ;;
+		*-openbsd*)   osname="openbsd" ;;
+		*-darwin*)    osname="darwin" ;;
+		*-solaris*)   osname="solaris" ;;
+		*-cygwin*)    osname="cygwin" ;;
+		*)            osname="linux" ;;
+	esac
+
+	myarch="${CHOST%%-*}-${osname}"
+	if use debug ; then
+		myarch+="-debug"
+	fi
+	if use ithreads ; then
+		mythreading="-multi"
+		myarch+="-thread"
+	fi
+
+	PRIV_BASE="/usr/$(get_libdir)/perl5"
+	SITE_BASE="/usr/local/$(get_libdir)/perl5"
+	VENDOR_BASE="/usr/$(get_libdir)/perl5/vendor_perl"
+
+	LIBPERL="libperl$(get_libname ${MY_PV} )"
+
+	# This ENV var tells perl to build with a directory like "5.30"
+	# regardless of its patch version. This is for experts only
+	# at this point.
+	if [[ -z "${PERL_SINGLE_SLOT}" ]]; then
+		PRIV_LIB="${PRIV_BASE}/${MY_PV}"
+		ARCH_LIB="${PRIV_BASE}/${MY_PV}/${myarch}${mythreading}"
+		SITE_LIB="${SITE_BASE}/${MY_PV}"
+		SITE_ARCH="${SITE_BASE}/${MY_PV}/${myarch}${mythreading}"
+		VENDOR_LIB="${VENDOR_BASE}/${MY_PV}"
+		VENDOR_ARCH="${VENDOR_BASE}/${MY_PV}/${myarch}${mythreading}"
+	else
+		PRIV_LIB="${PRIV_BASE}/${SUBSLOT}"
+		ARCH_LIB="${PRIV_BASE}/${SUBSLOT}/${myarch}${mythreading}"
+		SITE_LIB="${SITE_BASE}/${SUBSLOT}"
+		SITE_ARCH="${SITE_BASE}/${SUBSLOT}/${myarch}${mythreading}"
+		VENDOR_LIB="${VENDOR_BASE}/${SUBSLOT}"
+		VENDOR_ARCH="${VENDOR_BASE}/${SUBSLOT}/${myarch}${mythreading}"
+	fi
+
+	dual_scripts
+}
+
+src_remove_dual_file() {
+	local i pkg ver
+	pkg="$1"
+	ver="$2"
+	shift 2
+	case "${EBUILD_PHASE:-none}" in
+		postinst|postrm)
+			for i in "$@" ; do
+				alternatives_auto_makesym "${i}" "${i}-[0-9]*"
+			done
+			;;
+		setup)
+			for i in "$@" ; do
+				if [[ -f ${EROOT}${i} && ! -h ${EROOT}${i} ]] ; then
+					has_version ${pkg} && ewarn "You must reinstall ${pkg} !"
+					break
+				fi
+			done
+			;;
+		install)
+			for i in "$@" ; do
+				if ! [[ -f "${ED}"${i} ]] ; then
+					ewarn "${i} does not exist!"
+					continue
+				fi
+				mv "${ED}"${i}{,-${ver}-${P}} || die
+			done
+			;;
+	esac
+}
+
+src_remove_dual_man() {
+	local i pkg ver ff
+	pkg="$1"
+	ver="$2"
+	shift 2
+	case "${EBUILD_PHASE:-none}" in
+		postinst|postrm)
+			for i in "$@" ; do
+				ff=`echo "${EROOT}${i%.[0-9]}-${ver}-${P}${i#${i%.[0-9]}}"*`
+				ff=${ff##*${i#${i%.[0-9]}}}
+				alternatives_auto_makesym "${i}${ff}" "${i%.[0-9]}-[0-9]*"
+			done
+			;;
+		install)
+			for i in "$@" ; do
+				if ! [[ -f "${ED}"${i} ]] ; then
+					ewarn "${i} does not exist!"
+					continue
+				fi
+				mv "${ED}"${i} "${ED}"${i%.[0-9]}-${ver}-${P}${i#${i%.[0-9]}} || die
+			done
+			;;
+	esac
+}
+
+src_remove_dual() {
+	local i pkg ver
+	pkg="$1"
+	ver="$2"
+	shift 2
+	for i in "$@" ; do
+		src_remove_dual_file  "${pkg}" "${ver}" "/usr/bin/${i}"
+		src_remove_dual_man   "${pkg}" "${ver}" "/usr/share/man/man1/${i}.1"
+	done
+}
+
+src_prepare_perlcross() {
+	cp -a ../perl-cross-${CROSS_VER}/* . || die
+
+	# bug 794463, needs further analysis what is exactly wrong here
+	eapply "${FILESDIR}/perl-5.34.0-crossfit.patch"
+
+	# bug 604072
+	MAKEOPTS+=" -j1"
+	export MAKEOPTS
+}
+src_prepare_dynamic() {
+	ln -s ${LIBPERL} libperl$(get_libname ${SHORT_PV}) || die
+	ln -s ${LIBPERL} libperl$(get_libname ) || die
+}
+
+# Copy a patch into the patch series
+# add_patch SRC_PATH DEST_NAME ['description'] ['bug'] ['bug']
+# - description is optional, but recommended
+# - all arguments after descriptions are bug URLs
+add_patch() {
+	local patchdir="${WORKDIR}/patches"
+	local infodir="${WORKDIR}/patch-info"
+	local src_name dest_name desc
+	src_name="$1"
+	dest_name="$2"
+	desc="$3"
+	shift; shift; shift;
+	einfo "Adding ${dest_name} to patch bundle"
+	cp "${src_name}" "${patchdir}/${dest_name}" || die "Couldn't copy ${src_name} to ${dest_name}"
+	if [[ -n "${desc}" ]]; then
+		printf "%s" "${desc}" > "${infodir}/${dest_name}.desc" || die "Couldn't write ${dest_name}.desc"
+	fi
+	if [[ $# -gt 0 ]]; then
+		# Note: when $@ is more than one element, this emits a
+		# line for each element
+		printf "%s\n" "$@" > "${infodir}/${dest_name}.bugs" || die "Couldn't write ${dest_name}.bugs"
+	fi
+}
+# Remove a patch using a glob expr
+# eg:
+#	 rm_patch *-darin-Use-CC*
+#
+rm_patch() {
+	local patchdir="${WORKDIR}/patches"
+	local expr="$1"
+	local patch="$( cd "${patchdir}"; echo $expr )"
+	einfo "Removing $patch ($expr) from patch bundle"
+	if [[ -e "${patchdir}/${patch}" ]]; then
+		rm -f "${patchdir}/${patch}" || die "Can't remove ${patch} ( $expr )"
+	else
+		ewarn "No ${expr} found in ${patchdir} to remove"
+	fi
+}
+# Yes, this is a reasonable amount of code for something seemingly simple
+# but this is far easier to debug when things go wrong, and things went wrong
+# multiple times while I was getting the exact number of slashes right, which
+# requires circumnavigating both bash and sed escape mechanisms.
+c_escape_string() {
+	local slash dquote
+	slash='\'
+	dquote='"'
+	re_slash="${slash}${slash}"
+	re_dquote="${slash}${dquote}"
+
+	# Convert \ to \\,
+	#         " to \"
+	echo "$1" |\
+		sed "s|${re_slash}|${re_slash}${re_slash}|g" |\
+		sed "s|${re_dquote}|${re_slash}${re_dquote}|g"
+}
+c_escape_file() {
+	c_escape_string "$(cat "$1")"
+}
+
+apply_patchdir() {
+	local patchdir="${WORKDIR}/patches"
+	local infodir="${WORKDIR}/patch-info"
+	local patchoutput="patchlevel-gentoo.h"
+
+	# Inject Patch-Level info into description for patchlevel.h patch
+	# to show in -V
+	local patch_expr="*List-packaged-patches*"
+	local patch="$( cd "${patchdir}"; echo $patch_expr )";
+	einfo "Injecting patch-level info into ${patch}.desc ( $patch_expr )"
+
+	if [[ -e "${patchdir}/${patch}" ]]; then
+		printf "List packaged patches for %s(%s) in patchlevel.h" "${PF}" "${PATCH_BASE}"\
+			>"${infodir}/${patch}.desc" || die "Can't rewrite ${patch}.desc"
+	else
+		eerror "No $patch_expr found in ${patchdir}"
+	fi
+
+	# Compute patch list to apply
+	# different name other than PATCHES to stop default
+	# reapplying it
+	# Single depth is currently only supported, as artifacts can reside
+	# from the old layout being multiple-directories, as well as it grossly
+	# simplifying the patchlevel_gentoo.h generation.
+	local PERL_PATCHES=($(
+		find "${patchdir}" -maxdepth 1 -mindepth 1 -type f -printf "%f\n" |\
+			grep -E '[.](diff|patch)$' |\
+			sort -n
+	))
+
+	for patch in "${PERL_PATCHES[@]}"; do
+		eapply "${WORKDIR}"/patches/${patch}
+	done
+
+	einfo "Generating $patchoutput"
+
+	# This code creates a header file, each iteration
+	# creates one-or-more-lines for each entry found in PERL_PATCHES
+	# and STDOUT is redirected to the .h file
+	for patch in "${PERL_PATCHES[@]}"; do
+		local desc_f="${infodir}/${patch}.desc"
+		local bugs_f="${infodir}/${patch}.bugs"
+
+		printf ',"%s"\n' "${patch}"
+		if [[ ! -e "${desc_f}" ]]; then
+			ewarn "No description provided for ${patch} (expected: ${desc_f} )"
+		else
+			local desc="$(c_escape_file "${desc_f}")"
+			printf ',"- %s"\n' "${desc}"
+		fi
+		if [[ -e "${bugs_f}" ]]; then
+			while read -d $'\n' -r line; do
+				local esc_line="$(c_escape_string "${line}")"
+				printf ',"- Bug: %s"\n' "${esc_line}"
+			done <"${bugs_f}"
+		fi
+	done > "${S}/${patchoutput}"
+	printf "%s\n" "${patchoutput}" >> "${S}/MANIFEST"
+
+}
+src_prepare() {
+	local patchdir="${WORKDIR}/patches"
+
+	# Prepare Patch dir with additional patches / remove unwanted patches
+	# Inject bug/desc entries for perl -V
+	# Old example:
+	# add_patch "${FILESDIR}/${PN}-5.26.2-hppa.patch" "100-5.26.2-hppa.patch"\
+	#		"Fix broken miniperl on hppa"\
+	#		"https://bugs.debian.org/869122" "https://bugs.gentoo.org/634162"
+
+	if [[ ${CHOST} == *-solaris* ]] ; then
+		# do NOT mess with nsl, on Solaris this is always necessary,
+		# when -lsocket is used e.g. to get h_errno
+		rm_patch "*-nsl-and-cl*"
+	fi
+
+	apply_patchdir
+
+	tc-is-cross-compiler && src_prepare_perlcross
+
+	tc-is-static-only || src_prepare_dynamic
+
+	if use gdbm; then
+		sed -i "s:INC => .*:INC => \"-I${EROOT}/usr/include/gdbm\":g" \
+			ext/NDBM_File/Makefile.PL || die
+	fi
+
+	# Use errno.h from prefix rather than from host system, bug #645804
+	if use prefix && [[ -e "${EPREFIX}"/usr/include/errno.h ]] ; then
+		sed -i "/my..sysroot/s:'':'${EPREFIX}':" ext/Errno/Errno_pm.PL || die
+	fi
+
+	if [[ ${CHOST} == *-solaris* ]] ; then
+		# set a soname, fix linking against just built libperl
+		sed -i -e 's/netbsd\*/netbsd*|solaris*/' Makefile.SH || die
+	fi
+
+	if [[ ${CHOST} == *-darwin* ]] ; then
+		# fix install_name (soname) not to reference $D
+		sed -i -e '/install_name `pwd/s/`pwd`/\\$(shrpdir)/' Makefile.SH || die
+	fi
+
+	default
+}
+
+myconf() {
+	# the myconf array is declared in src_configure
+	myconf=( "${myconf[@]}" "$@" )
+}
+
+# Outputs a list of versions which have been seen in any of the
+# primary perl @INC prefix paths, such as:
+#  /usr/lib64/perl5/<NUMBER>
+#  /usr/local/lib64/perl5/<NUMBER>
+#  /usr/lib64/perl5/vendor_perl/<NUMBER>
+#
+# All values of NUMBER must be like "5.x.y", unless PERL_SUPPORT_SINGLE_SLOT
+# is enabled, where it will also allow numbers like "5.x"
+#
+# PERL_SUPPORT_SINGLE_SLOT should only be used to transition *away* from PERL_SINGLE_SLOT
+# if you used that.
+find_candidate_inc_versions() {
+	local regex='.*/5[.][0-9]+[.][0-9]+$';
+	if [[ ! -z "${PERL_SUPPORT_SINGLE_SLOT}" || ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		regex='.*/5[.][0-9]+\([.][0-9]+\|\)$'
+	fi
+	local dirs=(
+		"${EROOT}${PRIV_BASE}"
+		"${EROOT}${SITE_BASE}"
+		"${EROOT}${VENDOR_BASE}"
+	)
+	for dir in "${dirs[@]}"; do
+		if [[ ! -e "${dir}" ]]; then
+			continue
+		fi
+		# Without access to readdir() on these dirs, find will not be able
+		# to reveal any @INC directories inside them, and will subsequently prune
+		# them from the built perl's @INC support, breaking our compatiblity options
+		# entirely.
+		if [[ ! -r "${dir}" || ! -x "${dir}" ]]; then
+			eerror "Bad permissions on ${dir}, this will probably break things"
+			eerror "Ensure ${dir} is +rx for at least uid=$EUID"
+			eerror "Recommended permission is +rx for all"
+			eerror "> chmod o+rx ${dir}"
+		fi
+	done
+	einfo "Scanning for old @INC dirs matching '$regex' in: ${dirs[*]}"
+	find "${dirs[@]}" -maxdepth 1 -mindepth 1 -type d -regex "${regex}" -printf "%f "  2>/dev/null
+}
+# Sort versions passed versiony-ly, remove self-version if present
+# dedup. Takes each version as an argument
+sanitize_inc_versions() {
+	local vexclude="${DIST_VERSION%-RC}"
+	if [[ ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		vexclude="${SUBSLOT}"
+	fi
+	einfo "Normalizing/Sorting candidate list: $*"
+	einfo " to remove '${vexclude}'"
+	# Note, general numeric sort has to be used
+	# for the last component, or unique will convert
+	#  5.30.0 + 5.30 into just 5.30
+	printf "%s\n" "$@" |\
+		grep -vxF "${vexclude}" |\
+		sort -u -nr -t'.' -k1,1rn -k2,2rn -k3,3rg
+}
+
+versions_to_inclist() {
+	local oldv="${PERL_BIN_OLDVERSEN}"
+	if [[ ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		oldv="${DIST_VERSION%-RC} ${PERL_BIN_OLDVERSEN}"
+	fi
+	for v;	do
+			has "${v}" ${oldv} && echo -n "${v}/${myarch}${mythreading}/ ";
+			echo -n "${v}/ ";
+	done
+}
+versions_to_gentoolibdirs() {
+	local oldv="${PERL_BIN_OLDVERSEN}"
+	local root
+	local v
+	if [[ ! -z "${PERL_SINGLE_SLOT}" ]]; then
+		oldv="${DIST_VERSION%-RC} ${PERL_BIN_OLDVERSEN}"
+	fi
+	for v;	do
+		for root in "${PRIV_BASE}" "${VENDOR_BASE}" "${SITE_BASE}"; do
+			local fullpath="${EROOT}${root}/${v}"
+			if [[ -e "${fullpath}" ]]; then
+				has "${v}" ${oldv} && printf "%s:" "${fullpath}/${myarch}${mythreading}";
+				printf "%s:" "${fullpath}"
+			fi
+		done
+	done
+}
+
+src_configure() {
+	declare -a myconf
+
+	export LC_ALL="C"
+	[[ ${COLUMNS:-1} -ge 1 ]] || unset COLUMNS # bug #394091
+
+	# Perl has problems compiling with -Os in your flags with glibc
+	use elibc_uclibc || replace-flags "-Os" "-O2"
+
+	# xlocale.h is going away in glibc-2.26, so it's counterproductive
+	# if we use it and include it in CORE/perl.h ... Perl builds just
+	# fine with glibc and locale.h only.
+	# However, the darwin prefix people have no locale.h ...
+	use elibc_glibc && myconf -Ui_xlocale
+
+	# This flag makes compiling crash in interesting ways
+	filter-flags "-malign-double"
+
+	# Generic LTO broken since 5.28, triggers EUMM failures
+	filter-flags "-flto"
+
+	use sparc && myconf -Ud_longdbl
+
+	export BUILD_BZIP2=0
+	export BZIP2_INCLUDE=${EROOT}/usr/include
+	export BZIP2_LIB=${EROOT}/usr/$(get_libdir)
+
+	export BUILD_ZLIB=False
+	export ZLIB_INCLUDE=${EROOT}/usr/include
+	export ZLIB_LIB=${EROOT}/usr/$(get_libdir)
+
+	# allow either gdbm to provide ndbm (in <gdbm/ndbm.h>) or db1
+	myndbm='U'
+	mygdbm='U'
+	mydb='U'
+	if use gdbm ; then
+		mygdbm='D'
+		if use berkdb ; then
+			myndbm='D'
+		fi
+	fi
+	if use berkdb ; then
+		mydb='D'
+		has_version '=sys-libs/db-1*' && myndbm='D'
+	fi
+
+	myconf "-${myndbm}i_ndbm" "-${mygdbm}i_gdbm" "-${mydb}i_db"
+
+	if use alpha && [[ "$(tc-getCC)" = "ccc" ]] ; then
+		ewarn "Perl will not be built with berkdb support, use gcc if you needed it..."
+		myconf -Ui_db -Ui_ndbm
+	fi
+
+	use ithreads && myconf -Dusethreads
+
+	if use debug ; then
+		append-cflags "-g"
+		myconf -DDEBUGGING
+	elif [[ ${CFLAGS} == *-g* ]] ; then
+		myconf -DDEBUGGING=-g
+	else
+		myconf -DDEBUGGING=none
+	fi
+
+	# Autodiscover all old version directories, some of them will even be newer
+	# if you downgrade
+	if [[ -z ${PERL_OLDVERSEN} ]]; then
+		PERL_OLDVERSEN="$( find_candidate_inc_versions )"
+	fi
+
+	# Fixup versions, removing self match, fixing order and dupes
+	PERL_OLDVERSEN="$( sanitize_inc_versions ${PERL_OLDVERSEN} )"
+
+	# Experts who want a "Pure" install can set PERL_OLDVERSEN to an empty string
+	if [[ -n "${PERL_OLDVERSEN// }" ]]; then
+		local inclist="$( versions_to_inclist ${PERL_OLDVERSEN} )"
+		einfo "This version of perl may partially support modules previously"
+		einfo "installed in any of the following paths:"
+		for incpath in ${inclist}; do
+			[[ -e "${EROOT}${VENDOR_BASE}/${incpath}" ]] && einfo " ${EROOT}${VENDOR_BASE}/${incpath}"
+			[[ -e "${EROOT}${PRIV_BASE}/${incpath}"   ]] && einfo " ${EROOT}${PRIV_BASE}/${incpath}"
+			[[ -e "${EROOT}${SITE_BASE}/${incpath}"   ]] && einfo " ${EROOT}${SITE_BASE}/${incpath}"
+		done
+		einfo "This is a temporary measure and you should aim to cleanup these paths"
+		einfo "via world updates and perl-cleaner"
+		# myconf -Dinc_version_list="${inclist}"
+		myconf -Dgentoolibdirs="$( versions_to_gentoolibdirs ${PERL_OLDVERSEN} )"
+	fi
+
+	[[ ${ELIBC} == "FreeBSD" ]] && myconf "-Dlibc=/usr/$(get_libdir)/libc.a"
+
+	# Make sure we can do the final link #523730, need to set deployment
+	# target to override hardcoded 10.3 which breaks on modern OSX
+	[[ ${CHOST} == *-darwin* ]] && \
+		myconf "-Dld=env MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} $(tc-getCC)"
+
+	# Older macOS with non-Apple GCC chokes on inline in system headers
+	# using c89 mode as injected by cflags.SH
+	[[ ${CHOST} == *-darwin* && ${CHOST##*darwin} -le 9 ]] && tc-is-gcc && \
+		append-cflags -Dinline=__inline__
+
+	# flock on 32-bit sparc Solaris is broken, fall back to fcntl
+	[[ ${CHOST} == sparc-*-solaris* ]] && \
+		myconf -Ud_flock
+
+	# Prefix: the host system needs not to follow Gentoo multilib stuff, and in
+	# Prefix itself we don't do multilib either, so make sure perl can find
+	# something compatible.
+	if use prefix ; then
+		# Set a hook to check for each detected library whether it actually works.
+		export libscheck="
+			( echo 'main(){}' > '${T}'/conftest.c &&
+				$(tc-getCC) -o '${T}'/conftest '${T}'/conftest.c -l\$thislib >/dev/null 2>/dev/null
+			) || xxx=/dev/null"
+
+		# Use all host paths that might contain useful stuff, the hook above will filter out bad choices.
+		local paths="/lib/*-linux-gnu /usr/lib/*-linux-gnu /lib64 /lib/64 /usr/lib64 /usr/lib/64 /lib32 /usr/lib32 /lib /usr/lib"
+		myconf "-Dlibpth=${EPREFIX}/$(get_libdir) ${EPREFIX}/usr/$(get_libdir) ${paths}"
+	elif [[ $(get_libdir) != "lib" ]] ; then
+		# We need to use " and not ', as the written config.sh use ' ...
+		myconf "-Dlibpth=/usr/local/$(get_libdir) /$(get_libdir) /usr/$(get_libdir)"
+	fi
+
+	# don't try building ODBM, bug #354453
+	disabled_extensions="ODBM_File"
+
+	if ! use gdbm ; then
+		# workaround for bug #157774: don't try building GDBM related stuff with USE="-gdbm"
+		disabled_extensions="${disabled_extensions} GDBM_File NDBM_File"
+	fi
+
+	myconf -Dnoextensions="${disabled_extensions}"
+
+	[[ "${PV##*.}" == "9999" ]] && myconf -Dusedevel -Uversiononly
+
+	[[ -n "${EXTRA_ECONF}" ]] && ewarn During Perl build, EXTRA_ECONF=${EXTRA_ECONF}
+	# allow fiddling via EXTRA_ECONF, bug 558070
+	eval "local -a EXTRA_ECONF=(${EXTRA_ECONF})"
+
+	# setting -Dld= to tc-getLD breaks perl and all perl things
+	# https://github.com/Perl/perl5/issues/17791#issuecomment-630145202
+	myconf \
+		-Duseshrplib \
+		-Darchname="${myarch}" \
+		-Dcc="$(tc-getCC)" \
+		-Dar="$(tc-getAR)" \
+		-Dnm="$(tc-getNM)" \
+		-Dcpp="$(tc-getCPP)" \
+		-Dranlib="$(tc-getRANLIB)" \
+		-Doptimize="${CFLAGS}" \
+		-Dldflags="${LDFLAGS}" \
+		-Dprefix="${EPREFIX}"'/usr' \
+		-Dsiteprefix="${EPREFIX}"'/usr/local' \
+		-Dvendorprefix="${EPREFIX}"'/usr' \
+		-Dscriptdir="${EPREFIX}"'/usr/bin' \
+		-Dprivlib="${EPREFIX}${PRIV_LIB}" \
+		-Darchlib="${EPREFIX}${ARCH_LIB}" \
+		-Dsitelib="${EPREFIX}${SITE_LIB}" \
+		-Dsitearch="${EPREFIX}${SITE_ARCH}" \
+		-Dvendorlib="${EPREFIX}${VENDOR_LIB}" \
+		-Dvendorarch="${EPREFIX}${VENDOR_ARCH}" \
+		-Dman1dir="${EPREFIX}"/usr/share/man/man1 \
+		-Dman3dir="${EPREFIX}"/usr/share/man/man3 \
+		-Dsiteman1dir="${EPREFIX}"/usr/local/man/man1 \
+		-Dsiteman3dir="${EPREFIX}"/usr/local/man/man3 \
+		-Dvendorman1dir="${EPREFIX}"/usr/share/man/man1 \
+		-Dvendorman3dir="${EPREFIX}"/usr/share/man/man3 \
+		-Dman1ext='1' \
+		-Dman3ext='3pm' \
+		-Dlibperl="${LIBPERL}" \
+		-Dlocincpth="${EPREFIX}"'/usr/include ' \
+		-Dglibpth="${EPREFIX}/$(get_libdir) ${EPREFIX}/usr/$(get_libdir)"' ' \
+		-Duselargefiles \
+		-Dd_semctl_semun \
+		-Dcf_by='Gentoo' \
+		-Dmyhostname='localhost' \
+		-Dperladmin='root@localhost' \
+		-Ud_csh \
+		-Dsh="${EPREFIX}"/bin/sh \
+		-Dtargetsh="${EPREFIX}"/bin/sh \
+		-Uusenm \
+		"${myconf[@]}" \
+		"${EXTRA_ECONF[@]}"
+
+	if tc-is-cross-compiler; then
+		./configure \
+			--target="${CHOST}" \
+			--build="${CBUILD}" \
+			-Dinstallprefix='' \
+			-Dinstallusrbinperl='undef' \
+			-Dusevendorprefix='define' \
+			"${myconf[@]}" \
+			|| die "Unable to configure"
+	else
+		sh Configure \
+			-des \
+			-Dinstallprefix="${EPREFIX}"'/usr' \
+			-Dinstallusrbinperl='n' \
+			"${myconf[@]}" \
+			|| die "Unable to configure"
+	fi
+}
+
+src_test() {
+	export NO_GENTOO_NETWORK_TESTS=1;
+	export GENTOO_ASSUME_SANDBOXED="${GENTOO_ASSUME_SANDBOXED:-1}"
+	export GENTOO_NO_PORTING_TESTS="${GENTOO_NO_PORTING_TESTS:-1}"
+	if [[ ${EUID} == 0 ]] ; then
+		ewarn "Test fails with a sandbox error (#328793) if run as root. Skipping tests..."
+		return 0
+	fi
+	use elibc_uclibc && export MAKEOPTS+=" -j1"
+	TEST_JOBS="$(makeopts_jobs)" make test_harness || die "test failed"
+}
+
+src_install() {
+	local i
+	local coredir="${ARCH_LIB}/CORE"
+
+	emake DESTDIR="${D}" install
+
+	rm -f "${ED}/usr/bin/perl${MY_PV}"
+	ln -s perl "${ED}"/usr/bin/perl${MY_PV} || die
+
+	if ! tc-is-static-only ; then
+		dolib.so "${ED}"${coredir}/${LIBPERL}
+		rm -f "${ED}"${coredir}/${LIBPERL}
+		ln -sf ${LIBPERL} "${ED}"/usr/$(get_libdir)/libperl$(get_libname ${SHORT_PV}) || die
+		ln -sf ${LIBPERL} "${ED}"/usr/$(get_libdir)/libperl$(get_libname) || die
+
+		ln -sf ../../../../${LIBPERL} "${ED}"${coredir}/${LIBPERL} || die
+		ln -sf ../../../../${LIBPERL} "${ED}"${coredir}/libperl$(get_libname ${SHORT_PV}) || die
+		ln -sf ../../../../${LIBPERL} "${ED}"${coredir}/libperl$(get_libname) || die
+	fi
+
+	rm -rf "${ED}"/usr/share/man/man3 || die "Unable to remove module man pages"
+
+	# This removes ${D} from Config.pm
+	for i in $(find "${D}" -iname "Config.pm" ) ; do
+		einfo "Removing ${D} from ${i}..."
+		sed -i -e "s:${D}::" "${i}" || die "Sed failed"
+	done
+
+	dodoc Changes* README AUTHORS
+
+	if use doc ; then
+		# HTML Documentation
+		# We expect errors, warnings, and such with the following.
+
+		dodir /usr/share/doc/${PF}/html
+		LD_LIBRARY_PATH=. ./perl installhtml \
+			--podroot='.' \
+			--podpath='lib:ext:pod:vms' \
+			--recurse \
+			--htmldir="${ED}/usr/share/doc/${PF}/html"
+	fi
+
+	[[ -d ${ED}/usr/local ]] && rm -r "${ED}"/usr/local
+
+	dual_scripts
+}
+
+pkg_preinst() {
+	check_rebuild
+}
+
+pkg_postinst() {
+	dual_scripts
+
+	if [[ "${ROOT}" = "/" ]] ; then
+		local INC DIR file
+		INC=$(perl -e 'for $line (@INC) { next if $line eq "."; next if $line =~ m/'${SHORT_PV}'|etc|local|perl$/; print "$line\n" }')
+		einfo "Removing old .ph files"
+		for DIR in ${INC} ; do
+			if [[ -d "${DIR}" ]] ; then
+				for file in $(find "${DIR}" -name "*.ph" -type f ) ; do
+					rm -f "${file}"
+					einfo "<< ${file}"
+				done
+			fi
+		done
+		# Silently remove the now empty dirs
+		for DIR in ${INC} ; do
+			if [[ -d "${DIR}" ]] ; then
+				find "${DIR}" -depth -type d -print0 | xargs -0 -r rmdir &> /dev/null
+			fi
+		done
+
+	fi
+}
+
+pkg_postrm() {
+	dual_scripts
+}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/
@ 2021-10-28  3:53 Sam James
  0 siblings, 0 replies; 6+ messages in thread
From: Sam James @ 2021-10-28  3:53 UTC (permalink / raw
  To: gentoo-commits

commit:     d14561cb100beb18ac4df11726c116af4b0070b6
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 28 03:52:38 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Oct 28 03:52:38 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d14561cb

dev-lang/perl: apply patch (prefix-only) for bootstrapping

Perl may not be able to find 'pwd' during bootstrap because
coreutils may not be installed in the new Prefix yet.

This is an upstream patch to allow falling back
to the internal getcwd() to avoid build failure.

Bug: https://github.com/Perl/perl5/issues/18703
Closes: https://bugs.gentoo.org/818172
See: https://github.com/Perl/perl5/pull/18791
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/perl-5.34.0-fallback-getcwd-pwd.patch    | 263 +++++++++++++++++++++
 dev-lang/perl/perl-5.34.0-r5.ebuild                |   6 +
 2 files changed, 269 insertions(+)

diff --git a/dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch b/dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch
new file mode 100644
index 00000000000..849a09a39a0
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch
@@ -0,0 +1,263 @@
+https://github.com/Perl/perl5/pull/18791
+https://github.com/Perl/perl5/issues/18703
+https://bugs.gentoo.org/818172
+
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 4 May 2021 14:55:50 +1000
+Subject: [PATCH 1/4] remove code that assuming finding pwd on the path is
+ reasonable
+
+We deliberately clear PATH when invoking pwd, so this search is
+useless.
+---
+ dist/PathTools/Cwd.pm | 14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm
+index 6a1d2f17ee57..49c12885b32e 100644
+--- a/dist/PathTools/Cwd.pm
++++ b/dist/PathTools/Cwd.pm
+@@ -213,20 +213,6 @@ sub _backtick_pwd {
+ # we take care not to override an existing definition for cwd().
+ 
+ unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) {
+-    # The pwd command is not available in some chroot(2)'ed environments
+-    my $sep = $Config::Config{path_sep} || ':';
+-    my $os = $^O;  # Protect $^O from tainting
+-
+-
+-    # Try again to find a pwd, this time searching the whole PATH.
+-    if (defined $ENV{PATH} and $os ne 'MSWin32') {  # no pwd on Windows
+-	my @candidates = split($sep, $ENV{PATH});
+-	while (!$found_pwd_cmd and @candidates) {
+-	    my $candidate = shift @candidates;
+-	    $found_pwd_cmd = 1 if -x "$candidate/pwd";
+-	}
+-    }
+-
+     if( $found_pwd_cmd )
+     {
+ 	*cwd = \&_backtick_pwd;
+
+From e5378ea37c6c4910107975d8099c1d552af0c7b3 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 5 May 2021 10:12:31 +1000
+Subject: [PATCH 2/4] don't fallback to simple pwd
+
+When _backtick_pwd invokes $pwd_cmd it first clears the PATH, and since
+the command has no shell metacharacters, it perl won't invoke the
+shell, so it will always fail.
+
+An alternative here might be to use "/bin/sh -c pwd" but there's no
+guarantee that pwd is available as a shell builtin.
+---
+ dist/PathTools/Cwd.pm | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm
+index 49c12885b32e..fbe683e20b8a 100644
+--- a/dist/PathTools/Cwd.pm
++++ b/dist/PathTools/Cwd.pm
+@@ -181,12 +181,6 @@ if ($^O =~ /android/) {
+ }
+ 
+ my $found_pwd_cmd = defined($pwd_cmd);
+-unless ($pwd_cmd) {
+-    # Isn't this wrong?  _backtick_pwd() will fail if someone has
+-    # pwd in their path but it is not /bin/pwd or /usr/bin/pwd?
+-    # See [perl #16774]. --jhi
+-    $pwd_cmd = 'pwd';
+-}
+ 
+ # Lazy-load Carp
+ sub _carp  { require Carp; Carp::carp(@_)  }
+
+From e14ffd3c21efe708a5fb5e25f29d61ccb6ee0a0a Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 4 May 2021 15:04:25 +1000
+Subject: [PATCH 3/4] avoid a prototype warning assigning \&getcwd to *cwd
+
+This would produce a warning if we fallback to using getcwd() where
+getcwd() has a prototype.
+---
+ dist/PathTools/Cwd.pm | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm
+index fbe683e20b8a..b6dc0b798e8c 100644
+--- a/dist/PathTools/Cwd.pm
++++ b/dist/PathTools/Cwd.pm
+@@ -212,7 +212,8 @@ unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) {
+ 	*cwd = \&_backtick_pwd;
+     }
+     else {
+-	*cwd = \&getcwd;
++        # getcwd() might have an empty prototype
++	*cwd = sub { getcwd(); };
+     }
+ }
+ 
+
+From e725e6ced4d2bbb6a5866992509c2ac3e995c228 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 12 May 2021 12:24:59 +1000
+Subject: [PATCH 4/4] bump PathTools to 3.81
+
+---
+ dist/PathTools/Cwd.pm                     | 2 +-
+ dist/PathTools/lib/File/Spec.pm           | 2 +-
+ dist/PathTools/lib/File/Spec/AmigaOS.pm   | 2 +-
+ dist/PathTools/lib/File/Spec/Cygwin.pm    | 2 +-
+ dist/PathTools/lib/File/Spec/Epoc.pm      | 2 +-
+ dist/PathTools/lib/File/Spec/Functions.pm | 2 +-
+ dist/PathTools/lib/File/Spec/Mac.pm       | 2 +-
+ dist/PathTools/lib/File/Spec/OS2.pm       | 2 +-
+ dist/PathTools/lib/File/Spec/Unix.pm      | 2 +-
+ dist/PathTools/lib/File/Spec/VMS.pm       | 2 +-
+ dist/PathTools/lib/File/Spec/Win32.pm     | 2 +-
+ 11 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm
+index b6dc0b798e8c..4a9c786c1c3c 100644
+--- a/dist/PathTools/Cwd.pm
++++ b/dist/PathTools/Cwd.pm
+@@ -3,7 +3,7 @@ use strict;
+ use Exporter;
+ 
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ my $xs_version = $VERSION;
+ $VERSION =~ tr/_//d;
+ 
+diff --git a/dist/PathTools/lib/File/Spec.pm b/dist/PathTools/lib/File/Spec.pm
+index 30d883b61b3e..fe738acf58bd 100644
+--- a/dist/PathTools/lib/File/Spec.pm
++++ b/dist/PathTools/lib/File/Spec.pm
+@@ -2,7 +2,7 @@ package File::Spec;
+ 
+ use strict;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ my %module = (
+diff --git a/dist/PathTools/lib/File/Spec/AmigaOS.pm b/dist/PathTools/lib/File/Spec/AmigaOS.pm
+index fd9da81cdf5a..1398379ca57c 100644
+--- a/dist/PathTools/lib/File/Spec/AmigaOS.pm
++++ b/dist/PathTools/lib/File/Spec/AmigaOS.pm
+@@ -3,7 +3,7 @@ package File::Spec::AmigaOS;
+ use strict;
+ require File::Spec::Unix;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ our @ISA = qw(File::Spec::Unix);
+diff --git a/dist/PathTools/lib/File/Spec/Cygwin.pm b/dist/PathTools/lib/File/Spec/Cygwin.pm
+index 953c23361a10..55d551ce0663 100644
+--- a/dist/PathTools/lib/File/Spec/Cygwin.pm
++++ b/dist/PathTools/lib/File/Spec/Cygwin.pm
+@@ -3,7 +3,7 @@ package File::Spec::Cygwin;
+ use strict;
+ require File::Spec::Unix;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ our @ISA = qw(File::Spec::Unix);
+diff --git a/dist/PathTools/lib/File/Spec/Epoc.pm b/dist/PathTools/lib/File/Spec/Epoc.pm
+index fcb9e894e33c..4cde744231aa 100644
+--- a/dist/PathTools/lib/File/Spec/Epoc.pm
++++ b/dist/PathTools/lib/File/Spec/Epoc.pm
+@@ -2,7 +2,7 @@ package File::Spec::Epoc;
+ 
+ use strict;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ require File::Spec::Unix;
+diff --git a/dist/PathTools/lib/File/Spec/Functions.pm b/dist/PathTools/lib/File/Spec/Functions.pm
+index e14ad2f74538..4b3d7bbde130 100644
+--- a/dist/PathTools/lib/File/Spec/Functions.pm
++++ b/dist/PathTools/lib/File/Spec/Functions.pm
+@@ -3,7 +3,7 @@ package File::Spec::Functions;
+ use File::Spec;
+ use strict;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ require Exporter;
+diff --git a/dist/PathTools/lib/File/Spec/Mac.pm b/dist/PathTools/lib/File/Spec/Mac.pm
+index 8026edcb1261..51d00a01f6f7 100644
+--- a/dist/PathTools/lib/File/Spec/Mac.pm
++++ b/dist/PathTools/lib/File/Spec/Mac.pm
+@@ -4,7 +4,7 @@ use strict;
+ use Cwd ();
+ require File::Spec::Unix;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ our @ISA = qw(File::Spec::Unix);
+diff --git a/dist/PathTools/lib/File/Spec/OS2.pm b/dist/PathTools/lib/File/Spec/OS2.pm
+index 3c35ba99b48a..57d67ba01e93 100644
+--- a/dist/PathTools/lib/File/Spec/OS2.pm
++++ b/dist/PathTools/lib/File/Spec/OS2.pm
+@@ -4,7 +4,7 @@ use strict;
+ use Cwd ();
+ require File::Spec::Unix;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ our @ISA = qw(File::Spec::Unix);
+diff --git a/dist/PathTools/lib/File/Spec/Unix.pm b/dist/PathTools/lib/File/Spec/Unix.pm
+index c06d18f46819..df98f580c3ea 100644
+--- a/dist/PathTools/lib/File/Spec/Unix.pm
++++ b/dist/PathTools/lib/File/Spec/Unix.pm
+@@ -3,7 +3,7 @@ package File::Spec::Unix;
+ use strict;
+ use Cwd ();
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ =head1 NAME
+diff --git a/dist/PathTools/lib/File/Spec/VMS.pm b/dist/PathTools/lib/File/Spec/VMS.pm
+index 9b78c8b4bc6e..bbff3ad7d807 100644
+--- a/dist/PathTools/lib/File/Spec/VMS.pm
++++ b/dist/PathTools/lib/File/Spec/VMS.pm
+@@ -4,7 +4,7 @@ use strict;
+ use Cwd ();
+ require File::Spec::Unix;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ our @ISA = qw(File::Spec::Unix);
+diff --git a/dist/PathTools/lib/File/Spec/Win32.pm b/dist/PathTools/lib/File/Spec/Win32.pm
+index 153744202338..b38419cdf1a6 100644
+--- a/dist/PathTools/lib/File/Spec/Win32.pm
++++ b/dist/PathTools/lib/File/Spec/Win32.pm
+@@ -5,7 +5,7 @@ use strict;
+ use Cwd ();
+ require File::Spec::Unix;
+ 
+-our $VERSION = '3.80';
++our $VERSION = '3.81';
+ $VERSION =~ tr/_//d;
+ 
+ our @ISA = qw(File::Spec::Unix);
+

diff --git a/dev-lang/perl/perl-5.34.0-r5.ebuild b/dev-lang/perl/perl-5.34.0-r5.ebuild
index ba7a5964e28..e066689b21b 100644
--- a/dev-lang/perl/perl-5.34.0-r5.ebuild
+++ b/dev-lang/perl/perl-5.34.0-r5.ebuild
@@ -393,6 +393,12 @@ src_prepare() {
 			"Fix GDBM_File to compile with version 1.20 and earlier"\
 			"https://bugs.gentoo.org/802945"
 
+	if use prefix ; then
+		add_patch "${FILESDIR}/${P}"-fallback-getcwd-pwd.patch "0102-5.34.0-fallback-get-cwd-pwd.patch"\
+			"Fix installation during Prefix bootstrap (finding 'pwd' from coreutils)"\
+			"https://bugs.gentoo.org/818172"
+	fi
+
 	if [[ ${CHOST} == *-solaris* ]] ; then
 		# do NOT mess with nsl, on Solaris this is always necessary,
 		# when -lsocket is used e.g. to get h_errno


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/
@ 2023-05-25 21:52 Sam James
  0 siblings, 0 replies; 6+ messages in thread
From: Sam James @ 2023-05-25 21:52 UTC (permalink / raw
  To: gentoo-commits

commit:     3ea685044d49945fffc7b62f82a6d3fb9d7ba37a
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu May 25 08:16:44 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu May 25 21:52:07 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3ea68504

dev-lang/perl: update HTTP::Tiny SSL-verify-by-default patch

Thanks to Stig for pointing this out! Pull in the fixed version from nixpkgs,
like Alpine has done.

Bug: https://bugs.gentoo.org/905296
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-lang/perl/files/perl-5.36.1-http-tiny.patch    | 71 +++++++++++++++++++---
 ...perl-5.36.1-r1.ebuild => perl-5.36.1-r2.ebuild} |  0
 2 files changed, 63 insertions(+), 8 deletions(-)

diff --git a/dev-lang/perl/files/perl-5.36.1-http-tiny.patch b/dev-lang/perl/files/perl-5.36.1-http-tiny.patch
index 34907cc6d9fd..2144b4d4ff86 100644
--- a/dev-lang/perl/files/perl-5.36.1-http-tiny.patch
+++ b/dev-lang/perl/files/perl-5.36.1-http-tiny.patch
@@ -1,19 +1,35 @@
-in current year, we should verify tls certs by default.
-not doing so is as good as not using tls
-https://www.openwall.com/lists/oss-security/2023/04/18/14
-
 Source:
-https://git.alpinelinux.org/aports/plain/main/perl/default-https-perl-http-tiny.patch?id=fc21c0f7930ae3a9e2f50bacc305fb167a456ded
+https://github.com/NixOS/nixpkgs/blob/5b709277f48df630c8fa7aab0cf6157f71a5b45c/pkgs/development/interpreters/perl/http-tiny-verify-ssl-by-default.patch
 
 Bug: https://bugs.gentoo.org/905296
 See-also: https://github.com/chansen/p5-http-tiny/pull/151
 See-also: https://github.com/chansen/p5-http-tiny/issues/152
-
+See-also: https://www.openwall.com/lists/oss-security/2023/04/18/14
 --
-diff --git a/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm b/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm
-index 83ca06d..dc6217a 100644
+Patch for HTTP::Tiny that defaults verify_SSL to 1
+
+Based on proposed Debian patch by Dominic Hargreaves:
+https://salsa.debian.org/perl-team/interpreter/perl/-/commit/1490431e40e22052f75a0b3449f1f53cbd27ba92
 --- a/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm
 +++ b/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm
+@@ -41,7 +41,7 @@ sub _croak { require Carp; Carp::croak(@_) }
+ #pod   read or write takes longer than the timeout, the request response status code
+ #pod   will be 599.
+ #pod * C<verify_SSL> — A boolean that indicates whether to validate the SSL
+-#pod   certificate of an C<https> — connection (default is false)
++#pod   certificate of an C<https> — connection (default is true)
+ #pod * C<SSL_options> — A hashref of C<SSL_*> — options to pass through to
+ #pod   L<IO::Socket::SSL>
+ #pod
+@@ -115,7 +115,7 @@ sub new {
+         max_redirect => 5,
+         timeout      => defined $args{timeout} ? $args{timeout} : 60,
+         keep_alive   => 1,
+-        verify_SSL   => $args{verify_SSL} || $args{verify_ssl} || 0, # no verification by default
++        verify_SSL   => $args{verify_SSL} // $args{verify_ssl} // 1, # verification by default
+         no_proxy     => $ENV{no_proxy},
+     };
+ 
 @@ -1055,7 +1055,7 @@ sub new {
          timeout          => 60,
          max_line_size    => 16384,
@@ -23,3 +39,42 @@ index 83ca06d..dc6217a 100644
          SSL_options      => {},
          %args
      }, $class;
+@@ -1797,7 +1797,7 @@ C<timeout> — Request timeout in seconds (default is 60) If a socket open, read
+ 
+ =item *
+ 
+-C<verify_SSL> — A boolean that indicates whether to validate the SSL certificate of an C<https> — connection (default is false)
++C<verify_SSL> — A boolean that indicates whether to validate the SSL certificate of an C<https> — connection (default is true)
+ 
+ =item *
+ 
+@@ -2069,7 +2069,7 @@ Verification of server identity
+ 
+ =back
+ 
+-B<By default, HTTP::Tiny does not verify server identity>.
++B<By default, HTTP::Tiny in Gentoo verifies server identity>.
+ 
+ Server identity verification is controversial and potentially tricky because it
+ depends on a (usually paid) third-party Certificate Authority (CA) trust model
+@@ -2077,16 +2077,14 @@ to validate a certificate as legitimate.  This discriminates against servers
+ with self-signed certificates or certificates signed by free, community-driven
+ CA's such as L<CAcert.org|http://cacert.org>.
+ 
+-By default, HTTP::Tiny does not make any assumptions about your trust model,
+-threat level or risk tolerance.  It just aims to give you an encrypted channel
+-when you need one.
+-
+ Setting the C<verify_SSL> attribute to a true value will make HTTP::Tiny verify
+ that an SSL connection has a valid SSL certificate corresponding to the host
+ name of the connection and that the SSL certificate has been verified by a CA.
+ Assuming you trust the CA, this will protect against a L<man-in-the-middle
+-attack|http://en.wikipedia.org/wiki/Man-in-the-middle_attack>.  If you are
+-concerned about security, you should enable this option.
++attack|http://en.wikipedia.org/wiki/Man-in-the-middle_attack>.
++
++If you are not concerned about security, and this default in Gentoo causes
++problems, you should disable this option.
+ 
+ Certificate verification requires a file containing trusted CA certificates.
+ 

diff --git a/dev-lang/perl/perl-5.36.1-r1.ebuild b/dev-lang/perl/perl-5.36.1-r2.ebuild
similarity index 100%
rename from dev-lang/perl/perl-5.36.1-r1.ebuild
rename to dev-lang/perl/perl-5.36.1-r2.ebuild


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/
@ 2024-09-11 18:54 Sam James
  0 siblings, 0 replies; 6+ messages in thread
From: Sam James @ 2024-09-11 18:54 UTC (permalink / raw
  To: gentoo-commits

commit:     3d29aec46e21a2ce66b39dc08ea8b559943520d2
Author:     Andrei Horodniceanu <a.horodniceanu <AT> proton <DOT> me>
AuthorDate: Wed Sep 11 16:27:31 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Sep 11 18:53:33 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3d29aec4

dev-lang/perl: fix compilation in EPREFIX bootstrap

Closes: https://bugs.gentoo.org/939014
Signed-off-by: Andrei Horodniceanu <a.horodniceanu <AT> proton.me>
Closes: https://github.com/gentoo/gentoo/pull/38568
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...0.0-fix-compilation-in-eprefix-bug-939014.patch | 51 ++++++++++++++++++++++
 dev-lang/perl/perl-5.40.0.ebuild                   |  4 ++
 2 files changed, 55 insertions(+)

diff --git a/dev-lang/perl/files/perl-5.40.0-fix-compilation-in-eprefix-bug-939014.patch b/dev-lang/perl/files/perl-5.40.0-fix-compilation-in-eprefix-bug-939014.patch
new file mode 100644
index 000000000000..3362947876b1
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.40.0-fix-compilation-in-eprefix-bug-939014.patch
@@ -0,0 +1,51 @@
+https://bugs.gentoo.org/939014
+https://github.com/Perl/perl5/pull/22569
+
+From bd0ab509f890a6638bd5033ef58526f8c74f7e4b Mon Sep 17 00:00:00 2001
+From: Andrei Horodniceanu <a.horodniceanu@proton.me>
+Date: Wed, 4 Sep 2024 12:46:44 +0300
+Subject: [PATCH] locale.c: Fix compilation on platforms with only a C locale
+
+Signed-off-by: Andrei Horodniceanu <a.horodniceanu@proton.me>
+--- a/AUTHORS
++++ b/AUTHORS
+@@ -103,6 +103,7 @@ Andreas König                  <a.koenig@mind.de>
+ Andreas Marienborg             <andreas.marienborg@gmail.com>
+ Andreas Schwab                 <schwab@suse.de>
+ Andreas Voegele                <andreas@andreasvoegele.com>
++Andrei Horodniceanu            <a.horodniceanu@proton.me>
+ Andrei Yelistratov             <andrew@sundale.net>
+ Andrej Borsenkow               <Andrej.Borsenkow@mow.siemens.ru>
+ Andrew Bettison                <andrewb@zip.com.au>
+--- a/locale.c
++++ b/locale.c
+@@ -8963,6 +8963,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
+      * categories into our internal indices. */
+     if (map_LC_ALL_position_to_index[0] == LC_ALL_INDEX_) {
+ 
++#    ifdef PERL_LC_ALL_CATEGORY_POSITIONS_INIT
+         /* Use this array, initialized by a config.h constant */
+         int lc_all_category_positions[] = PERL_LC_ALL_CATEGORY_POSITIONS_INIT;
+         STATIC_ASSERT_STMT(   C_ARRAY_LENGTH(lc_all_category_positions)
+@@ -8975,6 +8976,21 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
+             map_LC_ALL_position_to_index[i] =
+                               get_category_index(lc_all_category_positions[i]);
+         }
++#    else
++        /* It is possible for both PERL_LC_ALL_USES_NAME_VALUE_PAIRS and
++         * PERL_LC_ALL_CATEGORY_POSITIONS_INIT not to be defined, e.g. on
++         * systems with only a C locale during ./Configure.  Assume that this
++         * can only happen as part of some sort of bootstrapping so allow
++         * compilation to succeed by ignoring correctness.
++         */
++        for (unsigned int i = 0;
++             i < C_ARRAY_LENGTH(map_LC_ALL_position_to_index);
++             i++)
++        {
++            map_LC_ALL_position_to_index[i] = 0;
++        }
++#    endif
++
+     }
+ 
+     LOCALE_UNLOCK;

diff --git a/dev-lang/perl/perl-5.40.0.ebuild b/dev-lang/perl/perl-5.40.0.ebuild
index cd9a0e1fd69e..92d162e038f9 100644
--- a/dev-lang/perl/perl-5.40.0.ebuild
+++ b/dev-lang/perl/perl-5.40.0.ebuild
@@ -81,6 +81,10 @@ PDEPEND="
 	)
 "
 
+PATCHES=(
+	"${FILESDIR}/${P}-fix-compilation-in-eprefix-bug-939014.patch"
+)
+
 # bug 390719, bug 523624
 # virtual/perl-Test-Harness is here for the bundled ExtUtils::MakeMaker
 


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-09-11 18:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-26 13:37 [gentoo-commits] repo/gentoo:master commit in: dev-lang/perl/, dev-lang/perl/files/ Fabian Groffen
  -- strict thread matches above, loose matches on Subject: below --
2024-09-11 18:54 Sam James
2023-05-25 21:52 Sam James
2021-10-28  3:53 Sam James
2021-07-19 21:20 Andreas K. Hüttel
2020-06-20 13:06 Kent Fredric

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox