X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=modulemanager;h=1d9f42b8807c17929cbcc05281b82b5a642d608f;hb=4bb6a09697b5f55a66bba431bc2ac98b1535973d;hp=37aebac9bf4a1e65c262712093be93c582e43603;hpb=a9f3a0a0d4960cbd579e88b3a0e98867c7264a7a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/modulemanager b/modulemanager index 37aebac9b..1d9f42b88 100755 --- a/modulemanager +++ b/modulemanager @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use strict; use warnings FATAL => qw(all); use LWP::Simple; @@ -101,6 +101,18 @@ getmodules(1); # determine core version `./src/version.sh` =~ /InspIRCd-([0-9.]+)/ or die "Cannot determine inspircd version"; $installed{core} = $1; +for my $mod (keys %modules) { + MODVER: for my $mver (keys %{$modules{$mod}}) { + for my $dep (@{$modules{$mod}{$mver}{depends}}) { + next unless $dep =~ /^core (.*)/; + if (!ver_in_range($installed{core}, $1)) { + delete $modules{$mod}{$mver}; + next MODVER; + } + } + } + delete $modules{$mod} unless %{$modules{$mod}}; +} $modules{core}{$1} = { url => 'NONE', depends => [], @@ -129,10 +141,9 @@ my %todo = %installed; sub ver_cmp { ($a,$b) = @_ if @_; - # string versions first, git IDs - if ($a =~ /[a-z0-9]{40}/ or $b =~ /[a-z0-9]{40}/) + if ($a !~ /^[0-9.]+$/ or $b !~ /^[0-9.]+$/) { - # it's a string version. compare them as such. + # not a valid version number, don't try to sort return $a ne $b; } @@ -140,7 +151,7 @@ sub ver_cmp { my @a = split /\./, $a; my @b = split /\./, $b; push @a, 0 while $#a < $#b; - push @b, 0 while $#b < $#a; + push @b, ($_[2] || 0) while $#b < $#a; for my $i (0..$#a) { my $d = $a[$i] <=> $b[$i]; return $d if $d; @@ -151,13 +162,13 @@ sub ver_cmp { sub ver_in_range { my($ver, $range) = @_; return 1 unless defined $range; + my($l,$h) = ($range, $range); if ($range =~ /(.*)-(.*)/) { - my($l,$h) = ($1,$2); - return 0 if $l && ver_cmp($ver, $l) < 0; - return 0 if $h && ver_cmp($ver, $h) > 0; - return 1; + ($l,$h) = ($1,$2); } - return !ver_cmp($ver, $range); + return 0 if $l && ver_cmp($ver, $l) < 0; + return 0 if $h && ver_cmp($ver, $h, 9999) > 0; + return 1; } sub find_mod_in_range { @@ -185,7 +196,7 @@ sub resolve_deps { my $ver = $todo{$mod}; my $info = $modules{$mod}{$ver} or die "no dependency information on $mod $ver"; for my $dep (@{$info->{depends}}) { - $dep =~ /^(\S+)(?: \S+)?/ or die "Bad dependency $dep from $info->{from}"; + $dep =~ /^(\S+)(?: (\S+))?/ or die "Bad dependency $dep from $info->{from}"; my($depmod, $depvers) = ($1,$2); next if $todo{$depmod} && ver_in_range($todo{$depmod}, $depvers); # need to install a dependency @@ -278,15 +289,11 @@ resolve_deps(0); $| = 1; # immediate print of lines without \n -# whether or not to invoke ./configure -modupdate after processing -my $regen_modules_list = 0; - print "Processing changes for $action...\n"; for my $mod (keys %installed) { next if $todo{$mod}; print "Uninstalling $mod $installed{$mod}\n"; unlink "src/modules/$mod.cpp"; - $regen_modules_list = 1; } my $count = scalar keys %todo; @@ -312,7 +319,6 @@ for my $mod (sort keys %todo) { } else { print " - HTTP $stat\n"; } - $regen_modules_list = 1; } # write database of installed versions @@ -323,10 +329,4 @@ foreach my $key (keys %mod_versions) } close SRC; -# regenerate makefiles if necessary -if ($regen_modules_list) -{ - print "Done... Re-generating makefiles\n"; - system "./configure -modupdate"; -} print "Finished!\n";