Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:10:37

0001 /* @(#)root/base:$Id$ */
0002 
0003 /*************************************************************************
0004  * Copyright (C) 1995-2002, Rene Brun and Fons Rademakers.               *
0005  * All rights reserved.                                                  *
0006  *                                                                       *
0007  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0008  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0009  *************************************************************************/
0010 
0011 #ifndef ROOT_RConfig
0012 #define ROOT_RConfig
0013 
0014 /*************************************************************************
0015  *                                                                       *
0016  * RConfig                                                               *
0017  *                                                                       *
0018  * Defines used by ROOT.                                                 *
0019  *                                                                       *
0020  *************************************************************************/
0021 
0022 #include "../RVersion.h"
0023 #include "RConfigure.h"
0024 
0025 
0026 /*---- new C++ features ------------------------------------------------------*/
0027 
0028 #if defined __has_feature
0029 # if __has_feature(modules)
0030 #  define R__CXXMODULES
0031 # endif
0032 #endif
0033 
0034 #define R__USE_SHADOW_CLASS
0035 
0036 /* Now required, thus defined by default for backward compatibility */
0037 #define R__ANSISTREAM      /* ANSI C++ Standard Library conformant */
0038 #define R__SSTREAM         /* use sstream or strstream header */
0039 
0040 #if defined(_MSC_VER)
0041 # if (_MSC_VER < 1910)
0042 #  error "ROOT requires Visual Studio 2017 or higher."
0043 # else
0044 #  define R__NULLPTR
0045 # endif
0046 #else
0047 #if defined(__cplusplus) && (__cplusplus < 201703L)
0048 #error "ROOT requires support for C++17 or higher."
0049 #  if defined(__GNUC__) || defined(__clang__)
0050 #error "Pass `-std=c++17` as compiler argument."
0051 #  endif
0052 # endif
0053 #endif
0054 
0055 /*---- machines --------------------------------------------------------------*/
0056 
0057 #ifdef __hpux
0058     /* R__HPUX10 or R__HPUX11 is determined in the Makefile */
0059 #   define R__HPUX
0060 #   define R__UNIX
0061 #   define ANSICPP
0062 #   ifdef __LP64__
0063 #      define R__B64
0064 #   endif
0065 #   ifdef R__HPUX10
0066 #      define NEED_SNPRINTF
0067 #   endif
0068 #endif
0069 
0070 #ifdef _AIX
0071 #   define R__AIX
0072 #   define R__UNIX
0073 #   define ANSICPP
0074 #   define R__SEEK64
0075 #   define NEED_STRCASECMP
0076 #endif
0077 
0078 #if defined(__linux) || defined(__linux__)
0079 #   ifndef linux
0080 #      define linux
0081 #   endif
0082 #endif
0083 
0084 #if defined(__CYGWIN__) && defined(__GNUC__)
0085 #   ifndef linux
0086 #      define linux
0087 #   endif
0088 #   ifndef R__WINGCC
0089 #      define R__WINGCC
0090 #   endif
0091 #endif
0092 
0093 #if defined(__sun) && !(defined(linux) || defined(__FCC_VERSION))
0094 #   ifdef __SVR4
0095 #      define R__SOLARIS
0096 #      define R__SEEK64
0097 #      define ANSICPP
0098 #      ifdef __i386
0099 #         define R__BYTESWAP
0100 #      endif
0101 #      ifdef __x86_64
0102 #         define R__B64
0103 #         define R__BYTESWAP
0104 #      endif
0105 #   else
0106 #      define R__SUN
0107 #      include <stdlib.h>
0108 #   endif
0109 #   define R__UNIX
0110 #   define NEED_STRING
0111 #   define NEED_SIGJMP
0112 #   if __SUNPRO_CC > 0x420
0113 #      define R__SOLARIS_CC50
0114 #   endif
0115 #   if __SUNPRO_CC >= 0x420
0116 #      define R__SUNCCBUG        /* to work around a compiler bug */
0117 #   endif
0118 #   if __GNUC__ >= 3 || __GNUC_MINOR__ >= 90   /* modern egcs/gcc */
0119 #      define R__SUNGCC3
0120 #   endif
0121 #endif
0122 
0123 #if defined(__FCC_VERSION)    /* Solaris with Fujitsu compiler */
0124 #   define R__SOLARIS
0125 #   define R__SEEK64
0126 #   define ANSICPP
0127 #   define R__UNIX
0128 #   define NEED_STRING
0129 #   define NEED_SIGJMP
0130 #endif
0131 
0132 #if defined(linux)
0133 #   ifndef _LARGEFILE64_SOURCE
0134 #      define _LARGEFILE64_SOURCE
0135 #   endif
0136 #   include <features.h>
0137 #   if __GNU_LIBRARY__ == 6
0138 #      ifndef R__GLIBC
0139 #         define R__GLIBC
0140 #      endif
0141 #   endif
0142 #   if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2
0143 #      define R__NONSCALARFPOS2
0144 #      define R__USESTHROW
0145 #      define R__SEEK64
0146 #   endif
0147 #   if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 38)
0148 #      define HAS_STRLCPY
0149 #   endif
0150 #endif
0151 
0152 #if defined(linux) && defined(__i386__)
0153 #   define R__LINUX
0154 #   define R__UNIX
0155 #   define R__BYTESWAP
0156 #   ifndef __i486__
0157 #      define __i486__       /* turn off if you really want to run on an i386 */
0158 #   endif
0159 #   define NEED_SIGJMP
0160 #endif
0161 
0162 #if defined(linux) && defined(__ia64__)
0163 #   define R__LINUX
0164 #   define R__UNIX
0165 #   define R__BYTESWAP
0166 #   define R__B64
0167 #   define NEED_SIGJMP
0168 #endif
0169 
0170 #if defined(linux) && defined(__x86_64__)
0171 #   define R__LINUX
0172 #   define R__UNIX
0173 #   define R__BYTESWAP
0174 #   define R__B64
0175 #   define NEED_SIGJMP
0176 #endif
0177 
0178 #if defined(linux) && defined(__arm__)
0179 #   define R__LINUX
0180 #   define R__UNIX
0181 #   define R__BYTESWAP
0182 #   define NEED_SIGJMP
0183 #endif
0184 
0185 #if defined(linux) && defined(__sparc__)
0186 #   define R__LINUX
0187 #   define R__UNIX
0188 #   define NEED_SIGJMP
0189 /*#   define R__B64 */     /* enable when 64 bit machine */
0190 #endif
0191 
0192 #if defined(linux) && defined(__hppa)
0193 #   define R__LINUX
0194 #   define R__UNIX
0195 #   define NEED_SIGJMP
0196 #endif
0197 
0198 #if defined(linux) && defined(__powerpc__)
0199 #   define R__LINUX
0200 #   define R__UNIX
0201 #   define NEED_SIGJMP
0202 #   if defined(R__ppc64)
0203 #      define R__B64
0204 #   endif
0205 #   if defined(_LITTLE_ENDIAN)
0206 #      define R__BYTESWAP
0207 #   endif
0208 #endif
0209 
0210 #if defined(linux) && defined(__aarch64__)
0211 #   define R__LINUX
0212 #   define R__UNIX
0213 #   define R__BYTESWAP
0214 #   define R__B64
0215 #   define NEED_SIGJMP
0216 #endif
0217 
0218 #if defined(linux) && defined(__s390__)
0219 #   define R__LINUX
0220 #   define R__UNIX
0221 #   define NEED_SIGJMP
0222 #endif
0223 
0224 #if defined(linux) && defined(__s390x__)
0225 #   define R__LINUX
0226 #   define R__UNIX
0227 #   define R__B64
0228 #   define NEED_SIGJMP
0229 #endif
0230 
0231 #if defined(linux) && defined(__riscv)
0232 #   define R__LINUX
0233 #   define R__UNIX
0234 #   define R__BYTESWAP
0235 #   if __riscv_xlen >= 64
0236 #      define R__B64
0237 #   endif
0238 #   define NEED_SIGJMP
0239 #endif
0240 
0241 #if defined(__MACH__) && defined(__i386__) && !defined(__APPLE__)
0242 #   define R__HURD
0243 #   define f2cFortran   /* cfortran.h does not know HURD - sigh */
0244 #   define R__UNIX
0245 #   define R__BYTESWAP
0246 #   define R__GLIBC     /* GNU/Hurd always use GLIBC 2.x :-) */
0247 #   define NEED_SIGJMP
0248 #endif
0249 
0250 #if defined(__Lynx__) && defined(__powerpc__)
0251 #   define R__LYNXOS
0252 #   define R__UNIX
0253 #   define ANSICPP
0254 #   define NEED_SIGJMP
0255 #   define NEED_STRCASECMP
0256 #   define NEED_SNPRINTF
0257 #endif
0258 
0259 #if defined(__FreeBSD__)
0260 #   define R__FBSD
0261 #   define R__UNIX
0262 #   define R__BYTESWAP
0263 #   if defined(__i386__)
0264 #      ifndef __i486__
0265 #         define __i486__    /* turn off if you really want to run on an i386 */
0266 #      endif
0267 #   endif
0268 #   if defined(__amd64__)
0269 #      define R__B64
0270 #   endif
0271 #   define HAS_STRLCPY
0272 #endif
0273 
0274 #if defined(__OpenBSD__)
0275 #   define R__OBSD
0276 #   define R__UNIX
0277 #   define R__BYTESWAP
0278 #   if defined(__i386__)
0279 #      ifndef __i486__
0280 #         define __i486__    /* turn off if you really want to run on an i386 */
0281 #      endif
0282 #   endif
0283 #   if defined(__amd64__)
0284 #      define R__B64
0285 #   endif
0286 #   define HAS_STRLCPY
0287 #endif
0288 
0289 #if defined(__APPLE__)       /* MacOS X support, initially following FreeBSD */
0290 #   include <AvailabilityMacros.h>
0291 #   include <TargetConditionals.h>
0292 #   define R__MACOSX
0293 #   define R__UNIX
0294 #   if defined(__xlC__) || defined(__xlc__)
0295 #      define ANSICPP
0296 #   endif
0297 #   if defined(__ppc64__)
0298 #      define R__B64      /* enable when 64 bit machine */
0299 #   endif
0300 #   if defined(__i386__)
0301 #      define R__BYTESWAP
0302 #   endif
0303 #   if defined(__x86_64__)
0304 #      define R__BYTESWAP
0305 #      define R__B64      /* enable when 64 bit machine */
0306 #   endif
0307 #   if defined(__arm__)
0308 #      define R__BYTESWAP
0309 #   endif
0310 #   if defined (__arm64__)
0311 #      define R__BYTESWAP
0312 #      define R__B64      /* enable when 64 bit machine */
0313 #   endif
0314 #   define HAS_STRLCPY
0315 #endif
0316 
0317 #ifdef _HIUX_SOURCE
0318 #   define R__HIUX
0319 #   define R__UNIX
0320 #   define NEED_SIGJMP
0321 #   define NEED_SNPRINTF
0322 #   define ANSICPP
0323 #endif
0324 
0325 #ifdef __GNUC__
0326 #   define R__GNU
0327 #   define ANSICPP
0328 #   if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ > 1)
0329 #      define R__PRAGMA_DIAGNOSTIC
0330 #   endif
0331 #   if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
0332 #      define R__BYTESWAP
0333 #   endif
0334 #endif
0335 
0336 #if defined(__GLIBCXX__) && !defined(__cpp_sized_deallocation)
0337    // Sized global deallocation functions in libstc++ are only enabled if
0338    // __cpp_sized_deallocation is defined, which Clang only does if explicitly
0339    // passed -fsized-deallocation.
0340 #else
0341 #   define R__SIZEDDELETE
0342 #endif
0343 
0344 /* allows symbols to be hidden from the shared library export symbol table */
0345 /* use typically on file statics and private methods */
0346 #if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
0347 #    define R__HIDDEN __attribute__((__visibility__("hidden")))
0348 #else
0349 #    define R__HIDDEN
0350 #endif
0351 
0352 #ifdef __INTEL_COMPILER
0353 #   define R__INTEL_COMPILER
0354 #   define ANSICPP
0355 #endif
0356 
0357 #ifdef __HP_aCC
0358 #   define R__ACC
0359 #   if __HP_aCC <= 015000
0360 #      define R__OLDHPACC
0361 #      define R__TEMPLATE_OVERLOAD_BUG
0362 #      define R__GLOBALSTL       /* STL in global name space */
0363 #error "ROOT requires proper support for C++17 or higher"
0364 #   else
0365 #      define R__TMPLTSTREAM     /* std::iostream implemented with templates */
0366 #   endif
0367 #   ifndef _INCLUDE_LONGLONG
0368 #      define _INCLUDE_LONGLONG
0369 #   endif
0370 #endif
0371 
0372 #ifdef _WIN32
0373 #   define R__WIN32
0374 #   ifndef WIN32
0375 #      define WIN32
0376 #   endif
0377 #   define R__BYTESWAP
0378 #   define R__ACCESS_IN_SYMBOL
0379 //#   define __attribute__(X)
0380 //#   define thread_local static __declspec(thread)
0381 #endif
0382 #ifdef _WIN64
0383 #   define R__WIN64
0384 #   ifndef WIN64
0385 #      define WIN64
0386 #   endif
0387 #   define R__x86_64__ 1
0388 #   define R__B64      /* enable when 64 bit machine */
0389 #endif
0390 
0391 #ifdef __SC__
0392 #   define SC
0393 #   define R__SC
0394 #   if defined(WIN32)
0395 #      define NEED_STRING
0396 #      define NEED_STRCASECMP
0397 #      define NEED_SNPRINTF
0398 #      define ANSICPP
0399 #   else
0400 #      define MSDOS
0401 #      define NEED_STRCASECMP
0402 #      define R__BYTESWAP
0403 #   endif
0404 #endif
0405 
0406 #ifdef _MSC_VER
0407 #   define R__VISUAL_CPLUSPLUS
0408 #   define NEED_STRING
0409 #   define NEED_STRCASECMP
0410 #   if _MSC_VER < 1900
0411 #     define NEED_SNPRINTF
0412 #   endif
0413 #   define ANSICPP
0414 #   if _MSC_VER >= 1400
0415 #     define DONTNEED_VSNPRINTF
0416 #   endif
0417 #   if _MSC_VER < 1310
0418 #      define R__NO_CLASS_TEMPLATE_SPECIALIZATION
0419 #   endif
0420 #   if _MSC_VER <= 1800
0421 #      define R__NO_ATOMIC_FUNCTION_POINTER
0422 #   endif
0423 #endif
0424 
0425 /*--- memory and object statistics -------------------------------------------*/
0426 
0427 /* #define R__NOSTATS */
0428 
0429 /*--- cpp --------------------------------------------------------------------*/
0430 
0431 #ifdef ANSICPP
0432     /* symbol concatenation operator */
0433 #   define _NAME1_(name) name
0434 #   define _NAME2_(name1,name2) name1##name2
0435 #   define _NAME3_(name1,name2,name3) name1##name2##name3
0436 
0437     /* stringizing */
0438 #   define _QUOTE_(name) #name
0439 
0440 #else
0441 
0442 #   define _NAME1_(name) name
0443 #   define _NAME2_(name1,name2) _NAME1_(name1)name2
0444 #   define _NAME3_(name1,name2,name3) _NAME2_(name1,name2)name3
0445 
0446 #   define _QUOTE_(name) "name"
0447 
0448 #endif
0449 
0450 /* produce an identifier that is almost unique inside a file */
0451 #   define _R__JOIN_(X,Y) _NAME2_(X,Y)
0452 #   define _R__JOIN3_(F,X,Y) _NAME3_(F,X,Y)
0453 #   define _R__UNIQUE_DICT_(X) _R__JOIN3_(R__DICTIONARY_FILENAME,X,__LINE__)
0454 #   define _R__UNIQUE_(X) _R__JOIN_(X,__LINE__)
0455 
0456 /*---- deprecation -----------------------------------------------------------*/
0457 #if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
0458 # if (__GNUC__ == 5 && (__GNUC_MINOR__ == 1 || __GNUC_MINOR__ == 2)) || defined(R__NO_DEPRECATION)
0459 /* GCC 5.1, 5.2: false positives due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=15269 
0460    or deprecation turned off */
0461 #   define _R__DEPRECATED_LATER(REASON)
0462 # else
0463 #   define _R__DEPRECATED_LATER(REASON) __attribute__((deprecated(REASON)))
0464 # endif
0465 #elif defined(_MSC_VER) && !defined(R__NO_DEPRECATION)
0466 #   define _R__DEPRECATED_LATER(REASON) __pragma(deprecated(REASON))
0467 #else
0468 /* Deprecation not supported for this compiler. */
0469 #   define _R__DEPRECATED_LATER(REASON)
0470 #endif
0471 
0472 #ifdef R__WIN32
0473 #define _R_DEPRECATED_REMOVE_NOW(REASON)
0474 #else
0475 #define _R_DEPRECATED_REMOVE_NOW(REASON) __attribute__((REMOVE_THIS_NOW))
0476 #endif
0477 
0478 /* USE AS `R__DEPRECATED(6,34, "Not threadsafe; use TFoo::Bar().")`
0479    To be removed by 6.34 */
0480 #if ROOT_VERSION_CODE <= ROOT_VERSION(6,33,0)
0481 # define _R__DEPRECATED_634(REASON) _R__DEPRECATED_LATER(REASON)
0482 #else
0483 # define _R__DEPRECATED_634(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
0484 #endif
0485 
0486 /* USE AS `R__DEPRECATED(6,36, "Not threadsafe; use TFoo::Bar().")`
0487    To be removed by 6.36 */
0488 #if ROOT_VERSION_CODE <= ROOT_VERSION(6,35,0)
0489 # define _R__DEPRECATED_636(REASON) _R__DEPRECATED_LATER(REASON)
0490 #else
0491 # define _R__DEPRECATED_636(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
0492 #endif
0493 
0494 /* USE AS `R__DEPRECATED(7,00, "Not threadsafe; use TFoo::Bar().")`
0495    To be removed by 7.00 */
0496 #if ROOT_VERSION_CODE < ROOT_VERSION(6,99,0)
0497 # define _R__DEPRECATED_700(REASON) _R__DEPRECATED_LATER(REASON)
0498 #else
0499 # define _R__DEPRECATED_700(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
0500 #endif
0501 
0502 
0503 /* Spell as R__DEPRECATED(6,04, "Not threadsafe; use TFoo::Bar().") */
0504 #define R__DEPRECATED(MAJOR, MINOR, REASON) \
0505   _R__JOIN3_(_R__DEPRECATED_,MAJOR,MINOR)("will be removed in ROOT v" #MAJOR "." #MINOR ": " REASON)
0506 
0507 /* Mechanisms to advise users to avoid legacy functions and classes that will not be removed */
0508 #if defined R__SUGGEST_NEW_INTERFACE
0509 #  define R__SUGGEST_ALTERNATIVE(ALTERNATIVE) \
0510       _R__DEPRECATED_LATER("There is a superior alternative: " ALTERNATIVE)
0511 #else
0512 #  define R__SUGGEST_ALTERNATIVE(ALTERNATIVE)
0513 #endif
0514 
0515 #define R__ALWAYS_SUGGEST_ALTERNATIVE(ALTERNATIVE) \
0516     _R__DEPRECATED_LATER("There is a superior alternative: " ALTERNATIVE)
0517 
0518 
0519 
0520 /*---- misc ------------------------------------------------------------------*/
0521 
0522 #ifdef R__GNU
0523 #   define SafeDelete(p) { if (p) { delete p; p = nullptr; } }
0524 #else
0525 #   define SafeDelete(p) { delete p; p = nullptr; }
0526 #endif
0527 
0528 #ifdef __FAST_MATH__
0529 #define R__FAST_MATH
0530 #endif
0531 
0532 #if (__GNUC__ >= 7)
0533 #define R__DO_PRAGMA(x) _Pragma (#x)
0534 # define R__INTENTIONALLY_UNINIT_BEGIN \
0535   R__DO_PRAGMA(GCC diagnostic push) \
0536   R__DO_PRAGMA(GCC diagnostic ignored "-Wmaybe-uninitialized") \
0537   R__DO_PRAGMA(GCC diagnostic ignored "-Wuninitialized")
0538 # define R__INTENTIONALLY_UNINIT_END \
0539   R__DO_PRAGMA(GCC diagnostic pop)
0540 #else
0541 # define R__INTENTIONALLY_UNINIT_BEGIN
0542 # define R__INTENTIONALLY_UNINIT_END
0543 
0544 #endif
0545 
0546 #ifdef R__HAS_ATTRIBUTE_ALWAYS_INLINE
0547 #define R__ALWAYS_INLINE inline __attribute__((always_inline))
0548 #else
0549 #if defined(_MSC_VER)
0550 #define R__ALWAYS_INLINE __forceinline
0551 #else
0552 #define R__ALWAYS_INLINE inline
0553 #endif
0554 #endif
0555 
0556 // See also https://nemequ.github.io/hedley/api-reference.html#HEDLEY_NEVER_INLINE
0557 // for other platforms.
0558 #ifdef R__HAS_ATTRIBUTE_NOINLINE
0559 #define R__NEVER_INLINE inline __attribute__((noinline))
0560 #else
0561 #if defined(_MSC_VER)
0562 #define R__NEVER_INLINE inline  __declspec(noinline)
0563 #else
0564 #define R__NEVER_INLINE inline
0565 #endif
0566 #endif
0567 
0568 /*---- unlikely / likely expressions -----------------------------------------*/
0569 // These are meant to use in cases like:
0570 //   if (R__unlikely(expression)) { ... }
0571 // in performance-critical sections.  R__unlikely / R__likely provide hints to
0572 // the compiler code generation to heavily optimize one side of a conditional,
0573 // causing the other branch to have a heavy performance cost.
0574 //
0575 // It is best to use this for conditionals that test for rare error cases or
0576 // backward compatibility code.
0577 
0578 #if (__GNUC__ >= 3) || defined(__INTEL_COMPILER)
0579 #if !defined(R__unlikely)
0580   #define R__unlikely(expr) __builtin_expect(!!(expr), 0)
0581 #endif
0582 #if !defined(R__likely)
0583   #define R__likely(expr) __builtin_expect(!!(expr), 1)
0584 #endif
0585 #else
0586   #define R__unlikely(expr) expr
0587   #define R__likely(expr) expr
0588 #endif
0589 
0590 // Setting this define causes ROOT to keep statistics about memory buffer allocation
0591 // time within the TTree.  Given that this is a "hot-path", we provide a mechanism
0592 // for enabling / disabling this at compile time by developers; default is disabled.
0593 #ifndef R__TRACK_BASKET_ALLOC_TIME
0594 //#define R__TRACK_BASKET_ALLOC_TIME 1
0595 #endif
0596 
0597 #endif