Blame src/env/mpichversion.c

Packit Service c5cf8c
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit Service c5cf8c
/*
Packit Service c5cf8c
 *  (C) 2004 by Argonne National Laboratory.
Packit Service c5cf8c
 *      See COPYRIGHT in top-level directory.
Packit Service c5cf8c
 */
Packit Service c5cf8c
Packit Service c5cf8c
#include "mpiimpl.h"
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#include <stdlib.h>
Packit Service c5cf8c
#include <string.h>
Packit Service c5cf8c
Packit Service c5cf8c
/* FIXME: We really should consider internationalizing the output from this
Packit Service c5cf8c
   program */
Packit Service c5cf8c
/* style: allow:fprintf:1 sig:0 */
Packit Service c5cf8c
/* style: allow:printf:8 sig:0 */
Packit Service c5cf8c
Packit Service c5cf8c
/*
Packit Service c5cf8c
 * This program reports on properties of the MPICH library, such as the
Packit Service c5cf8c
 * version, device, and what patches have been applied.  This is available
Packit Service c5cf8c
 * only since MPICH 1.0.6.
Packit Service c5cf8c
 *
Packit Service c5cf8c
 * The reason that this program doesn't directly include the info is that it
Packit Service c5cf8c
 * can be compiled and then linked with the MPICH library to discover
Packit Service c5cf8c
 * the information about the version of the library.  If built with shared
Packit Service c5cf8c
 * libraries, this will give the information about the currently installed
Packit Service c5cf8c
 * shared library.
Packit Service c5cf8c
 */
Packit Service c5cf8c
Packit Service c5cf8c
typedef enum { Version_number = 0, Date = 1,
Packit Service c5cf8c
    Patches = 2, Configure_args = 3, Device = 4,
Packit Service c5cf8c
    Compilers = 5, Custom = 6, LastField
Packit Service c5cf8c
} fields;
Packit Service c5cf8c
Packit Service c5cf8c
/*D
Packit Service c5cf8c
  mpichversion - Report on the MPICH version
Packit Service c5cf8c
Packit Service c5cf8c
  Command Line Arguments:
Packit Service c5cf8c
+ -version - Show the version of MPICH
Packit Service c5cf8c
. -date    - Show the release date of this version
Packit Service c5cf8c
. -patches - Show the identifiers for any applied patches
Packit Service c5cf8c
. -configure - Show the configure arguments used to build MPICH
Packit Service c5cf8c
- -device  - Show the device for which MPICH was configured
Packit Service c5cf8c
Packit Service c5cf8c
  Using this program:
Packit Service c5cf8c
  To use this program, link it against 'libmpi.a' (use 'mpicc' or
Packit Service c5cf8c
  the whichever compiler command is used to create MPICH programs)
Packit Service c5cf8c
  D*/
