Moving this off of tech@ because I doubt anyone there cares.
On Mon, May 13, 2019 at 07:37:36AM +0100, Stuart Henderson wrote:
> As far as plists go, unless the port only supports py2 or only supports py3,
> it ought to generate the plist with FLAVOR=python3 and then prefix any lines
> ending in ${MODPY_PYCACHE}/ with ${MODPY_COMMENT}.
Anyway, Kurt helped me realize that it would be much nicer if
update-plist handled the MODPY_COMMENT magic and so here's a patch that
does that.
It also fixes a possible oversight to call $context->adjust even if we
don't have anything to unsubst, which means that brand-new PLISTs now
get the trailing slash on MODPY_PYCACHE directories and not just after a
second update-plist.
However, this "feels" ugly so I'm not sure if this is the best place for
this code. Perhaps it needs a post-plist target, I don't think that
hook exists though.
I'm also not sure if there's a way to tell python.port.mk to use the
pthon3 FLAVOR (if it exists) when doing update-plist automatically, but
that would be more helpful than the special case in portgen.
Index: infrastructure/lib/OpenBSD/ReverseSubst.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/OpenBSD/ReverseSubst.pm,v
retrieving revision 1.18
diff -u -p -r1.18 ReverseSubst.pm
--- infrastructure/lib/OpenBSD/ReverseSubst.pm 4 Sep 2018 12:41:51 -0000
1.18
+++ infrastructure/lib/OpenBSD/ReverseSubst.pm 16 May 2019 18:37:46 -0000
@@ -127,6 +127,16 @@ sub adjust
{
my ($self, $rstring) = @_;
$$rstring =~ s,([^/])$,$1/,;
+
+ # Python 3 modules use a MODPY_PYCACHE subdirectory for their
+ # pyc files, however python 2 this directory doesn't exist.
+ # That means for python 2 we have two elements with the same name
+ # and things blow up. To get around that, the python 2 flavored
+ # ports set MODPY_COMMENT to @comment to comment out the line.
+ if ( $$rstring =~ m</\$\Q{MODPY_PYCACHE}/> ) {
+ my $comment = '${MODPY_COMMENT}';
+ $$rstring =~ s<^(?:\Q$comment\E)?><$comment>;
+ }
}
package Forwarder;
@@ -354,25 +364,27 @@ sub do_backsubst
}
# we can't do empty subst without an unsubst;
- return $string unless defined $unsubst;
-
- # this part will be done repeatedly
- my $old;
- do {
- $old = $string;
- for my $k (@{$subst->{lempty}}) {
- my $k2 = $k;
- $k2 =~ s/^\^//;
- if ($unsubst =~ m/^(.*)\$\{$k2\}/) {
- my $prefix = $1;
- # XXX avoid infinite loop
- next if $string =~ m/\Q$prefix\E\$\{\Q$k2\E\}/;
- $string =~ s/^\Q$prefix\E/$prefix\$\{$k2\}/;
+ if ($unsubst) {
+ # this part will be done repeatedly
+ my $old;
+ do {
+ $old = $string;
+ for my $k (@{$subst->{lempty}}) {
+ my $k2 = $k;
+ $k2 =~ s/^\^//;
+ if ($unsubst =~ m/^(.*)\$\{$k2\}/) {
+ my $prefix = $1;
+ # XXX avoid infinite loop
+ next if $string =~
m/\Q$prefix\E\$\{\Q$k2\E\}/;
+ $string =~
s/^\Q$prefix\E/$prefix\$\{$k2\}/;
+ }
+ # TODO we could also try based on suffixes ?
}
- # TODO we could also try based on suffixes ?
- }
- } while ($old ne $string);
+ } while ($old ne $string);
+ }
+
$context->adjust(\$string);
+
return $string;
}
Index: infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm,v
retrieving revision 1.16
diff -u -p -r1.16 PyPI.pm
--- infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm 16 May 2019 16:01:10
-0000 1.16
+++ infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm 16 May 2019 18:37:46
-0000
@@ -50,6 +50,18 @@ sub get_ver_info
return 1;
}
+sub make_plist
+{
+ my ($self, @args) = @_;
+
+ local $ENV{FLAVOR} = 'python3'
+ if $self->{FLAVORS} && $self->{FLAVORS} =~ /\bpython3\b/;
+
+ my $ret = $self->SUPER::make_plist(@args);
+
+ return $ret;
+}
+
sub name_new_port
{
my ( $self, $di ) = @_;