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

Reply via email to