mirror of
https://github.com/falk-werner/webfuse-provider
synced 2026-03-02 04:09:18 +00:00
Squashed 'build/dobuild/' content from commit b017db7
git-subtree-dir: build/dobuild git-subtree-split: b017db7c22e7c0ca6cee3f0f5ac1dd50f3b68eb9
This commit is contained in:
240
bin/dobuild
Executable file
240
bin/dobuild
Executable file
@@ -0,0 +1,240 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file is part of dobuild.
|
||||
# Copyright (c) 2019 Contributors as noted in the AUTHORS file.
|
||||
#
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
set -e
|
||||
|
||||
physical_pwd() {
|
||||
pwd -P 2>/dev/null || pwd
|
||||
}
|
||||
|
||||
try_canonicalize() {
|
||||
readlink -f "$@" 2>/dev/null || realpath "$@"
|
||||
}
|
||||
|
||||
canonicalize() {
|
||||
if ! try_canonicalize "$1" 2>/dev/null; then
|
||||
echo "$(cd "$(dirname "$1")" && physical_pwd)/$(basename "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
scriptdir() {
|
||||
dirname "$(canonicalize "${BASH_SOURCE:-$1}")"
|
||||
}
|
||||
|
||||
template_subst() {
|
||||
sed \
|
||||
-e "s!%MARCH%!${MARCH}!g" \
|
||||
-e "s!%DISTRIB%!${DISTRIB}!g" \
|
||||
-e "s!%REGISTRY_PREFIX%!${REGISTRY_PREFIX}!g"
|
||||
}
|
||||
|
||||
mktemp_dockerfile() {
|
||||
mkdir -p "$1"
|
||||
echo "$1/dobuild_generated.dockerfile"
|
||||
}
|
||||
|
||||
findonly_file() {
|
||||
workingdir="$1"
|
||||
name="$2"
|
||||
filter="$3"
|
||||
|
||||
find "$workingdir" -maxdepth 1 -type f -name "$name" \
|
||||
| grep "^${workingdir}/${filter}" \
|
||||
| {
|
||||
firstfound=
|
||||
lastfound=
|
||||
|
||||
while IFS= read -r line; do
|
||||
firstfound="${firstfound:-$line}"
|
||||
lastfound="$line"
|
||||
done
|
||||
|
||||
if [ "$firstfound" != "$lastfound" ]; then
|
||||
printf 'error: more than one match found for %s in %s using filter %s\n' "$name" "$workingdir" "$filter" 1>&2
|
||||
return 3
|
||||
fi
|
||||
|
||||
echo "$firstfound"
|
||||
}
|
||||
}
|
||||
|
||||
export LANG=C
|
||||
export LC_ALL=C
|
||||
|
||||
DOBUILDDIR="${DOBUILDDIR:-"$(dirname "$(scriptdir "$0")")"}"
|
||||
MAKE="${MAKE:-$(command -v make)}"
|
||||
PATH="$DOBUILDDIR/bin:$PATH"
|
||||
|
||||
set -- "$@" --
|
||||
|
||||
FILTER="$DOBUILD_FILTER"
|
||||
WORKINGDIR=
|
||||
MAKEFILE=
|
||||
DISTRIB=
|
||||
MARCH=
|
||||
IMAGE=
|
||||
|
||||
while :; do
|
||||
case $1 in
|
||||
-f|--file|--makefile)
|
||||
if [ "$2" != '--' ]; then
|
||||
MAKEFILE="${MAKEFILE:-$2}"
|
||||
set -- "$@" "$1" "$2"
|
||||
shift
|
||||
else
|
||||
printf 'error: "%s" requires a non-empty option argument.\n' "$1" >&2
|
||||
exit 3
|
||||
fi
|
||||
;;
|
||||
--file=|--makefile=)
|
||||
printf 'error: "%s" requires a non-empty option argument.\n' "$1" >&2
|
||||
exit 3
|
||||
;;
|
||||
--file=?*|--makefile=?*)
|
||||
MAKEFILE="${MAKEFILE:-${1#*=}}"
|
||||
set -- "$@" "$1"
|
||||
;;
|
||||
-C|--directory)
|
||||
if [ "$2" != '--' ]; then
|
||||
WORKINGDIR="$2"
|
||||
shift
|
||||
else
|
||||
printf 'error: "%s" requires a non-empty option argument.\n' "$1" >&2
|
||||
exit 3
|
||||
fi
|
||||
;;
|
||||
--directory=)
|
||||
printf 'error: "%s" requires a non-empty option argument.\n' "$1" >&2
|
||||
exit 3
|
||||
;;
|
||||
--directory=?*)
|
||||
WORKINGDIR="${1#*=}"
|
||||
;;
|
||||
--dockerfile)
|
||||
if [ "$2" != '--' ]; then
|
||||
DOCKERFILE="$2"
|
||||
shift
|
||||
else
|
||||
printf 'warning: "%s" ignored, requires a non-empty option argument.\n' "$1" >&2
|
||||
fi
|
||||
;;
|
||||
--dockerfile=)
|
||||
printf 'warning: "%s" ignored, requires a non-empty option argument.\n' "$1" >&2
|
||||
;;
|
||||
--dockerfile=?*|DOCKERFILE=?*)
|
||||
DOCKERFILE="${1#*=}"
|
||||
;;
|
||||
--image)
|
||||
if [ "$2" != '--' ]; then
|
||||
IMAGE="$2"
|
||||
shift
|
||||
else
|
||||
printf 'error: "%s" requires a non-empty option argument.\n' "$1" >&2
|
||||
exit 3
|
||||
fi
|
||||
;;
|
||||
--image=)
|
||||
printf 'error: "%s" requires a non-empty option argument.\n' "$1" >&2
|
||||
exit 3
|
||||
;;
|
||||
--image=?*|IMAGE=?*)
|
||||
IMAGE="${1#*=}"
|
||||
;;
|
||||
--filter)
|
||||
if [ "$2" != '--' ]; then
|
||||
FILTER="$2"
|
||||
set -- "$@" "FILTER=$FILTER"
|
||||
shift
|
||||
else
|
||||
printf 'warning: "%s" ignored, requires a non-empty option argument.\n' "$1" >&2
|
||||
fi
|
||||
;;
|
||||
--filter=)
|
||||
printf 'warning: "%s" ignored, requires a non-empty option argument.\n' "$1" >&2
|
||||
;;
|
||||
--filter=?*|FILTER=?*)
|
||||
FILTER="${1#*=}"
|
||||
set -- "$@" "FILTER=$FILTER"
|
||||
;;
|
||||
MARCH=?*)
|
||||
MARCH="${1#*=}"
|
||||
;;
|
||||
DISTRIB=?*)
|
||||
DISTRIB="${1#*=}"
|
||||
;;
|
||||
PROJECTDIR=?*)
|
||||
PROJECTDIR="${1#*=}"
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
set -- "$@" "$1"
|
||||
;;
|
||||
esac
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -n "$WORKINGDIR" ]; then
|
||||
cd "$WORKINGDIR"
|
||||
fi
|
||||
|
||||
PROJECTDIR="${DOBUILD_PROJECTDIR:-.}"
|
||||
OUTDIR="${DOBUILD_OUTDIR:-$PROJECTDIR/.build}"
|
||||
DISTRIB_SUFFIX="${DISTRIB:+-${DISTRIB}}"
|
||||
MARCH_DISTRIB="${MARCH:-[^-]*}${DISTRIB_SUFFIX}"
|
||||
FILTER="${FILTER:-${MARCH_DISTRIB:+${MARCH_DISTRIB}-}[^.]*}"
|
||||
BUILD_DOCKERFILE="${DOCKERFILE:-$(findonly_file "$PROJECTDIR" '*.dockerfile' "$FILTER")}"
|
||||
BUILD_DOCKERFILE="${BUILD_DOCKERFILE:-$(find "$PROJECTDIR" -maxdepth 1 -type f -name 'Dockerfile')}" || true
|
||||
|
||||
if [ -z "$MAKEFILE" ]; then
|
||||
if [ -f "$PROJECTDIR/CMakeLists.txt" ]; then
|
||||
set -- --file="$DOBUILDDIR/examples/cmake-gtest-example/Makefile" "$@"
|
||||
elif [ -f "$PROJECTDIR/Makefile" ] || [ -f "$PROJECTDIR/makefile" ] || [ -f "$PROJECTDIR/GNUmakefile" ]; then
|
||||
printf 'error: makefile project support not implemented.\n' >&2
|
||||
exit 3
|
||||
else
|
||||
printf 'error: unknown project kind.\n' >&2
|
||||
exit 3
|
||||
fi
|
||||
fi
|
||||
|
||||
set -- "$@" "PROJECTDIR=$PROJECTDIR" "DOBUILDDIR=$DOBUILDDIR" "OUTDIR=$OUTDIR"
|
||||
|
||||
if [ -n "$IMAGE" ]; then
|
||||
BUILD_DOCKERFILE="$(mktemp_dockerfile "$OUTDIR")"
|
||||
|
||||
{ \
|
||||
echo "FROM %REGISTRY_PREFIX%${IMAGE}"; \
|
||||
echo; \
|
||||
} | template_subst > "$BUILD_DOCKERFILE"
|
||||
fi
|
||||
|
||||
if [ -n "$BUILD_DOCKERFILE" ]; then
|
||||
if [ "$BUILD_DOCKERFILE" = '-' ]; then
|
||||
BUILD_DOCKERFILE="$(mktemp_dockerfile "$OUTDIR")"
|
||||
template_subst > "$BUILD_DOCKERFILE"
|
||||
fi
|
||||
|
||||
set -- "$@" "DOCKERFILE=$BUILD_DOCKERFILE"
|
||||
fi
|
||||
|
||||
if [ -n "$MARCH" ]; then
|
||||
set -- "$@" "MARCH=$MARCH"
|
||||
fi
|
||||
|
||||
if [ -n "$DISTRIB" ]; then
|
||||
set -- "$@" "DISTRIB=$DISTRIB"
|
||||
fi
|
||||
|
||||
exec "$MAKE" "$@"
|
||||
Reference in New Issue
Block a user