Improved patch below. Now really does the check for top-level in
Port.pm and uses ruby_versions in is_standard_module too.
diff --git infrastructure/lib/OpenBSD/PortGen/Port.pm
infrastructure/lib/OpenBSD/PortGen/Port.pm
index f5334a72c01..bebc22ff047 100644
--- infrastructure/lib/OpenBSD/PortGen/Port.pm
+++ infrastructure/lib/OpenBSD/PortGen/Port.pm
@@ -552,6 +552,12 @@ sub make_port
my $old_cwd = getcwd();
my $portname = $self->name_new_port($di);
+ if ( -e ports_dir() . "/$portname" ) {
+ $self->add_notice(
+ "Not porting $portname, already exists in " .
ports_dir() );
+ return;
+ }
+
if ( -e base_dir() . "/$portname" ) {
$self->add_notice(
"Not porting $portname, already exists in " .
base_dir() );
diff --git infrastructure/lib/OpenBSD/PortGen/Port/Ruby.pm
infrastructure/lib/OpenBSD/PortGen/Port/Ruby.pm
index 1703fba5b89..48336923022 100644
--- infrastructure/lib/OpenBSD/PortGen/Port/Ruby.pm
+++ infrastructure/lib/OpenBSD/PortGen/Port/Ruby.pm
@@ -21,8 +21,10 @@ use warnings;
use parent 'OpenBSD::PortGen::Port';
+use List::Util qw( reduce );
+
use OpenBSD::PortGen::Dependency;
-use OpenBSD::PortGen::Utils qw( module_in_ports );
+use OpenBSD::PortGen::Utils qw( module_in_ports ports_dir );
sub ecosystem_prefix
{
@@ -53,12 +55,26 @@ sub get_ver_info
return @{ $self->get_json("versions/$module.json") }[0];
}
+sub ruby_versions
+{
+ state @ruby_versions = do {
+ my $ruby_dir = ports_dir() . '/lang/ruby';
+ local $ENV{ECHO_MSG} = 'true';
+ chomp( my @output = qx{ make -C $ruby_dir show=REV } );
+ @output;
+ };
+ return @ruby_versions;
+}
+
sub name_new_port
{
my ( $self, $di ) = @_;
- my $name = $self->SUPER::name_new_port(
- ref $di ? $di->{name} : $di );
+ my $gem = ref $di ? $di->{name} : $di;
+ my @flavors = map s/\.//r, $self->ruby_versions;
+ my $name = reduce { $a || module_in_ports( $gem, "ruby$b-" ) } 0,
+ @flavors;
+ $name ||= $self->SUPER::name_new_port( $gem );
$name = "ruby/$name" unless $name =~ m{/};
return $name;
@@ -97,8 +113,7 @@ sub get_deps
next if $self->is_standard_module($name);
- my $port = module_in_ports( $name, 'ruby-' )
- || $self->name_new_port($name);
+ my $port = $self->name_new_port($name);
$req =~ s/ //g;
@@ -133,10 +148,10 @@ sub get_deps
sub is_standard_module
{
- my ( $self, $module, $ruby_ver ) = @_;
- $ruby_ver //= '2.2';
+ my ( $self, $module ) = @_;
- return -e "/usr/local/lib/ruby/$ruby_ver/$module.rb";
+ return reduce { $a || -e "/usr/local/lib/ruby/$b/$module.rb"} 0,
+ $self->ruby_versions;
}
sub get_config_style