mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 14:27:23 +00:00
b8fc8b324d
Compiler INFO strings built at preprocessing time encode information that must appear as a string literal in the resulting binary. We must make sure the strings appear in the final binary no matter what compiler and flags are used. The previous implementation worked in most places but failed with the GNU linker's --gc-sections option which managed to discard the string. Instead we make the program return value depend on an element of the string indexed by a runtime program parameter, which absolutely requires the string to be present.
24 lines
871 B
C
24 lines
871 B
C
/* A 16 bit integer is required. */
|
|
typedef @CMAKE_16BIT_TYPE@ cmakeint16;
|
|
|
|
/* On a little endian machine, these 16bit ints will give "THIS IS LITTLE ENDIAN."
|
|
On a big endian machine the characters will be exchanged pairwise. */
|
|
const cmakeint16 info_little[] = {0x4854, 0x5349, 0x4920, 0x2053, 0x494c, 0x5454, 0x454c, 0x4520, 0x444e, 0x4149, 0x2e4e, 0x0000};
|
|
|
|
/* on a big endian machine, these 16bit ints will give "THIS IS BIG ENDIAN."
|
|
On a little endian machine the characters will be exchanged pairwise. */
|
|
const cmakeint16 info_big[] = {0x5448, 0x4953, 0x2049, 0x5320, 0x4249, 0x4720, 0x454e, 0x4449, 0x414e, 0x2e2e, 0x0000};
|
|
|
|
#ifdef __CLASSIC_C__
|
|
int main(argc, argv) int argc; char *argv[];
|
|
#else
|
|
int main(int argc, char *argv[])
|
|
#endif
|
|
{
|
|
int require = 0;
|
|
require += info_little[argc];
|
|
require += info_big[argc];
|
|
(void)argv;
|
|
return require;
|
|
}
|