commit:     2c48ef728b4b3f91dec374f6554a6d426623aacb
Author:     Jory Pratt <anarchy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 13 18:58:56 2019 +0000
Commit:     Jory Pratt <anarchy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 13 18:59:14 2019 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=2c48ef72

dev-lang/perl: Security bump, musl fixes for 5.26.x branch

Package-Manager: Portage-2.3.62, Repoman-2.3.12
Signed-off-by: Jory Pratt <anarchy <AT> gentoo.org>

 dev-lang/perl/Manifest                           |   3 +
 dev-lang/perl/files/5.26/perl-5.26.3-part1.patch |  75 +++
 dev-lang/perl/files/5.26/perl-5.26.3-part2.patch |  27 +
 dev-lang/perl/files/5.26/perl-5.26.3-part3.patch |  88 +++
 dev-lang/perl/files/5.26/perl-5.26.3-part4.patch | 103 ++++
 dev-lang/perl/files/5.26/perl-5.26.3-part5.patch |  35 ++
 dev-lang/perl/files/perl-5.26.2-hppa.patch       | 105 ++++
 dev-lang/perl/metadata.xml                       |  14 +
 dev-lang/perl/perl-5.26.3.ebuild                 | 649 +++++++++++++++++++++++
 9 files changed, 1099 insertions(+)

diff --git a/dev-lang/perl/Manifest b/dev-lang/perl/Manifest
new file mode 100644
index 0000000..ad86139
--- /dev/null
+++ b/dev-lang/perl/Manifest
@@ -0,0 +1,3 @@
+DIST perl-5.26.2-patches-1.tar.xz 17100 BLAKE2B 
681239e438945285e006ee1d1e2a9eb888fc9b425e6fbd4822e65e1fe1ced2216de76485b9792d3fee28783a588c09e1d34c294ef43d81055c4566af37fe9b6c
 SHA512 
2a274150d2dba406c6efb67ec236f67032a51ff1788b30ea556e74b2f02fab68f5029ebd4b9d4daeb16b3a63fa7aa1744d323bf637a9d21946f19f33b69da245
+DIST perl-5.26.3.tar.xz 11957032 BLAKE2B 
3cd5332a0bede16608b1626b0b9903d71105784411c7acf2fd8c0e7637a2ab5049e650bdaba574584ed51a70cc21dfbee5557963717d52c4af9c8bd8e8ef80a1
 SHA512 
1126ead4f9cc313548e875b6dc9cd1f56f6fef4406f3fd1c108c5cad0db92c8cd0f9bde5b82d78d8f2bd67709c438e87dd45f26b98f327ba31b05b39acc3b299
+DIST perl-cross-1.1.9.tar.gz 102939 BLAKE2B 
438ea75a14c4d60fdf3cb2f3671c736d229a83af210ba4fe6e79b989c6c4b45500d0221ec65bc71e1d43d234ec1daa20b3a19be6ceb01e638810900dbe3664a7
 SHA512 
002441012bd31f1ea71341707d91f89b76266c187c9d28f947ed5eddbcc6e3155e8dfd4b1814331561c3557764fea25bf6a938f08bcd4adfb5895361ad5a269a

