Imported Upstream version 3.20.2
[platform/upstream/cmake.git] / Modules / CMakeFortranCompilerId.F.in
1       PROGRAM CMakeFortranCompilerId
2 #if 0
3 ! Identify the compiler
4 #endif
5 #if defined(_MSC_VER)
6        PRINT *, 'INFO:simulate[MSVC]'
7 # if _MSC_VER >= 1900
8        PRINT *, 'INFO:simulate_version[019.00]'
9 # elif _MSC_VER >= 1800
10        PRINT *, 'INFO:simulate_version[018.00]'
11 # elif _MSC_VER >= 1700
12        PRINT *, 'INFO:simulate_version[017.00]'
13 # elif _MSC_VER >= 1600
14        PRINT *, 'INFO:simulate_version[016.00]'
15 # elif _MSC_VER >= 1500
16        PRINT *, 'INFO:simulate_version[015.00]'
17 # elif _MSC_VER >= 1400
18        PRINT *, 'INFO:simulate_version[014.00]'
19 # elif _MSC_VER >= 1310
20        PRINT *, 'INFO:simulate_version[013.01]'
21 # else
22        PRINT *, 'INFO:simulate_version[013.00]'
23 # endif
24 #endif
25 #if defined(__INTEL_LLVM_COMPILER)
26         PRINT *, 'INFO:compiler[IntelLLVM]'
27 ! __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
28 ! later.  Look for 6 digit vs. 8 digit version number to decide encoding.
29 ! VVVV is no smaller than the current year when a versio is released.
30 # if __INTEL_LLVM_COMPILER < 1000000
31 #  define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
32 #  define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
33 #  define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER    % 10)
34 # else
35 #  define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
36 #  define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
37 #  define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER     % 100)
38 # endif
39 #elif defined(__INTEL_COMPILER) && __INTEL_COMPILER == 201900
40         PRINT *, 'INFO:compiler[IntelLLVM]'
41 ! ifx 2021.1 forgot to define __INTEL_LLVM_COMPILER.
42 ! Instead it defines __INTEL_COMPILER == 201900.
43 # define COMPILER_VERSION_MAJOR DEC(2021)
44 # define COMPILER_VERSION_MINOR DEC(1)
45 # define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
46 # define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
47 #elif defined(__INTEL_COMPILER) || defined(__ICC)
48         PRINT *, 'INFO:compiler[Intel]'
49 ! __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later.
50 # if __INTEL_COMPILER < 2021
51 #  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
52 #  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
53 #  if defined(__INTEL_COMPILER_UPDATE)
54 #   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
55 #  else
56 #   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
57 #  endif
58 # else
59 #  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
60 #  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
61 !  The third version component from --version is an update index,
62 !  but no macro is provided for it.
63 #  define COMPILER_VERSION_PATCH DEC(0)
64 # endif
65 # if defined(__INTEL_COMPILER_BUILD_DATE)
66 #  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
67 # endif
68 #elif defined(__SUNPRO_F95)
69         PRINT *, 'INFO:compiler[SunPro]'
70 # define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F95>>8)
71 # define COMPILER_VERSION_MINOR HEX(__SUNPRO_F95>>4 & 0xF)
72 # define COMPILER_VERSION_PATCH HEX(__SUNPRO_F95    & 0xF)
73 #elif defined(__SUNPRO_F90)
74         PRINT *, 'INFO:compiler[SunPro]'
75 # define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F90>>8)
76 # define COMPILER_VERSION_MINOR HEX(__SUNPRO_F90>>4 & 0xF)
77 # define COMPILER_VERSION_PATCH HEX(__SUNPRO_F90    & 0xF)
78 #elif defined(_CRAYFTN)
79         PRINT *, 'INFO:compiler[Cray]'
80 # define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
81 # define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
82 # if defined(_RELEASE_PATCHLEVEL)
83 #  define COMPILER_VERSION_PATCH DEC(_RELEASE_PATCHLEVEL)
84 # endif
85 #elif defined(__G95__)
86         PRINT *, 'INFO:compiler[G95]'
87 # define COMPILER_VERSION_MAJOR DEC(__G95__)
88 # define COMPILER_VERSION_MINOR DEC(__G95_MINOR__)
89 #elif defined(__PATHSCALE__)
90         PRINT *, 'INFO:compiler[PathScale]'
91 # define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
92 # define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
93 # if defined(__PATHCC_PATCHLEVEL__)
94 #  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
95 # endif
96 #elif defined(__ABSOFT__)
97         PRINT *, 'INFO:compiler[Absoft]'
98 #elif defined(__GNUC__)
99         PRINT *, 'INFO:compiler[GNU]'
100 # define COMPILER_VERSION_MAJOR DEC(__GNUC__)
101 # define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
102 # if defined(__GNUC_PATCHLEVEL__)
103 #  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
104 # endif
105 #elif defined(__IBMC__)
106 # if defined(__COMPILER_VER__)
107         PRINT *, 'INFO:compiler[zOS]'
108 # elif __IBMC__ >= 800
109         PRINT *, 'INFO:compiler[XL]'
110 #  define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
111 #  define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
112 #  define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
113 # else
114         PRINT *, 'INFO:compiler[VisualAge]'
115 #  define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
116 #  define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
117 #  define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
118 # endif
119 #elif defined(__NVCOMPILER) || defined(__NVCOMPILER_LLVM__)
120         PRINT *, 'INFO:compiler[NVHPC]'
121 # if defined(__NVCOMPILER_MAJOR__)
122 #  define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
123 # else
124 #  define COMPILER_VERSION_MAJOR DEC(__PGIC__)
125 # endif
126 # if defined(__NVCOMPILER_MINOR__)
127 #  define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
128 # else
129 #  define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
130 # endif
131 # if defined(__NVCOMPILER_PATCHLEVEL__)
132 #  define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
133 # elif defined(__PGIC_PATCHLEVEL__)
134 #  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
135 # endif
136 #elif defined(__PGI)
137         PRINT *, 'INFO:compiler[PGI]'
138 # define COMPILER_VERSION_MAJOR DEC(__PGIC__)
139 # define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
140 # if defined(__PGIC_PATCHLEVEL__)
141 #  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
142 # endif
143 #elif defined(__FLANG)
144         PRINT *, 'INFO:compiler[Flang]'
145 # define COMPILER_VERSION_MAJOR DEC(__FLANG_MAJOR__)
146 # define COMPILER_VERSION_MINOR DEC(__FLANG_MINOR__)
147 # if defined(__FLANG_PATCHLEVEL__)
148 #  define COMPILER_VERSION_PATCH DEC(__FLANG_PATCHLEVEL__)
149 # endif
150 #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
151         PRINT *, 'INFO:compiler[VisualAge]'
152 #elif defined(__hpux) || defined(__hpux__)
153         PRINT *, 'INFO:compiler[HP]'
154 #elif defined(NAGFOR)
155         PRINT *, 'INFO:compiler[NAG]'
156 #define COMPILER_VERSION_MAJOR DEC(__NAG_COMPILER_RELEASE/10)
157 #define COMPILER_VERSION_MINOR DEC(__NAG_COMPILER_RELEASE % 10)
158 #define COMPILER_VERSION_PATCH DEC(__NAG_COMPILER_BUILD)
159 #else
160         PRINT *, 'INFO:compiler[]'
161 #endif
162 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
163         PRINT *, 'INFO:compiler_wrapper[CrayPrgEnv]'
164 #endif
165
166 #if 0
167 ! Identify the platform
168 #endif
169 #if defined(__linux) || defined(__linux__) || defined(linux)
170         PRINT *, 'INFO:platform[Linux]'
171 #elif defined(__CYGWIN__)
172         PRINT *, 'INFO:platform[Cygwin]'
173 #elif defined(__MINGW32__)
174         PRINT *, 'INFO:platform[MinGW]'
175 #elif defined(__APPLE__)
176         PRINT *, 'INFO:platform[Darwin]'
177 #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
178         PRINT *, 'INFO:platform[Windows]'
179 #elif defined(__FreeBSD__) || defined(__FreeBSD)
180         PRINT *, 'INFO:platform[FreeBSD]'
181 #elif defined(__NetBSD__) || defined(__NetBSD)
182         PRINT *, 'INFO:platform[NetBSD]'
183 #elif defined(__OpenBSD__) || defined(__OPENBSD)
184         PRINT *, 'INFO:platform[OpenBSD]'
185 #elif defined(__sun) || defined(sun)
186         PRINT *, 'INFO:platform[SunOS]'
187 #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
188         PRINT *, 'INFO:platform[AIX]'
189 #elif defined(__hpux) || defined(__hpux__)
190         PRINT *, 'INFO:platform[HP-UX]'
191 #elif defined(__HAIKU__)
192         PRINT *, 'INFO:platform[Haiku]'
193 #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
194         PRINT *, 'INFO:platform[BeOS]'
195 #elif defined(__QNX__) || defined(__QNXNTO__)
196         PRINT *, 'INFO:platform[QNX]'
197 #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
198         PRINT *, 'INFO:platform[Tru64]'
199 #elif defined(__riscos) || defined(__riscos__)
200         PRINT *, 'INFO:platform[RISCos]'
201 #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
202         PRINT *, 'INFO:platform[SINIX]'
203 #elif defined(__UNIX_SV__)
204         PRINT *, 'INFO:platform[UNIX_SV]'
205 #elif defined(__bsdos__)
206         PRINT *, 'INFO:platform[BSDOS]'
207 #elif defined(_MPRAS) || defined(MPRAS)
208         PRINT *, 'INFO:platform[MP-RAS]'
209 #elif defined(__osf) || defined(__osf__)
210         PRINT *, 'INFO:platform[OSF1]'
211 #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
212         PRINT *, 'INFO:platform[SCO_SV]'
213 #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
214         PRINT *, 'INFO:platform[ULTRIX]'
215 #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
216         PRINT *, 'INFO:platform[Xenix]'
217 #else
218         PRINT *, 'INFO:platform[]'
219 #endif
220 #if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC))
221 # if defined(_M_IA64)
222         PRINT *, 'INFO:arch[IA64]'
223 # elif defined(_M_X64) || defined(_M_AMD64)
224         PRINT *, 'INFO:arch[x64]'
225 # elif defined(_M_IX86)
226         PRINT *, 'INFO:arch[X86]'
227 # endif
228 #endif
229
230 #if 0
231 ! Encode compiler version digits
232 #endif
233 #define DEC_8(n) (((n) / 10000000) % 10)
234 #define DEC_7(n) (((n) / 1000000)  % 10)
235 #define DEC_6(n) (((n) / 100000)   % 10)
236 #define DEC_5(n) (((n) / 10000)    % 10)
237 #define DEC_4(n) (((n) / 1000)     % 10)
238 #define DEC_3(n) (((n) / 100)      % 10)
239 #define DEC_2(n) (((n) / 10)       % 10)
240 #define DEC_1(n) (((n)    )        % 10)
241 #define HEX_8(n) ((n)>>28 & 0xF)
242 #define HEX_7(n) ((n)>>24 & 0xF)
243 #define HEX_6(n) ((n)>>20 & 0xF)
244 #define HEX_5(n) ((n)>>16 & 0xF)
245 #define HEX_4(n) ((n)>>12 & 0xF)
246 #define HEX_3(n) ((n)>>8  & 0xF)
247 #define HEX_2(n) ((n)>>4  & 0xF)
248 #define HEX_1(n) ((n)     & 0xF)
249 @CMAKE_Fortran_COMPILER_ID_VERSION_INFO@
250
251       END