ROOT
v6-24
Reference Guide
Loading...
Searching...
No Matches
RConfig.hxx
Go to the documentation of this file.
1
/* @(#)root/base:$Id$ */
2
3
/*************************************************************************
4
* Copyright (C) 1995-2002, Rene Brun and Fons Rademakers. *
5
* All rights reserved. *
6
* *
7
* For the licensing terms see $ROOTSYS/LICENSE. *
8
* For the list of contributors see $ROOTSYS/README/CREDITS. *
9
*************************************************************************/
10
11
#ifndef ROOT_RConfig
12
#define ROOT_RConfig
13
14
/*************************************************************************
15
* *
16
* RConfig *
17
* *
18
* Defines used by ROOT. *
19
* *
20
*************************************************************************/
21
22
#include "../RVersion.h"
23
#include "RConfigure.h"
24
25
26
/*---- new C++ features ------------------------------------------------------*/
27
28
#if defined __has_feature
29
# if __has_feature(modules)
30
# define R__CXXMODULES
31
# endif
32
#endif
33
34
#define R__USE_SHADOW_CLASS
35
36
/* Now required, thus defined by default for backward compatibility */
37
#define R__ANSISTREAM
/* ANSI C++ Standard Library conformant */
38
#define R__SSTREAM
/* use sstream or strstream header */
39
40
#if defined(_MSC_VER)
41
# if (_MSC_VER < 1910)
42
# error "ROOT requires Visual Studio 2017 or higher."
43
# else
44
# define R__NULLPTR
45
# endif
46
#else
47
# if defined(__cplusplus) && (__cplusplus < 201103L)
48
# error "ROOT requires support for C++11 or higher."
49
# if defined(__GNUC__) || defined(__clang__)
50
# error "Pass `-std=c++11` as compiler argument."
51
# endif
52
# endif
53
#endif
54
55
/*---- machines --------------------------------------------------------------*/
56
57
#ifdef __hpux
58
/* R__HPUX10 or R__HPUX11 is determined in the Makefile */
59
# define R__HPUX
60
# define R__UNIX
61
# define ANSICPP
62
# ifdef __LP64__
63
# define R__B64
64
# endif
65
# ifdef R__HPUX10
66
# define NEED_SNPRINTF
67
# endif
68
#endif
69
70
#ifdef _AIX
71
# define R__AIX
72
# define R__UNIX
73
# define ANSICPP
74
# define R__SEEK64
75
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
76
# define NEED_STRCASECMP
77
#endif
78
79
#if defined(__linux) || defined(__linux__)
80
# ifndef linux
81
# define linux
82
# endif
83
#endif
84
85
#if defined(__CYGWIN__) && defined(__GNUC__)
86
# ifndef linux
87
# define linux
88
# endif
89
# ifndef R__WINGCC
90
# define R__WINGCC
91
# endif
92
#endif
93
94
#if defined(__sun) && !(defined(linux) || defined(__FCC_VERSION))
95
# ifdef __SVR4
96
# define R__SOLARIS
97
# define R__SEEK64
98
# define ANSICPP
99
# ifdef __i386
100
# define R__BYTESWAP
101
# endif
102
# ifdef __x86_64
103
# define R__B64
104
# define R__BYTESWAP
105
# endif
106
# else
107
# define R__SUN
108
# include <stdlib.h>
109
# endif
110
# define R__UNIX
111
# define NEED_STRING
112
# define NEED_SIGJMP
113
# if __SUNPRO_CC > 0x420
114
# define R__SOLARIS_CC50
115
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
116
# endif
117
# if __SUNPRO_CC >= 0x420
118
# define R__SUNCCBUG
/* to work around a compiler bug */
119
# endif
120
# if __GNUC__ >= 3 || __GNUC_MINOR__ >= 90
/* modern egcs/gcc */
121
# define R__SUNGCC3
122
# endif
123
#endif
124
125
#if defined(__FCC_VERSION)
/* Solaris with Fujitsu compiler */
126
# define R__SOLARIS
127
# define R__SEEK64
128
# define ANSICPP
129
# define R__UNIX
130
# define NEED_STRING
131
# define NEED_SIGJMP
132
#endif
133
134
#if defined(linux)
135
# ifndef _LARGEFILE64_SOURCE
136
# define _LARGEFILE64_SOURCE
137
# endif
138
# include <features.h>
139
# if __GNU_LIBRARY__ == 6
140
# ifndef R__GLIBC
141
# define R__GLIBC
142
# endif
143
# endif
144
# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2
145
# define R__NONSCALARFPOS2
146
# define R__USESTHROW
147
# define R__SEEK64
148
# endif
149
#endif
150
151
#if defined(linux) && defined(__i386__)
152
# define R__LINUX
153
# define R__UNIX
154
# define R__BYTESWAP
155
# ifndef __i486__
156
# define __i486__
/* turn off if you really want to run on an i386 */
157
# endif
158
# define NEED_SIGJMP
159
#endif
160
161
#if defined(linux) && defined(__ia64__)
162
# define R__LINUX
163
# define R__UNIX
164
# define R__BYTESWAP
165
# define R__B64
166
# define NEED_SIGJMP
167
#endif
168
169
#if defined(linux) && defined(__x86_64__)
170
# define R__LINUX
171
# define R__UNIX
172
# define R__BYTESWAP
173
# define R__B64
174
# define NEED_SIGJMP
175
#endif
176
177
#if defined(linux) && defined(__arm__)
178
# define R__LINUX
179
# define R__UNIX
180
# define R__BYTESWAP
181
# define NEED_SIGJMP
182
#endif
183
184
#if defined(linux) && defined(__sparc__)
185
# define R__LINUX
186
# define R__UNIX
187
# define NEED_SIGJMP
188
/*# define R__B64 */
/* enable when 64 bit machine */
189
#endif
190
191
#if defined(linux) && defined(__hppa)
192
# define R__LINUX
193
# define R__UNIX
194
# define NEED_SIGJMP
195
#endif
196
197
#if defined(linux) && defined(__powerpc__)
198
# define R__LINUX
199
# define R__UNIX
200
# define NEED_SIGJMP
201
# if defined(R__ppc64)
202
# define R__B64
203
# endif
204
# if defined(_LITTLE_ENDIAN)
205
# define R__BYTESWAP
206
# endif
207
#endif
208
209
#if defined(linux) && defined(__aarch64__)
210
# define R__LINUX
211
# define R__UNIX
212
# define R__BYTESWAP
213
# define R__B64
214
# define NEED_SIGJMP
215
#endif
216
217
#if defined(linux) && defined(__s390__)
218
# define R__LINUX
219
# define R__UNIX
220
# define NEED_SIGJMP
221
#endif
222
223
#if defined(linux) && defined(__s390x__)
224
# define R__LINUX
225
# define R__UNIX
226
# define R__B64
227
# define NEED_SIGJMP
228
#endif
229
230
#if defined(__MACH__) && defined(__i386__) && !defined(__APPLE__)
231
# define R__HURD
232
# define f2cFortran
/* cfortran.h does not know HURD - sigh */
233
# define R__UNIX
234
# define R__BYTESWAP
235
# define R__GLIBC
/* GNU/Hurd always use GLIBC 2.x :-) */
236
# define NEED_SIGJMP
237
#endif
238
239
#if defined(__Lynx__) && defined(__powerpc__)
240
# define R__LYNXOS
241
# define R__UNIX
242
# define ANSICPP
243
# define NEED_SIGJMP
244
# define NEED_STRCASECMP
245
# define NEED_SNPRINTF
246
#endif
247
248
#if defined(__FreeBSD__)
249
# define R__FBSD
250
# define R__UNIX
251
# define R__BYTESWAP
252
# if defined(__i386__)
253
# ifndef __i486__
254
# define __i486__
/* turn off if you really want to run on an i386 */
255
# endif
256
# endif
257
# if defined(__amd64__)
258
# define R__B64
259
# endif
260
# define HAS_STRLCPY
261
#endif
262
263
#if defined(__OpenBSD__)
264
# define R__OBSD
265
# define R__UNIX
266
# define R__BYTESWAP
267
# if defined(__i386__)
268
# ifndef __i486__
269
# define __i486__
/* turn off if you really want to run on an i386 */
270
# endif
271
# endif
272
# if defined(__amd64__)
273
# define R__B64
274
# endif
275
# define HAS_STRLCPY
276
#endif
277
278
#if defined(__APPLE__)
/* MacOS X support, initially following FreeBSD */
279
# include <AvailabilityMacros.h>
280
# ifndef __CINT__
281
# include <TargetConditionals.h>
282
# endif
283
# define R__MACOSX
284
# define R__UNIX
285
# if defined(__xlC__) || defined(__xlc__)
286
# define ANSICPP
287
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
288
# endif
289
# if defined(__ppc64__)
290
# define R__B64
/* enable when 64 bit machine */
291
# endif
292
# if defined(__i386__)
293
# define R__BYTESWAP
294
# endif
295
# if defined(__x86_64__)
296
# define R__BYTESWAP
297
# define R__B64
/* enable when 64 bit machine */
298
# endif
299
# if defined(__arm__)
300
# define R__BYTESWAP
301
# endif
302
# if defined (__arm64__)
303
# define R__BYTESWAP
304
# define R__B64
/* enable when 64 bit machine */
305
# endif
306
# define HAS_STRLCPY
307
#endif
308
309
#ifdef _HIUX_SOURCE
310
# define R__HIUX
311
# define R__UNIX
312
# define NEED_SIGJMP
313
# define NEED_SNPRINTF
314
# define ANSICPP
315
#endif
316
317
#ifdef __GNUC__
318
# define R__GNU
319
# define ANSICPP
320
# if __GNUC__ >= 3 || __GNUC_MINOR__ >= 90
/* egcs 1.0.3 */
321
# define R__VECNEWDELETE
/* supports overloading of new[] and delete[] */
322
# define R__PLACEMENTDELETE
/* supports overloading placement delete */
323
# endif
324
# if __GNUC__ >= 3 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 95)
325
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
326
# endif
327
# if defined(__ia64__) && __GNUC__ < 3
/* gcc 2.9x (MINOR is 9!) */
328
# define R__VECNEWDELETE
/* supports overloading of new[] and delete[] */
329
# define R__PLACEMENTDELETE
/* supports overloading placement delete */
330
# endif
331
# if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ > 1)
332
# define R__PRAGMA_DIAGNOSTIC
333
# endif
334
#endif
335
336
#if __cplusplus >= 201402L
337
# if defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_12)
338
// At least on 10.11, the compiler defines but the c++ library does not provide the size operator delete.
339
// See for example https://llvm.org/bugs/show_bug.cgi?id=22951 or
340
// https://github.com/gperftools/gperftools/issues/794.
341
# elif !defined(__GNUC__)
342
# define R__SIZEDDELETE
343
# elif __GNUC__ > 4
344
# define R__SIZEDDELETE
345
# endif
346
#endif
347
348
/* allows symbols to be hidden from the shared library export symbol table */
349
/* use typically on file statics and private methods */
350
#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
351
# define R__HIDDEN __attribute__((__visibility__("hidden"
)))
352
#else
353
# define R__HIDDEN
354
#endif
355
356
#ifdef __INTEL_COMPILER
357
# define R__INTEL_COMPILER
358
# define R__VECNEWDELETE
/* supports overloading of new[] and delete[] */
359
# define R__PLACEMENTDELETE
/* supports overloading placement delete */
360
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
361
# define ANSICPP
362
#endif
363
364
#ifdef __HP_aCC
365
# define R__ACC
366
# define R__VECNEWDELETE
/* supports overloading of new[] and delete[] */
367
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
368
# if __HP_aCC <= 015000
369
# define R__OLDHPACC
370
# define R__TEMPLATE_OVERLOAD_BUG
371
# define R__GLOBALSTL
/* STL in global name space */
372
# error "ROOT requires proper support for C++11 or higher"
373
# else
374
# define R__PLACEMENTDELETE
/* supports overloading placement delete */
375
# define R__TMPLTSTREAM
/* std::iostream implemented with templates */
376
# endif
377
# ifndef _INCLUDE_LONGLONG
378
# define _INCLUDE_LONGLONG
379
# endif
380
#endif
381
382
#ifdef _WIN32
383
# define R__WIN32
384
# ifndef WIN32
385
# define WIN32
386
# endif
387
# define R__BYTESWAP
388
# define R__ACCESS_IN_SYMBOL
389
//# define __attribute__(X)
390
//# define thread_local static __declspec(thread)
391
#endif
392
393
#ifdef __SC__
394
# define SC
395
# define R__SC
396
# if defined(WIN32)
397
# define NEED_STRING
398
# define NEED_STRCASECMP
399
# define NEED_SNPRINTF
400
# define ANSICPP
401
# else
402
# define MSDOS
403
# define NEED_STRCASECMP
404
# define R__BYTESWAP
405
# endif
406
#endif
407
408
#ifdef _MSC_VER
409
# define R__VISUAL_CPLUSPLUS
410
# define NEED_STRING
411
# define NEED_STRCASECMP
412
# if _MSC_VER < 1900
413
# define NEED_SNPRINTF
414
# endif
415
# define ANSICPP
416
# define R__VECNEWDELETE
/* supports overloading of new[] and delete[] */
417
# define R__PLACEMENTDELETE
/* supports overloading placement delete */
418
# define R__PLACEMENTINLINE
/* placement new/delete is inline in <new> */
419
# if _MSC_VER >= 1400
420
# define DONTNEED_VSNPRINTF
421
# endif
422
# if _MSC_VER < 1310
423
# define R__NO_CLASS_TEMPLATE_SPECIALIZATION
424
# endif
425
# if _MSC_VER <= 1800
426
# define R__NO_ATOMIC_FUNCTION_POINTER
427
# endif
428
#endif
429
430
/*--- memory and object statistics -------------------------------------------*/
431
432
/* #define R__NOSTATS */
433
434
/*--- cpp --------------------------------------------------------------------*/
435
436
#ifdef ANSICPP
437
/* symbol concatenation operator */
438
# define _NAME1_(name) name
439
# define _NAME2_(name1,name2) name1##name2
440
# define _NAME3_(name1,name2,name3) name1##name2##name3
441
442
/* stringizing */
443
# define _QUOTE_(name) #name
444
445
#else
446
447
# define _NAME1_(name) name
448
# define _NAME2_(name1,name2) _NAME1_(name1)name2
449
# define _NAME3_(name1,name2,name3) _NAME2_(name1,name2)name3
450
451
# define _QUOTE_(name) "name"
452
453
#endif
454
455
/* produce an identifier that is almost unique inside a file */
456
#ifndef __CINT__
457
# define _R__JOIN_(X,Y) _NAME2_(X,Y)
458
# define _R__JOIN3_(F,X,Y) _NAME3_(F,X,Y)
459
# define _R__UNIQUE_DICT_(X) _R__JOIN3_(R__DICTIONARY_FILENAME,X,__LINE__)
460
# define _R__UNIQUE_(X) _R__JOIN_(X,__LINE__)
461
#else
462
/* Currently CINT does not really mind to have duplicates and */
463
/* does not work correctly as far as merging tokens is concerned. */
464
# define _R__UNIQUE_(X) X
465
#endif
466
467
/*---- deprecation -----------------------------------------------------------*/
468
#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
469
# if (__GNUC__ == 5 && (__GNUC_MINOR__ == 1 || __GNUC_MINOR__ == 2)) || defined(R__NO_DEPRECATION)
470
/* GCC 5.1, 5.2: false positives due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=15269
471
or deprecation turned off */
472
# define _R__DEPRECATED_LATER(REASON)
473
# else
474
# define _R__DEPRECATED_LATER(REASON) __attribute__((deprecated(REASON)))
475
# endif
476
#elif defined(_MSC_VER) || !defined(R__NO_DEPRECATION)
477
# define _R__DEPRECATED_LATER(REASON) __pragma(deprecated(REASON))
478
#else
479
/* Deprecation not supported for this compiler. */
480
# define _R__DEPRECATED_LATER(REASON)
481
#endif
482
483
#ifdef R__WIN32
484
#define _R_DEPRECATED_REMOVE_NOW(REASON)
485
#else
486
#define _R_DEPRECATED_REMOVE_NOW(REASON) __attribute__((REMOVE_THIS_NOW))
487
#endif
488
489
/* To be removed by 6.20 */
490
#if ROOT_VERSION_CODE < ROOT_VERSION(6,19,0)
491
# define _R__DEPRECATED_620(REASON) _R__DEPRECATED_LATER(REASON)
492
#else
493
# define _R__DEPRECATED_620(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
494
#endif
495
496
/* To be removed by 6.22 */
497
#if ROOT_VERSION_CODE < ROOT_VERSION(6,21,0)
498
# define _R__DEPRECATED_622(REASON) _R__DEPRECATED_LATER(REASON)
499
#else
500
# define _R__DEPRECATED_622(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
501
#endif
502
503
/* To be removed by 6.24 */
504
#if ROOT_VERSION_CODE <= ROOT_VERSION(6,23,0)
505
# define _R__DEPRECATED_624(REASON) _R__DEPRECATED_LATER(REASON)
506
#else
507
# define _R__DEPRECATED_624(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
508
#endif
509
510
/* To be removed by 6.26 */
511
#if ROOT_VERSION_CODE <= ROOT_VERSION(6,25,0)
512
# define _R__DEPRECATED_626(REASON) _R__DEPRECATED_LATER(REASON)
513
#else
514
# define _R__DEPRECATED_626(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
515
#endif
516
517
/* To be removed by 7.00 */
518
#if ROOT_VERSION_CODE < ROOT_VERSION(6,99,0)
519
# define _R__DEPRECATED_700(REASON) _R__DEPRECATED_LATER(REASON)
520
#else
521
# define _R__DEPRECATED_700(REASON) _R_DEPRECATED_REMOVE_NOW(REASON)
522
#endif
523
524
525
/* Spell as R__DEPRECATED(6,04, "Not threadsafe; use TFoo::Bar().") */
526
#define R__DEPRECATED(MAJOR, MINOR, REASON) \
527
_R__JOIN3_(_R__DEPRECATED_,MAJOR,MINOR)("will be removed in ROOT v"
#MAJOR "." #MINOR ": " REASON)
528
529
/* Mechanisms to advise users to avoid legacy functions and classes that will not be removed */
530
#if defined R__SUGGEST_NEW_INTERFACE
531
# define R__SUGGEST_ALTERNATIVE(ALTERNATIVE) \
532
_R__DEPRECATED_LATER("There is a superior alternative: "
ALTERNATIVE)
533
#else
534
# define R__SUGGEST_ALTERNATIVE(ALTERNATIVE)
535
#endif
536
537
#define R__ALWAYS_SUGGEST_ALTERNATIVE(ALTERNATIVE) \
538
_R__DEPRECATED_LATER("There is a superior alternative: "
ALTERNATIVE)
539
540
541
542
/*---- misc ------------------------------------------------------------------*/
543
544
#ifdef R__GNU
545
# define SafeDelete(p) { if (p) { delete p; p = 0; } }
546
#else
547
# define SafeDelete(p) { delete p; p = 0; }
548
#endif
549
550
#ifdef __FAST_MATH__
551
#define R__FAST_MATH
552
#endif
553
554
#if (__GNUC__ >= 7)
555
#define R__DO_PRAGMA(x) _Pragma (#x)
556
# define R__INTENTIONALLY_UNINIT_BEGIN \
557
R__DO_PRAGMA(GCC diagnostic push) \
558
R__DO_PRAGMA(GCC diagnostic ignored "-Wmaybe-uninitialized"
) \
559
R__DO_PRAGMA(GCC diagnostic ignored "-Wuninitialized")
560
# define R__INTENTIONALLY_UNINIT_END \
561
R__DO_PRAGMA(GCC diagnostic pop)
562
#else
563
# define R__INTENTIONALLY_UNINIT_BEGIN
564
# define R__INTENTIONALLY_UNINIT_END
565
566
#endif
567
568
#ifdef R__HAS_ATTRIBUTE_ALWAYS_INLINE
569
#define R__ALWAYS_INLINE inline __attribute__((always_inline))
570
#else
571
#if defined(_MSC_VER)
572
#define R__ALWAYS_INLINE __forceinline
573
#else
574
#define R__ALWAYS_INLINE inline
575
#endif
576
#endif
577
578
// See also https://nemequ.github.io/hedley/api-reference.html#HEDLEY_NEVER_INLINE
579
// for other platforms.
580
#ifdef R__HAS_ATTRIBUTE_NOINLINE
581
#define R__NEVER_INLINE inline __attribute__((noinline))
582
#else
583
#if defined(_MSC_VER)
584
#define R__NEVER_INLINE inline __declspec(noinline)
585
#else
586
#define R__NEVER_INLINE inline
587
#endif
588
#endif
589
590
/*---- unlikely / likely expressions -----------------------------------------*/
591
// These are meant to use in cases like:
592
// if (R__unlikely(expression)) { ... }
593
// in performance-critical sections. R__unlikely / R__likely provide hints to
594
// the compiler code generation to heavily optimize one side of a conditional,
595
// causing the other branch to have a heavy performance cost.
596
//
597
// It is best to use this for conditionals that test for rare error cases or
598
// backward compatibility code.
599
600
#if (__GNUC__ >= 3) || defined(__INTEL_COMPILER)
601
#if !defined(R__unlikely)
602
#define R__unlikely(expr) __builtin_expect(!!(expr), 0)
603
#endif
604
#if !defined(R__likely)
605
#define R__likely(expr) __builtin_expect(!!(expr), 1)
606
#endif
607
#else
608
#define R__unlikely(expr) expr
609
#define R__likely(expr) expr
610
#endif
611
612
// Setting this define causes ROOT to keep statistics about memory buffer allocation
613
// time within the TTree. Given that this is a "hot-path", we provide a mechanism
614
// for enabling / disabling this at compile time by developers; default is disabled.
615
#ifndef R__TRACK_BASKET_ALLOC_TIME
616
//#define R__TRACK_BASKET_ALLOC_TIME 1
617
#endif
618
619
#endif
core
foundation
inc
ROOT
RConfig.hxx
ROOT v6-24 - Reference Guide Generated on Tue Aug 22 2023 03:06:15 (GVA Time) using Doxygen 1.9.8