mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-22 18:19:42 +00:00
Meson is a modern build system that has seen a rise in adoption and some version of it is available in almost every platform supported. Compared to automake, meson has the following advantages: * Meson provides a significant boost to the build and configuration time by better exploiting parallelism. * Meson is subjectively considered to be better in readability. These merits alone justify experimenting with meson as a way of improving development time and ergonomics. However, there are some compromises to ensure the transition goes relatively smooth: * The system tests currently rely on various files within the source directory. Changing this requirement is a non-trivial task that can't be currently justified. Currently the last compiled build directory writes into the source tree which is in turn used by pytest. * The minimum version supported has been fixed at 0.61. Increasing this value will require choosing a baseline of distributions that can package with meson. On the contrary, there will likely be an attempt to decrease this value to ensure almost universal support for building BIND 9 with meson.
83 lines
2.4 KiB
Bash
Executable File
83 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
#
|
|
# 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 https://mozilla.org/MPL/2.0/.
|
|
#
|
|
# See the COPYRIGHT file distributed with this work for additional
|
|
# information regarding copyright ownership.
|
|
|
|
set -e
|
|
set -o pipefail
|
|
|
|
NAMED_CONF="
|
|
options {
|
|
port 5300;
|
|
listen-on { 127.0.0.1; };
|
|
listen-on-v6 { ::1; };
|
|
};
|
|
|
|
zone \".\" {
|
|
type primary;
|
|
file \"zone.db\";
|
|
};
|
|
"
|
|
|
|
ZONE_CONTENTS="
|
|
\$TTL 300
|
|
@ SOA localhost. localhost.localhost. 1 30 10 3600000 300
|
|
@ NS localhost.
|
|
localhost A 127.0.0.1
|
|
AAAA ::1
|
|
"
|
|
|
|
if ! command -v pict >/dev/null 2>&1; then
|
|
echo "This script requires the 'pict' utility to be present in PATH." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v timeout >/dev/null 2>&1; then
|
|
echo "This script requires the 'timeout' utility to be present in PATH." >&2
|
|
exit 1
|
|
fi
|
|
|
|
meson setup build-pairwise-default
|
|
|
|
meson introspect build-pairwise-default --buildoptions | ./util/pairwise-construct.jq >pairwise-model.txt
|
|
|
|
pict pairwise-model.txt | tr "\t" " " | sed "1d" >pairwise-commands.txt
|
|
|
|
rm -rf build-pairwire-default
|
|
|
|
while read -r -a configure_switches; do
|
|
runid=${RANDOM}
|
|
mkdir "pairwise-${runid}"
|
|
cd "pairwise-${runid}"
|
|
echo "Configuration:" "${configure_switches[@]}" | tee "../pairwise-output.${runid}.txt"
|
|
meson setup build .. "${configure_switches[@]}" >>"../pairwise-output.${runid}.txt" 2>&1
|
|
# ../configure --enable-option-checking=fatal "${configure_switches[@]}" >>"../pairwise-output.${runid}.txt" 2>&1
|
|
echo "Building..."
|
|
ninja -C build >>"../pairwise-output.${runid}.txt" 2>&1
|
|
# make "-j${BUILD_PARALLEL_JOBS:-1}" all >>"../pairwise-output.${runid}.txt" 2>&1
|
|
echo "Running..."
|
|
echo "${NAMED_CONF}" >named.conf
|
|
echo "${ZONE_CONTENTS}" >zone.db
|
|
ret=0
|
|
timeout --kill-after=5s 5s build/named -c named.conf -g >>"../pairwise-output.${runid}.txt" 2>&1 || ret=$?
|
|
# "124" is the exit code "timeout" returns when it terminates
|
|
# the command; in other words, the command-under-test times
|
|
# out, i.e., was still running and didn't crash.
|
|
if [ "${ret}" -ne 124 ]; then
|
|
echo "Unexpected exit code from the 'timeout' utility (${ret})"
|
|
exit 1
|
|
fi
|
|
rm -rf build
|
|
# "timeout" is unable to report a crash on shutdown via its exit
|
|
# code.
|
|
cd ..
|
|
done <pairwise-commands.txt
|