diff --git a/dev-lang/perl/files/5.26/perl-5.26.3-part1.patch 
b/dev-lang/perl/files/5.26/perl-5.26.3-part1.patch
new file mode 100644
index 0000000..5ac0e85
--- /dev/null
+++ b/dev-lang/perl/files/5.26/perl-5.26.3-part1.patch
@@ -0,0 +1,75 @@
+From ca152fd8207cf53816b1407d5f54f6ea160a3ef8 Mon Sep 17 00:00:00 2001
+From: Andy Dougherty <dough...@lafayette.edu>
+Date: Tue, 22 Jan 2019 14:17:05 -0500
+Subject: [PATCH] Improve Configure detection of memmem() [perl #133760].
+
+Linux systems have memmem, but the header prototype is only visible if
+the C library, but didn't check if the correct prototype is available.
+This patch compiles & runs a test program that will fail if the prototype
+is needed but not available.
+
+This does not completely close [perl #133760].  The tests for strlcat()
+and strlcpy() may also need to be similarly changed.  Also, this patch
+does not change whether _GNU_SOURCE is defined or not.  Presumably that
+would be done separately in the linux hints file.
+---
+ Configure | 43 +++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 41 insertions(+), 2 deletions(-)
+
+diff --git a/Configure b/Configure
+index 6041b0bbb0..a83cbdf2f8 100755
+--- a/Configure
++++ b/Configure
+@@ -16155,8 +16155,47 @@ set mbtowc d_mbtowc
+ eval $inlibc
+ 
+ : see if memmem exists
+-set memmem d_memmem
+-eval $inlibc
++echo " "
++echo "Checking if you have a working memmem()" >&4
++$cat >try.c <<EOCP
++#$d_gnulibc HAS_GNULIBC         /**/
++#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
++#   define _GNU_SOURCE
++#endif
++#include <stdio.h>
++#include <stdlib.h>
++#include <stddef.h>
++#include <string.h>
++int main(int argc, char **argv)
++{
++    char *big = "abcdefghiabcdefghi";
++    char *little = "def";
++    char *rtn;
++    ptrdiff_t diff;
++    rtn = (char *) memmem(big, strlen(big), little, strlen(little));
++    diff = rtn - big;
++    exit(diff == 3 ?  EXIT_SUCCESS : EXIT_FAILURE);
++}
++EOCP
++set try
++if eval $compile; then
++    `$run ./try`
++    rc=$?
++    case "$rc" in
++        0)  echo "Yes, you do." >&4
++            val="$define"
++            ;;
++        *)  echo "Well, you have memmem, but it isn't working." >&4
++            val="$undef"
++            ;;
++    esac
++else
++    echo "No, you do not." >&4
++    val="$undef"
++fi
++set d_memmem
++eval $setvar
++$rm_try
+ 
+ : see if memrchr exists
+ set memrchr d_memrchr
+-- 
+2.15.1-424-g9478a660812
+

diff --git a/dev-lang/perl/files/5.26/perl-5.26.3-part2.patch 
b/dev-lang/perl/files/5.26/perl-5.26.3-part2.patch
new file mode 100644
index 0000000..c2c49b6
--- /dev/null
+++ b/dev-lang/perl/files/5.26/perl-5.26.3-part2.patch
@@ -0,0 +1,27 @@
+From 63c1fa6a98bc60234a21de83dd191cd581a5d073 Mon Sep 17 00:00:00 2001
+From: Andy Dougherty <dough...@lafayette.edu>
+Date: Wed, 23 Jan 2019 21:12:29 -0500
+Subject: [PATCH] Add ability to include literal text in the prototype check.
+
+This is the same technique as in the metaconfig unit Protochk.U.
+See that unit for more usage information.  It is a bit clunky,
+but does work.
+---
+ Configure | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Configure b/Configure
+index a83cbdf2f8..179545727e 100755
+--- a/Configure
++++ b/Configure
+@@ -10739,6 +10739,7 @@ hasproto='varname=$1; func=$2; shift; shift;
+ while $test $# -ge 2; do
+       case "$1" in
+       $define) echo "#include <$2>";;
++      literal) echo "$2" ;;
+       esac ;
+     shift 2;
+ done > try.c;
+-- 
+2.15.1-424-g9478a660812
+

