2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

Meta.pm: add inheritance marking

git-svn-id: https://svn.fhem.de/fhem/trunk@19072 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2019-03-30 15:45:40 +00:00
parent 47de6b340b
commit b9a7127ae8

View File

@ -19,7 +19,6 @@ use warnings;
use GPUtils qw(GP_Import);
use File::stat;
use Encode;
use Data::Dumper;
# Run before module compilation
BEGIN {
@ -1565,22 +1564,142 @@ m/(^#\s+(?:\d{1,2}\.\d{1,2}\.(?:\d{2}|\d{4})\s+)?[^v\d]*(v?(?:\d{1,3}\.\d{1,3}(?
%{ $pkgMeta->{prereqs}{runtime}{$pkgIreq} }
)
{
$modMeta->{prereqs}{runtime}{$pkgIreq}
{$pkgI} =
$pkgMeta->{prereqs}{runtime}{$pkgIreq}
{$pkgI}
if (
my $isPerlPragma =
FHEM::Meta::ModuleIsPerlPragma($pkgI);
my $isPerlCore =
$isPerlPragma
? 0
: FHEM::Meta::ModuleIsPerlCore($pkgI);
next
if ( $isPerlPragma
|| ( $isPerlCore && $pkgI ne 'perl' ) );
# Do not inherit perl scanner if the author
# has provided META.json
next
if ( $pkg eq 'Meta'
&& $pkgI eq
'Perl::PrereqScanner::NotQuiteLite'
&& defined( $modMeta->{x_prereqs_src} )
&& $modMeta->{x_prereqs_src} eq
'META.json' );
my $prio = $pkgIreq;
# avoid duplicates due to already
# existing dependency w/ different prio
my $inh = 0;
my $v;
if ( $pkgIreq eq 'requires' ) {
if (
exists(
$modMeta->{prereqs}{runtime}
{recommends}{$pkgI}
)
)
{
# keep version info
$v =
$modMeta->{prereqs}{runtime}
{recommends}{$pkgI};
delete $modMeta->{prereqs}{runtime}
{recommends}{$pkgI};
}
elsif (
exists(
$modMeta->{prereqs}{runtime}
{suggests}{$pkgI}
)
)
{
# keep version info
$v =
$modMeta->{prereqs}{runtime}
{suggests}{$pkgI};
delete $modMeta->{prereqs}{runtime}
{suggests}{$pkgI};
}
}
elsif ( $pkgIreq eq 'recommends' ) {
if (
exists(
$modMeta->{prereqs}{runtime}
{requires}{$pkgI}
)
)
{
# higher prio
$prio = 'requires';
}
elsif (
exists(
$modMeta->{prereqs}{runtime}
{suggests}{$pkgI}
)
)
{
# keep version info
$v =
$modMeta->{prereqs}{runtime}
{suggests}{$pkgI};
delete $modMeta->{prereqs}{runtime}
{suggests}{$pkgI};
}
}
elsif ( $pkgIreq eq 'suggests' ) {
if (
exists(
$modMeta->{prereqs}{runtime}
{requires}{$pkgI}
)
)
{
# higher prio
$prio = 'requires';
}
elsif (
exists(
$modMeta->{prereqs}{runtime}
{recommends}{$pkgI}
)
)
{
# higher prio
$prio = 'recommends';
}
}
$v =
$v
&& $v > $pkgMeta->{prereqs}{runtime}
{$pkgIreq}{$pkgI}
? $v
: $pkgMeta->{prereqs}{runtime}
{$pkgIreq}{$pkgI};
if (
!exists(
$modMeta->{prereqs}{runtime}
{$pkgIreq}{$pkgI}
{$prio}{$pkgI}
)
|| ( $pkgMeta->{prereqs}{runtime}
{$pkgIreq}{$pkgI} ne '0'
&& $modMeta->{prereqs}{runtime}
{$pkgIreq}{$pkgI} ne
$pkgMeta->{prereqs}{runtime}
{$pkgIreq}{$pkgI} )
);
{$prio}{$pkgI} < $v )
)
{
$modMeta->{prereqs}{runtime}{$prio}
{$pkgI} = $v;
# remember this was inherited from
# another package
push @{ $modMeta->{prereqs}{runtime}
{x_inherited}{$pkgI} },
$pkg;
}
}
}
}
@ -2982,7 +3101,6 @@ sub __SetXVersion {
"perl": 5.014,
"GPUtils": 0,
"File::stat": 0,
"Data::Dumper": 0,
"Encode": 0,
"version": 0
},