aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp/app/version.c
blob: 1446777b74f1c15dc062f1908edb3597ed0f5c92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
 * Copyright (c) 2015 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include <vlib/vlib.h>
#include <vppinfra/cpu.h>
#include <vpp/app/version.h>

/** \file
    Display image version information
*/

/*? %%clicmd:group_label Image Version Information %% ?*/

/*
 * Version variables are static to ensure that they're visible in core
 * dumps, i.e., not in the rodata segment
 */

/** The image version string */
char *vpe_version_string =
  "vpp v" VPP_BUILD_VER
  " built by " VPP_BUILD_USER " on " VPP_BUILD_HOST " at " VPP_BUILD_DATE;

/** The name of the compiler */
static char *vpe_compiler =
#if defined(__INTEL_COMPILER)
#define __(x) #x
#define _(x) __(x)
  "icc " _(__INTEL_COMPILER) " (" __VERSION__ ")";
#undef _
#undef __
#elif defined(__clang__)
  "Clang/LLVM " __clang_version__;
#elif defined (__GNUC__)
  "GCC " __VERSION__;
#else
  "unknown compiler";
#endif

/** \brief Display image version info, a debug CLI command function
 */
static clib_error_t *
show_vpe_version_command_fn (vlib_main_t * vm,
			     unformat_input_t * input,
			     vlib_cli_command_t * cmd)
{
  int i;
  int verbose = 0;
  int cmdline = 0;
  int indent = 2;
  vlib_global_main_t *vgm = vlib_get_global_main ();
  char **argv = (char **) vgm->argv;

  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    {
      if (unformat (input, "verbose %=", &verbose, 1))
	;
      else if (unformat (input, "cmdline %=", &cmdline, 1))
	;
      else
	break;
    }

  if (verbose)
    {
#define _(a,b,c) vlib_cli_output (vm, "%-25s " b, a ":", c);
      _("Version", "%s", "v" VPP_BUILD_VER);
      _("Compiled by", "%s", VPP_BUILD_USER);
      _("Compile host", "%s", VPP_BUILD_HOST);
      _("Compile date", "%s", VPP_BUILD_DATE);
      _("Compile location", "%s", VPP_BUILD_TOPDIR);
      _("Compiler", "%s", vpe_compiler);
      _("Current PID", "%d", getpid ());
#undef _
    }
  if (cmdline)
    {
      vlib_cli_output (vm, "%-25s", "Command line arguments:");

      for (i = 0; argv[i]; i++)
	{
	  if (strstr (argv[i], "{"))
	    indent += 2;
	  vlib_cli_output (vm, "%U%s", format_white_space, indent, argv[i]);
	  if (strstr (argv[i], "}"))
	    indent -= 2;
	}
    }
  if ((verbose + cmdline) == 0)
    vlib_cli_output (vm, "%s", vpe_version_string);
  return 0;
}

/*?
 * This command displays image version and command line arguments
 *
 * @cliexpar
 * How to display the image version string:
 * @cliexstart{show version}
 * vpp v18.07-rc0~509-gb9124828 built by vppuser on vppbuild at date
 * @cliexend
 *
 * @cliexpar
 * How to display verbose image version information:
 * @cliexstart{show version verbose}
 * Version:                  v18.07-rc0~509-gb9124828
 * Compiled by:              vppuser
 * Compile host:             vppbuild
 * Compile date:             Fri Jul 13 09:05:37 EDT 2018
 * Compile location:         /scratch/vpp-showversion
 * Compiler:                 GCC 7.3.0
 * Current PID:              5334
 * @cliexend
 *
 * @cliexpar
 * How to display the vpp command line arguments:
 * @cliexstart{show version cmdline}
 * vpp# show version cmdline
 * Command line arguments:
 *   /scratch/vpp-showversion/build-root/install-vpp_debug-native/vpp/bin/vpp
 *   unix
 *   interactive
 * @cliexend
?*/

VLIB_CLI_COMMAND (show_vpe_version_command, static) = {
  .path = "show version",
  .short_help = "show version [verbose] [cmdline]",
  .function = show_vpe_version_command_fn,
  .is_mp_safe = 1,
};

/** Return the image build directory name */
char *
vpe_api_get_build_directory (void)
{
  return VPP_BUILD_TOPDIR;
}

/** Return the image version string */
char *
vpe_api_get_version (void)
{
  return VPP_BUILD_VER;
}

/** return the build date */
char *
vpe_api_get_build_date (void)
{
  return VPP_BUILD_DATE;
}

/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */