This should make portgen(1) recognize the EXTRACT_CASES in
bsd.port.mk(5) and set EXTRACT_SUFX correctly.
I didn't adjust Ruby handling because I don't really understand how the
ruby gems things work, but it appears all ruby modules are just gems and
so nothing to set.
I do feel a little bad about not documenting how to write a new
PortGen::Port subclass, but not completely sure where those docs should
live.
Anyway, Comments, OKs?
Index: infrastructure/lib/OpenBSD/PortGen/Port.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/OpenBSD/PortGen/Port.pm,v
retrieving revision 1.15
diff -u -p -r1.15 Port.pm
--- infrastructure/lib/OpenBSD/PortGen/Port.pm 13 May 2019 01:30:05 -0000
1.15
+++ infrastructure/lib/OpenBSD/PortGen/Port.pm 13 May 2019 20:37:31 -0000
@@ -132,6 +132,40 @@ sub set_pkgname {
$self->{PKGNAME} = $pkgname;
}
+sub pick_distfile
+{
+ my ( $self, @files ) = @_;
+
+ my ($distname, $ext);
+ foreach my $filename (@files) {
+ # from EXTRACT_CASES
+ ($distname, $ext) = $filename =~ /^(.*)(\.(?:
+ tar\.xz | tar\.lzma
+ | tar.lz
+ | zip
+ | tar\.bz2 | tbz2 | tbz
+ | shar\.gz | shar\.Z | sh\.Z | sh\.gz
+ | shar | shar\.sh
+ | tar
+ | tar\.gz | tgz
+ ))$/xms;
+
+ # These are our preferred suffixes
+ if ( $ext eq '.tar.gz' ) {
+ $ext = '';
+ last;
+ }
+ elsif ( $ext eq '.tgz' or $ext eq '.tar' ) {
+ last;
+ }
+ }
+
+ $self->add_notice("Failed to pick a distname from @files") unless
$distname;
+
+ $self->set_other( EXTRACT_SUFX => $ext ) if $ext;
+ return $self->set_distname($distname);
+}
+
sub set_distname
{
my ( $self, $distname ) = @_;
Index: infrastructure/lib/OpenBSD/PortGen/Port/CPAN.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/OpenBSD/PortGen/Port/CPAN.pm,v
retrieving revision 1.7
diff -u -p -r1.7 CPAN.pm
--- infrastructure/lib/OpenBSD/PortGen/Port/CPAN.pm 11 May 2019 19:36:27
-0000 1.7
+++ infrastructure/lib/OpenBSD/PortGen/Port/CPAN.pm 13 May 2019 20:37:31
-0000
@@ -182,7 +182,7 @@ sub fill_in_makefile
my ( $self, $di, $vi ) = @_;
$self->set_comment( $di->{abstract} );
- $self->set_distname( $di->{name} );
+ $self->pick_distfile( $di->{archive} );
$self->set_license(
$di->{metadata}->{license}[0] eq 'unknown'
? ''
@@ -192,12 +192,6 @@ sub fill_in_makefile
$self->set_other( 'CPAN_AUTHOR', $di->{author} )
if $self->needs_author($di);
-
- my ($sufx) = $di->{archive} =~ /(\.[\.A-Za-z]+)$/;
-
- if ( defined $sufx and $sufx ne '.tar.gz' ) {
- $self->set_other( 'EXTRACT_SUFX', $sufx );
- }
}
sub postextract
Index: infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm,v
retrieving revision 1.12
diff -u -p -r1.12 PyPI.pm
--- infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm 12 May 2019 20:23:33
-0000 1.12
+++ infrastructure/lib/OpenBSD/PortGen/Port/PyPI.pm 13 May 2019 20:37:31
-0000
@@ -68,9 +100,22 @@ sub fill_in_makefile
$self->set_other( 'MODPY_PI', 'Yes' );
$self->set_other( 'MODPY_SETUPTOOLS', 'Yes' );
$self->set_comment( $di->{info}{summary} );
- $self->set_other( 'MODPY_EGG_VERSION', $di->{info}{version} );
- $self->set_distname( "$di->{info}{name}" . '-${MODPY_EGG_VERSION}' );
- my $pkgname = $di->{info}->{name};
+
+ my $pkgname = $di->{info}->{name};
+ my $version = $di->{info}->{version};
+ my $distname = $self->pick_distfile(
+ map { $_->{filename} } @{ $di->{urls} || [] } );
+
+ $self->add_notice("distname $distname does not match pkgname $pkgname")
+ unless $distname !~ /^\Q$pkgname/;
+
+ $self->set_other( 'MODPY_EGG_VERSION', $version );
+ $distname =~ s/-\Q$version\E$/-\$\{MODPY_EGG_VERSION\}/
+ or $self->add_notice("Didn't set distname version to
\${MODPY_EGG_VERSION}");
+
+ $self->set_distname($distname);
+
+ # TODO: These assume the PKGNAME is the DISTNAME
my $to_lower = $pkgname =~ /\p{Upper}/ ? ':L' : '';
if ($pkgname =~ /^python-/) {
$self->set_pkgname("\${DISTNAME:S/^python-/py-/$to_lower}");
@@ -78,6 +123,7 @@ sub fill_in_makefile
elsif ($pkgname !~ /^py-/) {
$self->set_pkgname("py-\${DISTNAME$to_lower}");
}
+
$self->set_modules('lang/python');
$self->set_other( 'HOMEPAGE', $di->{info}{home_page} );
$self->set_license( $di->{info}{license} );