0318e84546
.ninja.log is only present after building (successful or otherwise) the project, but build.ninja is output as soon as the build dir is setup. Signed-off-by: Allan McRae <allan@archlinux.org>
40 lines
1.1 KiB
Bash
Executable File
40 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
find_build_directory() {
|
|
local build_dirs=(*/build.ninja)
|
|
|
|
if [[ ! -e ${build_dirs[0]} ]]; then
|
|
echo "error: No build directory found. Have you run 'meson build' yet?" >&2
|
|
return 1
|
|
elif (( ${#build_dirs[*]} > 1 )); then
|
|
echo "error: Multiple build directories found. Unable to proceed." >&2
|
|
return 1
|
|
fi
|
|
|
|
printf '%s\n' "${build_dirs[0]%/*}"
|
|
}
|
|
|
|
|
|
filter_targets_by_name() {
|
|
if command -v jq &>/dev/null; then
|
|
jq --arg re "$1" -r 'map(.name)[] | select(match($re))'
|
|
else
|
|
json_pp | awk -v filter="$1" -F'[:"]' \
|
|
'$2 == "name" && $(NF - 1) ~ filter { print $(NF - 1) }'
|
|
fi
|
|
}
|
|
|
|
# Make things simple and require that we're in the build root rather than
|
|
# trying to chase down the location of this script and the relative build dir.
|
|
if [[ ! -d .git ]]; then
|
|
echo "This script must be run from the root of the repository" >&2
|
|
exit 1
|
|
fi
|
|
|
|
build_dir=$(find_build_directory) || exit 1
|
|
|
|
mapfile -t targets < \
|
|
<(meson introspect "$build_dir" --targets | filter_targets_by_name "-update-po$")
|
|
|
|
ninja -C "$build_dir" "${targets[@]}"
|