1414 Note: Use this macro to avoid an extra level of #ifdef __has_builtin check.
1515 http://releases.llvm.org/3.3/tools/clang/docs/LanguageExtensions.html
1616*/
17- #if !defined(OPENTELEMETRY_HAVE_BUILTIN)
18- # ifdef __has_builtin
19- # define OPENTELEMETRY_HAVE_BUILTIN (x ) __has_builtin(x)
20- # else
21- # define OPENTELEMETRY_HAVE_BUILTIN (x ) 0
22- # endif
23- #endif
24-
25- #if !defined(OPENTELEMETRY_HAVE_FEATURE)
26- # ifdef __has_feature
27- # define OPENTELEMETRY_HAVE_FEATURE (f ) __has_feature(f)
28- # else
29- # define OPENTELEMETRY_HAVE_FEATURE (f ) 0
30- # endif
31- #endif
17+ // #if !defined(OPENTELEMETRY_HAVE_BUILTIN)
18+ // # ifdef __has_builtin
19+ // # define OPENTELEMETRY_HAVE_BUILTIN(x) __has_builtin(x)
20+ // # else
21+ // # define OPENTELEMETRY_HAVE_BUILTIN(x) 0
22+ // # endif
23+ // #endif
24+
25+ // #if !defined(OPENTELEMETRY_HAVE_FEATURE)
26+ // # ifdef __has_feature
27+ // # define OPENTELEMETRY_HAVE_FEATURE(f) __has_feature(f)
28+ // # else
29+ // # define OPENTELEMETRY_HAVE_FEATURE(f) 0
30+ // # endif
31+ // #endif
3232
3333/*
3434 has feature
4444 GCC: https://gcc.gnu.org/gcc-5/changes.html
4545 Clang: https://clang.llvm.org/docs/LanguageExtensions.html
4646*/
47- #if !defined(OPENTELEMETRY_HAVE_ATTRIBUTE)
48- # ifdef __has_attribute
49- # define OPENTELEMETRY_HAVE_ATTRIBUTE (x ) __has_attribute(x)
50- # else
51- # define OPENTELEMETRY_HAVE_ATTRIBUTE (x ) 0
52- # endif
53- #endif
47+ // #if !defined(OPENTELEMETRY_HAVE_ATTRIBUTE)
48+ // # ifdef __has_attribute
49+ // # define OPENTELEMETRY_HAVE_ATTRIBUTE(x) __has_attribute(x)
50+ // # else
51+ // # define OPENTELEMETRY_HAVE_ATTRIBUTE(x) 0
52+ // # endif
53+ // #endif
5454
5555/*
5656 OPENTELEMETRY_HAVE_CPP_ATTRIBUTE
6060 (https://en.cppreference.com/w/cpp/experimental/feature_test). If we don't
6161 find `__has_cpp_attribute`, will evaluate to 0.
6262*/
63- #if !defined(OPENTELEMETRY_HAVE_CPP_ATTRIBUTE)
64- # if defined(__cplusplus) && defined(__has_cpp_attribute)
65- // NOTE: requiring __cplusplus above should not be necessary, but
66- // works around https://bugs.llvm.org/show_bug.cgi?id=23435.
67- # define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE (x ) __has_cpp_attribute(x)
68- # else
69- # define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE (x ) 0
70- # endif
71- #endif
63+ // #if !defined(OPENTELEMETRY_HAVE_CPP_ATTRIBUTE)
64+ // # if defined(__cplusplus) && defined(__has_cpp_attribute)
65+ // // NOTE: requiring __cplusplus above should not be necessary, but
66+ // // works around https://bugs.llvm.org/show_bug.cgi?id=23435.
67+ // # define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
68+ // # else
69+ // # define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) 0
70+ // # endif
71+ // #endif
7272
7373/*
7474 Expected usage pattern:
@@ -401,24 +401,24 @@ point.
401401// * The `noexcept` operator may still return `false`.
402402//
403403// For further details, consult the compiler's documentation.
404- #ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
405- # if defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__) < 306
406- // Clang < 3.6
407- // http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro
408- # if defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
409- # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
410- # endif // defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
411- # elif OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
412- # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
413- // Handle remaining special cases and default to exceptions being supported.
414- # elif !(defined(__GNUC__) && !defined(__EXCEPTIONS) && !defined(__cpp_exceptions)) && \
415- !(defined (_MSC_VER) && !defined (_CPPUNWIND))
416- # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
417- # endif
418- #endif
419- #ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
420- # define OPENTELEMETRY_HAVE_EXCEPTIONS 0
421- #endif
404+ // #ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
405+ // # if defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__) < 306
406+ // // Clang < 3.6
407+ // // http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro
408+ // # if defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
409+ // # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
410+ // # endif // defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
411+ // # elif OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
412+ // # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
413+ // // Handle remaining special cases and default to exceptions being supported.
414+ // # elif !(defined(__GNUC__) && !defined(__EXCEPTIONS) && !defined(__cpp_exceptions)) && \
415+ // !(defined(_MSC_VER) && !defined(_CPPUNWIND))
416+ // # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
417+ // # endif
418+ // #endif
419+ // #ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
420+ // # define OPENTELEMETRY_HAVE_EXCEPTIONS 0
421+ // #endif
422422
423423/*
424424 OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND indicates that a resource owned by a function
@@ -436,93 +436,95 @@ point.
436436 See also the upstream documentation:
437437 https://clang.llvm.org/docs/AttributeReference.html#lifetimebound
438438*/
439- #ifndef OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
440- # if OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(clang::lifetimebound)
441- # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND [[clang::lifetimebound]]
442- # elif OPENTELEMETRY_HAVE_ATTRIBUTE(lifetimebound)
443- # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND __attribute__ ((lifetimebound))
444- # else
445- # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
446- # endif
447- #endif
439+ // #ifndef OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
440+ // # if OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(clang::lifetimebound)
441+ // # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND [[clang::lifetimebound]]
442+ // # elif OPENTELEMETRY_HAVE_ATTRIBUTE(lifetimebound)
443+ // # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND __attribute__((lifetimebound))
444+ // # else
445+ // # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
446+ // # endif
447+ // #endif
448+
449+ #define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
448450
449451// OPENTELEMETRY_HAVE_MEMORY_SANITIZER
450452//
451453// MemorySanitizer (MSan) is a detector of uninitialized reads. It consists of
452454// a compiler instrumentation module and a run-time library.
453- #ifndef OPENTELEMETRY_HAVE_MEMORY_SANITIZER
454- # if !defined(__native_client__) && OPENTELEMETRY_HAVE_FEATURE(memory_sanitizer)
455- # define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 1
456- # else
457- # define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 0
458- # endif
459- #endif
460-
461- #if OPENTELEMETRY_HAVE_MEMORY_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_memory)
462- # define OPENTELEMETRY_SANITIZER_NO_MEMORY \
463- __attribute__ ((no_sanitize_memory)) // __attribute__((no_sanitize("memory")))
464- #else
465- # define OPENTELEMETRY_SANITIZER_NO_MEMORY
466- #endif
455+ // #ifndef OPENTELEMETRY_HAVE_MEMORY_SANITIZER
456+ // # if !defined(__native_client__) && OPENTELEMETRY_HAVE_FEATURE(memory_sanitizer)
457+ // # define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 1
458+ // # else
459+ // # define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 0
460+ // # endif
461+ // #endif
462+
463+ // #if OPENTELEMETRY_HAVE_MEMORY_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_memory)
464+ // # define OPENTELEMETRY_SANITIZER_NO_MEMORY \
465+ // __attribute__((no_sanitize_memory)) // __attribute__((no_sanitize("memory")))
466+ // #else
467+ // # define OPENTELEMETRY_SANITIZER_NO_MEMORY
468+ // #endif
467469
468470// OPENTELEMETRY_HAVE_THREAD_SANITIZER
469471//
470472// ThreadSanitizer (TSan) is a fast data race detector.
471- #ifndef OPENTELEMETRY_HAVE_THREAD_SANITIZER
472- # if defined(__SANITIZE_THREAD__)
473- # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
474- # elif OPENTELEMETRY_HAVE_FEATURE(thread_sanitizer)
475- # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
476- # else
477- # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 0
478- # endif
479- #endif
480-
481- #if OPENTELEMETRY_HAVE_THREAD_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_thread)
482- # define OPENTELEMETRY_SANITIZER_NO_THREAD \
483- __attribute__ ((no_sanitize_thread)) // __attribute__((no_sanitize("thread")))
484- #else
485- # define OPENTELEMETRY_SANITIZER_NO_THREAD
486- #endif
473+ // #ifndef OPENTELEMETRY_HAVE_THREAD_SANITIZER
474+ // # if defined(__SANITIZE_THREAD__)
475+ // # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
476+ // # elif OPENTELEMETRY_HAVE_FEATURE(thread_sanitizer)
477+ // # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
478+ // # else
479+ // # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 0
480+ // # endif
481+ // #endif
482+
483+ // #if OPENTELEMETRY_HAVE_THREAD_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_thread)
484+ // # define OPENTELEMETRY_SANITIZER_NO_THREAD \
485+ // __attribute__((no_sanitize_thread)) // __attribute__((no_sanitize("thread")))
486+ // #else
487+ // # define OPENTELEMETRY_SANITIZER_NO_THREAD
488+ // #endif
487489
488490// OPENTELEMETRY_HAVE_ADDRESS_SANITIZER
489491//
490492// AddressSanitizer (ASan) is a fast memory error detector.
491- #ifndef OPENTELEMETRY_HAVE_ADDRESS_SANITIZER
492- # if defined(__SANITIZE_ADDRESS__)
493- # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
494- # elif OPENTELEMETRY_HAVE_FEATURE(address_sanitizer)
495- # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
496- # else
497- # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 0
498- # endif
499- #endif
493+ // #ifndef OPENTELEMETRY_HAVE_ADDRESS_SANITIZER
494+ // # if defined(__SANITIZE_ADDRESS__)
495+ // # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
496+ // # elif OPENTELEMETRY_HAVE_FEATURE(address_sanitizer)
497+ // # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
498+ // # else
499+ // # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 0
500+ // # endif
501+ // #endif
500502
501503// OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER
502504//
503505// Hardware-Assisted AddressSanitizer (or HWASAN) is even faster than asan
504506// memory error detector which can use CPU features like ARM TBI, Intel LAM or
505507// AMD UAI.
506- #ifndef OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER
507- # if defined(__SANITIZE_HWADDRESS__)
508- # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
509- # elif OPENTELEMETRY_HAVE_FEATURE(hwaddress_sanitizer)
510- # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
511- # else
512- # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 0
513- # endif
514- #endif
515-
516- #if OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_address)
517- # define OPENTELEMETRY_SANITIZER_NO_ADDRESS \
518- __attribute__ ((no_sanitize_address)) // __attribute__((no_sanitize("address")))
519- #elif OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && defined(_MSC_VER) && _MSC_VER >= 1928
520- # define OPENTELEMETRY_SANITIZER_NO_ADDRESS __declspec (no_sanitize_address)
521- #elif OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize)
522- # define OPENTELEMETRY_SANITIZER_NO_ADDRESS __attribute__ ((no_sanitize(" hwaddress" )))
523- #else
524- # define OPENTELEMETRY_SANITIZER_NO_ADDRESS
525- #endif
508+ // #ifndef OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER
509+ // # if defined(__SANITIZE_HWADDRESS__)
510+ // # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
511+ // # elif OPENTELEMETRY_HAVE_FEATURE(hwaddress_sanitizer)
512+ // # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
513+ // # else
514+ // # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 0
515+ // # endif
516+ // #endif
517+
518+ // #if OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_address)
519+ // # define OPENTELEMETRY_SANITIZER_NO_ADDRESS \
520+ // __attribute__((no_sanitize_address)) // __attribute__((no_sanitize("address")))
521+ // #elif OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && defined(_MSC_VER) && _MSC_VER >= 1928
522+ // # define OPENTELEMETRY_SANITIZER_NO_ADDRESS __declspec(no_sanitize_address)
523+ // #elif OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize)
524+ // # define OPENTELEMETRY_SANITIZER_NO_ADDRESS __attribute__((no_sanitize("hwaddress")))
525+ // #else
526+ // # define OPENTELEMETRY_SANITIZER_NO_ADDRESS
527+ // #endif
526528
527529// what foloows are overrides specific to github.com/malkia/opentelemetry-cpp's fork
528530// where we force certain flags to be set, such that users of the library do not have to set them (through -Dxxx=yyy, etc.)
@@ -544,10 +546,10 @@ point.
544546#endif
545547#define OPENTELEMETRY_OPTION_USE_STD_SPAN 0 // Use the nostd version, std::span is in C++2020
546548
547- #ifdef OPENTELEMETRY_HAVE_EXCEPTIONS
548- #undef OPENTELEMETRY_HAVE_EXCEPTIONS
549- #endif
550- #define OPENTELEMETRY_HAVE_EXCEPTIONS 1
549+ // #ifdef OPENTELEMETRY_HAVE_EXCEPTIONS
550+ // #undef OPENTELEMETRY_HAVE_EXCEPTIONS
551+ // #endif
552+ // #define OPENTELEMETRY_HAVE_EXCEPTIONS 1
551553
552554#ifdef OPENTELEMETRY_ABI_VERSION_NO
553555#undef OPENTELEMETRY_ABI_VERSION_NO
@@ -619,6 +621,8 @@ point.
619621# define OPENTELEMETRY_API_SINGLETON OPENTELEMETRY_EXPORT
620622#endif // if OPENTELEMETRY_DLL != 0
621623
624+ // TODO: https://chatgpt.com/share/6840802f-2388-800a-a68a-928e76535c86
625+
622626// this check only works for static library build
623627#if defined(_MSC_VER)
624628#define OPENTELEMETRY_STRX (x ) #x
@@ -628,7 +632,6 @@ point.
628632 " +stl:" OPENTELEMETRY_STR(OPENTELEMETRY_STL_VERSION) \
629633 " +rtti:" OPENTELEMETRY_STR(OPENTELEMETRY_RTTI_ENABLED) \
630634 " +std_span:" OPENTELEMETRY_STR(OPENTELEMETRY_OPTION_USE_STD_SPAN) \
631- " +have_excpts:" OPENTELEMETRY_STR(OPENTELEMETRY_HAVE_EXCEPTIONS) \
632635 " +abi:" OPENTELEMETRY_STR(OPENTELEMETRY_ABI_VERSION_NO) \
633636 " +exemplar:" OPENTELEMETRY_STR(ENABLE_METRICS_EXEMPLAR_PREVIEW) \
634637 " +async:" OPENTELEMETRY_STR(ENABLE_ASYNC_EXPORT) \
@@ -638,6 +641,9 @@ point.
638641 " +thrd_instr:" OPENTELEMETRY_STR(ENABLE_THREAD_INSTRUMENTATION_PREVIEW) \
639642 " +curl_log:" OPENTELEMETRY_STR(ENABLE_CURL_LOGGING) \
640643)
644+
645+ // "+have_excpts:" OPENTELEMETRY_STR(OPENTELEMETRY_HAVE_EXCEPTIONS)
646+
641647#undef OPENTELEMETRY_DLL_STRX
642648#undef OPENTELEMETRY_DLL_STR
643649#endif
0 commit comments