#ifndef SRC_NODE_METADATA_H_ #define SRC_NODE_METADATA_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include #include "node_version.h" namespace node { // if this is a release build and no explicit base has been set // substitute the standard release download URL #ifndef NODE_RELEASE_URLBASE #if NODE_VERSION_IS_RELEASE #define NODE_RELEASE_URLBASE "https://nodejs.org/download/release/" #endif // NODE_VERSION_IS_RELEASE #endif // NODE_RELEASE_URLBASE #if defined(NODE_RELEASE_URLBASE) #define NODE_HAS_RELEASE_URLS #endif #define NODE_VERSIONS_KEYS_BASE(V) \ V(node) \ V(v8) \ V(uv) \ V(zlib) \ V(brotli) \ V(ares) \ V(modules) \ V(nghttp2) \ V(napi) \ V(llhttp) \ V(http_parser) \ #if HAVE_OPENSSL #define NODE_VERSIONS_KEY_CRYPTO(V) V(openssl) #else #define NODE_VERSIONS_KEY_CRYPTO(V) #endif #ifdef NODE_HAVE_I18N_SUPPORT #define NODE_VERSIONS_KEY_INTL(V) \ V(cldr) \ V(icu) \ V(tz) \ V(unicode) #else #define NODE_VERSIONS_KEY_INTL(V) #endif // NODE_HAVE_I18N_SUPPORT #define NODE_VERSIONS_KEYS(V) \ NODE_VERSIONS_KEYS_BASE(V) \ NODE_VERSIONS_KEY_CRYPTO(V) \ NODE_VERSIONS_KEY_INTL(V) class Metadata { public: Metadata(); Metadata(Metadata&) = delete; Metadata(Metadata&&) = delete; Metadata operator=(Metadata&) = delete; Metadata operator=(Metadata&&) = delete; struct Versions { Versions(); #ifdef NODE_HAVE_I18N_SUPPORT // Must be called on the main thread after // i18n::InitializeICUDirectory() void InitializeIntlVersions(); #endif // NODE_HAVE_I18N_SUPPORT #define V(key) std::string key; NODE_VERSIONS_KEYS(V) #undef V }; struct Release { Release(); std::string name; #if NODE_VERSION_IS_LTS std::string lts; #endif // NODE_VERSION_IS_LTS #ifdef NODE_HAS_RELEASE_URLS std::string source_url; std::string headers_url; #ifdef _WIN32 std::string lib_url; #endif // _WIN32 #endif // NODE_HAS_RELEASE_URLS }; Versions versions; const Release release; const std::string arch; const std::string platform; }; // Per-process global namespace per_process { extern Metadata metadata; extern const char* const llhttp_version; extern const char* const http_parser_version; } } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_NODE_METADATA_H_