diff --git a/dev-lang/perl/files/5.26/perl-5.26.3-part3.patch 
b/dev-lang/perl/files/5.26/perl-5.26.3-part3.patch
new file mode 100644
index 0000000..3e31c1d
--- /dev/null
+++ b/dev-lang/perl/files/5.26/perl-5.26.3-part3.patch
@@ -0,0 +1,88 @@
+From f8d82a1010426d0eb49c33cb903413b882c85c3e Mon Sep 17 00:00:00 2001
+From: Andy Dougherty <dough...@lafayette.edu>
+Date: Wed, 23 Jan 2019 21:39:39 -0500
+Subject: [PATCH] Another attempt to improve Configure detection of memmem()
+ [perl #133760].
+
+This updates commit ca152fd8207cf53816b1407d5f54f6ea160a3ef8.
+Linux systems have memmem, but the prototype in <string.h> is only
+visible if __GNU_SOURCE is defined.  This version tests for both the
+prototype in <string.h> and the symbol in libc.  (Thanks to Tony C. for
+the suggestion.)  (For BSD systems, no extra define is needed.)
+---
+ Configure | 58 ++++++++++++++++++----------------------------------------
+ 1 file changed, 18 insertions(+), 40 deletions(-)
+
+diff --git a/Configure b/Configure
+index 179545727e..ad17948a2c 100755
+--- a/Configure
++++ b/Configure
+@@ -16156,47 +16156,25 @@ set mbtowc d_mbtowc
+ eval $inlibc
+ 
+ : see if memmem exists
++: We need both a prototype in string.h and the symbol in libc.
+ echo " "
+-echo "Checking if you have a working memmem()" >&4
+-$cat >try.c <<EOCP
+-#$d_gnulibc HAS_GNULIBC         /**/
+-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
+-#   define _GNU_SOURCE
+-#endif
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <stddef.h>
+-#include <string.h>
+-int main(int argc, char **argv)
+-{
+-    char *big = "abcdefghiabcdefghi";
+-    char *little = "def";
+-    char *rtn;
+-    ptrdiff_t diff;
+-    rtn = (char *) memmem(big, strlen(big), little, strlen(little));
+-    diff = rtn - big;
+-    exit(diff == 3 ?  EXIT_SUCCESS : EXIT_FAILURE);
+-}
+-EOCP
+-set try
+-if eval $compile; then
+-    `$run ./try`
+-    rc=$?
+-    case "$rc" in
+-        0)  echo "Yes, you do." >&4
+-            val="$define"
+-            ;;
+-        *)  echo "Well, you have memmem, but it isn't working." >&4
+-            val="$undef"
+-            ;;
+-    esac
+-else
+-    echo "No, you do not." >&4
+-    val="$undef"
+-fi
+-set d_memmem
+-eval $setvar
+-$rm_try
++d_memmem_proto=''
++xx1="#$d_gnulibc HAS_GNULIBC"
++xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
++xx3='#   define _GNU_SOURCE'
++xx4='#endif'
++set d_memmem_proto memmem literal "$xx1" literal "$xx2" literal "$xx3" 
literal "$xx4" define string.h
++eval $hasproto
++case "$d_memmem_proto" in
++    define) # see if memmem exists
++      set memmem d_memmem
++      eval $inlibc
++      ;;
++    *)  val=$undef
++      set d_memmem
++      eval $setvar
++      ;;
++esac
+ 
+ : see if memrchr exists
+ set memrchr d_memrchr
+-- 
+2.15.1-424-g9478a660812
+

