61 lines
1.7 KiB
Bash
61 lines
1.7 KiB
Bash
|
#!/bin/bash
|
||
|
on_err() {
|
||
|
code=$?
|
||
|
if echo -n "$BASH_COMMAND" | grep "^docker" >/dev/null 2>/dev/null; then
|
||
|
exit $code
|
||
|
fi
|
||
|
echo "Error: Command exited with non-zero status ($code)" >&2
|
||
|
echo "Command: $BASH_COMMAND"
|
||
|
exit $code
|
||
|
}
|
||
|
have_image() {
|
||
|
docker images --format json | jq '.[].Names' --raw-output | grep -v null | jq '.[]' --raw-output | sed 's/:.*$//' | sed 's@^.*/@@' | grep -Fx "$1" >/dev/null 2>/dev/null
|
||
|
return $?
|
||
|
}
|
||
|
trap on_err ERR
|
||
|
export first_arg="$1"
|
||
|
if [ -z "$1" ]; then
|
||
|
export first_arg="build"
|
||
|
fi
|
||
|
shift || true
|
||
|
build_cmake() {
|
||
|
pushd "$1"
|
||
|
shift
|
||
|
git submodule update --init --recursive
|
||
|
mkdir -p "build-docker" && cd "build-docker"
|
||
|
cmake ..
|
||
|
cmake --build . "$@"
|
||
|
cmake --install .
|
||
|
popd
|
||
|
}
|
||
|
if [ "$first_arg" = "in-docker" ]; then
|
||
|
ARGS=( "$@" )
|
||
|
cd /src
|
||
|
build_cmake subprojects/protobuf "${ARGS[@]}"
|
||
|
pushd subprojects/grpc
|
||
|
git apply ../../grpc.patch || true
|
||
|
popd
|
||
|
build_cmake subprojects/grpc "${ARGS[@]}"
|
||
|
mkdir -p /src/build-docker && cd /src/build-docker
|
||
|
export CMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||
|
cmake -DDISABLE_GTK_UI=ON -DCMAKE_BUILD_TYPE=Debug ..
|
||
|
cmake --build . "${ARGS[@]}"
|
||
|
else
|
||
|
export second_arg="$1"
|
||
|
shift || true
|
||
|
if [ -z "$second_arg" ]; then
|
||
|
export second_arg="debian"
|
||
|
fi
|
||
|
export tag="looper-build-$second_arg"
|
||
|
if [ "$first_arg" = "env" ]; then
|
||
|
if [ -d "build-env/$second_arg" ]; then
|
||
|
docker build "build-env/$second_arg" -t "$tag"
|
||
|
fi
|
||
|
elif [ "$first_arg" = "build" ]; then
|
||
|
if ! have_image "$tag"; then
|
||
|
"$0" env "$second_arg"
|
||
|
fi
|
||
|
docker run -v $PWD:/src "$tag" "/src/build-docker.sh" "in-docker" "$@"
|
||
|
fi
|
||
|
fi
|