| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | // Copyright The OpenTelemetry Authors// SPDX-License-Identifier: Apache-2.0#pragma once#include "opentelemetry/nostd/unique_ptr.h"#include "opentelemetry/version.h"#ifdef _WIN32/** * Cross-platform helper macro to declare the symbol used to load an OpenTelemetry implementation * as a plugin. * * Note: The symbols use weak linkage so as to support using an OpenTelemetry both as a regular * library and a dynamically loaded plugin. The weak linkage allows for multiple implementations to * be linked in without getting multiple definition errors. */#  define OPENTELEMETRY_DEFINE_PLUGIN_HOOK(X)                                   \    extern "C" {                                                                \    extern __declspec(dllexport) opentelemetry::plugin::OpenTelemetryHook const \        OpenTelemetryMakeFactoryImpl;                                           \                                                                                \    __declspec(selectany) opentelemetry::plugin::OpenTelemetryHook const        \        OpenTelemetryMakeFactoryImpl = X;                                       \    }  // extern "C"#else#  define OPENTELEMETRY_DEFINE_PLUGIN_HOOK(X)                                                      \    extern "C" {                                                                                   \    __attribute((                                                                                  \        weak)) extern opentelemetry::plugin::OpenTelemetryHook const OpenTelemetryMakeFactoryImpl; \                                                                                                   \    opentelemetry::plugin::OpenTelemetryHook const OpenTelemetryMakeFactoryImpl = X;               \    }  // extern "C"#endifOPENTELEMETRY_BEGIN_NAMESPACEnamespace plugin{struct LoaderInfo;class FactoryImpl;using OpenTelemetryHook =    nostd::unique_ptr<Factory::FactoryImpl> (*)(const LoaderInfo &loader_info,                                                nostd::unique_ptr<char[]> &error_message);}  // namespace pluginOPENTELEMETRY_END_NAMESPACE
 |