SecBSD's official ports repository
This commit is contained in:
commit
2c0afcbbf3
64331 changed files with 5339189 additions and 0 deletions
152
infrastructure/lib/OpenBSD/PortGen/Port/Ruby.pm
Normal file
152
infrastructure/lib/OpenBSD/PortGen/Port/Ruby.pm
Normal file
|
@ -0,0 +1,152 @@
|
|||
# $OpenBSD: Ruby.pm,v 1.6 2020/04/17 02:14:01 afresh1 Exp $
|
||||
#
|
||||
# Copyright (c) 2015 Giannis Tsaraias <tsg@openbsd.org>
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
package OpenBSD::PortGen::Port::Ruby;
|
||||
|
||||
use 5.012;
|
||||
use warnings;
|
||||
|
||||
use parent 'OpenBSD::PortGen::Port';
|
||||
|
||||
use OpenBSD::PortGen::Dependency;
|
||||
use OpenBSD::PortGen::Utils qw( module_in_ports );
|
||||
|
||||
sub ecosystem_prefix
|
||||
{
|
||||
my $self = shift;
|
||||
return 'ruby-';
|
||||
}
|
||||
|
||||
sub postextract
|
||||
{
|
||||
}
|
||||
|
||||
sub base_url
|
||||
{
|
||||
my $self = shift;
|
||||
return 'https://rubygems.org/api/v1/';
|
||||
}
|
||||
|
||||
sub get_dist_info
|
||||
{
|
||||
my ( $self, $module ) = @_;
|
||||
return $self->get_json("gems/$module.json");
|
||||
}
|
||||
|
||||
sub get_ver_info
|
||||
{
|
||||
my ( $self, $module ) = @_;
|
||||
|
||||
return @{ $self->get_json("versions/$module.json") }[0];
|
||||
}
|
||||
|
||||
sub name_new_port
|
||||
{
|
||||
my ( $self, $di ) = @_;
|
||||
|
||||
my $name = $self->SUPER::name_new_port(
|
||||
ref $di ? $di->{name} : $di );
|
||||
$name = "ruby/$name" unless $name =~ m{/};
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
sub fill_in_makefile
|
||||
{
|
||||
my ( $self, $di, $vi ) = @_;
|
||||
|
||||
$self->set_comment( $vi->{summary} );
|
||||
$self->set_distname("$di->{name}-$di->{version}");
|
||||
$self->set_pkgname('${DISTNAME:S/ruby-//}')
|
||||
if $di->{name} =~ /^ruby-/;
|
||||
$self->set_modules('lang/ruby');
|
||||
$self->set_other( 'HOMEPAGE', $di->{homepage_uri} );
|
||||
$self->set_license( @{ $vi->{licenses} }[0] );
|
||||
$self->set_other( 'CONFIGURE_STYLE', "ruby gem" );
|
||||
$self->set_descr( $di->{info} || $vi->{summary} );
|
||||
}
|
||||
|
||||
sub try_building
|
||||
{
|
||||
my $self = shift;
|
||||
$self->make_fake();
|
||||
}
|
||||
|
||||
sub get_deps
|
||||
{
|
||||
my ( $self, $di ) = @_;
|
||||
my $deps = OpenBSD::PortGen::Dependency->new();
|
||||
|
||||
return unless $di->{dependencies};
|
||||
|
||||
for my $dep ( @{ $di->{dependencies}->{runtime} } ) {
|
||||
my ( $name, $req ) = ( $dep->{name}, $dep->{requirements} );
|
||||
|
||||
next if $self->is_standard_module($name);
|
||||
|
||||
my $port = module_in_ports( $name, 'ruby-' )
|
||||
|| $self->name_new_port($name);
|
||||
|
||||
$req =~ s/ //g;
|
||||
|
||||
# support pessimistic version requirement:
|
||||
# turn ~> 3.0.3 into >=3.0.3,<3.1.0
|
||||
# and ~> 1.1 into >=1.1,<2.0
|
||||
if ( $req =~ /~>([\d\.]+)/ ) {
|
||||
my $ver = $1;
|
||||
$req =~ s/~>/>=/;
|
||||
$ver =~ s/(\d)\.\d$/($1+1).".0"/e;
|
||||
$req .= ",<$ver";
|
||||
}
|
||||
|
||||
# turn =6.0.2.2 into ==6.0.2.2
|
||||
$req =~ s/^=\b/==/;
|
||||
|
||||
$deps->add_run( $port . ',${MODRUBY_FLAVOR}', $req );
|
||||
|
||||
# gems only understand runtime and development deps
|
||||
$deps->add_build('${RUN_DEPENDS}');
|
||||
|
||||
# don't have this one, port it
|
||||
if ( $port =~ m{^ruby/} ) {
|
||||
my $o = OpenBSD::PortGen::Port::Ruby->new();
|
||||
$o->port($name);
|
||||
$self->add_notice( $o->notices );
|
||||
}
|
||||
}
|
||||
|
||||
return $deps->format();
|
||||
}
|
||||
|
||||
sub is_standard_module
|
||||
{
|
||||
my ( $self, $module, $ruby_ver ) = @_;
|
||||
$ruby_ver //= '2.2';
|
||||
|
||||
return -e "/usr/local/lib/ruby/$ruby_ver/$module.rb";
|
||||
}
|
||||
|
||||
sub get_config_style
|
||||
{
|
||||
my ( $self, $di, $wrksrc ) = @_;
|
||||
|
||||
if ( -d "$wrksrc/ext" ) {
|
||||
return "ruby gem ext";
|
||||
}
|
||||
return "ruby gem";
|
||||
}
|
||||
|
||||
1;
|
Loading…
Add table
Add a link
Reference in a new issue