root/opal/mca/pmix/pmix4x/pmix/src/tools/pmix_info/pmix_info.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
   4  *                         University Research and Technology
   5  *                         Corporation.  All rights reserved.
   6  * Copyright (c) 2004-2006 The University of Tennessee and The University
   7  *                         of Tennessee Research Foundation.  All rights
   8  *                         reserved.
   9  * Copyright (c) 2004-2007 High Performance Computing Center Stuttgart,
  10  *                         University of Stuttgart.  All rights reserved.
  11  * Copyright (c) 2004-2005 The Regents of the University of California.
  12  *                         All rights reserved.
  13  * Copyright (c) 2007-2012 Cisco Systems, Inc.  All rights reserved.
  14  * Copyright (c) 2010-2016 Los Alamos National Security, LLC.
  15  *                         All rights reserved.
  16  * Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
  17  * Copyright (c) 2015      Research Organization for Information Science
  18  *                         and Technology (RIST). All rights reserved.
  19  * $COPYRIGHT$
  20  *
  21  * Additional copyrights may follow
  22  *
  23  * $HEADER$
  24  */
  25 
  26 #include "pmix_config.h"
  27 
  28 #include <stdio.h>
  29 #include <string.h>
  30 #include <ctype.h>
  31 #ifdef HAVE_UNISTD_H
  32 #include <unistd.h>
  33 #endif
  34 #ifdef HAVE_NETDB_H
  35 #include <netdb.h>
  36 #endif
  37 #ifdef HAVE_SYS_PARAM_H
  38 #include <sys/param.h>
  39 #endif
  40 #include <errno.h>
  41 #include <signal.h>
  42 
  43 #include "src/mca/pinstalldirs/base/base.h"
  44 #include "src/class/pmix_object.h"
  45 #include "src/class/pmix_pointer_array.h"
  46 #include "src/util/argv.h"
  47 #include "src/util/cmd_line.h"
  48 #include "src/util/error.h"
  49 #include "src/util/error.h"
  50 #include "src/util/keyval_parse.h"
  51 #include "src/util/output.h"
  52 #include "src/util/show_help.h"
  53 #include "src/mca/base/base.h"
  54 #include "src/runtime/pmix_rte.h"
  55 
  56 #include "pinfo.h"
  57 #include "support.h"
  58 
  59 /*
  60  * Public variables
  61  */
  62 
  63 pmix_cmd_line_t *pmix_info_cmd_line = NULL;
  64 
  65 const char *pmix_info_type_base = "base";
  66 
  67 int main(int argc, char *argv[])
  68 {
  69     int ret = 0;
  70     bool acted = false;
  71     bool want_all = false;
  72     int i;
  73     pmix_pointer_array_t mca_types;
  74     pmix_pointer_array_t component_map;
  75     pmix_info_component_map_t *map;
  76 
  77     /* protect against problems if someone passes us thru a pipe
  78      * and then abnormally terminates the pipe early */
  79     signal(SIGPIPE, SIG_IGN);
  80 
  81     /* initialize the output system */
  82     if (!pmix_output_init()) {
  83         return PMIX_ERROR;
  84     }
  85 
  86     /* initialize install dirs code */
  87     if (PMIX_SUCCESS != (ret = pmix_mca_base_framework_open(&pmix_pinstalldirs_base_framework, 0))) {
  88         fprintf(stderr, "pmix_pinstalldirs_base_open() failed -- process will likely abort (%s:%d, returned %d instead of PMIX_SUCCESS)\n",
  89                 __FILE__, __LINE__, ret);
  90         return ret;
  91     }
  92 
  93     /* initialize the help system */
  94     pmix_show_help_init();
  95 
  96     /* keyval lex-based parser */
  97     if (PMIX_SUCCESS != (ret = pmix_util_keyval_parse_init())) {
  98         fprintf(stderr, "pmix_util_keyval_parse_init failed with %d\n", ret);
  99         return PMIX_ERROR;
 100     }
 101 
 102     /* Setup the parameter system */
 103     if (PMIX_SUCCESS != (ret = pmix_mca_base_var_init())) {
 104         fprintf(stderr, "pmix_mca_base_var_init failed with %d\n", ret);
 105         return PMIX_ERROR;
 106     }
 107 
 108     /* register params for pmix */
 109     if (PMIX_SUCCESS != (ret = pmix_register_params())) {
 110         fprintf(stderr, "pmix_register_params failed with %d\n", ret);
 111         return PMIX_ERROR;
 112     }
 113 
 114     pmix_info_cmd_line = PMIX_NEW(pmix_cmd_line_t);
 115     if (NULL == pmix_info_cmd_line) {
 116         ret = errno;
 117         pmix_show_help("help-pmix-info.txt", "lib-call-fail", true,
 118                        "pmix_cmd_line_create", __FILE__, __LINE__, NULL);
 119         exit(ret);
 120     }
 121 
 122     if (PMIX_SUCCESS != (ret = pmix_info_init(argc, argv, pmix_info_cmd_line))) {
 123         return ret;
 124     }
 125 
 126     /* setup the mca_types array */
 127     PMIX_CONSTRUCT(&mca_types, pmix_pointer_array_t);
 128     pmix_pointer_array_init(&mca_types, 256, INT_MAX, 128);
 129     pmix_info_register_types(&mca_types);
 130 
 131     /* init the component map */
 132     PMIX_CONSTRUCT(&component_map, pmix_pointer_array_t);
 133     pmix_pointer_array_init(&component_map, 64, INT_MAX, 32);
 134 
 135     /* Register PMIx's params */
 136     if (PMIX_SUCCESS != (ret = pmix_info_register_framework_params(&component_map))) {
 137         if (PMIX_ERR_BAD_PARAM == ret) {
 138             /* output what we got */
 139             pmix_info_do_params(true, pmix_cmd_line_is_taken(pmix_info_cmd_line, "internal"),
 140                                 &mca_types, &component_map, NULL);
 141         }
 142         exit(1);
 143     }
 144 
 145 
 146     /* Execute the desired action(s) */
 147     want_all = pmix_cmd_line_is_taken(pmix_info_cmd_line, "all");
 148     if (want_all) {
 149         pmix_info_out("Package", "package", PMIX_PACKAGE_STRING);
 150         pmix_info_show_pmix_version(pmix_info_ver_full);
 151     }
 152     if (want_all || pmix_cmd_line_is_taken(pmix_info_cmd_line, "path")) {
 153         pmix_info_do_path(want_all, pmix_info_cmd_line);
 154         acted = true;
 155     }
 156     if (want_all || pmix_cmd_line_is_taken(pmix_info_cmd_line, "arch")) {
 157         pmix_info_do_arch();
 158         acted = true;
 159     }
 160     if (want_all || pmix_cmd_line_is_taken(pmix_info_cmd_line, "hostname")) {
 161         pmix_info_do_hostname();
 162         acted = true;
 163     }
 164     if (want_all || pmix_cmd_line_is_taken(pmix_info_cmd_line, "config")) {
 165         pmix_info_do_config(true);
 166         acted = true;
 167     }
 168     if (want_all || pmix_cmd_line_is_taken(pmix_info_cmd_line, "param") ||
 169         pmix_cmd_line_is_taken(pmix_info_cmd_line, "params")) {
 170         pmix_info_do_params(want_all, pmix_cmd_line_is_taken(pmix_info_cmd_line, "internal"),
 171                             &mca_types, &component_map, pmix_info_cmd_line);
 172         acted = true;
 173     }
 174     if (pmix_cmd_line_is_taken(pmix_info_cmd_line, "type")) {
 175         pmix_info_do_type(pmix_info_cmd_line);
 176         acted = true;
 177     }
 178 
 179     /* If no command line args are specified, show default set */
 180 
 181     if (!acted) {
 182         pmix_info_out("Package", "package", PMIX_PACKAGE_STRING);
 183         pmix_info_show_pmix_version(pmix_info_ver_full);
 184         pmix_info_show_path(pmix_info_path_prefix, pmix_pinstall_dirs.prefix);
 185         pmix_info_do_arch();
 186         pmix_info_do_hostname();
 187         pmix_info_do_config(false);
 188         pmix_info_show_component_version(&mca_types, &component_map, pmix_info_type_all,
 189                                          pmix_info_component_all, pmix_info_ver_full,
 190                                          pmix_info_ver_all);
 191     }
 192 
 193 
 194     /* All done */
 195     pmix_info_close_components();
 196     PMIX_RELEASE(pmix_info_cmd_line);
 197     PMIX_DESTRUCT(&mca_types);
 198     for (i=0; i < component_map.size; i++) {
 199         if (NULL != (map = (pmix_info_component_map_t*)pmix_pointer_array_get_item(&component_map, i))) {
 200             PMIX_RELEASE(map);
 201         }
 202     }
 203     PMIX_DESTRUCT(&component_map);
 204 
 205     pmix_info_finalize();
 206 
 207     return 0;
 208 }

/* [<][>][^][v][top][bottom][index][help] */