aboutsummaryrefslogtreecommitdiff
path: root/lib.rc
diff options
context:
space:
mode:
Diffstat (limited to 'lib.rc')
-rw-r--r--lib.rc60
1 files changed, 60 insertions, 0 deletions
diff --git a/lib.rc b/lib.rc
new file mode 100644
index 0000000..92dc216
--- /dev/null
+++ b/lib.rc
@@ -0,0 +1,60 @@
+# -*- mode: redo -*-
+# Helper functions
+target=$1 basename=$2 dest=$3
+
+# Make all targets dependent on the library and the config file
+redo-ifchange "$SRC_ROOT/lib.rc" "$SRC_ROOT/config.rc"
+
+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" ] || find . -name .redo -type d -exec rm -rf -- {} +
+}
+
+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() {
+ # 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() {
+ # Function to get all executables
+ find src contrib \( -name cpt -o -name 'cpt-*' \) ! -name '*.in' ! -name '*.did'
+}
+
+# Phony targets
+PHONY all dist clean install uninstall test