Redfoxmoon / cross / slibtool

Forked from cross/slibtool 11 months ago
Clone
Blob Blame History Raw
#!/bin/sh

set -eu

usage()
{
cat << EOF >&2

Usage:
  -h            show this HELP message
  -s  SRCDIR    set source directory
  -o  OUTPUT    set output header
  -p  PREFIX    set macro prefix

EOF
exit 1
}


# one
workdir=$(pwd)
srcdir=
output=
prefix=


while getopts "hs:o:p:" opt; do
	case $opt in
	h)
  		usage
  		;;
	s)
    		srcdir="$OPTARG"
    		;;
	o)
    		output="$OPTARG"
    		;;
	p)
    		prefix="$OPTARG"
    		;;
	\?)
    		printf "Invalid option: -%s" "$OPTARG" >&2
    		usage
    		;;
	esac
done


# two
if [ -z "$srcdir" ] || [ -z "$output" ] || [ -z "$prefix" ]; then
	usage
fi

cd "$srcdir"

gitver=$(git rev-parse --verify HEAD      2>/dev/null) || gitver="unknown"
cvdate=$(git show -s --format=%ci $gitver 2>/dev/null) || cvdate=$(date)

vmacro=$(printf '%s' "$prefix"'_GIT_VERSION' | tr '[:lower:]' '[:upper:]')
dmacro=$(printf '%s' "$prefix"'_GIT_DATE   ' | tr '[:lower:]' '[:upper:]')

cd "$workdir"


# three
printf '#define %s "%s"\n#define %s "%s"\n' \
		"$vmacro" "$gitver" \
		"$dmacro" "$cvdate" \
	> "$output"

# all done
exit 0