From c72c2cc00b2a9e2c7ce7ba0ff22908c209f24822 Mon Sep 17 00:00:00 2001 From: merakor Date: Sun, 20 Dec 2020 08:13:57 +0000 Subject: try out the redo build system FossilOrigin-Name: 6ca0330a7e548be4e516ad6c275b2878a1521d2de5263fd75defc16f8f52c93b --- config.rc | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 config.rc (limited to 'config.rc') diff --git a/config.rc b/config.rc new file mode 100644 index 0000000..d1b2281 --- /dev/null +++ b/config.rc @@ -0,0 +1,66 @@ +# -*- mode: redo -*- +# See LICENSE for copyright information + +setv() { + # Set variables if unset. Works similar to the Makefile syntax. + [ "$3" ] || { + printf '%s\n' "Faulty variable syntax" >&2 + exit 1 + } + var=$1; sym=$2; shift 2 + case "$sym" in + \?=|=) eval "[ \"\$$var\" ]" || export "$var=$*" ;; + +=) eval "export \"$var=\$$var $*\"" + esac +} + +redo_clean() { + # Clean function for various redo implementations + [ -r .do_built ] && { + while read -r file; do + [ -d "$file" ] || rm -f "$file" + done < .do_built + } + find . -type f \( -name '*.tmp' -o -name '*.did' -o -name '.dep*' -o -name '.target*' \) \ + -exec rm -f -- {} + + [ "$DO_BUILT" ] || find . -name '.do_built*' -exec rm -rf -- {} + + [ "$REDO_BASE" ] || rm -rf -- .redo +} + +PHONY() { + # Function that resembles the .PHONY: target on the classic 'make' build + # system. + [ "$1" ] || { + trap 'rm -f $3' EXIT INT + return 0 + } + setv PHONY += "$@" + trap 'case " $PHONY " in *" $1 "*) rm -f $3; esac' EXIT INT +} + +setv VERSION = 5.1.0 + +# Paths +setv PREFIX = /usr/local +setv BINDIR = "${PREFIX}/bin" +setv SHAREDIR = "${PREFIX}/share" +setv DOCDIR = "${SHAREDIR}/doc" +setv CPTDOC = "${DOCDIR}/cpt" +setv MANPREFIX = "${SHAREDIR}/man" +setv MAN1 = "${MANPREFIX}/man1" + +# Flags +setv CFLAGS = -std=c99 -Wpedantic -Wall -Os +setv CFLAGS += -D_XOPEN_SOURCE=700 +setv LDFLAGS = -s -static +setv LIBS = -lc + +setv CC = cc +setv LD = "${CC}" + +# Documentation tools +setv EMACS = emacs +setv MAKEINFO = makeinfo + +# Phony targets +PHONY all dist clean install uninstall test -- cgit v1.2.3 From 7722519b9e9f47b61243cf591abdc614f53c27df Mon Sep 17 00:00:00 2001 From: merakor Date: Sun, 20 Dec 2020 09:53:31 +0000 Subject: update redo files FossilOrigin-Name: 1096355ead3f8b366f9cf1428369d38cc9735d78da31e8fcfbb3c7ce046d1db0 --- all.do | 2 -- clean.do | 4 ++-- config.rc | 2 +- default.do | 29 ++++++++++++++++++----------- dist.do | 3 --- docs/default.do | 24 ++++++++++++++++++++++++ 6 files changed, 45 insertions(+), 19 deletions(-) delete mode 100644 all.do delete mode 100644 dist.do create mode 100644 docs/default.do (limited to 'config.rc') diff --git a/all.do b/all.do deleted file mode 100644 index 60dfc91..0000000 --- a/all.do +++ /dev/null @@ -1,2 +0,0 @@ -. ./config.rc -redo-ifchange bin/all doc/cpt.info diff --git a/clean.do b/clean.do index 389daf3..b30f907 100644 --- a/clean.do +++ b/clean.do @@ -1,5 +1,5 @@ . ./config.rc -redo bin/clean +redo bin/clean src/clean redo_clean rm -f "cpt-$VERSION.tar.xz" -find doc -name '*.info' -exec rm -f -- {} + +find docs -name '*.info' -exec rm -f -- {} + diff --git a/config.rc b/config.rc index d1b2281..b6dc81e 100644 --- a/config.rc +++ b/config.rc @@ -38,7 +38,7 @@ PHONY() { trap 'case " $PHONY " in *" $1 "*) rm -f $3; esac' EXIT INT } -setv VERSION = 5.1.0 +setv VERSION = 5.1.1 # Paths setv PREFIX = /usr/local diff --git a/default.do b/default.do index 2d091c6..d8c1cd9 100644 --- a/default.do +++ b/default.do @@ -4,6 +4,15 @@ fn="${1%.*}" case "$1" in + all) redo-ifchange src/cpt-lib bin/all docs/cpt.info ;; + dist) + redo clean + redo "cpt-$VERSION.tar.xz" + ;; + src/cpt-lib) + redo-ifchange "$1.in" + sed "s|@VERSION@|$VERSION|g" < "$1.in" > "$3" + ;; bin/cpt-readlink|bin/cpt-stat) redo-ifchange "$1.o" "$CC" -o "$3" $LDFLAGS "$1.o" $LIBS @@ -13,18 +22,8 @@ case "$1" in redo-ifchange "$fn.c" "$CC" -c -o "$3" $CFLAGS "$fn.c" ;; - *.info) - redo-ifchange "$fn.texi" - $MAKEINFO "$fn.texi" -o "$3" - ;; - *.texi) - [ -f "$fn.org" ] || exit 99 - redo-ifchange "$fn.org" - $EMACS "$fn.org" --batch -f org-texinfo-export-to-texinfo - mv "$1" "$3" - ;; "cpt-$VERSION.tar.xz") - redo doc/cpt.info + redo docs/cpt.info rm -rf -- "cpt-$VERSION" find . -type f ! -name '.*' ! -path './.*' | while read -r file; do @@ -36,7 +35,15 @@ case "$1" in rm -rf -- "cpt-$VERSION" mv "$1" "$3" ;; + test) + redo src/test + ;; + src/clean) + rm -f src/cpt-lib + ;; *) echo "Unknown target $1" exit 99 esac + +PHONY all dist test clean src/clean diff --git a/dist.do b/dist.do deleted file mode 100644 index c7f21f1..0000000 --- a/dist.do +++ /dev/null @@ -1,3 +0,0 @@ -. ./config.rc -redo clean -redo "cpt-$VERSION.tar.xz" diff --git a/docs/default.do b/docs/default.do new file mode 100644 index 0000000..2742edb --- /dev/null +++ b/docs/default.do @@ -0,0 +1,24 @@ +. ../config.rc + +# Extensionless name of file +fn="${1%.*}" + +case "$1" in + all) redo-ifchange info ;; + info) redo-ifchange cpt.info ;; + *.info) + redo-ifchange "$fn.texi" + $MAKEINFO "$fn.texi" -o "$3" + ;; + *.texi) + [ -f "$fn.org" ] || exit 99 + redo-ifchange "$fn.org" + $EMACS "$fn.org" --batch -f org-texinfo-export-to-texinfo + mv "$1" "$3" + ;; + *) + echo "Unknown target $1" + exit 99 +esac + +PHONY all info html -- cgit v1.2.3 From 96a1f4d2a70e1631564c00fa33e7f11c5e331573 Mon Sep 17 00:00:00 2001 From: merakor Date: Sun, 20 Dec 2020 19:59:49 +0000 Subject: cpt: update redo build files FossilOrigin-Name: de567d5766f6af7e5659f2afbef6a566b386c63659f0f8b292f905e38b53c272 --- config.rc | 51 +++++++++++++++++++++++++++++---------------------- default.do | 6 ++++-- install.do | 16 ++++++++++++++++ src/test.do | 4 ++++ uninstall.do | 9 +++++++++ 5 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 install.do create mode 100644 src/test.do create mode 100644 uninstall.do (limited to 'config.rc') diff --git a/config.rc b/config.rc index b6dc81e..f09b44c 100644 --- a/config.rc +++ b/config.rc @@ -14,6 +14,31 @@ setv() { esac } +setv VERSION = 5.1.1 + +# Paths +setv PREFIX = /usr/local +setv BINDIR = "${PREFIX}/bin" +setv SHAREDIR = "${PREFIX}/share" +setv DOCDIR = "${SHAREDIR}/doc" +setv CPTDOC = "${DOCDIR}/cpt" +setv MANPREFIX = "${SHAREDIR}/man" +setv MAN1 = "${MANPREFIX}/man1" + +# Flags +setv CFLAGS = -std=c99 -Wpedantic -Wall -Os +setv CFLAGS += -D_XOPEN_SOURCE=700 +setv LDFLAGS = -s -static +setv LIBS = -lc + +setv CC = cc +setv LD = "${CC}" + +# Documentation tools +setv EMACS = emacs +setv MAKEINFO = makeinfo + +# Helper functions redo_clean() { # Clean function for various redo implementations [ -r .do_built ] && { @@ -38,29 +63,11 @@ PHONY() { trap 'case " $PHONY " in *" $1 "*) rm -f $3; esac' EXIT INT } -setv VERSION = 5.1.1 - -# Paths -setv PREFIX = /usr/local -setv BINDIR = "${PREFIX}/bin" -setv SHAREDIR = "${PREFIX}/share" -setv DOCDIR = "${SHAREDIR}/doc" -setv CPTDOC = "${DOCDIR}/cpt" -setv MANPREFIX = "${SHAREDIR}/man" -setv MAN1 = "${MANPREFIX}/man1" - -# Flags -setv CFLAGS = -std=c99 -Wpedantic -Wall -Os -setv CFLAGS += -D_XOPEN_SOURCE=700 -setv LDFLAGS = -s -static -setv LIBS = -lc - -setv CC = cc -setv LD = "${CC}" +getbin() { + # Function to get all executables + find src contrib bin -name 'cpt-*' ! -name '*.in' ! -name '*.[coh]' +} -# Documentation tools -setv EMACS = emacs -setv MAKEINFO = makeinfo # Phony targets PHONY all dist clean install uninstall test diff --git a/default.do b/default.do index d8c1cd9..f0ebcf4 100644 --- a/default.do +++ b/default.do @@ -25,9 +25,11 @@ case "$1" in "cpt-$VERSION.tar.xz") redo docs/cpt.info rm -rf -- "cpt-$VERSION" - find . -type f ! -name '.*' ! -path './.*' | + mkdir -p "cpt-$VERSION" + { git ls-tree -r HEAD --name-only && echo docs/cpt.info ;} | while read -r file; do - mkdir -p "cpt-$VERSION/${file%/*}" + [ "${file##*/*}" ] || + mkdir -p "cpt-$VERSION/${file%/*}" cp "$file" "cpt-$VERSION/$file" done tar cf "cpt-$VERSION.tar" "cpt-$VERSION" diff --git a/install.do b/install.do new file mode 100644 index 0000000..cc11bd4 --- /dev/null +++ b/install.do @@ -0,0 +1,16 @@ +. ./config.rc +redo all + +# Install executables. +mkdir -p "${DESTDIR}${BINDIR}" +getbin | while read -r file; do + cp "$file" "${DESTDIR}${BINDIR}/${file##*/}" + chmod 755 "${DESTDIR}${BINDIR}/${file##*/}" +done + +# Install manual pages. +mkdir -p "${DESTDIR}${MAN1}" +for man in man/*.1; do + cp "$man" "${DESTDIR}${MAN1}/${man##*/}" + chmod 644 "${DESTDIR}${MAN1}/${man##*/}" +done diff --git a/src/test.do b/src/test.do new file mode 100644 index 0000000..9d32aef --- /dev/null +++ b/src/test.do @@ -0,0 +1,4 @@ +. ../config.rc +redo-ifchange cpt-lib +shellcheck -x -f gcc ./cpt* ../contrib/* +PHONY diff --git a/uninstall.do b/uninstall.do new file mode 100644 index 0000000..d2f4585 --- /dev/null +++ b/uninstall.do @@ -0,0 +1,9 @@ +. ./config.rc + +getbin | while read -r file; do + rm -f "${DESTDIR}${BINDIR}/${file##*/}" +done + +for man in man/*.1; do + rm -f "${DESTDIR}${MAN1}/${man##*/}" +done -- cgit v1.2.3 From 9aab40bc5d33350c5bfb3a6d86a783b9c243ec68 Mon Sep 17 00:00:00 2001 From: merakor Date: Sun, 20 Dec 2020 21:18:47 +0000 Subject: config.rc: better helper functions FossilOrigin-Name: 616fa2758bb01ad6f314baa41abb361b53194e62407bdc7ecd2320be41073334 --- config.rc | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'config.rc') diff --git a/config.rc b/config.rc index f09b44c..2f0733b 100644 --- a/config.rc +++ b/config.rc @@ -39,6 +39,8 @@ setv EMACS = emacs setv MAKEINFO = makeinfo # Helper functions +target=$1 basename=$2 dest=$3 + redo_clean() { # Clean function for various redo implementations [ -r .do_built ] && { @@ -52,15 +54,24 @@ redo_clean() { [ "$REDO_BASE" ] || rm -rf -- .redo } +targcheck() { + # Usage: targcheck [target...] + # + # Check if current target is one of the given arguments of this function. + # Returns 0 if target is one of the arguments, returns 1 if not. + case " $* " in *" $target "*) return 0; esac; return 1 +} + PHONY() { - # Function that resembles the .PHONY: target on the classic 'make' build - # system. - [ "$1" ] || { - trap 'rm -f $3' EXIT INT - return 0 - } - setv PHONY += "$@" - trap 'case " $PHONY " in *" $1 "*) rm -f $3; esac' EXIT INT + # Usage: PHONY [[target...]] + # + # Function that resembles the .PHONY: target on the classic 'make' system. + # You can either use it without an argument on a single target, or specify + # multiple targets. + if [ -z "$1" ] || targcheck "$@"; then + # shellcheck disable=2064 + trap "rm -f $dest" EXIT INT + fi } getbin() { -- cgit v1.2.3