kwsysPlatformTestsCXX.cxx 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing#kwsys for details. */
  3. #ifdef TEST_KWSYS_CXX_HAS_CSTDIO
  4. #include <cstdio>
  5. int main()
  6. {
  7. return 0;
  8. }
  9. #endif
  10. #ifdef TEST_KWSYS_CXX_HAS_LONG_LONG
  11. long long f(long long n)
  12. {
  13. return n;
  14. }
  15. int main()
  16. {
  17. long long n = 0;
  18. return static_cast<int>(f(n));
  19. }
  20. #endif
  21. #ifdef TEST_KWSYS_CXX_HAS___INT64
  22. __int64 f(__int64 n)
  23. {
  24. return n;
  25. }
  26. int main()
  27. {
  28. __int64 n = 0;
  29. return static_cast<int>(f(n));
  30. }
  31. #endif
  32. #ifdef TEST_KWSYS_CXX_STAT_HAS_ST_MTIM
  33. #include <sys/types.h>
  34. #include <sys/stat.h>
  35. #include <unistd.h>
  36. int main()
  37. {
  38. struct stat stat1;
  39. (void)stat1.st_mtim.tv_sec;
  40. (void)stat1.st_mtim.tv_nsec;
  41. return 0;
  42. }
  43. #endif
  44. #ifdef TEST_KWSYS_CXX_STAT_HAS_ST_MTIMESPEC
  45. #include <sys/types.h>
  46. #include <sys/stat.h>
  47. #include <unistd.h>
  48. int main()
  49. {
  50. struct stat stat1;
  51. (void)stat1.st_mtimespec.tv_sec;
  52. (void)stat1.st_mtimespec.tv_nsec;
  53. return 0;
  54. }
  55. #endif
  56. #ifdef TEST_KWSYS_CXX_SAME_LONG_AND___INT64
  57. void function(long**)
  58. {
  59. }
  60. int main()
  61. {
  62. __int64** p = 0;
  63. function(p);
  64. return 0;
  65. }
  66. #endif
  67. #ifdef TEST_KWSYS_CXX_SAME_LONG_LONG_AND___INT64
  68. void function(long long**)
  69. {
  70. }
  71. int main()
  72. {
  73. __int64** p = 0;
  74. function(p);
  75. return 0;
  76. }
  77. #endif
  78. #ifdef TEST_KWSYS_IOS_HAS_ISTREAM_LONG_LONG
  79. #include <iostream>
  80. int test_istream(std::istream& is, long long& x)
  81. {
  82. return (is >> x) ? 1 : 0;
  83. }
  84. int main()
  85. {
  86. long long x = 0;
  87. return test_istream(std::cin, x);
  88. }
  89. #endif
  90. #ifdef TEST_KWSYS_IOS_HAS_OSTREAM_LONG_LONG
  91. #include <iostream>
  92. int test_ostream(std::ostream& os, long long x)
  93. {
  94. return (os << x) ? 1 : 0;
  95. }
  96. int main()
  97. {
  98. long long x = 0;
  99. return test_ostream(std::cout, x);
  100. }
  101. #endif
  102. #ifdef TEST_KWSYS_IOS_HAS_ISTREAM___INT64
  103. #include <iostream>
  104. int test_istream(std::istream& is, __int64& x)
  105. {
  106. return (is >> x) ? 1 : 0;
  107. }
  108. int main()
  109. {
  110. __int64 x = 0;
  111. return test_istream(std::cin, x);
  112. }
  113. #endif
  114. #ifdef TEST_KWSYS_IOS_HAS_OSTREAM___INT64
  115. #include <iostream>
  116. int test_ostream(std::ostream& os, __int64 x)
  117. {
  118. return (os << x) ? 1 : 0;
  119. }
  120. int main()
  121. {
  122. __int64 x = 0;
  123. return test_ostream(std::cout, x);
  124. }
  125. #endif
  126. #ifdef TEST_KWSYS_LFS_WORKS
  127. /* Return 0 when LFS is available and 1 otherwise. */
  128. #define _LARGEFILE_SOURCE
  129. #define _LARGEFILE64_SOURCE
  130. #define _LARGE_FILES
  131. #define _FILE_OFFSET_BITS 64
  132. #include <sys/types.h>
  133. #include <assert.h>
  134. #include <sys/stat.h>
  135. #if KWSYS_CXX_HAS_CSTDIO
  136. #include <cstdio>
  137. #endif
  138. #include <stdio.h>
  139. int main(int, char** argv)
  140. {
  141. /* check that off_t can hold 2^63 - 1 and perform basic operations... */
  142. #define OFF_T_64 (((off_t)1 << 62) - 1 + ((off_t)1 << 62))
  143. if (OFF_T_64 % 2147483647 != 1)
  144. return 1;
  145. // stat breaks on SCO OpenServer
  146. struct stat buf;
  147. stat(argv[0], &buf);
  148. if (!S_ISREG(buf.st_mode))
  149. return 2;
  150. FILE* file = fopen(argv[0], "r");
  151. off_t offset = ftello(file);
  152. fseek(file, offset, SEEK_CUR);
  153. fclose(file);
  154. return 0;
  155. }
  156. #endif
  157. #ifdef TEST_KWSYS_CXX_HAS_SETENV
  158. #include <stdlib.h>
  159. int main()
  160. {
  161. return setenv("A", "B", 1);
  162. }
  163. #endif
  164. #ifdef TEST_KWSYS_CXX_HAS_UNSETENV
  165. #include <stdlib.h>
  166. int main()
  167. {
  168. unsetenv("A");
  169. return 0;
  170. }
  171. #endif
  172. #ifdef TEST_KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
  173. #include <stdlib.h>
  174. int main()
  175. {
  176. char* e = environ[0];
  177. return e ? 0 : 1;
  178. }
  179. #endif
  180. #ifdef TEST_KWSYS_CXX_HAS_GETLOADAVG
  181. // Match feature definitions from SystemInformation.cxx
  182. #if (defined(__GNUC__) || defined(__PGI)) && !defined(_GNU_SOURCE)
  183. #define _GNU_SOURCE
  184. #endif
  185. #include <stdlib.h>
  186. int main()
  187. {
  188. double loadavg[3] = { 0.0, 0.0, 0.0 };
  189. return getloadavg(loadavg, 3);
  190. }
  191. #endif
  192. #ifdef TEST_KWSYS_CXX_HAS_RLIMIT64
  193. #if defined(KWSYS_HAS_LFS)
  194. #define _LARGEFILE_SOURCE
  195. #define _LARGEFILE64_SOURCE
  196. #define _LARGE_FILES
  197. #define _FILE_OFFSET_BITS 64
  198. #endif
  199. #include <sys/resource.h>
  200. int main()
  201. {
  202. struct rlimit64 rlim;
  203. return getrlimit64(0, &rlim);
  204. }
  205. #endif
  206. #ifdef TEST_KWSYS_CXX_HAS_ATOLL
  207. #include <stdlib.h>
  208. int main()
  209. {
  210. const char* str = "1024";
  211. return static_cast<int>(atoll(str));
  212. }
  213. #endif
  214. #ifdef TEST_KWSYS_CXX_HAS_ATOL
  215. #include <stdlib.h>
  216. int main()
  217. {
  218. const char* str = "1024";
  219. return static_cast<int>(atol(str));
  220. }
  221. #endif
  222. #ifdef TEST_KWSYS_CXX_HAS__ATOI64
  223. #include <stdlib.h>
  224. int main()
  225. {
  226. const char* str = "1024";
  227. return static_cast<int>(_atoi64(str));
  228. }
  229. #endif
  230. #ifdef TEST_KWSYS_CXX_HAS_UTIMES
  231. #include <sys/time.h>
  232. int main()
  233. {
  234. struct timeval* current_time = 0;
  235. return utimes("/example", current_time);
  236. }
  237. #endif
  238. #ifdef TEST_KWSYS_CXX_HAS_UTIMENSAT
  239. #include <fcntl.h>
  240. #include <sys/stat.h>
  241. #if defined(__APPLE__)
  242. #include <AvailabilityMacros.h>
  243. #if MAC_OS_X_VERSION_MIN_REQUIRED < 101300
  244. #error "utimensat not available on macOS < 10.13"
  245. #endif
  246. #endif
  247. int main()
  248. {
  249. struct timespec times[2] = { { 0, UTIME_OMIT }, { 0, UTIME_NOW } };
  250. return utimensat(AT_FDCWD, "/example", times, AT_SYMLINK_NOFOLLOW);
  251. }
  252. #endif
  253. #ifdef TEST_KWSYS_CXX_HAS_BACKTRACE
  254. #if defined(__PATHSCALE__) || defined(__PATHCC__) || \
  255. (defined(__LSB_VERSION__) && (__LSB_VERSION__ < 41))
  256. backtrace does not work with this compiler or os
  257. #endif
  258. #if (defined(__GNUC__) || defined(__PGI)) && !defined(_GNU_SOURCE)
  259. #define _GNU_SOURCE
  260. #endif
  261. #include <execinfo.h>
  262. int main()
  263. {
  264. void* stackSymbols[256];
  265. backtrace(stackSymbols, 256);
  266. backtrace_symbols(&stackSymbols[0], 1);
  267. return 0;
  268. }
  269. #endif
  270. #ifdef TEST_KWSYS_CXX_HAS_DLADDR
  271. #if (defined(__GNUC__) || defined(__PGI)) && !defined(_GNU_SOURCE)
  272. #define _GNU_SOURCE
  273. #endif
  274. #include <dlfcn.h>
  275. int main()
  276. {
  277. Dl_info info;
  278. int ierr = dladdr((void*)main, &info);
  279. return 0;
  280. }
  281. #endif
  282. #ifdef TEST_KWSYS_CXX_HAS_CXXABI
  283. #if (defined(__GNUC__) || defined(__PGI)) && !defined(_GNU_SOURCE)
  284. #define _GNU_SOURCE
  285. #endif
  286. #if defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5130 && __linux && \
  287. __SUNPRO_CC_COMPAT == 'G'
  288. #include <iostream>
  289. #endif
  290. #include <cxxabi.h>
  291. int main()
  292. {
  293. int status = 0;
  294. size_t bufferLen = 512;
  295. char buffer[512] = { '\0' };
  296. const char* function = "_ZN5kwsys17SystemInformation15GetProgramStackEii";
  297. char* demangledFunction =
  298. abi::__cxa_demangle(function, buffer, &bufferLen, &status);
  299. return status;
  300. }
  301. #endif
  302. #ifdef TEST_KWSYS_CXX_HAS_BORLAND_ASM
  303. int main()
  304. {
  305. int a = 1;
  306. __asm {
  307. xor EBX, EBX;
  308. mov a, EBX;
  309. }
  310. return a;
  311. }
  312. #endif
  313. #ifdef TEST_KWSYS_CXX_HAS_BORLAND_ASM_CPUID
  314. int main()
  315. {
  316. int a = 0;
  317. __asm {
  318. xor EAX, EAX;
  319. cpuid;
  320. mov a, EAX;
  321. }
  322. return a;
  323. }
  324. #endif
  325. #ifdef TEST_KWSYS_STL_HAS_WSTRING
  326. #include <string>
  327. void f(std::wstring*)
  328. {
  329. }
  330. int main()
  331. {
  332. return 0;
  333. }
  334. #endif
  335. #ifdef TEST_KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H
  336. #include <ext/stdio_filebuf.h>
  337. int main()
  338. {
  339. return 0;
  340. }
  341. #endif