This source file includes following definitions.
- MPI_Get_library_version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include "ompi_config.h"
23 #include <stdio.h>
24
25 #include "ompi/mpi/c/bindings.h"
26 #include "ompi/runtime/params.h"
27 #include "ompi/communicator/communicator.h"
28 #include "ompi/errhandler/errhandler.h"
29
30 #if OMPI_BUILD_MPI_PROFILING
31 #if OPAL_HAVE_WEAK_SYMBOLS
32 #pragma weak MPI_Get_library_version = PMPI_Get_library_version
33 #endif
34 #define MPI_Get_library_version PMPI_Get_library_version
35 #endif
36
37 static const char FUNC_NAME[] = "MPI_Get_library_version";
38
39
40 int MPI_Get_library_version(char *version, int *resultlen)
41 {
42 int len_left;
43 char *ptr, tmp[MPI_MAX_LIBRARY_VERSION_STRING];
44
45 OPAL_CR_NOOP_PROGRESS();
46
47 if (MPI_PARAM_CHECK) {
48
49
50
51
52 if (NULL == version || NULL == resultlen) {
53
54
55
56
57
58
59
60
61 int32_t state = ompi_mpi_state;
62 if (state >= OMPI_MPI_STATE_INIT_COMPLETED &&
63 state < OMPI_MPI_STATE_FINALIZE_PAST_COMM_SELF_DESTRUCT) {
64 return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG,
65 FUNC_NAME);
66 } else {
67
68
69 return ompi_errhandler_invoke(NULL, NULL, -1,
70 ompi_errcode_get_mpi_code(MPI_ERR_ARG),
71 FUNC_NAME);
72 }
73 }
74 }
75
76
77
78
79 ptr = tmp;
80 len_left = sizeof(tmp);
81 memset(tmp, 0, MPI_MAX_LIBRARY_VERSION_STRING);
82
83 snprintf(tmp, MPI_MAX_LIBRARY_VERSION_STRING, "Open MPI v%d.%d.%d",
84 OMPI_MAJOR_VERSION, OMPI_MINOR_VERSION, OMPI_RELEASE_VERSION);
85 ptr += strlen(tmp);
86 len_left -= strlen(tmp);
87
88 if (strlen(OMPI_GREEK_VERSION) > 0) {
89 snprintf(ptr, len_left, "%s", OMPI_GREEK_VERSION);
90 ptr = tmp + strlen(tmp);
91 len_left = MPI_MAX_LIBRARY_VERSION_STRING - strlen(tmp);
92 }
93
94
95 if (strlen(OPAL_PACKAGE_STRING) > 0) {
96 snprintf(ptr, len_left, ", package: %s", OPAL_PACKAGE_STRING);
97 ptr = tmp + strlen(tmp);
98 len_left = MPI_MAX_LIBRARY_VERSION_STRING - strlen(tmp);
99 }
100
101
102 if (strlen(OMPI_IDENT_STRING) > 0) {
103 snprintf(ptr, len_left, ", ident: %s", OMPI_IDENT_STRING);
104 ptr = tmp + strlen(tmp);
105 len_left = MPI_MAX_LIBRARY_VERSION_STRING - strlen(tmp);
106 }
107
108
109 if (strlen(OMPI_REPO_REV) > 0) {
110 snprintf(ptr, len_left, ", repo rev: %s", OMPI_REPO_REV);
111 ptr = tmp + strlen(tmp);
112 len_left = MPI_MAX_LIBRARY_VERSION_STRING - strlen(tmp);
113 }
114
115
116 if (strlen(OMPI_RELEASE_DATE) > 0) {
117 snprintf(ptr, len_left, ", %s", OMPI_RELEASE_DATE);
118 ptr = tmp + strlen(tmp);
119 len_left = MPI_MAX_LIBRARY_VERSION_STRING - strlen(tmp);
120 }
121
122 memcpy(version, tmp, strlen(tmp) + 1);
123 *resultlen = strlen(tmp) + 1;
124
125 return MPI_SUCCESS;
126 }