#include "src/include/pmix_config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pmix_common.h"
#include "src/class/pmix_list.h"
#include "src/mca/base/pmix_base.h"
#include "src/mca/base/pmix_mca_base_component_repository.h"
#include "src/mca/base/pmix_mca_base_framework.h"
#include "src/mca/mca.h"
#include "src/util/pmix_argv.h"
#include "src/util/pmix_error.h"
#include "src/util/pmix_output.h"
#include "src/util/pmix_show_help.h"
static int register_components(pmix_mca_base_framework_t *framework);
int pmix_mca_base_framework_components_register(pmix_mca_base_framework_t *framework,
pmix_mca_base_register_flag_t flags)
{
bool open_dso_components = !(flags & PMIX_MCA_BASE_REGISTER_STATIC_ONLY);
bool ignore_requested = !!(flags & PMIX_MCA_BASE_REGISTER_ALL);
int ret;
ret = pmix_mca_base_component_find(NULL, framework, ignore_requested, open_dso_components);
if (PMIX_SUCCESS != ret) {
return ret;
}
return register_components(framework);
}
static int register_components(pmix_mca_base_framework_t *framework)
{
int ret;
pmix_mca_base_component_t *component;
pmix_mca_base_component_list_item_t *cli, *next;
int output_id = framework->framework_output;
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"pmix:mca: base: components_register: registering framework %s components",
framework->framework_name);
PMIX_LIST_FOREACH_SAFE (cli, next, &framework->framework_components,
pmix_mca_base_component_list_item_t) {
component = (pmix_mca_base_component_t *) cli->cli_component;
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"pmix:mca: base: components_register: found loaded component %s",
component->pmix_mca_component_name);
if (NULL == component->pmix_mca_register_component_params) {
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"pmix:mca: base: components_register: "
"component %s has no register or open function",
component->pmix_mca_component_name);
ret = PMIX_SUCCESS;
} else {
ret = component->pmix_mca_register_component_params();
}
if (PMIX_SUCCESS != ret) {
if (PMIX_ERR_NOT_AVAILABLE != ret) {
if (pmix_mca_base_show_load_errors(component->pmix_mca_type_name,
component->pmix_mca_component_name)) {
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_ERROR, output_id,
"pmix:mca: base: components_register: component %s "
"/ %s register function failed",
component->pmix_mca_type_name,
component->pmix_mca_component_name);
}
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"pmix:mca: base: components_register: "
"component %s register function failed",
component->pmix_mca_component_name);
}
pmix_list_remove_item(&framework->framework_components, &cli->super);
PMIX_RELEASE(cli);
continue;
}
if (NULL != component->pmix_mca_register_component_params) {
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"pmix:mca: base: components_register: "
"component %s register function successful",
component->pmix_mca_component_name);
}
}
return PMIX_SUCCESS;
}