diff --git a/src/node_metadata.cc b/src/node_metadata.cc index d64236d9d834f5..e16fa8c1f0e02a 100644 --- a/src/node_metadata.cc +++ b/src/node_metadata.cc @@ -99,6 +99,24 @@ Metadata::Versions::Versions() { openssl = GetOpenSSLVersion(); #endif +#ifdef __GLIBC__ + glibcCompiler = + NODE_STRINGIFY(__GLIBC__) + "." + NODE_STRINGIFY(__GLIBC_MINOR__); +#endif /* __GLIBC__ */ + +#ifndef _WIN32 +#ifdef RTLD_DEFAULT + const char* (*libc_version)(); + *(reinterpret_cast(&libc_version)) = + dlsym(RTLD_DEFAULT, "gnu_get_libc_version"); + if (libc_version != nullptr) { + glibcRuntime = (*libc_version)(); + } +#endif /* RTLD_DEFAULT */ +#endif /* _WIN32 */ + #ifdef NODE_HAVE_I18N_SUPPORT icu = U_ICU_VERSION; unicode = U_UNICODE_VERSION; diff --git a/src/node_metadata.h b/src/node_metadata.h index b7cacae4c3d430..8f72f9a464469f 100644 --- a/src/node_metadata.h +++ b/src/node_metadata.h @@ -45,6 +45,18 @@ namespace node { #define NODE_VERSIONS_KEY_CRYPTO(V) #endif +#ifdef __GLIBC__ +#define NODE_VERSIONS_KEY_GLIBC_COMPILER(V) V(glibcCompiler) +#else +#define NODE_VERSIONS_KEY_GLIBC_COMPILER(V) +#endif /* __GLIBC__ */ + +#ifndef _WIN32 +#define NODE_VERSIONS_KEY_GLIBC_RUNTIME(V) V(glibcRuntime) +#else +#define NODE_VERSIONS_KEY_GLIBC_RUNTIME(V) +#endif /* _WIN32 */ + #ifdef NODE_HAVE_I18N_SUPPORT #define NODE_VERSIONS_KEY_INTL(V) \ V(cldr) \ @@ -66,6 +78,8 @@ namespace node { #define NODE_VERSIONS_KEYS(V) \ NODE_VERSIONS_KEYS_BASE(V) \ NODE_VERSIONS_KEY_CRYPTO(V) \ + NODE_VERSIONS_KEY_GLIBC_COMPILER(V) \ + NODE_VERSIONS_KEY_GLIBC_RUNTIME(V) \ NODE_VERSIONS_KEY_INTL(V) \ NODE_VERSIONS_KEY_QUIC(V)