NEURON
nrnversion.cpp
Go to the documentation of this file.
1 #include <../../nrnconf.h>
2 #include "nrn_ansi.h"
3 #include "nrnassrt.h"
4 #include "nrnconfigargs.h"
5 
6 #include <stdio.h>
7 #include <string.h>
8 #include <stdlib.h>
9 
10 
11 extern int nrn_global_argc;
12 extern char** nrn_global_argv;
13 
14 extern int nrn_main_launch; /* 1 if nrniv, 2 if python, 0 if unknownn */
15 
16 static char* ver[10];
17 static char* sarg = 0;
18 static char configargs[] = NRN_CONFIG_ARGS;
19 
20 #if !defined(GIT_BRANCH)
21 #define GIT_DATE "2018-08-24"
22 #define GIT_BRANCH "unknown"
23 #define GIT_CHANGESET "d3ead4a+"
24 #define GIT_DESCRIBE "7.6.2-2-gd3ead4a+"
25 #endif
26 
27 char* nrn_version(int i) {
28  char buf[1024];
29  char head[1024];
30  buf[0] = '\0';
31  if (strncmp(GIT_BRANCH, "Release", 7) == 0) {
32  Sprintf(head, "%s (%s)", GIT_BRANCH, GIT_CHANGESET);
33  } else {
34  Sprintf(head, "VERSION %s %s (%s)", GIT_DESCRIBE, GIT_BRANCH, GIT_CHANGESET);
35  }
36  if (i == 0) {
37  Sprintf(buf, "%s", PACKAGE_VERSION);
38  } else if (i == 2) {
39  Sprintf(buf, "%s", head);
40  } else if (i == 3) {
41  Sprintf(buf, "%s", GIT_CHANGESET);
42  } else if (i == 4) {
43  Sprintf(buf, "%s", GIT_DATE);
44  } else if (i == 5) {
45  Sprintf(buf, "%s", GIT_DESCRIBE);
46  } else if (i == 6) {
47  return configargs;
48  } else if (i == 7) {
49  int j;
50  if (!sarg) {
51  char* c;
52  int size = 0;
53  for (j = 0; j < nrn_global_argc; ++j) {
54  size += strlen(nrn_global_argv[j]) + 1;
55  }
56  sarg = (char*) calloc(size + 1, sizeof(char));
57  c = sarg;
58  auto c_size = size + 1;
59  for (j = 0; j < nrn_global_argc; ++j) {
60  auto const res = std::snprintf(c, c_size, "%s%s", j ? " " : "", nrn_global_argv[j]);
61  assert(res < c_size);
62  c += res;
63  c_size -= res;
64  }
65  }
66  return sarg;
67  } else if (i == 8) {
68  Sprintf(buf, "%s", NRNHOST);
69  } else if (i == 9) {
70  Sprintf(buf, "%d", nrn_main_launch);
71  } else {
72  nrn_assert(snprintf(buf, 1024, "NEURON -- %s %s", head, GIT_DATE) < 1024);
73  }
74 
75  if (i > 9) {
76  i = 1;
77  }
78  if (!ver[i]) {
79  ver[i] = strdup(buf);
80  }
81 
82  return ver[i];
83 }
84 
85 std::size_t nrn_num_config_keys() {
86  return neuron::config::arguments.size();
87 }
88 
89 char* nrn_get_config_key(std::size_t i) {
91  return const_cast<char*>(std::next(neuron::config::arguments.begin(), i)->first);
92 }
93 
94 char* nrn_get_config_val(std::size_t i) {
96  return const_cast<char*>(std::next(neuron::config::arguments.begin(), i)->second);
97 }
#define i
Definition: md1redef.h:19
char buf[512]
Definition: init.cpp:13
static int c
Definition: hoc.cpp:169
#define assert(ex)
Definition: hocassrt.h:24
Item * next(Item *item)
Definition: list.cpp:89
int Sprintf(char(&buf)[N], const char *fmt, Args &&... args)
Redirect sprintf to snprintf if the buffer size can be deduced.
Definition: wrap_sprintf.h:14
#define nrn_assert(x)
assert()-like macro, independent of NDEBUG status
Definition: nrn_assert.h:33
size_t j
char * nrn_version(int i)
Definition: nrnversion.cpp:27
int nrn_global_argc
Definition: hoc.cpp:45
#define GIT_DESCRIBE
Definition: nrnversion.cpp:24
#define GIT_CHANGESET
Definition: nrnversion.cpp:23
#define GIT_BRANCH
Definition: nrnversion.cpp:22
static char * sarg
Definition: nrnversion.cpp:17
#define GIT_DATE
Definition: nrnversion.cpp:21
std::size_t nrn_num_config_keys()
Get the number of NEURON configuration items.
Definition: nrnversion.cpp:85
int nrn_main_launch
Definition: hoc_init.cpp:333
char * nrn_get_config_val(std::size_t i)
Get the ith NEURON configuration value.
Definition: nrnversion.cpp:94
char ** nrn_global_argv
Definition: hoc.cpp:46
static char * ver[10]
Definition: nrnversion.cpp:16
static char configargs[]
Definition: nrnversion.cpp:18
char * nrn_get_config_key(std::size_t i)
Get the ith NEURON configuration key.
Definition: nrnversion.cpp:89