1 /* Author:  Lisandro Dalcin   */
2 /* Contact: dalcinl@gmail.com */
3 
PyMPI_Get_vendor(const char ** vendor_name,int * version_major,int * version_minor,int * version_micro)4 static int PyMPI_Get_vendor(const char **vendor_name,
5                             int         *version_major,
6                             int         *version_minor,
7                             int         *version_micro)
8 {
9   const char *name = "unknown";
10   int major=0, minor=0, micro=0;
11 
12 #if defined(I_MPI_VERSION)
13 
14   name = "Intel MPI";
15   #if defined(I_MPI_NUMVERSION)
16   {int version = I_MPI_NUMVERSION/1000;
17   major = version/10000; version -= major*10000;
18   minor = version/100;   version -= minor*100;
19   micro = version/1;     version -= micro*1; }
20   #else
21   (void)sscanf(I_MPI_VERSION,"%d.%d Update %d",&major,&minor,&micro);
22   #endif
23 
24 #elif defined(PLATFORM_MPI)
25 
26   name = "Platform MPI";
27   major = (PLATFORM_MPI>>24)&0xff;
28   minor = (PLATFORM_MPI>>16)&0xff;
29   micro = (PLATFORM_MPI>> 8)&0xff;
30   major = (major/16)*10+(major%16);
31 
32 #elif defined(MSMPI_VER)
33 
34   name = "Microsoft MPI";
35   major = MSMPI_VER >> 8;
36   minor = MSMPI_VER & 0xFF;
37 
38 #elif defined(MVAPICH2_VERSION) || defined(MVAPICH2_NUMVERSION)
39 
40   name = "MVAPICH2";
41   #if defined(MVAPICH2_NUMVERSION)
42   {int version = MVAPICH2_NUMVERSION/1000;
43   major = version/10000; version -= major*10000;
44   minor = version/100;   version -= minor*100;
45   micro = version/1;     version -= micro*1; }
46   #elif defined(MVAPICH2_VERSION)
47   (void)sscanf(MVAPICH2_VERSION,"%d.%d.%d",&major,&minor,&micro);
48   #endif
49 
50 #elif defined(MPICH_NAME) && (MPICH_NAME >= 3)
51 
52   name = "MPICH";
53   #if defined(MPICH_NUMVERSION)
54   {int version = MPICH_NUMVERSION/1000;
55   major = version/10000; version -= major*10000;
56   minor = version/100;   version -= minor*100;
57   micro = version/1;     version -= micro*1; }
58   #elif defined(MPICH_VERSION)
59   (void)sscanf(MPICH_VERSION,"%d.%d.%d",&major,&minor,&micro);
60   #endif
61 
62 #elif defined(MPICH_NAME) && (MPICH_NAME == 2)
63 
64   name = "MPICH2";
65   #if defined(MPICH2_NUMVERSION)
66   {int version = MPICH2_NUMVERSION/1000;
67   major = version/10000; version -= major*10000;
68   minor = version/100;   version -= minor*100;
69   micro = version/1;     version -= micro*1; }
70   #elif defined(MPICH2_VERSION)
71   (void)sscanf(MPICH2_VERSION,"%d.%d.%d",&major,&minor,&micro);
72   #endif
73 
74 #elif defined(MPICH_NAME) && (MPICH_NAME == 1)
75 
76   name = "MPICH1";
77   #if defined(MPICH_VERSION)
78   (void)sscanf(MPICH_VERSION,"%d.%d.%d",&major,&minor,&micro);
79   #endif
80 
81 #elif defined(OPEN_MPI)
82 
83   name = "Open MPI";
84   #if defined(OMPI_MAJOR_VERSION)
85   major = OMPI_MAJOR_VERSION;
86   #endif
87   #if defined(OMPI_MINOR_VERSION)
88   minor = OMPI_MINOR_VERSION;
89   #endif
90   #if defined(OMPI_RELEASE_VERSION)
91   micro = OMPI_RELEASE_VERSION;
92   #endif
93 
94   #if defined(OMPI_MAJOR_VERSION)
95   #if OMPI_MAJOR_VERSION >= 10
96   name = "Spectrum MPI";
97   #endif
98   #endif
99 
100 #elif defined(LAM_MPI)
101 
102   name = "LAM/MPI";
103   #if defined(LAM_MAJOR_VERSION)
104   major = LAM_MAJOR_VERSION;
105   #endif
106   #if defined(LAM_MINOR_VERSION)
107   minor = LAM_MINOR_VERSION;
108   #endif
109   #if defined(LAM_RELEASE_VERSION)
110   micro = LAM_RELEASE_VERSION;
111   #endif
112 
113 #endif
114 
115   if (vendor_name)   *vendor_name   = name;
116   if (version_major) *version_major = major;
117   if (version_minor) *version_minor = minor;
118   if (version_micro) *version_micro = micro;
119 
120   return 0;
121 }
122 
123 /*
124    Local variables:
125    c-basic-offset: 2
126    indent-tabs-mode: nil
127    End:
128 */
129