summaryrefslogtreecommitdiff
path: root/scripts/gen-version.sh
blob: ffe7f43ef79e0d6fd8d7a0c7afcfea93b2141ed9 (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
#!/usr/bin/env bash
set -euo pipefail

cd "$(dirname "$0")/.."

build_type="${1:-release}"
out="src/version_gen.h"
tmp="$(mktemp)"

tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
version="${tag#v}"
major="${version%%.*}"
rest="${version#*.}"
minor="${rest%%.*}"
patch="${rest#*.}"
patch="${patch%%-*}"

commit=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then
    commit="${commit}-dirty"
fi

cat > "$tmp" <<EOF
#pragma once

#define STEEZ_VERSION_MAJOR $major
#define STEEZ_VERSION_MINOR $minor
#define STEEZ_VERSION_PATCH $patch
#define STEEZ_VERSION_STRING "$version"
#define STEEZ_GIT_COMMIT "$commit"
#define STEEZ_BUILD_DATE "$(date +%Y-%m-%d)"
#define STEEZ_BUILD_TIME "$(date +%H:%M:%S)"
#define STEEZ_BUILD_TYPE "$build_type"
EOF

if ! cmp -s "$tmp" "$out" 2>/dev/null; then
    mv "$tmp" "$out"
else
    rm "$tmp"
fi