Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:47:22

0001 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
0002 /*
0003  * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
0004  *                         University Research and Technology
0005  *                         Corporation.  All rights reserved.
0006  * Copyright (c) 2004-2006 The University of Tennessee and The University
0007  *                         of Tennessee Research Foundation.  All rights
0008  *                         reserved.
0009  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
0010  *                         University of Stuttgart.  All rights reserved.
0011  * Copyright (c) 2004-2005 The Regents of the University of California.
0012  *                         All rights reserved.
0013  * Copyright (c) 2008-2011 Cisco Systems, Inc.  All rights reserved.
0014  * Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
0015  *                         reserved.
0016  * Copyright (c) 2016-2020 Intel, Inc.  All rights reserved.
0017  * Copyright (c) 2021-2022 Nanook Consulting.  All rights reserved.
0018  * $COPYRIGHT$
0019  *
0020  * Additional copyrights may follow
0021  *
0022  * $HEADER$
0023  */
0024 
0025 /** @file
0026  * This file presents the MCA variable interface.
0027  *
0028  * Note that there are two scopes for MCA variables: "normal" and
0029  * attributes.  Specifically, all MCA variables are "normal" -- some
0030  * are special and may also be found on attributes on communicators,
0031  * datatypes, or windows.
0032  *
0033  * In general, these functions are intended to be used as follows:
0034  *
0035  * - Creating MCA variables
0036  * -# Register a variable, get an index back
0037  * - Using MCA variables
0038  * -# Lookup a "normal" variable value on a specific index, or
0039  * -# Lookup an attribute variable on a specific index and
0040  *    communicator / datatype / window.
0041  *
0042  * MCA variables can be defined in multiple different places.  As
0043  * such, variables are \em resolved to find their value.  The order
0044  * of resolution is as follows:
0045  *
0046  * - An "override" location that is only available to be set via the
0047  *   pmix_mca_base_param API.
0048  * - Look for an environment variable corresponding to the MCA
0049  *   variable.
0050  * - See if a file contains the MCA variable (MCA variable files are
0051  *   read only once -- when the first time any mca_param_t function is
0052  *   invoked).
0053  * - If nothing else was found, use the variable's default value.
0054  *
0055  * Note that there is a second header file (pmix_mca_base_vari.h)
0056  * that contains several internal type declarations for the variable
0057  * system.  The internal file is only used within the variable system
0058  * itself; it should not be required by any other PMIX entities.
0059  */
0060 
0061 #ifndef PMIX_MCA_BASE_VAR_H
0062 #define PMIX_MCA_BASE_VAR_H
0063 
0064 #include "src/include/pmix_config.h"
0065 
0066 #include "src/class/pmix_list.h"
0067 #include "src/class/pmix_value_array.h"
0068 #include "src/mca/base/pmix_mca_base_framework.h"
0069 #include "src/mca/base/pmix_mca_base_var_enum.h"
0070 #include "src/mca/base/pmix_mca_base_var_group.h"
0071 #include "src/mca/mca.h"
0072 
0073 /**
0074  * The types of MCA variables.
0075  */
0076 typedef enum {
0077     /** The variable is of type int. */
0078     PMIX_MCA_BASE_VAR_TYPE_INT,
0079     /** The variable is of type unsigned int */
0080     PMIX_MCA_BASE_VAR_TYPE_UNSIGNED_INT,
0081     /** The variable is of type unsigned long */
0082     PMIX_MCA_BASE_VAR_TYPE_UNSIGNED_LONG,
0083     /** The variable is of type unsigned long long */
0084     PMIX_MCA_BASE_VAR_TYPE_UNSIGNED_LONG_LONG,
0085     /** The variable is of type size_t */
0086     PMIX_MCA_BASE_VAR_TYPE_SIZE_T,
0087     /** The variable is of type string. */
0088     PMIX_MCA_BASE_VAR_TYPE_STRING,
0089     /** The variable is of type string and contains version. */
0090     PMIX_MCA_BASE_VAR_TYPE_VERSION_STRING,
0091     /** The variable is of type bool */
0092     PMIX_MCA_BASE_VAR_TYPE_BOOL,
0093     /** The variable is of type double */
0094     PMIX_MCA_BASE_VAR_TYPE_DOUBLE,
0095     /** Maximum variable type. */
0096     PMIX_MCA_BASE_VAR_TYPE_MAX
0097 } pmix_mca_base_var_type_t;
0098 
0099 PMIX_EXPORT extern const char *pmix_var_type_names[];
0100 
0101 /**
0102  * Source of an MCA variable's value
0103  */
0104 typedef enum {
0105     /** The default value */
0106     PMIX_MCA_BASE_VAR_SOURCE_DEFAULT,
0107     /** The value came from the command line */
0108     PMIX_MCA_BASE_VAR_SOURCE_COMMAND_LINE,
0109     /** The value came from the environment */
0110     PMIX_MCA_BASE_VAR_SOURCE_ENV,
0111     /** The value came from a file */
0112     PMIX_MCA_BASE_VAR_SOURCE_FILE,
0113     /** The value came a "set" API call */
0114     PMIX_MCA_BASE_VAR_SOURCE_SET,
0115     /** The value came from the override file */
0116     PMIX_MCA_BASE_VAR_SOURCE_OVERRIDE,
0117 
0118     /** Maximum source type */
0119     PMIX_MCA_BASE_VAR_SOURCE_MAX
0120 } pmix_mca_base_var_source_t;
0121 
0122 typedef enum {
0123     PMIX_MCA_BASE_VAR_SYN_FLAG_DEPRECATED = 0x0001
0124 } pmix_mca_base_var_syn_flag_t;
0125 
0126 typedef enum {
0127     PMIX_MCA_BASE_VAR_FLAG_NONE = 0x0000,
0128     /** Variable is deprecated */
0129     PMIX_MCA_BASE_VAR_FLAG_DEPRECATED = 0x0008,
0130     /** Variable is valid */
0131     PMIX_MCA_BASE_VAR_FLAG_VALID = 0x00010000,
0132     /** Variable is a synonym */
0133     PMIX_MCA_BASE_VAR_FLAG_SYNONYM = 0x00020000,
0134     /** mbv_source_file needs to be freed */
0135     PMIX_MCA_BASE_VAR_FLAG_SOURCE_FILE_NEEDS_FREE = 0x00040000
0136 } pmix_mca_base_var_flag_internal_t;
0137 
0138 /**
0139  * Types for MCA parameters.
0140  */
0141 typedef union {
0142     /** integer value */
0143     int intval;
0144     /** unsigned int value */
0145     unsigned int uintval;
0146     /** string value */
0147     char *stringval;
0148     /** boolean value */
0149     bool boolval;
0150     /** unsigned long value */
0151     unsigned long ulval;
0152     /** unsigned long long value */
0153     unsigned long long ullval;
0154     /** size_t value */
0155     size_t sizetval;
0156     /** double value */
0157     double lfval;
0158 } pmix_mca_base_var_storage_t;
0159 
0160 /**
0161  * Entry for holding information about an MCA variable.
0162  */
0163 struct pmix_mca_base_var_t {
0164     /** Allow this to be an PMIX OBJ */
0165     pmix_object_t super;
0166 
0167     /** Variable index. This will remain constant until pmix_mca_base_var_finalize()
0168         is called. */
0169     int mbv_index;
0170     /** Group index. This will remain constant until pmix_mca_base_var_finalize()
0171         is called. This variable will be deregistered if the associated group
0172         is deregistered with pmix_mca_base_var_group_deregister() */
0173     int mbv_group_index;
0174 
0175     /** Enum indicating the type of the variable (integer, string, boolean) */
0176     pmix_mca_base_var_type_t mbv_type;
0177 
0178     /** String of the variable name */
0179     char *mbv_variable_name;
0180     /** Full variable name, in case it is not <framework>_<component>_<param> */
0181     char *mbv_full_name;
0182     /** Long variable name <project>_<framework>_<component>_<name> */
0183     char *mbv_long_name;
0184     char *mbv_prefix;
0185 
0186     /** List of synonym names for this variable.  This *must* be a
0187         pointer (vs. a plain pmix_list_t) because we copy this whole
0188         struct into a new var for permanent storage
0189         (pmix_vale_array_append_item()), and the internal pointers in
0190         the pmix_list_t will be invalid when that happens.  Hence, we
0191         simply keep a pointer to an external pmix_list_t.  Synonyms
0192         are uncommon enough that this is not a big performance hit. */
0193     pmix_value_array_t mbv_synonyms;
0194 
0195     /** Variable flags */
0196     pmix_mca_base_var_flag_internal_t mbv_flags;
0197 
0198     /** Source of the current value */
0199     pmix_mca_base_var_source_t mbv_source;
0200 
0201     /** Synonym for */
0202     int mbv_synonym_for;
0203 
0204     /** Variable description */
0205     char *mbv_description;
0206 
0207     /** File the value came from */
0208     char *mbv_source_file;
0209 
0210     /** Value enumerator (only valid for integer variables) */
0211     pmix_mca_base_var_enum_t *mbv_enumerator;
0212 
0213     /** Bind value for this variable (0 - none) */
0214     int mbv_bind;
0215 
0216     /** Storage for this variable */
0217     pmix_mca_base_var_storage_t *mbv_storage;
0218 
0219     /** File value structure */
0220     void *mbv_file_value;
0221 };
0222 /**
0223  * Convenience typedef.
0224  */
0225 typedef struct pmix_mca_base_var_t pmix_mca_base_var_t;
0226 
0227 /*
0228  * Global functions for MCA
0229  */
0230 
0231 BEGIN_C_DECLS
0232 
0233 /**
0234  * Object declarayion for pmix_mca_base_var_t
0235  */
0236 PMIX_EXPORT PMIX_CLASS_DECLARATION(pmix_mca_base_var_t);
0237 
0238 /**
0239  * Initialize the MCA variable system.
0240  *
0241  * @retval PMIX_SUCCESS
0242  *
0243  * This function initializes the MCA variable system.  It is
0244  * invoked internally (by pmix_mca_base_open()) and is only documented
0245  * here for completeness.
0246  */
0247 PMIX_EXPORT int pmix_mca_base_var_init(void);
0248 
0249 /**
0250  * Register an MCA variable
0251  *
0252  * @param[in] project_name The name of the project associated with
0253  * this variable
0254  * @param[in] framework_name The name of the framework associated with
0255  * this variable
0256  * @param[in] component_name The name of the component associated with
0257  * this variable
0258  * @param[in] variable_name The name of this variable
0259  * @param[in] description A string describing the use and valid
0260  * values of the variable (string).
0261  * @param[in] type The type of this variable (string, int, bool).
0262  * @param[in] enumerator Enumerator describing valid values.
0263  * @param[in] bind Hint for MPIT to specify type of binding (0 = none)
0264  * @param[in] flags Flags for this variable.
0265  * @param[in] info_lvl Info level of this variable
0266  * @param[in] scope Indicates the scope of this variable
0267  * @param[in,out] storage Pointer to the value's location.
0268  *
0269  * @retval index Index value representing this variable.
0270  * @retval PMIX_ERR_OUT_OF_RESOURCE Upon failure to allocate memory.
0271  * @retval PMIX_ERROR Upon failure to register the variable.
0272  *
0273  * This function registers an MCA variable and associates it
0274  * with a specific group.
0275  *
0276  * {description} is a string of arbitrary length (verbose is good!)
0277  * for explaining what the variable is for and what its valid values
0278  * are.  This message is used in help messages, such as the output
0279  * from the ompi_info executable.  The {description} string is copied
0280  * internally; the caller can free {description} upon successful
0281  * return.
0282  *
0283  * {enumerator} is either NULL or a handle that was created via
0284  * pmix_mca_base_var_enum_create(), and describes the valid values of an
0285  * integer variable (i.e., one with type MCA_BASE_VAR_TYPE_INT).  When
0286  * a non-NULL {enumerator} is used, the value set for this variable by
0287  * the user will be compared against the values in the enumerator.
0288  * The MCA variable system will allow the parameter to be set to
0289  * either one of the enumerator values (0, 1, 2, etc) or a string
0290  * representing one of those values.  {enumerator} is retained until
0291  * either the variable is deregistered using
0292  * pmix_mca_base_var_deregister(), pmix_mca_base_var_group_deregister(), or
0293  * pmix_mca_base_var_finalize().  {enumerator} should be NULL for
0294  * parameters that do not support enumerated values.
0295  *
0296  * {flags} indicate attributes of this variable (internal, settable,
0297  * default only, etc.), as listed below.
0298  *
0299  * If MCA_BASE_VAR_FLAG_INTERNAL is set in {flags}, this variable
0300  * is not shown by default in the output of ompi_info.  That is,
0301  * this variable is considered internal to the PMIX implementation
0302  * and is not supposed to be viewed / changed by the user.
0303  *
0304  * If MCA_BASE_VAR_FLAG_DEFAULT_ONLY is set in {flags}, then the value
0305  * provided in storage will not be modified by the MCA variable system
0306  * (i.e., users cannot set the value of this variable via CLI
0307  * parameter, environment variable, file, etc.). It is up to the
0308  * caller to specify (using the scope) if this value may change
0309  * (MCA_BASE_VAR_SCOPE_READONLY) or remain constant
0310  * (MCA_BASE_VAR_SCOPE_CONSTANT).  MCA_BASE_VAR_FLAG_DEFAULT_ONLY must
0311  * not be specified with MCA_BASE_VAR_FLAG_SETTABLE.
0312  *
0313  * Set MCA_BASE_VAR_FLAG_DEPRECATED in {flags} to indicate that
0314  * this variable name is deprecated. The user will get a warning
0315  * if they set this variable.
0316  *
0317  * {scope} is for informational purposes to indicate how this variable
0318  * can be set, or if it is considered constant or readonly (which, by
0319  * MPI_T's definitions, are different things).  See the comments in
0320  * the description of pmix_mca_base_var_scope_t for information about the
0321  * different scope meanings.
0322  *
0323  * {storage} points to a (char *), (int), or (bool) where the value of
0324  * this variable is stored ({type} indicates the type of this
0325  * pointer).  The location pointed to by {storage} must exist until
0326  * the variable is deregistered.  Note that the initial value in
0327  * {storage} may be overwritten if the MCA_BASE_VAR_FLAG_DEFAULT_ONLY
0328  * flag is not set (e.g., if the user sets this variable via CLI
0329  * option, environment variable, or file value).  If input value of
0330  * {storage} points to a (char *), the pointed-to string will be
0331  * duplicated and maintained internally by the MCA variable system;
0332  * the caller may free the original string after this function returns
0333  * successfully.
0334  */
0335 PMIX_EXPORT int pmix_mca_base_var_register(const char *project_name, const char *framework_name,
0336                                            const char *component_name, const char *variable_name,
0337                                            const char *description, pmix_mca_base_var_type_t type,
0338                                            void *storage);
0339 
0340 /**
0341  * Convenience function for registering a variable associated with a
0342  * component.
0343  *
0344  * While quite similar to pmix_mca_base_var_register(), there is one key
0345  * difference: vars registered this this function will automatically
0346  * be unregistered / made unavailable when that component is closed by
0347  * its framework.
0348  */
0349 PMIX_EXPORT int pmix_mca_base_component_var_register(
0350     const pmix_mca_base_component_t *component, const char *variable_name, const char *description,
0351     pmix_mca_base_var_type_t type, void *storage);
0352 
0353 /**
0354  * Convenience function for registering a variable associated with a framework. This
0355  * function is equivalent to pmix_mca_base_var_register with component_name = "base" and
0356  * with the MCA_BASE_VAR_FLAG_DWG set. See pmix_mca_base_var_register().
0357  */
0358 PMIX_EXPORT int pmix_mca_base_framework_var_register(
0359     const pmix_mca_base_framework_t *framework, const char *variable_name, const char *help_msg,
0360     pmix_mca_base_var_type_t type, void *storage);
0361 
0362 /**
0363  * Register a synonym name for an MCA variable.
0364  *
0365  * @param[in] synonym_for The index of the original variable. This index
0366  * must not refer to a synonym.
0367  * @param[in] project_name The project this synonym belongs to. Should
0368  * not be NULL (except for legacy reasons).
0369  * @param[in] framework_name The framework this synonym belongs to.
0370  * @param[in] component_name The component this synonym belongs to.
0371  * @param[in] synonym_name The synonym name.
0372  * @param[in] flags Flags for this synonym.
0373  *
0374  * @returns index Variable index for new synonym on success.
0375  * @returns PMIX_ERR_BAD_VAR If synonym_for does not reference a valid
0376  * variable.
0377  * @returns PMIX_ERR_OUT_OF_RESOURCE If memory could not be allocated.
0378  * @returns PMIX_ERROR For all other errors.
0379  *
0380  * Upon success, this function creates a synonym MCA variable
0381  * that will be treated almost exactly like the original.  The
0382  * type (int or string) is irrelevant; this function simply
0383  * creates a new name that by which the same variable value is
0384  * accessible.
0385  *
0386  * Note that the original variable name has precedence over all
0387  * synonyms.  For example, consider the case if variable is
0388  * originally registered under the name "A" and is later
0389  * registered with synonyms "B" and "C".  If the user sets values
0390  * for both MCA variable names "A" and "B", the value associated
0391  * with the "A" name will be used and the value associated with
0392  * the "B" will be ignored (and will not even be visible by the
0393  * pmix_mca_base_var_*() API).  If the user sets values for both MCA
0394  * variable names "B" and "C" (and does *not* set a value for
0395  * "A"), it is undefined as to which value will be used.
0396  */
0397 PMIX_EXPORT int pmix_mca_base_var_register_synonym(int synonym_for, const char *project_name,
0398                                                    const char *framework_name,
0399                                                    const char *component_name,
0400                                                    const char *synonym_name,
0401                                                    pmix_mca_base_var_syn_flag_t flags);
0402 
0403 /**
0404  * Deregister a MCA variable or synonym
0405  *
0406  * @param vari Index returned from pmix_mca_base_var_register() or
0407  * pmix_mca_base_var_register_synonym().
0408  *
0409  * Deregistering a variable does not free the variable or any memory associated
0410  * with it. All memory will be freed and the variable index released when
0411  * pmix_mca_base_var_finalize() is called.
0412  *
0413  * If an enumerator is associated with this variable it will be dereferenced.
0414  */
0415 PMIX_EXPORT int pmix_mca_base_var_deregister(int vari);
0416 
0417 /**
0418  * Get the current value of an MCA variable.
0419  *
0420  * @param[in] vari Index of variable
0421  * @param[in,out] value Pointer to copy the value to. Can be NULL.
0422  * @param[in,out] value_size Size of memory pointed to by value.
0423  * copied size will be returned in value_size.
0424  * @param[out] source Source of current value. Can be NULL.
0425  * @param[out] source_file Source file for the current value if
0426  * it was set from a file.
0427  *
0428  * @return PMIX_ERROR Upon failure.  The contents of value are
0429  * undefined.
0430  * @return PMIX_SUCCESS Upon success. value (if not NULL) will be filled
0431  * with the variable's current value. value_size will contain the size
0432  * copied. source (if not NULL) will contain the source of the variable.
0433  *
0434  * Note: The value can be changed by the registering code without using
0435  * the pmix_mca_base_var_* interface so the source may be incorrect.
0436  */
0437 PMIX_EXPORT int pmix_mca_base_var_get_value(int vari, void *value,
0438                                             pmix_mca_base_var_source_t *source,
0439                                             const char **source_file);
0440 
0441 /**
0442  * Find the index for an MCA variable based on its names.
0443  *
0444  * @param project_name   Name of the project
0445  * @param type_name      Name of the type containing the variable.
0446  * @param component_name Name of the component containing the variable.
0447  * @param param_name     Name of the variable.
0448  *
0449  * @retval PMIX_ERROR If the variable was not found.
0450  * @retval vari If the variable was found.
0451  *
0452  * It is not always convenient to widely propagate a variable's index
0453  * value, or it may be necessary to look up the variable from a
0454  * different component. This function can be used to look up the index
0455  * of any registered variable.  The returned index can be used with
0456  * pmix_mca_base_var_get() and pmix_mca_base_var_get_value().
0457  */
0458 PMIX_EXPORT int pmix_mca_base_var_find(const char *project_name, const char *type_name,
0459                                        const char *component_name, const char *param_name);
0460 
0461 /**
0462  * Find the index for a variable based on its full name
0463  *
0464  * @param full_name [in] Full name of the variable
0465  * @param vari [out]    Index of the variable
0466  *
0467  * See pmix_mca_base_var_find().
0468  */
0469 PMIX_EXPORT int pmix_mca_base_var_find_by_name(const char *full_name, int *vari);
0470 
0471 /**
0472  * Check that two MCA variables were not both set to non-default
0473  * values.
0474  *
0475  * @param type_a [in] Framework name of variable A (string).
0476  * @param component_a [in] Component name of variable A (string).
0477  * @param param_a [in] Variable name of variable A (string.
0478  * @param type_b [in] Framework name of variable A (string).
0479  * @param component_b [in] Component name of variable A (string).
0480  * @param param_b [in] Variable name of variable A (string.
0481  *
0482  * This function is useful for checking that the user did not set both
0483  * of 2 mutually-exclusive MCA variables.
0484  *
0485  * This function will print an pmix_show_help() message and return
0486  * PMIX_ERR_BAD_VAR if it finds that the two variables both have
0487  * value sources that are not MCA_BASE_VAR_SOURCE_DEFAULT.  This
0488  * means that both variables have been set by the user (i.e., they're
0489  * not default values).
0490  *
0491  * Note that pmix_show_help() allows itself to be hooked, so if this
0492  * happens after the aggregated pmix_show_help() system is
0493  * initialized, the messages will be aggregated (w00t).
0494  *
0495  * @returns PMIX_ERR_BAD_VAR if the two variables have sources that
0496  * are not MCA_BASE_VAR_SOURCE_DEFAULT.
0497  * @returns PMIX_SUCCESS otherwise.
0498  */
0499 PMIX_EXPORT int pmix_mca_base_var_check_exclusive(const char *project, const char *type_a,
0500                                                   const char *component_a, const char *param_a,
0501                                                   const char *type_b, const char *component_b,
0502                                                   const char *param_b);
0503 
0504 /**
0505  * Obtain basic info on a single variable (name, help message, etc)
0506  *
0507  * @param[in] vari Valid variable index.
0508  * @param[out] var Storage for the variable pointer.
0509  *
0510  * @retval PMIX_SUCCESS Upon success.
0511  * @retval pmix error code Upon failure.
0512  *
0513  * The returned pointer belongs to the MCA variable system. Do not
0514  * modify/free/retain the pointer.
0515  */
0516 PMIX_EXPORT int pmix_mca_base_var_get(int vari, const pmix_mca_base_var_t **var);
0517 
0518 /**
0519  * Obtain the number of variables that have been registered.
0520  *
0521  * @retval count on success
0522  * @return pmix error code on error
0523  *
0524  * Note: This function does not return the number of valid MCA variables as
0525  * pmix_mca_base_var_deregister() has no impact on the variable count. The count
0526  * returned is equal to the number of calls to pmix_mca_base_var_register with
0527  * unique names. ie. two calls with the same name will not affect the count.
0528  */
0529 PMIX_EXPORT int pmix_mca_base_var_get_count(void);
0530 
0531 /**
0532  * Obtain a list of environment variables describing the all
0533  * valid (non-default) MCA variables and their sources.
0534  *
0535  * @param[out] env A pointer to an argv-style array of key=value
0536  * strings, suitable for use in an environment
0537  * @param[out] num_env A pointer to an int, containing the length
0538  * of the env array (not including the final NULL entry).
0539  *
0540  * @retval PMIX_SUCCESS Upon success.
0541  * @retval PMIX_ERROR Upon failure.
0542  *
0543  * This function is similar to pmix_mca_base_var_dump() except that
0544  * its output is in terms of an argv-style array of key=value
0545  * strings, suitable for using in an environment.
0546  */
0547 PMIX_EXPORT int pmix_mca_base_var_build_env(char ***env, int *num_env);
0548 
0549 /**
0550  * Shut down the MCA variable system (normally only invoked by the
0551  * MCA framework itself).
0552  *
0553  * @returns PMIX_SUCCESS This function never fails.
0554  *
0555  * This function shuts down the MCA variable repository and frees all
0556  * associated memory.  No other pmix_mca_base_var*() functions can be
0557  * invoked after this function.
0558  *
0559  * This function is normally only invoked by the MCA framework itself
0560  * when the process is shutting down (e.g., during MPI_FINALIZE).  It
0561  * is only documented here for completeness.
0562  */
0563 PMIX_EXPORT int pmix_mca_base_var_finalize(void);
0564 
0565 typedef enum {
0566     /* Dump human-readable strings */
0567     PMIX_MCA_BASE_VAR_DUMP_READABLE = 0,
0568     /* Dump easily parsable strings */
0569     PMIX_MCA_BASE_VAR_DUMP_PARSABLE = 1,
0570     /* Dump simple name=value string */
0571     PMIX_MCA_BASE_VAR_DUMP_SIMPLE = 2
0572 } pmix_mca_base_var_dump_type_t;
0573 
0574 /**
0575  * Dump strings describing the MCA variable at an index.
0576  *
0577  * @param[in]  vari        Variable index
0578  * @param[out] out         Array of strings describing this variable
0579  * @param[in]  output_type Type of output desired
0580  *
0581  * This function returns an array of strings describing the variable. All strings
0582  * and the array must be freed by the caller.
0583  */
0584 PMIX_EXPORT int pmix_mca_base_var_dump(int vari, char ***out,
0585                                        pmix_mca_base_var_dump_type_t output_type);
0586 
0587 #define MCA_COMPILETIME_VER "print_compiletime_version"
0588 #define MCA_RUNTIME_VER     "print_runtime_version"
0589 
0590 PMIX_EXPORT int pmix_mca_base_var_cache_files(bool rel_path_search);
0591 
0592 END_C_DECLS
0593 
0594 #endif /* PMIX_MCA_BASE_VAR_H */