TBCI Numerical high perf. C++ Library 2.8.0
config_manual.h
Go to the documentation of this file.
1
230
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 */