Packit Service c5cf8c
Packit Service c5cf8c
int main(int argc, char *argv[])
Packit Service c5cf8c
{
Packit Service c5cf8c
    int i, flags[10];
Packit Service c5cf8c
    char version[MPI_MAX_LIBRARY_VERSION_STRING];
Packit Service c5cf8c
    int versionlen;
Packit Service c5cf8c
Packit Service c5cf8c
    /* FIXME: this is needed to avoid unresolved symbols issues when building with
Packit Service c5cf8c
     * --disable-weak-symbols on some platforms. Ideally, we could use the output
Packit Service c5cf8c
     * from this call instead of accessing internal library variables.
Packit Service c5cf8c
     */
Packit Service c5cf8c
    MPI_Get_library_version(version, &versionlen);
Packit Service c5cf8c
Packit Service c5cf8c
    if (argc <= 1) {
Packit Service c5cf8c
        /* Show all values */
Packit Service c5cf8c
        for (i = 0; i < LastField; i++)
Packit Service c5cf8c
            flags[i] = 1;
Packit Service c5cf8c
    } else {
Packit Service c5cf8c
        /* Show only requested values */
Packit Service c5cf8c
        for (i = 0; i < LastField; i++)
Packit Service c5cf8c
            flags[i] = 0;
Packit Service c5cf8c
        for (i = 1; i < argc; i++) {
Packit Service c5cf8c
            if (strcmp(argv[i], "-version") == 0 ||
Packit Service c5cf8c
                strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-v") == 0)
Packit Service c5cf8c
                flags[Version_number] = 1;
Packit Service c5cf8c
            else if (strcmp(argv[i], "-date") == 0 ||
Packit Service c5cf8c
                     strcmp(argv[i], "--date") == 0 || strcmp(argv[i], "-D") == 0)
Packit Service c5cf8c
                flags[Date] = 1;
Packit Service c5cf8c
            else if (strcmp(argv[i], "-patches") == 0)
Packit Service c5cf8c
                flags[Patches] = 1;
Packit Service c5cf8c
            else if (strcmp(argv[i], "-configure") == 0 ||
Packit Service c5cf8c
                     strcmp(argv[i], "--configure") == 0 || strcmp(argv[i], "-c") == 0)
Packit Service c5cf8c
                flags[Configure_args] = 1;
Packit Service c5cf8c
            else if (strcmp(argv[i], "-device") == 0 ||
Packit Service c5cf8c
                     strcmp(argv[i], "--device") == 0 || strcmp(argv[i], "-d") == 0)
Packit Service c5cf8c
                flags[Device] = 1;
Packit Service c5cf8c
            else if (strcmp(argv[i], "-compiler") == 0 ||
Packit Service c5cf8c
                     strcmp(argv[i], "--compiler") == 0 || strcmp(argv[i], "-b") == 0)
Packit Service c5cf8c
                flags[Compilers] = 1;
Packit Service c5cf8c
            else if (strcmp(argv[i], "-custom") == 0 ||
Packit Service c5cf8c
                     strcmp(argv[i], "--custom") == 0 || strcmp(argv[i], "-u") == 0)
Packit Service c5cf8c
                flags[Custom] = 1;
Packit Service c5cf8c
            else {
Packit Service c5cf8c
                fprintf(stderr, "Unrecognized argument %s\n", argv[i]);
Packit Service c5cf8c
                exit(1);
Packit Service c5cf8c
            }
Packit Service c5cf8c
        }
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    /* Print out the information, one item per line */
Packit Service c5cf8c
    if (flags[Version_number]) {
Packit Service c5cf8c
        printf("MPICH Version:    \t%s\n", MPII_Version_string);
Packit Service c5cf8c
    }
Packit Service c5cf8c
    if (flags[Date]) {
Packit Service c5cf8c
        printf("MPICH Release date:\t%s\n", MPII_Version_date);
Packit Service c5cf8c
    }
Packit Service c5cf8c
    if (flags[Device]) {
Packit Service c5cf8c
        printf("MPICH Device:    \t%s\n", MPII_Version_device);
Packit Service c5cf8c
    }
Packit Service c5cf8c
    if (flags[Configure_args]) {
Packit Service c5cf8c
        printf("MPICH configure: \t%s\n", MPII_Version_configure);
Packit Service c5cf8c
    }
Packit Service c5cf8c
    if (flags[Compilers]) {
Packit Service c5cf8c
        printf("MPICH CC: \t%s\n", MPII_Version_CC);
Packit Service c5cf8c
        printf("MPICH CXX: \t%s\n", MPII_Version_CXX);
Packit Service c5cf8c
        printf("MPICH F77: \t%s\n", MPII_Version_F77);
Packit Service c5cf8c
        printf("MPICH FC: \t%s\n", MPII_Version_FC);
Packit Service c5cf8c
    }
Packit Service c5cf8c
    if (flags[Custom]) {
Packit Service c5cf8c
        printf("MPICH Custom Information: \t%s\n", MPII_Version_custom);
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    return 0;
Packit Service c5cf8c
}