#include "src/include/pmix_config.h"
#include "pmix_common.h"
#include <string.h>
#include "src/mca/base/pmix_base.h"
#include "src/mca/mca.h"
#include "src/util/pmix_error.h"
#include "src/util/pmix_show_help.h"
#include "src/mca/ptl/base/base.h"
int pmix_ptl_base_select(void)
{
pmix_mca_base_component_list_item_t *cli = NULL;
pmix_ptl_base_component_t *component = NULL;
pmix_mca_base_module_t *mod;
pmix_ptl_module_t *pmod;
int rc, pri, best_pri = -1;
;
bool inserted = false;
if (pmix_ptl_base.selected) {
return PMIX_SUCCESS;
}
pmix_ptl_base.selected = true;
PMIX_LIST_FOREACH (cli, &pmix_ptl_base_framework.framework_components,
pmix_mca_base_component_list_item_t) {
component = (pmix_ptl_base_component_t *) cli->cli_component;
pmix_output_verbose(5, pmix_ptl_base_framework.framework_output,
"mca:ptl:select: checking available component %s",
component->base.pmix_mca_component_name);
rc = component->base.pmix_mca_query_component(&mod, &pri);
if (PMIX_SUCCESS != rc || NULL == mod) {
continue;
}
pmod = (pmix_ptl_module_t *) mod;
if (NULL != pmod->init && PMIX_SUCCESS != pmod->init()) {
continue;
}
if (best_pri < pri) {
best_pri = pri;
if (NULL != pmix_ptl.finalize) {
pmix_ptl.finalize();
}
pmix_ptl = *pmod;
inserted = true;
}
}
if (!inserted) {
pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "PTL");
return PMIX_ERR_SILENT;
}
pmix_output_verbose(5, pmix_ptl_base_framework.framework_output,
"mca:ptl:select: using component %s", pmix_ptl.name);
return PMIX_SUCCESS;
}