#if !defined(PMIX_MCA_BASE_FRAMEWORK_H)
# define PMIX_MCA_BASE_FRAMEWORK_H
# include "src/include/pmix_config.h"
# include "src/class/pmix_list.h"
# include "src/mca/mca.h"
enum pmix_mca_base_register_flag_t {
PMIX_MCA_BASE_REGISTER_DEFAULT = 0,
PMIX_MCA_BASE_REGISTER_ALL = 1,
PMIX_MCA_BASE_REGISTER_STATIC_ONLY = 2
};
typedef enum pmix_mca_base_register_flag_t pmix_mca_base_register_flag_t;
enum pmix_mca_base_open_flag_t {
PMIX_MCA_BASE_OPEN_DEFAULT = 0,
PMIX_MCA_BASE_OPEN_FIND_COMPONENTS = 1,
PMIX_MCA_BASE_OPEN_STATIC_ONLY = 2,
};
typedef enum pmix_mca_base_open_flag_t pmix_mca_base_open_flag_t;
typedef int (*pmix_mca_base_framework_register_params_fn_t)(pmix_mca_base_register_flag_t flags);
typedef int (*pmix_mca_base_framework_open_fn_t)(pmix_mca_base_open_flag_t flags);
typedef int (*pmix_mca_base_framework_close_fn_t)(void);
typedef enum {
PMIX_MCA_BASE_FRAMEWORK_FLAG_DEFAULT = 0,
PMIX_MCA_BASE_FRAMEWORK_FLAG_NOREGISTER = 1,
PMIX_MCA_BASE_FRAMEWORK_FLAG_REGISTERED = 2,
PMIX_MCA_BASE_FRAMEWORK_FLAG_NO_DSO = 4,
PMIX_MCA_BASE_FRAMEWORK_FLAG_OPEN = 8,
} pmix_mca_base_framework_flags_t;
typedef struct pmix_mca_base_framework_t {
char *framework_project;
char *framework_name;
const char *framework_description;
pmix_mca_base_framework_register_params_fn_t framework_register;
pmix_mca_base_framework_open_fn_t framework_open;
pmix_mca_base_framework_close_fn_t framework_close;
pmix_mca_base_framework_flags_t framework_flags;
int framework_refcnt;
const pmix_mca_base_component_t **framework_static_components;
char *framework_selection;
int framework_verbose;
int framework_output;
pmix_list_t framework_components;
pmix_list_t framework_failed_components;
} pmix_mca_base_framework_t;
PMIX_EXPORT int pmix_mca_base_framework_register(pmix_mca_base_framework_t *framework,
pmix_mca_base_register_flag_t flags);
PMIX_EXPORT int pmix_mca_base_framework_open(pmix_mca_base_framework_t *framework,
pmix_mca_base_open_flag_t flags);
PMIX_EXPORT int pmix_mca_base_framework_close(pmix_mca_base_framework_t *framework);
PMIX_EXPORT bool pmix_mca_base_framework_is_registered(struct pmix_mca_base_framework_t *framework);
PMIX_EXPORT bool pmix_mca_base_framework_is_open(struct pmix_mca_base_framework_t *framework);
# define PMIX_MCA_BASE_FRAMEWORK_DECLARE(project, name, description, registerfn, openfn, \
closefn, static_components, flags) \
pmix_mca_base_framework_t project##_##name##_base_framework \
= {.framework_project = #project, \
.framework_name = #name, \
.framework_description = description, \
.framework_register = registerfn, \
.framework_open = openfn, \
.framework_close = closefn, \
.framework_flags = flags, \
.framework_refcnt = 0, \
.framework_static_components = static_components, \
.framework_selection = NULL, \
.framework_verbose = 0, \
.framework_output = -1}
#endif