@@ -22,10 +22,11 @@ * */ #include "tlsInt.h" #include "tclOpts.h" +#include "tlsUuid.h" #include /* Min OpenSSL version */ #if OPENSSL_VERSION_NUMBER < 0x10101000L #error "Only OpenSSL v1.1.1 or later is supported" @@ -1736,18 +1737,25 @@ * Side effects: * create the ssl command, initialise ssl context * *------------------------------------------------------------------- */ + +#ifndef STRINGIFY +# define STRINGIFY(x) STRINGIFY1(x) +# define STRINGIFY1(x) #x +#endif + +static const char tlsTclInitScript[] = { +#include "tls.tcl.h" + 0x00 +}; DLLEXPORT int Tls_Init( Tcl_Interp *interp) { - const char tlsTclInitScript[] = { -#include "tls.tcl.h" - 0x00 - }; + Tcl_CmdInfo info; dprintf("Called"); /* * We only support Tcl 8.6 or newer @@ -1768,14 +1776,73 @@ Tcl_CreateObjCommand(interp, "tls::status", StatusObjCmd, NULL, 0); Tcl_CreateObjCommand(interp, "tls::version", VersionObjCmd, NULL, 0); Tcl_CreateObjCommand(interp, "tls::misc", MiscObjCmd, NULL, 0); if (interp) { - Tcl_Eval(interp, tlsTclInitScript); + if (Tcl_Eval(interp, tlsTclInitScript) != TCL_OK) { + return TCL_ERROR; + } + } + + if (Tcl_GetCommandInfo(interp, "::tcl::build-info", &info)) { + Tcl_CreateObjCommand(interp, "::tls::build-info", + info.objProc, (void *)( + PACKAGE_VERSION "+" STRINGIFY(TLS_VERSION_UUID) +#if defined(__clang__) && defined(__clang_major__) + ".clang-" STRINGIFY(__clang_major__) +#if __clang_minor__ < 10 + "0" +#endif + STRINGIFY(__clang_minor__) +#endif +#if defined(__cplusplus) && !defined(__OBJC__) + ".cplusplus" +#endif +#ifndef NDEBUG + ".debug" +#endif +#if !defined(__clang__) && !defined(__INTEL_COMPILER) && defined(__GNUC__) + ".gcc-" STRINGIFY(__GNUC__) +#if __GNUC_MINOR__ < 10 + "0" +#endif + STRINGIFY(__GNUC_MINOR__) +#endif +#ifdef __INTEL_COMPILER + ".icc-" STRINGIFY(__INTEL_COMPILER) +#endif +#ifdef TCL_MEM_DEBUG + ".memdebug" +#endif +#if defined(_MSC_VER) + ".msvc-" STRINGIFY(_MSC_VER) +#endif +#ifdef USE_NMAKE + ".nmake" +#endif +#ifndef TCL_CFG_OPTIMIZED + ".no-optimize" +#endif +#ifdef __OBJC__ + ".objective-c" +#if defined(__cplusplus) + "plusplus" +#endif +#endif +#ifdef TCL_CFG_PROFILED + ".profile" +#endif +#ifdef PURIFY + ".purify" +#endif +#ifdef STATIC_BUILD + ".static" +#endif + ), NULL); } - return(Tcl_PkgProvide(interp, "tls", PACKAGE_VERSION)); + return Tcl_PkgProvideEx(interp, "tls", PACKAGE_VERSION, NULL); } /* *------------------------------------------------------* *