mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
Co-authored-by: Anna Henningsen <anna@addaleax.net> Co-authored-by: Daniel Bevenius <daniel.bevenius@gmail.com> Co-authored-by: gengjiawen <technicalcute@gmail.com> Co-authored-by: James M Snell <jasnell@gmail.com> Co-authored-by: Lucas Pardue <lucaspardue.24.7@gmail.com> Co-authored-by: Ouyang Yadong <oyydoibh@gmail.com> Co-authored-by: Juan Jos<C3><A9> Arboleda <soyjuanarbol@gmail.com> Co-authored-by: Trivikram Kamat <trivikr.dev@gmail.com> Co-authored-by: Denys Otrishko <shishugi@gmail.com> PR-URL: https://github.com/nodejs/node/pull/32379 Reviewed-By: Anna Henningsen <anna@addaleax.net>
133 lines
3.4 KiB
C++
133 lines
3.4 KiB
C++
#include "node_metadata.h"
|
|
#include "ares.h"
|
|
#include "brotli/encode.h"
|
|
#include "llhttp.h"
|
|
#include "nghttp2/nghttp2ver.h"
|
|
#include "node.h"
|
|
#include "util.h"
|
|
#include "uv.h"
|
|
#include "v8.h"
|
|
#include "zlib.h"
|
|
|
|
#if HAVE_OPENSSL
|
|
#include <openssl/opensslv.h>
|
|
#endif // HAVE_OPENSSL
|
|
|
|
#if defined(NODE_EXPERIMENTAL_QUIC) && NODE_EXPERIMENTAL_QUIC
|
|
#include <ngtcp2/version.h>
|
|
#include <nghttp3/version.h>
|
|
#endif
|
|
|
|
#ifdef NODE_HAVE_I18N_SUPPORT
|
|
#include <unicode/timezone.h>
|
|
#include <unicode/ulocdata.h>
|
|
#include <unicode/uvernum.h>
|
|
#include <unicode/uversion.h>
|
|
#endif // NODE_HAVE_I18N_SUPPORT
|
|
|
|
namespace node {
|
|
|
|
namespace per_process {
|
|
Metadata metadata;
|
|
}
|
|
|
|
#if HAVE_OPENSSL
|
|
constexpr int search(const char* s, int n, int c) {
|
|
return *s == c ? n : search(s + 1, n + 1, c);
|
|
}
|
|
|
|
std::string GetOpenSSLVersion() {
|
|
// sample openssl version string format
|
|
// for reference: "OpenSSL 1.1.0i 14 Aug 2018"
|
|
char buf[128];
|
|
const char* etext = OPENSSL_VERSION_TEXT;
|
|
const int start = search(etext, 0, ' ') + 1;
|
|
etext += start;
|
|
const int end = search(etext, start, ' ');
|
|
const int len = end - start;
|
|
snprintf(buf, sizeof(buf), "%.*s", len, &OPENSSL_VERSION_TEXT[start]);
|
|
return std::string(buf);
|
|
}
|
|
#endif // HAVE_OPENSSL
|
|
|
|
#ifdef NODE_HAVE_I18N_SUPPORT
|
|
void Metadata::Versions::InitializeIntlVersions() {
|
|
UErrorCode status = U_ZERO_ERROR;
|
|
|
|
const char* tz_version = icu::TimeZone::getTZDataVersion(status);
|
|
if (U_SUCCESS(status)) {
|
|
tz = tz_version;
|
|
}
|
|
|
|
char buf[U_MAX_VERSION_STRING_LENGTH];
|
|
UVersionInfo versionArray;
|
|
ulocdata_getCLDRVersion(versionArray, &status);
|
|
if (U_SUCCESS(status)) {
|
|
u_versionToString(versionArray, buf);
|
|
cldr = buf;
|
|
}
|
|
}
|
|
#endif // NODE_HAVE_I18N_SUPPORT
|
|
|
|
Metadata::Versions::Versions() {
|
|
node = NODE_VERSION_STRING;
|
|
v8 = v8::V8::GetVersion();
|
|
uv = uv_version_string();
|
|
zlib = ZLIB_VERSION;
|
|
ares = ARES_VERSION_STR;
|
|
modules = NODE_STRINGIFY(NODE_MODULE_VERSION);
|
|
nghttp2 = NGHTTP2_VERSION;
|
|
napi = NODE_STRINGIFY(NAPI_VERSION);
|
|
llhttp =
|
|
NODE_STRINGIFY(LLHTTP_VERSION_MAJOR)
|
|
"."
|
|
NODE_STRINGIFY(LLHTTP_VERSION_MINOR)
|
|
"."
|
|
NODE_STRINGIFY(LLHTTP_VERSION_PATCH);
|
|
|
|
brotli =
|
|
std::to_string(BrotliEncoderVersion() >> 24) +
|
|
"." +
|
|
std::to_string((BrotliEncoderVersion() & 0xFFF000) >> 12) +
|
|
"." +
|
|
std::to_string(BrotliEncoderVersion() & 0xFFF);
|
|
|
|
#if HAVE_OPENSSL
|
|
openssl = GetOpenSSLVersion();
|
|
#endif
|
|
|
|
#if defined(NODE_EXPERIMENTAL_QUIC) && NODE_EXPERIMENTAL_QUIC
|
|
ngtcp2 = NGTCP2_VERSION;
|
|
nghttp3 = NGHTTP3_VERSION;
|
|
#endif
|
|
|
|
#ifdef NODE_HAVE_I18N_SUPPORT
|
|
icu = U_ICU_VERSION;
|
|
unicode = U_UNICODE_VERSION;
|
|
#endif // NODE_HAVE_I18N_SUPPORT
|
|
}
|
|
|
|
Metadata::Release::Release() : name(NODE_RELEASE) {
|
|
#if NODE_VERSION_IS_LTS
|
|
lts = NODE_VERSION_LTS_CODENAME;
|
|
#endif // NODE_VERSION_IS_LTS
|
|
|
|
#ifdef NODE_HAS_RELEASE_URLS
|
|
#define NODE_RELEASE_URLPFX NODE_RELEASE_URLBASE "v" NODE_VERSION_STRING "/"
|
|
#define NODE_RELEASE_URLFPFX NODE_RELEASE_URLPFX "node-v" NODE_VERSION_STRING
|
|
|
|
source_url = NODE_RELEASE_URLFPFX ".tar.gz";
|
|
headers_url = NODE_RELEASE_URLFPFX "-headers.tar.gz";
|
|
#ifdef _WIN32
|
|
lib_url = strcmp(NODE_ARCH, "ia32") ? NODE_RELEASE_URLPFX "win-" NODE_ARCH
|
|
"/node.lib"
|
|
: NODE_RELEASE_URLPFX "win-x86/node.lib";
|
|
#endif // _WIN32
|
|
|
|
#endif // NODE_HAS_RELEASE_URLS
|
|
}
|
|
|
|
Metadata::Metadata() : arch(NODE_ARCH), platform(NODE_PLATFORM) {}
|
|
|
|
} // namespace node
|