Skip to content

Commit

Permalink
dev-lang/perl: Add unkeyworded -r2 version with WIP features
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
kentfredric committed Jun 20, 2020
1 parent b736ece commit 80bf6a8
Show file tree
Hide file tree
Showing 2 changed files with 887 additions and 0 deletions.
135 changes: 135 additions & 0 deletions dev-lang/perl/files/perl-5.30.3-gentoo-libdirs.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
From 7572be1afb16621a537e9da02f96cf04cb10b655 Mon Sep 17 00:00:00 2001
From: Kent Fredric <[email protected]>
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

Loading

0 comments on commit 80bf6a8

Please sign in to comment.