summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/OpenSLX/Basics.pm17
-rw-r--r--os-plugins/OpenSLX/OSPlugin/Engine.pm15
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) {