Last active
May 11, 2020 20:50
-
-
Save andy-shev/cb0c0d1805fa495d9cdac1942c41d531 to your computer and use it in GitHub Desktop.
Git version to C file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version.h | |
module | |
*.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
VERSION = 0.1 | |
version.h: FORCE | |
@echo "$(VERSION)$(shell $(PWD)/setlocalversion $(PWD))" | |
@echo "#define VERSION \"$(VERSION)$(shell $(PWD)/setlocalversion $(PWD))\"" > version.h | |
module.o: version.h | |
all: module | |
@$(PWD)/module | |
clean: | |
@rm module module.o version.h | |
FORCE: | |
.PHONY: FORCE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include "version.h" | |
int main(int argc, char *argv[]) | |
{ | |
printf("Our version is: %s\n", VERSION); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# SPDX-License-Identifier: GPL-2.0 | |
# | |
# This scripts adds local version information from the version | |
# control systems git, mercurial (hg) and subversion (svn). | |
# | |
usage() { | |
echo "Usage: $0 [srctree]" >&2 | |
exit 1 | |
} | |
if test $# -gt 0; then | |
srctree=$1 | |
shift | |
fi | |
if test $# -gt 0 -o ! -d "$srctree"; then | |
usage | |
fi | |
scm_version() | |
{ | |
# Check for git and a git repo. | |
if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && | |
head=$(git rev-parse --verify --short HEAD 2>/dev/null); then | |
# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore | |
# it, because this version is defined in the top level Makefile. | |
if [ -z "$(git describe --exact-match 2>/dev/null)" ]; then | |
printf '%s%s' -g $head | |
fi | |
# Is this git on svn? | |
if git config --get svn-remote.svn.url >/dev/null; then | |
printf -- '-svn%s' "$(git svn find-rev $head)" | |
fi | |
# Check for uncommitted changes. | |
# First, with git-status, but --no-optional-locks is only | |
# supported in git >= 2.14, so fall back to git-diff-index if | |
# it fails. Note that git-diff-index does not refresh the | |
# index, so it may give misleading results. See | |
# git-update-index(1), git-diff-index(1), and git-status(1). | |
if { | |
git --no-optional-locks status -uno --porcelain 2>/dev/null || | |
git diff-index --name-only HEAD | |
} | grep -qvE '^(.. )?scripts/package'; then | |
printf '%s' -dirty | |
fi | |
# All done with git | |
return | |
fi | |
# Check for mercurial and a mercurial repo. | |
if test -d .hg && hgid=$(hg id 2>/dev/null); then | |
# Do we have an tagged version? If so, latesttagdistance == 1 | |
if [ "$(hg log -r . --template '{latesttagdistance}')" = "1" ]; then | |
id=$(hg log -r . --template '{latesttag}') | |
printf '%s%s' -hg "$id" | |
else | |
tag=$(printf '%s' "$hgid" | cut -d' ' -f2) | |
if [ -z "$tag" -o "$tag" = tip ]; then | |
id=$(printf '%s' "$hgid" | sed 's/[+ ].*//') | |
printf '%s%s' -hg "$id" | |
fi | |
fi | |
# Are there uncommitted changes? | |
# These are represented by + after the changeset id. | |
case "$hgid" in | |
*+|*+\ *) printf '%s' -dirty ;; | |
esac | |
# All done with mercurial | |
return | |
fi | |
# Check for svn and a svn repo. | |
if rev=$(LANG= LC_ALL= LC_MESSAGES=C svn info 2>/dev/null | grep '^Last Changed Rev'); then | |
rev=$(echo $rev | awk '{print $NF}') | |
printf -- '-svn%s' "$rev" | |
# All done with svn | |
return | |
fi | |
} | |
# full scm version string | |
echo "$(scm_version)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment