diff options
author | midipix <writeonce@midipix.org> | 2024-04-28 17:47:08 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2024-04-28 17:47:08 +0000 |
commit | 1b64c0ca9f6438c5bb35f34a46344030b61b789a (patch) | |
tree | c1c41b3abf8af0c8fb2484681a7ef0e9707913ef /sofort/tools | |
parent | 646efeb80e90cdc80e35a337273943b6ba87bb6f (diff) | |
download | treebnf-1b64c0ca9f6438c5bb35f34a46344030b61b789a.tar.bz2 treebnf-1b64c0ca9f6438c5bb35f34a46344030b61b789a.tar.xz |
build system: imported sofort, a project-agnostic build system.
Diffstat (limited to 'sofort/tools')
-rwxr-xr-x | sofort/tools/pkgconf.sh | 136 | ||||
-rwxr-xr-x | sofort/tools/srctree.sh | 83 | ||||
-rwxr-xr-x | sofort/tools/version.sh | 75 |
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 |