diff options
-rw-r--r-- | lib/OpenSLX/Basics.pm | 17 | ||||
-rw-r--r-- | os-plugins/OpenSLX/OSPlugin/Engine.pm | 15 |
2 files changed, 23 insertions, 9 deletions
diff --git a/lib/OpenSLX/Basics.pm b/lib/OpenSLX/Basics.pm index a9e017d2..fab5554a 100644 --- a/lib/OpenSLX/Basics.pm +++ b/lib/OpenSLX/Basics.pm @@ -602,8 +602,9 @@ sub instantiateClass my $flags = shift || {}; checkParams($flags, { - 'pathToClass' => '?', - 'version' => '?' + 'acceptMissing' => '?', + 'pathToClass' => '?', + 'version' => '?', }); my $pathToClass = $flags->{pathToClass}; my $requestedVersion = $flags->{version}; @@ -611,13 +612,15 @@ sub instantiateClass my $moduleName = defined $pathToClass ? "$pathToClass/$class" : $class; $moduleName =~ s[::][/]g; $moduleName .= '.pm'; - unless (eval { require $moduleName } ) { - if ($! == 2) { + + if (!eval { require $moduleName } ) { + # check if module does not exists anywhere in search path + if (!-e $moduleName) { + return if $flags->{acceptMissing}; die _tr("Module '%s' not found!\n", $moduleName); } - else { - die _tr("Unable to load module '%s' (%s)\n", $moduleName, $@); - } + # some other error (probably compilation problems) + die _tr("Unable to load module '%s' (%s)\n", $moduleName, $@); } if (defined $requestedVersion) { my $classVersion = $class->VERSION; diff --git a/os-plugins/OpenSLX/OSPlugin/Engine.pm b/os-plugins/OpenSLX/OSPlugin/Engine.pm index f51e155f..61b835a4 100644 --- a/os-plugins/OpenSLX/OSPlugin/Engine.pm +++ b/os-plugins/OpenSLX/OSPlugin/Engine.pm @@ -472,15 +472,26 @@ sub _loadPlugin push @distroModules, $distroName; push @distroModules, 'Base'; for my $distroModule (@distroModules) { - last if eval { + my $loaded = eval { vlog(1, "trying distro-module $distroModule..."); $distro = instantiateClass( 'OpenSLX::Distro::' . $distroModule, - { pathToClass => $self->{'plugin-path'} } + { + pathToClass => $self->{'plugin-path'}, + acceptMissing => 1, + } ); + return 0 if !$distro; vlog(1, "using $distroModule."); 1; }; + last if $loaded; + if (!defined $loaded) { + vlog(0, _tr( + "Error when trying to load distro module '%s':\n%s", + $distroModule, $@ + )); + } } shift @INC; if (!$distro) { |