чување 5a1f535555293fcefe73b7c37faeb04f178edac2
родитељ 0a38938499cd4158078062c3d61c3f74d2e8ff08
Аутор: Страхиња Радић <sr@strahinja.org>
Датум: Tue, 8 Jul 2025 22:29:47 +0200
Add version support
Diffstat:
| M | Makefile | | | 15 | ++++++++++++++- |
| A | lib/makedate | | | 61 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | lib/makeversion | | | 66 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | lib/mkpack | | | 16 | +++++++++++----- |
измењених датотека: 4, додавања: 152(+), брисања: 6(-)
diff --git a/Makefile b/Makefile
@@ -7,10 +7,23 @@ include config.mk
.h.in.h:
sh -c 'DATADIR=$(DATADIR) lib/replacepat $< $@'
-all: $(PROG)
+all: makedate makeversion $(PROG)
+ if [ -f .rebuild ]; then rm .rebuild; make -e all; else true; fi
local.h: local.h.in
+date:
+ sh lib/makedate
+
+version:
+ sh lib/makeversion
+
+makedate:
+ sh lib/makedate -l
+
+makeversion:
+ sh lib/makeversion -l
+
lav-sdl.o: lav-sdl.c local.h
$(PROG): $(OBJS) $(SRC) $(HEADERS)
diff --git a/lib/makedate b/lib/makedate
@@ -0,0 +1,61 @@
+#!/bin/sh -x
+# vim: set ft=bash:
+FALLBACKDATE=${FALLBACKDATE:-unknown}
+LC_ALL=C
+export LC_ALL
+
+if [ -d .got ] && command -v got >/dev/null 2>&1; then
+ got log |
+ awk '
+ /^date: / {
+ sub(/^date: /,"",$0)
+ # Convert to proper form for `mandoc -Tlint`
+ month_names["Jan"] = "January"
+ month_names["Feb"] = "February"
+ month_names["Mar"] = "March"
+ month_names["Apr"] = "April"
+ month_names["May"] = "May"
+ month_names["Jun"] = "June"
+ month_names["Jul"] = "July"
+ month_names["Aug"] = "August"
+ month_names["Sep"] = "September"
+ month_names["Oct"] = "October"
+ month_names["Nov"] = "November"
+ month_names["Dec"] = "December"
+ print month_names[$2] " " $3 ", " $5
+ exit
+ }' >date.new
+elif [ -d .git ] && command -v git >/dev/null 2>&1; then
+ user=$(getent passwd "$(unalias ls >/dev/null 2>&1 || true; \
+ command ls -lnd . | awk '{print $3}')" | awk -F: '{print $1}')
+ if [ -z "$user" ]; then
+ printf "$0: error: Cannot determine owner of %s" "$(pwd)" >&2
+ exit 1
+ fi
+ e_user=$(id -un)
+ if [ "$e_user" = "$user" ]; then
+ git log --format=format:%cd \
+ --date=format:"%B %d, %Y" -1 @ >date.new
+ else
+ su "${user}" -c 'env LC_ALL=C git log --format=format:%cd \
+ --date=format:"%B %d, %Y" -1 @' >date.new
+ fi
+ echo >>date.new
+else
+ printf "%s\n" "$FALLBACKDATE" >date.new
+fi
+
+if [ -f date ]; then
+ if diff date date.new >/dev/null; then
+ rm date.new
+ else
+ mv date.new date
+ touch .rebuild
+ fi
+else
+ mv date.new date
+ touch .rebuild
+fi
+if [ "$1" = "-l" ]; then
+ printf "DATE=\"%s\"\n" "$(cat date)"
+fi
diff --git a/lib/makeversion b/lib/makeversion
@@ -0,0 +1,66 @@
+#!/bin/sh -x
+# vim: set ft=bash:
+FALLBACKVER=${FALLBACKVER:-unknown}
+
+if [ -d .got ] && command -v got >/dev/null 2>&1; then
+ lastcommit=$(got log |
+ awk '/^commit/ {print substr($2,1,7); exit}')
+ got tag -l |
+ awk -v lastcommit="$lastcommit" '
+ /^object: commit/ {
+ if (!lasttagcom)
+ {
+ lasttagcom = substr($3,1,7)
+ }
+ next
+ }
+ /^tag/ {
+ if (!ver)
+ {
+ sub(/^v/,"",$2)
+ ver = $2
+ }
+ next
+ }
+ END {
+ printf "%s", ver
+ if (lastcommit != lasttagcom)
+ {
+ printf "-g%s", lastcommit
+ }
+ printf "\n"
+ }' >version.new
+elif [ -d .git ] && command -v git >/dev/null 2>&1; then
+ LC_ALL=C
+ export LC_ALL
+ user=$(getent passwd "$(unalias ls >/dev/null 2>&1 || true; \
+ command ls -lnd . | awk '{print $3}')" | awk -F: '{print $1}')
+ if [ -z "$user" ]; then
+ printf "$0: error: Cannot determine owner of %s" "$(pwd)" >&2
+ exit 1
+ fi
+ e_user=$(id -un)
+ if [ "$e_user" = "$user" ]; then
+ git describe 2>/dev/null | sed 's/^v//' >version.new
+ else
+ su "$user" -c 'git describe' 2>/dev/null |
+ sed 's/^v//' >version.new
+ fi
+else
+ printf "%s\n" "$FALLBACKVER" >version.new
+fi
+
+if [ -f version ]; then
+ if diff version version.new >/dev/null; then
+ rm version.new
+ else
+ mv version.new version
+ touch .rebuild
+ fi
+else
+ mv version.new version
+ touch .rebuild
+fi
+if [ "$1" = "-l" ]; then
+ printf "VERSION=\"%s\"\n" "$(cat version)"
+fi
diff --git a/lib/mkpack b/lib/mkpack
@@ -1,11 +1,17 @@
#!/bin/sh -x
# vim: set ft=bash:
-DISTDIR=$(grep ^PROG config.mk |
- sed -E 's,.*=[[:space:]]+([[:alpha:]]+),\1,')
-# To be able to create the directory with the same name
-rm lav-sdl
+DISTDIR=$(grep '^PROG[[:space:]]\{1,\}=' config.mk |
+ sed -E 's,.*=[[:space:]]+([[:alpha:]]+),\1,')-$(cat version)
mkdir "$DISTDIR"
-for f in $(git ls-files); do
+if [ -d .got ] && command -v got >/dev/null 2>&1; then
+ files=$(got tree | sed -e 's,[@/*$]$,,g')
+elif [ -d .git ] && command -v git >/dev/null 2>&1; then
+ files=$(git ls-files)
+else
+ printf "Either got or git are required for 'make pack'\n" >&2
+ exit 1
+fi
+for f in $files; do
d="$DISTDIR"/"$(dirname "$f")"
mkdir -p "$d"
cp "$f" "$d"/