summaryrefslogtreecommitdiff
path: root/sofort/tools
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2024-04-28 17:47:08 +0000
committermidipix <writeonce@midipix.org>2024-04-28 17:47:08 +0000
commit1b64c0ca9f6438c5bb35f34a46344030b61b789a (patch)
treec1c41b3abf8af0c8fb2484681a7ef0e9707913ef /sofort/tools
parent646efeb80e90cdc80e35a337273943b6ba87bb6f (diff)
downloadtreebnf-1b64c0ca9f6438c5bb35f34a46344030b61b789a.tar.bz2
treebnf-1b64c0ca9f6438c5bb35f34a46344030b61b789a.tar.xz
build system: imported sofort, a project-agnostic build system.
Diffstat (limited to 'sofort/tools')
-rwxr-xr-xsofort/tools/pkgconf.sh136
-rwxr-xr-xsofort/tools/srctree.sh83
-rwxr-xr-xsofort/tools/version.sh75
3 files changed, 294 insertions, 0 deletions
diff --git a/sofort/tools/pkgconf.sh b/sofort/tools/pkgconf.sh
new file mode 100755
index 0000000..a69c25b
--- /dev/null
+++ b/sofort/tools/pkgconf.sh
@@ -0,0 +1,136 @@
+#!/bin/sh
+
+# pkgconf.sh: generate a pkgconf manifest file.
+# this file is covered by COPYING.SOFORT.
+
+set -eu
+
+# prefix, exec_prefix
+if [ "$PKGCONF_PREFIX" = "$PKGCONF_EXEC_PREFIX" ]; then
+ pkgconf_prefix="${PKGCONF_PREFIX}"
+ pkgconf_exec_prefix='${prefix}'
+else
+ pkgconf_prefix="${PKGCONF_PREFIX}"
+ pkgconf_exec_prefix="${PKGCONF_EXEC_PREFIX}"
+fi
+
+
+# (relative) includedir
+if [ -z "$PKGCONF_INCLUDEDIR" ]; then
+ pkgconf_includedir=
+ pkgconf_cflags=
+else
+ prefix=$(dirname "$PKGCONF_INCLUDEDIR")
+ base=$(basename "$PKGCONF_INCLUDEDIR")
+
+ if [ "$prefix" = '/' ]; then
+ prefix=
+ fi
+
+ if [ "$prefix/$base" = "$PKGCONF_PREFIX/$base" ]; then
+ pkgconf_includedir='${prefix}/'"${base}"
+ pkgconf_cflags='-I${includedir}'
+ else
+ pkgconf_includedir="${PKGCONF_INCLUDEDIR}"
+ pkgconf_cflags='-I${includedir}'
+ fi
+fi
+
+
+# (relative) libdir (blank unless needed)
+if [ -z "$PKGCONF_LIBDIR" ]; then
+ pkgconf_libdir=
+else
+ prefix=$(dirname "$PKGCONF_LIBDIR")
+ base=$(basename "$PKGCONF_LIBDIR")
+
+ if [ "$prefix" = '/' ]; then
+ prefix=
+ fi
+
+ if [ "$prefix/$base" = "$PKGCONF_EXEC_PREFIX/$base" ]; then
+ pkgconf_libdir='${exec_prefix}/'"${base}"
+ else
+ pkgconf_libdir='${prefix}/'"${PKGCONF_LIBDIR}"
+ fi
+fi
+
+
+# ldflags (--libs)
+if [ -n "$pkgconf_libdir" ] && [ -n "${PKGCONF_NAME}" ]; then
+ pkgconf_ldflags='-L${libdir}'" -l${PKGCONF_NAME}"
+elif [ -n "${PKGCONF_NAME}" ]; then
+ pkgconf_ldflags="-l${PKGCONF_NAME}"
+else
+ pkgconf_ldflags='-L${libdir}'
+fi
+
+
+# cflags
+if [ -n "$pkgconf_cflags" ] || [ -n "${PKGCONF_DEFS}" ]; then
+ pkgconf_cflags="$pkgconf_cflags ${PKGCONF_DEFS}"
+ pkgconf_cflags=$(printf '%s' "$pkgconf_cflags" | sed -e 's/^[ \t]*//g')
+fi
+
+
+# repo (optional)
+if [ -z "${PKGCONF_REPO}" ]; then
+ pkgconf_repo='#'
+else
+ pkgconf_repo="Repo: ${PKGCONF_REPO}"
+fi
+
+# patches (optional)
+if [ -z "${PKGCONF_PSRC}" ]; then
+ pkgconf_psrc='#'
+else
+ pkgconf_psrc="Patches: ${PKGCONF_PSRC}"
+fi
+
+# distro (optional)
+if [ -z "${PKGCONF_DURL}" ]; then
+ pkgconf_durl='#'
+else
+ pkgconf_durl="Distro: ${PKGCONF_DURL}"
+fi
+
+# bug reports (optional)
+if [ -z "${PKGCONF_BUGS}" ]; then
+ pkgconf_bugs='#'
+else
+ pkgconf_bugs="Bug reports: ${PKGCONF_BUGS}"
+fi
+
+# project home page (optional)
+if [ -z "${PKGCONF_HOME}" ]; then
+ pkgconf_home='#'
+else
+ pkgconf_home="Home page: ${PKGCONF_HOME}"
+fi
+
+
+# output (without trailing spaces)
+cat << _EOF | grep -v '^#' | sed 's/[ \t]*$//'
+###
+prefix=$pkgconf_prefix
+exec_prefix=$pkgconf_exec_prefix
+includedir=$pkgconf_includedir
+libdir=$pkgconf_libdir
+
+Name: ${PKGCONF_NAME}
+Description: ${PKGCONF_DESC}
+URL: ${PKGCONF_USRC}
+Version: ${PKGCONF_VERSION}
+$pkgconf_repo
+$pkgconf_psrc
+$pkgconf_durl
+$pkgconf_bugs
+$pkgconf_home
+
+Cflags: $pkgconf_cflags
+Libs: $pkgconf_ldflags
+###
+_EOF
+
+# all done
+exit 0
diff --git a/sofort/tools/srctree.sh b/sofort/tools/srctree.sh
new file mode 100755
index 0000000..90a1d89
--- /dev/null
+++ b/sofort/tools/srctree.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+# srctree.sh: support for out-of-tree builds in posix make mode.
+# this file is covered by COPYING.SOFORT.
+
+set -eu
+
+usage()
+{
+cat << EOF >&2
+
+Usage:
+ --help show this HELP message
+ --srctree=SRCTREE set source directory
+
+EOF
+exit 1
+}
+
+
+# one
+workdir=$(pwd -P)
+srctree=
+argloop=
+
+
+for arg ; do
+ case "$arg" in
+ --help)
+ usage
+ ;;
+
+ --srctree=*)
+ srctree=${arg#*=}
+ ;;
+
+ --)
+ argloop='done'
+ ;;
+
+ *)
+ if [ -z "$argloop" ]; then
+ printf 'Invalid option: %s\n' "$arg" >&2
+ usage
+ fi
+ ;;
+ esac
+done
+
+
+# two
+if [ -z "$srctree" ] ; then
+ usage
+fi
+
+cd -- "$srctree"
+srctree=$(pwd -P)
+cd -- "$workdir"
+
+if [ "$srctree" = "$workdir" ]; then
+ exit 0
+fi
+
+
+# three
+for arg ; do
+ case "$arg" in
+ --srctree=*)
+ ;;
+
+ --)
+ ;;
+
+ *)
+ stat "$arg" > /dev/null 2>&1 \
+ || ln -s -- "$srctree/$arg" "$arg"
+ ;;
+ esac
+done
+
+
+# all done
+exit 0
diff --git a/sofort/tools/version.sh b/sofort/tools/version.sh
new file mode 100755
index 0000000..8c49cb3
--- /dev/null
+++ b/sofort/tools/version.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+# version.sh: detect git repository info, output defs as a C header.
+# this file is covered by COPYING.SOFORT.
+
+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 -P)
+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