TBCI Numerical high perf. C++ Library  2.8.0
config_manual.h
Go to the documentation of this file.
1 
231 #ifndef TBCI_CONFIG_MANUAL_H
232 #define TBCI_CONFIG_MANUAL_H
233 
234 #ifdef __GNUC__
235 # warning Using config_manual.h is deprecated
236 #endif
237 
242 #ifdef CONFIG_MANUAL_NEED_UNDEF
243 // Compiler bugs
244 # undef HAVE_PROMOTION_BUG
245 # undef HAVE_LIBC_GLOBAL_NS_BUG
246 # undef HAVE_CPP_GLOBAL_NS_BUG
247 # undef HAVE_CPLX_GLOBAL_NS_BUG
248 # undef HAVE_FRIEND_GLOBAL_NS_BUG
249 # undef HAVE_BUGGY_SSTREAM
250 # undef HAVE_BUGGY_NAMESPACE
251 # undef HAVE_BUGGY_EXCEPTIONS
252 # undef HAVE_FOR_SCOPING_BUG
253 # undef HAVE_NO_NEW_HEADERS_BUG
254 # undef HAVE_GCC295_FRIEND_BUG
255 # undef HAVE_GCC295_TMPLFRNDCLS_BUG
256 # undef HAVE_GCC296_TMPLVARARG_BUG
257 # undef HAVE_GCC300_CMATH_POWER_BUG
258 # undef HAVE_GCC320_MISS_CPLXFN_BUG
259 # undef HAVE_GCC34_LIBSTDCXX_REAL_IMAG_REF
260 # undef HAVE_MISS_STDCPLX_FANCY_FN_BUG
261 # undef HAVE_MISS_STDCPLX_LOG10_BUG
262 # undef HAVE_MISS_STDCPLX_TAN_BUG
263 # undef HAVE_STDCPLX_FABS
264 # undef HAVE_MISS_CPLX_IO_BUG
265 # undef HAVE_IGNORE_STD_NS_BUG
266 # undef HAVE_MISS_CSTD_ABS_BUG
267 # undef HAVE_BCXX_INHER_BREAKS_FRIEND_BUG
268 # undef HAVE_BCXX_TEMPL_INLINE_MFUNC_BUG
269 # undef HAVE_BCXX_TYPENAME_BUG
270 // Features (libc)
271 # undef HAVE_UNISTD_H
272 # undef HAVE_MEMALIGN
273 # undef HAVE_MALLINFO
274 # undef HAVE_FPUCW
275 # undef HAVE_NEW_FPUCTRL
276 # undef HAVE_FENV
277 # undef HAVE_SIGNALS
278 # undef HAVE_STRSIGNAL
279 # undef HAVE_ERRNO
280 # undef HAVE_PTHREADS
281 # undef HAVE_MINMAX_IN_SYS_PARAM_H
282 # undef HAVE_SYS_SYSINFO_H
283 # undef HAVE GET_NPROCS
284 # undef HAVE GETLOADAVG
285 # undef HAVE SCHED_GETAFFINITY
286 # undef HAVE PTHREAD_GETAFFINITY_NP
287 # undef HAVE PTHREAD_SPINLOCK
288 # undef HAVE_CLOCK_GETTIME
289 # undef HAVE_CPU_COUNT
290 // Features (C++ std lib)
291 # undef HAVE_LIMITS
292 # undef HAVE_SSTREAM
293 # undef HAVE_STD_MINMAX
294 # undef HAVE_NEED_FOR_GD
295 # undef HAVE_NEED_FOR_EXPL_TMPLPARM
296 // Features (compiler)
297 # undef HAVE_LONG_LONG
298 # undef HAVE_LONG_DOUBLE
299 # undef HAVE_NEED_FOR_GD
300 # undef HAVE_RESTRICT
301 # undef HAVE___RESTRICT__
302 # undef HAVE_TWOSTAGE_LOOKUP
303 # undef HAVE_NEED_FOR_FRIEND_SCOPE
304 // gcc features
305 # undef HAVE_SIGNATURE
306 # undef HAVE_BUILTIN_CPLX
307 # undef HAVE_ALIGN_ATTR
308 # undef HAVE_NEW_ALIGN_ATTR
309 # undef HAVE_TEMPL_ALIGN_ATTR
310 # undef HAVE_DECLSPEC_ALIGN
311 # undef HAVE_WEAK_ATTR
312 # undef HAVE_CONST_ATTR
313 # undef HAVE_REGPARM_ATTR
314 # undef HAVE_VISIBILITY_ATTR
315 # undef HAVE_MALLOC_ATTR
316 # undef HAVE_UNUSED_ATTR
317 # undef HAVE_HOT_ATTR
318 # undef HAVE_GCC_MINMAX
319 # undef HAVE_NAMED_RETVAL
320 # undef HAVE_PRAGMA_IFACE_IMPL
321 # undef HAVE_BUILTIN_EXPECT
322 # undef HAVE_BUILTIN_PREFETCH
323 # undef HAVE_PRETTY_FUNCTION
324 # undef HAVE_FUNC
325 # undef HAVE_TLS
326 # undef HAVE_DTLS
327 #endif /* CONFIG_MANUAL_NEED_UNDEF */
328 
329 /* GCC features */
330 #ifdef __GNUC__
331 # define HAVE_SIGNATURE 1
332 # define HAVE___RESTRICT__ 1
333 # define HAVE_BUILTIN_CPLX 1
334 # define HAVE_ALIGN_ATTR 1
335 # define HAVE_WEAK_ATTR 1
336 # define HAVE_UNUSED_ATTR 1
337 # define HAVE_CONST_ATTR 1
338 # define HAVE_REGPARM_ATTR 1
339 # define HAVE_PRAGMA_IFACE_IMPL 1
340 # if !defined(__GNUC_PATCHLEVEL__)
341 # if defined(__GNUC_SUBVER__)
342 # define __GNUC_PATCHLEVEL__ __GNUC_SUBVER__
343 # else
344 # define __GNUC_PATCHLEVEL__ 0
345 # endif
346 # endif
347 # define HAVE_PRETTY_FUNCTION __GNUC__
348 #endif
349 
350 
351 /* Visual C++ settings */
352 #if defined(_MSC_VER)
353 // Bugs
354 # define HAVE_PROMOTION_BUG 1
355 # define HAVE_LIBC_GLOBAL_NS_BUG 1
356 
357 # if _MSC_VER < 1200
358 # define HAVE_NO_NEW_HEADERS_BUG 1
359 # define HAVE_BUGGY_NAMESPACE 1
360 # endif
361 
362 # if _MSC_VER < 1400 // Let's assume that "you know who" finally
363 # define HAVE_FOR_SCOPING_BUG 1 // hires sb. with a minimum of intelligence
364 # endif // and fix this annoyance in the next version
365 
366 # define HAVE_MISS_STDCPLX_FANCY_FN_BUG 1
367 //# undef HAVE_CPLX_GLOBAL_NS_BUG
368 
369 // Features (libc)
370 //# define HAVE_MEMALIGN 1 // ???
371 //# define HAVE_SIGNALS 1 // ???
372 //# define HAVE_ERRNO 1 // ???
373 // Features (compiler)
374 //# define HAVE_LONG_LONG 1 // ???
375 //# define HAVE_LONG_DOUBLE 1 // ???
376 //# define HAVE_RESTRICT 1 // ???
377 // Features (C++ std lib)
378 //# define HAVE_LIMITS 1 // ???
379 # ifndef HAVE_SSTREAM // might have been defined somewhere else before
380 # define HAVE_SSTREAM 1
381 # endif
382 
383 #endif /* end of WIN32 stuff */
384 
385 /* ICC features */
386 #ifdef __INTEL_COMPILER
387 # define HAVE_SSTREAM 1
388 // with -long_double we can get long double support, but FP constants
389 // > 64bit are not handled and intel warns for lib incompatibilities
390 //# define HAVE_LONG_DOUBLE 1
391 # define HAVE_LIMITS 1
392 # define HAVE_ALGORITHM 1
393 # define HAVE_STD_MINMAX 1
394 // needs -restrict
395 # define HAVE_RESTRICT 1
396 # if __INTEL_COMPILER < 600
397 # define HAVE_MISS_CSTD_ABS_BUG 1
398 # else
399 # define HAVE_LONG_LONG 1
400 # endif
401 # define HAVE_DECLSPEC_ALIGN 1
402 // The following are accepted by icc, but it's not clear
403 // whether they are effective
404 //# define HAVE_ALIGN_ATTR 1
405 # undef HAVE_ALIGN_ATTR
406 # define HAVE_WEAK_ATTR 1
407 # define HAVE_CONST_ATTR 1
408 # define HAVE_REGPARM_ATTR 1
409 # define HAVE_UNUSED_ATTR 1
410 # define HAVE_MISS_STDCPLX_FANCY_FN_BUG 1
411 // Seems to be needed in icc-6.00
412 # define HAVE_NEED_FOR_GD 1
413 # define HAVE_NEED_FOR_EXPL_TMPLPARM 1
414 # define HAVE_NEED_FOR_FRIEND_SCOPE 1
415 # define HAVE_IGNORE_STD_NS_BUG 1
416 # ifndef HAVE_PRETTY_FUNCTION
417 # define HAVE_PRETTY_FUNCTION 3
418 # endif
419 # ifdef __linux__
420 # define HAVE_TLS 1
421 # else
422 # define HAVE_DTLS 1
423 # endif
424 #endif
425 
426 
427 // Borland C (0x570)
428 #if defined(__BORLANDC__)
429 //# warning Borland C++ __BORLANDC__ poorly tested
430 // Supported/ignored attributes
431 # define HAVE_ALIGN_ATTR 1
432 # define HAVE_NEW_ALIGN_ATTR 1
433 # define HAVE_WEAK_ATTR 1
434 # define HAVE_CONST_ATTR 1
435 # define HAVE_REGPARM_ATTR 1
436 // Bugs
437 # define HAVE_BCXX_INHER_BREAKS_FRIEND_BUG 1
438 # define HAVE_BCXX_TEMPL_INLINE_MFUNC_BUG 1
439 # define HAVE_BCXX_TYPENAME_BUG 1
440 // C++ friend decls
441 # define HAVE_NEED_FOR_GD 1
442 # define HAVE_NEED_FOR_EXPL_TMPLPARM 1
443 # define HAVE_NEED_FOR_FRIEND_SCOPE 1
444 // std namespace
445 # define HAVE_IGNORE_STD_NS_BUG 1
446 // std::cplx functions
447 # define HAVE_MISS_STDCPLX_FANCY_FN_BUG 1
448 // types
449 # define HAVE_LONG_LONG 1
450 # define HAVE_LONG_DOUBLE 1
451 // headers
452 # define HAVE_SSTREAM 1
453 # define HAVE_LIMITS 1
454 # define HAVE_ALGORITHM 1
455 # define HAVE_MINMAX_IN_SYS_PARAM_H 1
456 # define HAVE_TLS 1 // according to http://en.wikipedia.org/wiki/Thread-Specific_Storage
457 // For some reason, unix is not set by bc++ 5.7 under linux
458 # ifdef __linux__
459 # define unix
460 # endif
461 #endif
462 
463 /* General unix stuff */
464 #ifdef unix
465 # define HAVE_UNISTD_H 1
466 #endif
467 
468 /* GCC version dependant bugs+features and C++ stdlib features */
469 #ifdef __GNUC__
470 # if __GNUC__ == 1
471 # error "Surely you must be joking! Compiling C++ with gcc-1?"
472 # endif
473 /* Common features of all GNU C++ compilers since 2.7.x */
474 # ifndef PEDANTIC
475 # define HAVE_LONG_LONG 1
476 # define HAVE_LONG_DOUBLE 1
477 # endif
478 # define HAVE_NEED_FOR_GD 1
479 # define HAVE_NEED_FOR_EXPL_TMPLPARM 1
480 # define HAVE_MALLOC_ATTR 1
481 /* Version dependant */
482 # if __GNUC__ == 2
483 # define HAVE_MISS_STDCPLX_FANCY_FN_BUG 1
484 # define HAVE_MISS_STDCPLX_LOG10_BUG 1
485 # define HAVE_MISS_STDCPLX_TAN_BUG 1
486 # define HAVE_IGNORE_STD_NS_BUG 1
487 # ifndef PEDANTIC
488 # define HAVE_GCC_MINMAX 1
489 # endif
490 # define HAVE_NAMED_RETVAL 1
491 # define HAVE_FUNC 2
492 # define __func__ __FUNCTION__
493 # if __GNUC_MINOR__ <= 7
494 # error "gcc-2.7.x or lower will never succeed compiling the TBCI library!"
495 # elif __GNUC_MINOR__ == 8 || __GNUC_MINOR__ == 90 /* gcc-2.8 or egcs-1.0 */
496 # warning "egcs-1.0.x or gcc-2.8.x are not recommended for use with TBCI."
497 # warning "Better use egcs-1.1.x, gcc-2.95.x or newer."
498 # define HAVE_LIBC_GLOBAL_NS_BUG 1
499 # define HAVE_NO_NEW_HEADERS_BUG 1
500 # define HAVE_BUGGY_NAMESPACE 1
501 // What about SSTREAM, LIMITS ?
502 # elif __GNUC_MINOR__ == 91 /* egcs-1.1 */
503  /* no relevant bugs! */
504 # if defined(__GNUC_PATCHLEVEL__) && __GNUC_PATCHLEVEL__ < 52
505 # define HAVE_BUGGY_NAMESPACE 1
506 # endif
507 # elif __GNUC_MINOR__ == 95 /* gcc-2.95.x */
508 # define HAVE_GCC295_FRIEND_BUG 1
509 # define HAVE_GCC295_TMPLFRNDCLS_BUG 1
510 # if defined(__GNUC_PATCHLEVEL__) && __GNUC_PATCHLEVEL__ >= 3
511 # define HAVE_SSTREAM 1
512 # endif
513 # elif __GNUC_MINOR__ > 95 /* gcc-2.96, 2.97 versions */
514 # define HAVE_GCC295_FRIEND_BUG 1
515 # define HAVE_GCC296_TMPLVARARG_BUG 1
516 # define HAVE_SSTREAM 1
517 # if __GNUC_MINOR__ == 96 //&& defined(__alpha__)
518 # define HAVE_BUGGY_SSTREAM 1
519 # endif
520 // What about LIMITS ?
521 # else
522 //# define HAVE_SSTREAM 1
523 # warning "Unknown gcc variant!"
524 # endif
525 # elif __GNUC__ == 3
526 # define HAVE_FUNC 3
527 # define HAVE_SSTREAM 1
528 # define HAVE_LIMITS 1
529 # define HAVE_ALGORITHM 1
530 # define HAVE_STD_MINMAX 1
531 //# define HAVE_RESTRICT 1
532 # define HAVE_BUILTIN_EXPECT 1
533 # ifndef PEDANTIC
534 # define HAVE_GCC_MINMAX 1
535 # endif
536 # if __GNUC_MINOR__ == 0
537 # define __func__ __FUNCTION__
538 # if __GNUC_PATCHLEVEL__ == 0
539 # define HAVE_GCC300_CMATH_POWER_BUG 1
540 # endif
541 # else
542 # define HAVE_BUILTIN_PREFETCH 1
543 # endif
544 # if __GNUC_MINOR__ > 0
545 # define HAVE_GCC320_MISS_CPLXFN_BUG 1
546 # define HAVE_GCC300_CMATH_POWER_BUG 1
547 # endif
548 # if __GNUC_MINOR__ >= 4
549 # define HAVE_NEW_ALIGN_ATTR 1
550 # define HAVE_TWOSTAGE_LOOKUP 1
551 # define HAVE_NEED_FOR_FRIEND_SCOPE 1
552 # define HAVE_GCC34_LIBSTDCXX_REAL_IMAG_REF 1
553 # undef HAVE_SIGNATURE // deprecated
554 # endif
555 # if __GNUC_MINOR__ >= 3
556 # define HAVE_XMMINTRIN_H 1
557 # define HAVE_EMMINTRIN_H 1
558 # define HAVE_PMMINTRIN_H 1
559 # define HAVE_TLS 1
560 # endif
561 # elif __GNUC__ == 4
562 # define HAVE_FUNC 4
563 # define HAVE_TLS 1
564 # define HAVE_SSTREAM 1
565 # define HAVE_LIMITS 1
566 # define HAVE_ALGORITHM 1
567 # define HAVE_STD_MINMAX 1
568 //# define HAVE_RESTRICT 1
569 # define HAVE_BUILTIN_EXPECT 1
570 # define HAVE_BUILTIN_PREFETCH 1
571 # define HAVE_GCC320_MISS_CPLXFN_BUG 1
572 # define HAVE_GCC300_CMATH_POWER_BUG 1
573 # define HAVE_NEW_ALIGN_ATTR 1
574 # define HAVE_VISIBILITY_ATTR 1
575 # define HAVE_TWOSTAGE_LOOKUP 1
576 # define HAVE_NEED_FOR_FRIEND_SCOPE 1
577 # define HAVE_GCC34_LIBSTDCXX_REAL_IMAG_REF 1
578 # undef HAVE_GCC_MINMAX // deprecated
579 # undef HAVE_SIGNATURE // not supported any longer
580 # define HAVE_XMMINTRIN_H 1
581 # define HAVE_EMMINTRIN_H 1
582 # define HAVE_PMMINTRIN_H 1
583 # if __GNUC_MINOR__ >= 4
584 # define HAVE_HOT_ATTR 1
585 # endif
586 # elif __GNUC__ >= 5
587 # define HAVE_FUNC 5
588 # define HAVE_TLS 1
589 # define HAVE_SSTREAM 1
590 # define HAVE_LIMITS 1
591 # define HAVE_ALGORITHM 1
592 # define HAVE_STD_MINMAX 1
593 # define HAVE___RESTRICT__ 1
594 # define HAVE_BUILTIN_EXPECT 1
595 # define HAVE_BUILTIN_PREFETCH 1
596 # define HAVE_NEW_ALIGN_ATTR 1
597 # define HAVE_VISIBILITY_ATTR 1
598 # define HAVE_TWOSTAGE_LOOKUP 1
599 # define HAVE_NEED_FOR_FRIEND_SCOPE 1
600 # define HAVE_GCC34_LIBSTDCXX_REAL_IMAG_REF 1
601 # undef HAVE_GCC_MINMAX // deprecated
602 # undef HAVE_SIGNATURE // not supported any longer
603 # define HAVE_XMMINTRIN_H 1
604 # define HAVE_EMMINTRIN_H 1
605 # define HAVE_PMMINTRIN_H 1
606 # define HAVE_HOT_ATTR 1
607 # define HAVE_STDCPLX_FABS 1
608 # define HAVE_NOEXCEPT_FALSE 1
609 # endif
610 #endif
611 
612 /* Now for SGI MIPSpro and DEC CXX compilers ... */
613 #if (defined(_SGI_SOURCE) && defined(_COMPILER_VERSION) && !defined(__GNUC__)) || defined(__DECCXX)
614 # define HAVE_LONG_LONG 1
615 # define HAVE_SSTREAM 1
616 # define HAVE_MISS_STDCPLX_FANCY_FN_BUG 1
617 # define HAVE_NEED_FOR_GD 1
618 # define HAVE_NEED_FOR_EXPL_TMPLPARM 1
619 # define HAVE_NEED_FOR_FRIEND_SCOPE 1
620 # ifdef __DECCXX
621 # define HAVE_RESTRICT 1
622 # define HAVE_IGNORE_STD_NS_BUG 1
623 //# define HAVE_LONG_DOUBLE 1
624 # else /* MIPSpro */
625 # define HAVE_NO_NEW_HEADERS_BUG 1 // Yes, in 2002 this is still possible!
626 //# define HAVE_CPLX_GLOBAL_NS_BUG 1
627 //# define HAVE_MISS_CPLX_IO_BUG 1
628 # define HAVE_LIBC_GLOBAL_NS_BUG 1
629 # define HAVE_FRIEND_GLOBAL_NS_BUG 1
630 //# define HAVE_GCC295_FRIEND_BUG 1
631 //# define HAVE_RESTRICT 1 // needs -LANG:restrict=ON
632 //# define HAVE_FOR_SCOPING_BUG 1
633 //# define HAVE_CPP_GLOBAL_NS_BUG 1
634 # endif
635 #endif
636 
637 
638 /* C library */
639 #ifdef unix
640 # define HAVE_ERRNO 1 // ???
641 # if !defined(_SGI_SOURCE) && !defined(__FreeBSD__)
642 # include <features.h>
643 # endif
644 /* In principle, we should test for the __USE_* macros ... */
645 # ifdef HAVE_UNISTD_H
646 # include <unistd.h>
647 # ifdef _POSIX_THREADS
648 # define HAVE_PTHREADS 1
649 # endif
650 # endif
651 # ifdef __GLIBC__
652  /* All versions of glibc */
653 # define HAVE_MEMALIGN 2
654 # define HAVE_MALLOC_H 1
655 # define HAVE_MALLINFO 1
656 # define HAVE_SIGNALS 1
657 //# define HAVE_STRSIGNAL 1
658 # define HAVE_ERRNO 1
659 # if __GLIBC__ == 2
660 # define HAVE_SYS_SYSINFO_H 1
661 # define HAVE_GET_NPROCS 1
662 # define HAVE_GETLOADAVG 1
663 # define HAVE_STRSIGNAL 1
664 # if defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ < 1 /* glibc-2.0 */
665 # ifdef i386
666 # define HAVE_FPUCW 1
667 # endif
668 # endif
669 # if defined (__GLIBC_MINOR__)
670 # if __GLIBC_MINOR__ >= 1
671 # define HAVE_NEW_FPUCTRL 1
672 # endif
673 # if __GLIBC_MINOR__ >= 2
674 # define HAVE_FENV
675 # endif
676 # if __GLIBC_MINOR__ >= 3
677 # define HAVE_SCHED_GETAFFINITY 1
678 # define HAVE_CLOCK_GETTIME 1 // guessed
679 # endif
680 # if __GLIBC_MINOR__ >= 4 && defined(HAVE_PTHREADS)
681 # define HAVE_PTHREAD_GETAFFINITY_NP 1
682 # define HAVE PTHREAD_SPINLOCK 1
683 # endif
684 # if __GLIBC_MINOR__ >= 8
685 # define HAVE_CPU_COUNT 1
686 # endif
687 # endif
688 # endif
689 # endif
690 # ifdef _SYSTYPE_SVR4
691 # define HAVE_MINMAX_IN_SYS_PARAM_H 1
692 # endif
693 #endif
694 
695 #endif /* TBCI_CONFIG_MANUAL_H */