bool

Програм за тестирање логичких израза
git clone https://git.sr.ht/~strahinja/bool
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 8cd16ee13cb7b2ef679dd28169767235eaae06c6
родитељ c68cefd4ea09a2f7aa6c29822f078f33c389f641
Аутор: Страхиња Радић <sr@strahinja.org>
Датум:   Tue, 20 Jan 2026 09:03:30 +0100

Add lib, update Makefile, config.mk

Diffstat:
MMakefile | 26++++++++++++++++++++++----
Mconfig.mk | 10+++++++---
Alib/.replacepat.swp | 0
Alib/makedate | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alib/makeversion | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alib/mkpack | 20++++++++++++++++++++
Alib/replacepat | 5+++++
Mversion.h.in | 4++--
измењених датотека: 8, додавања: 183(+), брисања: 9(-)

diff --git a/Makefile b/Makefile @@ -3,9 +3,27 @@ include config.mk .SUFFIXES: -.SUFFIXES: .y .l .c .o +.SUFFIXES: .h.in .h .y .l .c .o -all: bool +.h.in.h: + sh lib/replacepat $< $@ + +all: makedate makeversion $(PROG) + if [ -f .rebuild ]; then rm .rebuild; make -e all; else true; fi + +date: + sh lib/makedate + +version: + sh lib/makeversion + +makedate: + sh lib/makedate -l + +makeversion: + sh lib/makeversion -l + +version.h:version.h.in date version lex.yy.c: bool.l $(FLEX) bool.l @@ -20,8 +38,8 @@ bool.o: y.tab.c lex.yy.o: lex.yy.c -bool: bool.o lex.yy.o - $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ bool.o lex.yy.o $(LIBS) +$(PROG): $(OBJS) $(SRC) $(HEADERS) + $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) clean: rm -f bool y.tab.c lex.yy.c *.o *~ diff --git a/config.mk b/config.mk @@ -1,9 +1,13 @@ -CFLAGS = -Os -Wextra -Wall -pedantic -std=c99 -#CFLAGS = -O0 -ggdb -Wextra -Wall -pedantic -std=c99 +#CFLAGS = -Os -Wextra -Wall -pedantic -std=c99 +CFLAGS = -O0 -ggdb -Wextra -Wall -pedantic -std=c99 CPPFLAGS = -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L \ -D_XOPEN_SOURCE=700 -DNDEBUG +LIBS = #-lfl +SRC = bool.l bool.y lex.yy.c y.tab.c +HEADERS = bool.h version.h y.tab.h +OBJS = bool.o lex.yy.o #CC = clang FLEX = flex -LIBS = #-lfl YACC = yacc YACCFLAGS = -d +PROG = bool diff --git a/lib/.replacepat.swp b/lib/.replacepat.swp Бинарне датотеке се разликују. 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 @@ -0,0 +1,20 @@ +#!/bin/sh -x +# vim: set ft=bash: +DISTDIR=$(grep '^PROG[[:space:]]\{1,\}=' config.mk | + sed -E 's,.*=[[:space:]]+([[:alpha:]]+),\1,')-$(cat version) +mkdir "$DISTDIR" +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"/ +done +tar -cf - "$DISTDIR" | xz -9v - > "$DISTDIR".tar.xz +rm -fr "$DISTDIR" diff --git a/lib/replacepat b/lib/replacepat @@ -0,0 +1,5 @@ +#!/bin/sh -x +# vim: set ft=bash: +DATE=$(cat date) +VERSION=$(cat version) +sed -e 's|%VERSION%|'"$VERSION"'|g' -e 's|%DATE%|'"$DATE"'|g' "$1" > "$2" diff --git a/version.h.in b/version.h.in @@ -3,5 +3,5 @@ * See the file LICENSE for exact copyright and license details. */ #define PROGNAME "bool" -#define DATE "January 18, 2026" -#define VERSION "0.1" +#define DATE "%DATE%" +#define VERSION "%VERSION%"