1/* -*-C-*- */
2
3/*
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 *
8 * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
9 */
10
11#include "monetdb_config.h"
12#include "mal.h"
13#include "monet_version.h"
14#include "mutils.h"
15#ifdef HAVE_LIBPCRE
16#include <pcre.h>
17#endif
18#ifdef HAVE_OPENSSL
19#include <openssl/opensslconf.h>
20#include <openssl/opensslv.h>
21#include <openssl/crypto.h>
22#endif
23#ifdef HAVE_LIBXML
24#include <libxml/xmlversion.h>
25#endif
26
27#define STRING(a) # a
28#define XSTRING(s) STRING(s)
29
30#if defined(HAVE_LIBPCRE) || defined(HAVE_OPENSSL)
31static void
32print_libversion(const char *lib, const char *rtvers, const char *cmvers)
33{
34 printf(" %s: %s", lib, rtvers);
35 if (strcmp(rtvers, cmvers) != 0)
36 printf(" (compiled with %s)", cmvers);
37 printf("\n");
38}
39#endif
40
41void
42monet_version(void)
43{
44 dbl sz_mem_gb;
45 int cores;
46
47 MT_init(); /* for MT_pagesize */
48 sz_mem_gb = (dbl)(MT_npages() * MT_pagesize()) / (1024.0 * 1024.0 * 1024.0);
49 cores = MT_check_nr_cores();
50
51 printf("MonetDB 5 server %s", GDKversion());
52#ifdef MONETDB_RELEASE
53 printf(" (%s)", MONETDB_RELEASE);
54#else
55 const char *rev = mercurial_revision();
56 if (strcmp(rev, "Unknown") != 0)
57 printf(" (hg id: %s)", rev);
58#endif
59 printf(" (%zu-bit%s)\n",
60 (size_t) (sizeof(ptr) * 8),
61#ifdef HAVE_HGE
62 ", 128-bit integers"
63#else
64 ""
65#endif
66 );
67#ifndef MONETDB_RELEASE
68 printf("This is an unreleased version\n");
69#endif
70 printf("Copyright (c) 1993 - July 2008 CWI\n"
71 "Copyright (c) August 2008 - 2019 MonetDB B.V., all rights reserved\n");
72 printf("Visit https://www.monetdb.org/ for further information\n");
73 printf("Found %.1fGiB available memory, %d available cpu core%s\n",
74 sz_mem_gb, cores, cores != 1 ? "s" : "");
75 /* don't want to GDKinit just for this
76 "using %d thread%s\n",
77 GDKnr_threads, GDKnr_threads != 1 ? "s" : ""); */
78 printf("Libraries:\n");
79#ifdef HAVE_LIBPCRE
80 /* PCRE_PRERELEASE may be defined as an empty value. In order
81 * to get the proper amount of white space between various
82 * parts of the version string on different compilers (none
83 * between minor and prerelease, a single one between that
84 * combination and the date), we need to resort to some
85 * run-time trickery since we can't do it with the
86 * preprocessor */
87 print_libversion("libpcre",
88 pcre_version(),
89 XSTRING(Z PCRE_PRERELEASE)[1] == 0
90 ? XSTRING(PCRE_MAJOR.PCRE_MINOR PCRE_DATE)
91 : XSTRING(PCRE_MAJOR.PCRE_MINOR)
92 XSTRING(PCRE_PRERELEASE PCRE_DATE));
93#endif
94#ifdef HAVE_OPENSSL
95 print_libversion("openssl",
96#if OPENSSL_VERSION_NUMBER < 0x10100000
97 OPENSSL_VERSION_TEXT,
98#else
99 OpenSSL_version(OPENSSL_VERSION),
100#endif
101 OPENSSL_VERSION_TEXT);
102#endif
103#ifdef HAVE_LIBXML
104 /* no run-time version available, so only compile time */
105 printf(" libxml2: %s\n", LIBXML_DOTTED_VERSION);
106#endif
107 printf("Compiled by: %s (%s)\n", "root@goorm", HOST);
108 printf("Compilation: %s\n", "gcc -g -g3 -Werror -Wall -Wextra -W -Werror-implicit-function-declaration -Wpointer-arith -Wundef -Wformat=2 -Wformat-overflow=1 -Wno-format-truncation -Wno-format-nonliteral -Wno-cast-function-type -Winit-self -Winvalid-pch -Wmissing-declarations -Wmissing-format-attribute -Wmissing-prototypes -Wno-missing-field-initializers -Wold-style-definition -Wpacked -Wunknown-pragmas -Wvariadic-macros -fstack-protector-all -Wstack-protector -Wpacked-bitfield-compat -Wsync-nand -Wjump-misses-init -Wmissing-include-dirs -Wlogical-op -Wduplicated-cond -Wduplicated-branches -Wrestrict -Wnested-externs -Wno-char-subscripts -Wunreachable-code");
109 printf("Linking : %s\n", "/usr/bin/ld -m elf_x86_64 -Wl,-Bsymbolic-functions");
110}
111