version.c 3.93 KB
Newer Older
1
2
/*******************************************************************************
 * This file is part of SWIFT.
3
4
 * Copyright (C) 2012 Matthieu Schaller (matthieu.schaller@durham.ac.uk).
 * Copyright (C) 2015 Peter W. Draper (p.w.draper@durham.ac.uk).
5
 *
6
7
8
9
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
10
 *
11
12
13
14
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
15
 *
16
17
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 *
19
20
 ******************************************************************************/

21
/* Some standard headers. */
22
#include <stdio.h>
23
24

/* This object's header. */
25
#include "version.h"
26

27
28
29
/**
 * @brief Return the source code git revision
 *
30
 * @details The SHA of the code checked out when the library was last built.
31
32
 * Will include -dirty if they are local modifications.
 */
33
34
35
const char *git_revision(void) {
  static const char *revision = GIT_REVISION;
  return revision;
36
}
37

38
39
40
41
42
43
44
45
46
47
/**
 * @brief Return the source code git branch
 *
 * @details The name of the current branch when the code was last built.
 */
const char *git_branch(void) {
  static const char *branch = GIT_BRANCH;
  return branch;
}

48
49
50
/**
 * @brief The version of SWIFT
 */
51
52
53
const char *package_version(void) {
  static const char *version = PACKAGE_VERSION;
  return version;
54
55
56
57
58
}

/**
 * @brief A description of the package version and code status.
 */
59
60
61
62
const char *package_description(void) {
  static char buf[256];
  static int initialised = 0;
  if (!initialised) {
63
    sprintf(buf, "SWIFT version: %s, at revision: %s, branch: %s",
64
            PACKAGE_VERSION, GIT_REVISION, GIT_BRANCH);
65
66
67
    initialised = 1;
  }
  return buf;
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
const char *compiler_name(void) {
#if defined(__INTEL_COMPILER)
  static const char *compiler = "ICC";
#elif defined(__clang__)
  static const char *compiler = "LLVM/Clang";
#elif defined(__xlc__)
  static const char *compiler = "IBM XL";
#elif defined(__GNUC__)
  static const char *compiler = "GCC";
#else
  static const char *compiler = "Unknown Compiler";
#endif
  return compiler;
}

const char *compiler_version(void) {
  static char version[256];
#if defined(__INTEL_COMPILER)
  const int major = __INTEL_COMPILER / 100;
  const int minor = __INTEL_COMPILER - major * 100;
  sprintf(version, "%i.%i.%i", major, minor, __INTEL_COMPILER_BUILD_DATE);
#elif defined(__clang__)
  sprintf(version, "%i.%i.%i", __clang_major__, __clang_minor__,
          __clang_patchlevel__);
#elif defined(__xlc__)
  const int major = __IBMC__ / 100;
  const int minor = (__IBMC__ - major * 100) / 10;
  const int patch = (__IBMC__ - major * 100 - minor * 10);
  sprintf(version, "%i.%i.%i", major, minor, patch);
#elif defined(__GNUC__)
  sprintf(version, "%i.%i.%i", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
#else
  sprintf(version, "---");
#endif
  return version;
}

107
/**
108
109
 * @brief Prints a greeting message to the standard output containing code
 * version and revision number
110
 */
111
112
void greetings(void) {

113
  printf(" Welcome to the cosmological code\n");
114
115
116
117
118
  printf("    ______       _________________\n");
  printf("   / ___/ |     / /  _/ ___/_  __/\n");
  printf("   \\__ \\| | /| / // // /_   / /   \n");
  printf("  ___/ /| |/ |/ // // __/  / /    \n");
  printf(" /____/ |__/|__/___/_/    /_/     \n");
119
  printf(" SPH With Inter-dependent Fine-grained Tasking\n\n");
120

121
  printf(" Version : %s\n", package_version());
122
123
124
  printf(" Revision: %s, Branch: %s\n", git_revision(), git_branch());
  printf(" Webpage : www.swiftsim.com\n");
  printf(" Compiler: %s, Version: %s\n\n", compiler_name(), compiler_version());
125
}