diff --git a/dev-lang/perl/files/5.26/perl-5.26.3-part4.patch 
b/dev-lang/perl/files/5.26/perl-5.26.3-part4.patch
new file mode 100644
index 0000000..373d6c5
--- /dev/null
+++ b/dev-lang/perl/files/5.26/perl-5.26.3-part4.patch
@@ -0,0 +1,103 @@
+From ba73a4cb8f472480a2d630613d1e9e1172d518d3 Mon Sep 17 00:00:00 2001
+From: Andy Dougherty <dough...@lafayette.edu>
+Date: Thu, 31 Jan 2019 13:04:32 -0500
+Subject: [PATCH] Improve detection of memrchr, strlcat, and strlcpy.
+
+This is continuation of commit f8d82a1010 addressing [perl #133760].
+Linux systems using the musl C library have memmem, memrchr, strlcat, and
+strlcpy, but the prototypes are only visible if _GNU_SOURCE is defined.
+This patch makes Configure test both whether the prototype is visible
+and whether the C symbol is visible.
+
+Still to be done is automatically adding _GNU_SOURCE if the musl library
+is being used -- probably in hints/linux.sh.
+---
+ Configure | 63 +++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 57 insertions(+), 6 deletions(-)
+
+diff --git a/Configure b/Configure
+index abbfdf6..427dd9d 100755
+--- a/Configure
++++ b/Configure
+@@ -16354,8 +16354,25 @@ set mbtowc d_mbtowc
+ eval $inlibc
+ 
+ : see if memchr exists
+-set memchr d_memchr
+-eval $inlibc
++: We need both a prototype in string.h and the symbol in libc.
++echo " "
++d_memchr_proto=''
++xx1="#$d_gnulibc HAS_GNULIBC"
++xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
++xx3='#   define _GNU_SOURCE'
++xx4='#endif'
++set d_memchr_proto memchr literal "$xx1" literal "$xx2" literal "$xx3" 
literal "$xx4" define string.h
++eval $hasproto
++case "$d_memchr_proto" in
++    define) # see if memchr exists
++      set memchr d_memchr
++      eval $inlibc
++      ;;
++    *)  val=$undef
++      set d_memchr
++      eval $setvar
++      ;;
++esac
+ 
+ : see if memcmp exists
+ set memcmp d_memcmp
+@@ -19387,12 +19404,46 @@ set strftime d_strftime
+ eval $inlibc
+ 
+ : see if strlcat exists
+-set strlcat d_strlcat
+-eval $inlibc
++: We need both a prototype in string.h and the symbol in libc.
++echo " "
++d_strlcat_proto=''
++xx1="#$d_gnulibc HAS_GNULIBC"
++xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
++xx3='#   define _GNU_SOURCE'
++xx4='#endif'
++set d_strlcat_proto strlcat literal "$xx1" literal "$xx2" literal "$xx3" 
literal "$xx4" define string.h
++eval $hasproto
++case "$d_strlcat_proto" in
++    define) # see if strlcat exists
++      set strlcat d_strlcat
++      eval $inlibc
++      ;;
++    *)  val=$undef
++      set d_strlcat
++      eval $setvar
++      ;;
++esac
+ 
+ : see if strlcpy exists
+-set strlcpy d_strlcpy
+-eval $inlibc
++: We need both a prototype in string.h and the symbol in libc.
++echo " "
++d_strlcpy_proto=''
++xx1="#$d_gnulibc HAS_GNULIBC"
++xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
++xx3='#   define _GNU_SOURCE'
++xx4='#endif'
++set d_strlcpy_proto strlcpy literal "$xx1" literal "$xx2" literal "$xx3" 
literal "$xx4" define string.h
++eval $hasproto
++case "$d_strlcpy_proto" in
++    define) # see if strlcpy exists
++      set strlcpy d_strlcpy
++      eval $inlibc
++      ;;
++    *)  val=$undef
++      set d_strlcpy
++      eval $setvar
++      ;;
++esac
+ 
+ : see if strtod exists
+ set strtod d_strtod
+-- 
+2.21.0
+

diff --git a/dev-lang/perl/files/5.26/perl-5.26.3-part5.patch 
b/dev-lang/perl/files/5.26/perl-5.26.3-part5.patch
new file mode 100644
index 0000000..e9cac65
--- /dev/null
+++ b/dev-lang/perl/files/5.26/perl-5.26.3-part5.patch
@@ -0,0 +1,35 @@
+From 04db542212fdad3a62f13afe741c99028f4bf799 Mon Sep 17 00:00:00 2001
+From: Andy Dougherty <dough...@lafayette.edu>
+Date: Thu, 31 Jan 2019 14:05:41 -0500
+Subject: [PATCH] Define _GNU_SOURCE if using the musl libc on linux.
+
+Together with prior commits ba73a4cb8f, f8d82a1010, and 63c1fa6a98,
+this should close [perl #133760].
+---
+ hints/linux.sh | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/hints/linux.sh b/hints/linux.sh
+index 3f38ea07f1..a985a8ee1b 100644
+--- a/hints/linux.sh
++++ b/hints/linux.sh
+@@ -178,6 +178,16 @@ case "$plibpth" in
+     ;;
+ esac
+ 
++# For the musl libc, perl should #define _GNU_SOURCE.  Otherwise, some
++# available functions, like memem, won't be used.  See the discussion in
++# [perl #133760].  musl doesn't offer an easy way to identify it, but,
++# at least on alpine linux, the ldd --version output contains the
++# string 'musl.'
++case `ldd --version 2>&1` in
++    musl*)  ccflags="$ccflags -D_GNU_SOURCE" ;;
++        *) ;;
++esac
++
+ # libquadmath is sometimes installed as gcc internal library,
+ # so contrary to our usual policy of *not* looking at gcc internal
+ # directories we now *do* look at them, in case they contain
+-- 
+2.15.1-424-g9478a660812
+

