- my $inst = create_buildsystem_instance($system, build_step=>$step);
- if ($inst->is_buildable()) {
- return $inst;
+ my $inst = create_buildsystem_instance($system, @_);
+
+ # Only derived (i.e. more specific) build system can be
+ # considered beyond the currently selected one.
+ next if defined $selected && !$inst->isa(ref $selected);
+
+ # If the build system says it is auto-buildable at the current
+ # step and it can provide more specific information about its
+ # status than its parent (if any), auto-select it.
+ my $level = $inst->check_auto_buildable($step);
+ if ($level > $selected_level) {
+ $selected = $inst;
+ $selected_level = $level;