
This commit is a rework of the component repository. The changes included in this commit are: - Remove the component dependency code based off .ompi_info files. This code is legacy code dating back 10 years that and is no longer used. - Move the plugin scanning code to the component repository. New calls have been added to add new scanning paths, query available components, and dlopen/load components. - Pass the framework down to mca_base_component_find/filter. Eventually the framework structure will be used to further validate components before they are used. - Add support to the MCA framework system to disable scanning for dlopened components on open (support already existed in register). This is really only relevant to installdirs as it has no register function and no DSO components. Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
175 строки
7.8 KiB
C
175 строки
7.8 KiB
C
/*
|
|
* Copyright (c) 2006-2012 Los Alamos National Security, LLC. All rights
|
|
* reserved.
|
|
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
|
|
* Copyright (c) 2010 Sandia National Laboratories. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*
|
|
*/
|
|
|
|
#include "opal_config.h"
|
|
|
|
#include "opal/constants.h"
|
|
#include "opal/mca/mca.h"
|
|
#include "opal/mca/installdirs/installdirs.h"
|
|
#include "opal/mca/installdirs/base/base.h"
|
|
#include "opal/mca/installdirs/base/static-components.h"
|
|
|
|
opal_install_dirs_t opal_install_dirs;
|
|
|
|
#define CONDITIONAL_COPY(target, origin, field) \
|
|
do { \
|
|
if (origin.field != NULL && target.field == NULL) { \
|
|
target.field = origin.field; \
|
|
} \
|
|
} while (0)
|
|
|
|
static int
|
|
opal_installdirs_base_open(mca_base_open_flag_t flags)
|
|
{
|
|
mca_base_component_list_item_t *component_item;
|
|
int ret;
|
|
|
|
ret = mca_base_framework_components_open (&opal_installdirs_base_framework,
|
|
flags);
|
|
if (OPAL_SUCCESS != ret) {
|
|
return ret;
|
|
}
|
|
|
|
OPAL_LIST_FOREACH(component_item, &opal_installdirs_base_framework.framework_components, mca_base_component_list_item_t) {
|
|
const opal_installdirs_base_component_t *component =
|
|
(const opal_installdirs_base_component_t *) component_item->cli_component;
|
|
|
|
/* copy over the data, if something isn't already there */
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
prefix);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
exec_prefix);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
bindir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
sbindir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
libexecdir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
datarootdir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
datadir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
sysconfdir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
sharedstatedir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
localstatedir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
libdir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
includedir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
infodir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
mandir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
opaldatadir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
opallibdir);
|
|
CONDITIONAL_COPY(opal_install_dirs, component->install_dirs_data,
|
|
opalincludedir);
|
|
}
|
|
|
|
/* expand out all the fields */
|
|
opal_install_dirs.prefix =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.prefix);
|
|
opal_install_dirs.exec_prefix =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.exec_prefix);
|
|
opal_install_dirs.bindir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.bindir);
|
|
opal_install_dirs.sbindir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.sbindir);
|
|
opal_install_dirs.libexecdir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.libexecdir);
|
|
opal_install_dirs.datarootdir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.datarootdir);
|
|
opal_install_dirs.datadir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.datadir);
|
|
opal_install_dirs.sysconfdir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.sysconfdir);
|
|
opal_install_dirs.sharedstatedir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.sharedstatedir);
|
|
opal_install_dirs.localstatedir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.localstatedir);
|
|
opal_install_dirs.libdir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.libdir);
|
|
opal_install_dirs.includedir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.includedir);
|
|
opal_install_dirs.infodir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.infodir);
|
|
opal_install_dirs.mandir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.mandir);
|
|
opal_install_dirs.opaldatadir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.opaldatadir);
|
|
opal_install_dirs.opallibdir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.opallibdir);
|
|
opal_install_dirs.opalincludedir =
|
|
opal_install_dirs_expand_setup(opal_install_dirs.opalincludedir);
|
|
|
|
#if 0
|
|
fprintf(stderr, "prefix: %s\n", opal_install_dirs.prefix);
|
|
fprintf(stderr, "exec_prefix: %s\n", opal_install_dirs.exec_prefix);
|
|
fprintf(stderr, "bindir: %s\n", opal_install_dirs.bindir);
|
|
fprintf(stderr, "sbindir: %s\n", opal_install_dirs.sbindir);
|
|
fprintf(stderr, "libexecdir: %s\n", opal_install_dirs.libexecdir);
|
|
fprintf(stderr, "datarootdir: %s\n", opal_install_dirs.datarootdir);
|
|
fprintf(stderr, "datadir: %s\n", opal_install_dirs.datadir);
|
|
fprintf(stderr, "sysconfdir: %s\n", opal_install_dirs.sysconfdir);
|
|
fprintf(stderr, "sharedstatedir: %s\n", opal_install_dirs.sharedstatedir);
|
|
fprintf(stderr, "localstatedir: %s\n", opal_install_dirs.localstatedir);
|
|
fprintf(stderr, "libdir: %s\n", opal_install_dirs.libdir);
|
|
fprintf(stderr, "includedir: %s\n", opal_install_dirs.includedir);
|
|
fprintf(stderr, "infodir: %s\n", opal_install_dirs.infodir);
|
|
fprintf(stderr, "mandir: %s\n", opal_install_dirs.mandir);
|
|
fprintf(stderr, "pkgdatadir: %s\n", opal_install_dirs.pkgdatadir);
|
|
fprintf(stderr, "pkglibdir: %s\n", opal_install_dirs.pkglibdir);
|
|
fprintf(stderr, "pkgincludedir: %s\n", opal_install_dirs.pkgincludedir);
|
|
#endif
|
|
|
|
/* NTH: Is it ok not to close the components? If not we can add a flag
|
|
to mca_base_framework_components_close to indicate not to deregister
|
|
variable groups */
|
|
return OPAL_SUCCESS;
|
|
}
|
|
|
|
|
|
static int
|
|
opal_installdirs_base_close(void)
|
|
{
|
|
free(opal_install_dirs.prefix);
|
|
free(opal_install_dirs.exec_prefix);
|
|
free(opal_install_dirs.bindir);
|
|
free(opal_install_dirs.sbindir);
|
|
free(opal_install_dirs.libexecdir);
|
|
free(opal_install_dirs.datarootdir);
|
|
free(opal_install_dirs.datadir);
|
|
free(opal_install_dirs.sysconfdir);
|
|
free(opal_install_dirs.sharedstatedir);
|
|
free(opal_install_dirs.localstatedir);
|
|
free(opal_install_dirs.libdir);
|
|
free(opal_install_dirs.includedir);
|
|
free(opal_install_dirs.infodir);
|
|
free(opal_install_dirs.mandir);
|
|
free(opal_install_dirs.opaldatadir);
|
|
free(opal_install_dirs.opallibdir);
|
|
free(opal_install_dirs.opalincludedir);
|
|
|
|
return mca_base_framework_components_close (&opal_installdirs_base_framework, NULL);
|
|
}
|
|
|
|
/* Declare the installdirs framework */
|
|
MCA_BASE_FRAMEWORK_DECLARE(opal, installdirs, NULL, NULL, opal_installdirs_base_open,
|
|
opal_installdirs_base_close, mca_installdirs_base_static_components,
|
|
MCA_BASE_FRAMEWORK_FLAG_NOREGISTER | MCA_BASE_FRAMEWORK_FLAG_NO_DSO);
|