diff --git a/dev-lang/perl/files/perl-5.26.2-hppa.patch 
b/dev-lang/perl/files/perl-5.26.2-hppa.patch
new file mode 100644
index 0000000..83ed944
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.26.2-hppa.patch
@@ -0,0 +1,105 @@
+https://bugs.gentoo.org/634162
+
+Source:
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869122
+
+Index: perl-5.26.0/op.c
+===================================================================
+--- perl-5.26.0.orig/op.c
++++ perl-5.26.0/op.c
+@@ -14832,6 +14832,7 @@ Perl_custom_op_get_field(pTHX_ const OP
+     SV *keysv;
+     HE *he = NULL;
+     XOP *xop;
++    XOPRETANY any;
+ 
+     static const XOP xop_null = { 0, 0, 0, 0, 0 };
+ 
+@@ -14874,58 +14875,37 @@ Perl_custom_op_get_field(pTHX_ const OP
+       else
+           xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
+     }
+-    {
+-      XOPRETANY any;
+-      if(field == XOPe_xop_ptr) {
+-          any.xop_ptr = xop;
+-      } else {
+-          const U32 flags = XopFLAGS(xop);
+-          if(flags & field) {
+-              switch(field) {
+-              case XOPe_xop_name:
+-                  any.xop_name = xop->xop_name;
+-                  break;
+-              case XOPe_xop_desc:
+-                  any.xop_desc = xop->xop_desc;
+-                  break;
+-              case XOPe_xop_class:
+-                  any.xop_class = xop->xop_class;
+-                  break;
+-              case XOPe_xop_peep:
+-                  any.xop_peep = xop->xop_peep;
+-                  break;
+-              default:
+-                  NOT_REACHED; /* NOTREACHED */
+-                  break;
+-              }
+-          } else {
+-              switch(field) {
+-              case XOPe_xop_name:
+-                  any.xop_name = XOPd_xop_name;
+-                  break;
+-              case XOPe_xop_desc:
+-                  any.xop_desc = XOPd_xop_desc;
+-                  break;
+-              case XOPe_xop_class:
+-                  any.xop_class = XOPd_xop_class;
+-                  break;
+-              case XOPe_xop_peep:
+-                  any.xop_peep = XOPd_xop_peep;
+-                  break;
+-              default:
+-                  NOT_REACHED; /* NOTREACHED */
+-                  break;
+-              }
+-          }
++
++    if(field == XOPe_xop_ptr) {
++        any.xop_ptr = xop;
++    } else {
++        const U32 flags = XopFLAGS(xop);
++        switch(field) {
++        case XOPe_xop_name:
++            any.xop_name = (flags & field) ? xop->xop_name : XOPd_xop_name;
++            break;
++        case XOPe_xop_desc:
++            any.xop_desc = (flags & field) ? xop->xop_desc : XOPd_xop_desc;
++            break;
++        case XOPe_xop_class:
++            any.xop_class = (flags & field) ? xop->xop_class : XOPd_xop_class;
++            break;
++        case XOPe_xop_peep:
++            any.xop_peep = (flags & field) ? xop->xop_peep : XOPd_xop_peep;
++            break;
++        default:
++            NOT_REACHED; /* NOTREACHED */
++            break;
+       }
+-        /* On some platforms (HP-UX, IA64) gcc emits a warning for this 
function:
+-         * op.c: In function 'Perl_custom_op_get_field':
+-         * op.c:...: warning: 'any.xop_name' may be used uninitialized in 
this function [-Wmaybe-uninitialized]
+-         * This is because on those platforms (with -DEBUGGING) NOT_REACHED
+-         * expands to assert(0), which expands to ((0) ? (void)0 :
+-         * __assert(...)), and gcc doesn't know that __assert can never 
return. */
+-      return any;
+     }
++
++    /* On some platforms (HP-UX, IA64) gcc emits a warning for this function:
++     * op.c: In function 'Perl_custom_op_get_field':
++     * op.c:...: warning: 'any.xop_name' may be used uninitialized in this 
function [-Wmaybe-uninitialized]
++     * This is because on those platforms (with -DEBUGGING) NOT_REACHED
++     * expands to assert(0), which expands to ((0) ? (void)0 :
++     * __assert(...)), and gcc doesn't know that __assert can never return. */
++    return any;
+ }
+ 
+ /*

diff --git a/dev-lang/perl/metadata.xml b/dev-lang/perl/metadata.xml
new file mode 100644
index 0000000..0edcddc
--- /dev/null
+++ b/dev-lang/perl/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="project">
+               <email>p...@gentoo.org</email>
+               <name>Gentoo Perl Project</name>
+       </maintainer>
+       <use>
+               <flag name="ithreads">Enable Perl threads, has some 
compatibility problems</flag>
+       </use>
+       <upstream>
+               <remote-id type="github">arsv/perl-cross</remote-id>
+       </upstream>
+</pkgmetadata>

diff --git a/dev-lang/perl/perl-5.26.3.ebuild b/dev-lang/perl/perl-5.26.3.ebuild
new file mode 100644
index 0000000..f7fcedb
--- /dev/null
+++ b/dev-lang/perl/perl-5.26.3.ebuild
@@ -0,0 +1,649 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit eutils alternatives flag-o-matic toolchain-funcs multilib 
multiprocessing
+
+PATCH_VER=1
+CROSS_VER=1.1.9
+PATCH_BASE="perl-5.26.2-patches-${PATCH_VER}"
+
+DIST_AUTHOR=SHAY
+
+# 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.26.1 5.26.0"
+if [[ "${PV##*.}" == "9999" ]]; then
+       DIST_VERSION=5.26.2
+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/~kentnl/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" ]]; then
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 
~sh ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-fbsd ~x86-fbsd ~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}
+       !prefix? ( elibc_FreeBSD? ( sys-freebsd/freebsd-mk-defs ) )
+"
+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.240.0       ptar 
ptardiff ptargrep
+       src_remove_dual      perl-core/CPAN               2.180.0       cpan
+       src_remove_dual      perl-core/Digest-SHA         5.960.0       shasum
+       src_remove_dual      perl-core/Encode             2.880.0       enc2xs 
piconv
+       src_remove_dual      perl-core/ExtUtils-MakeMaker 7.240.0       
instmodsh
+       src_remove_dual      perl-core/ExtUtils-ParseXS   3.340.0       xsubpp
+       src_remove_dual      perl-core/IO-Compress        2.74.0        
zipdetails
+       src_remove_dual      perl-core/JSON-PP            2.274.0.200_rc   
json_pp
+       src_remove_dual      perl-core/Module-CoreList    5.201.804.142.600_rc 
corelist
+       src_remove_dual      perl-core/Pod-Parser         1.630.0       
pod2usage podchecker podselect
+       src_remove_dual      perl-core/Pod-Perldoc        3.280.0       perldoc
+       src_remove_dual      perl-core/Test-Harness       3.380.0       prove
+       src_remove_dual      perl-core/podlators          4.90.0        pod2man 
pod2text
+       src_remove_dual_man  perl-core/podlators          4.90.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" ;;
+               *-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} )"
+       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}"
+
+       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
+
+       sed -i \
+               -e 's/MakeMaker\.pm .*/MakeMaker.pm 
bf9174c70a0e50ff2fee4552c7df89b37d292da1/' \
+               -e 's/MM_Unix\.pm .*/MM_Unix.pm 
b0ec308fe2d7dcfcef5732880db0fae1f4ea80fa/' \
+               cnf/diffs/perl5-${PV}/customized.patch || die
+
+       sed -i \
+               -e 's|^lib/unicore/CombiningClass.pl 
pod/perluniprops.pod:|lib/unicore/CombiningClass.pl pod/perluniprops.pod: 
$(CONFIGPM)|' \
+               Makefile || 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
+       EPATCH_OPTS+=" -p1"
+
+       if use hppa ; then
+               epatch "${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\.patch/d' "${WORKDIR}/patches/series" 
|| die "Can't exclude libnsl patch"
+       fi
+
+       einfo "Applying patches from ${PATCH_BASE} ..."
+       while read patch ; do
+               EPATCH_SINGLE_MSG="  ${patch} ..."
+               epatch "${WORKDIR}"/patches/${patch}
+       done < "${WORKDIR}"/patches/series
+
+       # Fix musl issues
+       eapply "${FILESDIR}"/5.26/${PN}-5.26.3-part{1,2,3,4,5}.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
+
+       default
+}
+
+myconf() {
+       # the myconf array is declared in src_configure
+       myconf=( "${myconf[@]}" "$@" )
+}
+
+src_configure() {
+       declare -a myconf
+
+       export LC_ALL="C"
+       [[ ${COLUMNS:-1} -ge 1 ]] || unset COLUMNS # bug #394091
+
+       # some arches and -O do not mix :)
+       use ppc && replace-flags -O? -O1
+
+       # 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"
+
+       # Fixes bug #97645
+       use ppc && filter-flags "-mpowerpc-gpopt"
+
+       # Fixes bug #143895 on gcc-4.1.1
+       filter-flags "-fsched2-use-superblocks"
+
+       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 "${EROOT%/}${PRIV_BASE}" "${EROOT%/}${SITE_BASE}" 
"${EROOT%/}${VENDOR_BASE}" \
+                                  -maxdepth 1 -mindepth 1 -type d -regex 
'.*/5[.][0-9]+[.][0-9]+$' \
+                                  -printf "%f "  2>/dev/null )"
+       fi
+       # Fixup versions, removing self match, fixing order and dupes
+       PERL_OLDVERSEN="$(
+               echo "${PERL_OLDVERSEN}"           |\
+                       tr " " "\n"                                |\
+                       grep -vF "${DIST_VERSION%-RC}" |\
+                       sort -u -nr -t'.' -k1,1 -k2,2 -k3,3
+       )"
+
+       # Experts who want a "Pure" install can set PERL_OLDVERSEN to an empty 
string
+       if [[ -n "${PERL_OLDVERSEN// }" ]]; then
+               local inclist="$(
+                               for v in ${PERL_OLDVERSEN};     do
+                                       has "${v}" ${PERL_BIN_OLDVERSEN} && 
echo -n "${v}/${myarch}${mythreading} ";
+                                       echo -n "${v} ";
+                               done )"
+               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 
" ${EROO%/T}${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}"
+       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__
+
+       # 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})"
+
+       myconf \
+               -Duseshrplib \
+               -Darchname="${myarch}" \
+               -Dcc="$(tc-getCC)" \
+               -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;
+       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 ../../../../../$(get_libdir)/${LIBPERL} 
"${ED}"${coredir}/${LIBPERL} || die
+               ln -sf ../../../../../$(get_libdir)/${LIBPERL} 
"${ED}"${coredir}/libperl$(get_libname ${SHORT_PV}) || die
+               ln -sf ../../../../../$(get_libdir)/${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
+}

Reply via email to