mirror of https://github.com/sipwise/rtpengine.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.8 KiB
83 lines
2.8 KiB
#!/bin/bash
|
|
|
|
if [ -z "${M}" ]; then
|
|
M=$(pwd)
|
|
fi
|
|
|
|
if [ -z "${RTPENGINE_VERSION}" ]; then
|
|
if [ -f .release-version ]; then
|
|
RTPENGINE_VERSION=$(<.release-version)
|
|
elif [ -f ../.release-version ]; then
|
|
RTPENGINE_VERSION=$(<../.release-version)
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${RTPENGINE_VERSION}" ]; then
|
|
have_dpkg_parsechangelog=no
|
|
if command -v dpkg-parsechangelog >/dev/null; then
|
|
have_dpkg_parsechangelog=yes
|
|
fi
|
|
if [ -f "${M}/../debian/changelog" ]; then
|
|
deb_changelog="${M}/../debian/changelog"
|
|
else
|
|
deb_changelog="${M}/debian/changelog"
|
|
fi
|
|
if [ "${have_dpkg_parsechangelog}" = yes ]; then
|
|
deb_version="$(dpkg-parsechangelog -l"${deb_changelog}" | awk '/^Version: / {print $2}')"
|
|
RTPENGINE_VERSION="${deb_version}"
|
|
fi
|
|
|
|
git_br_commit="git-$(cd "${M}" && git rev-parse --abbrev-ref --symbolic-full-name HEAD 2> /dev/null)-$(cd "${M}" && git rev-parse --short HEAD 2> /dev/null)"
|
|
|
|
if [ "${git_br_commit}" != "git--" ]; then
|
|
if [ -n "${RTPENGINE_VERSION}" ]; then
|
|
RTPENGINE_VERSION+=" "
|
|
fi
|
|
RTPENGINE_VERSION+="${git_br_commit}"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${RTPENGINE_VERSION}" ]; then
|
|
RTPENGINE_VERSION="undefined"
|
|
fi
|
|
|
|
if [ -n "${RTPENGINE_VERSION}" ]; then
|
|
echo "RTPENGINE_VERSION := ${RTPENGINE_VERSION}"
|
|
fi
|
|
|
|
# Compile test: detect nft_expr_ops.validate callback signature.
|
|
# Distribution kernels (e.g. Ubuntu) may backport the 2-param validate
|
|
# callback (mainline commit eaf9b2c875ec, merged in 6.12) to earlier
|
|
# kernel versions without changing LINUX_VERSION_CODE. A compile test
|
|
# is the only reliable way to detect the actual API.
|
|
#
|
|
# The test tries to assign a 3-param function to .validate. If it
|
|
# compiles, the old API is present and we set the flag. If it fails
|
|
# (incompatible pointer types), the kernel has the new 2-param version.
|
|
|
|
# KERNELRELEASE is set by kbuild to the target kernel version, which
|
|
# may differ from the running kernel during DKMS cross-kernel builds.
|
|
KSRC="${KSRC:-/lib/modules/${KERNELRELEASE:-$(uname -r)}/build}"
|
|
|
|
if [ -d "${KSRC}" ]; then
|
|
nft_test_dir=$(mktemp -d)
|
|
cat > "${nft_test_dir}/nft_test.c" <<'TESTEOF'
|
|
#include <linux/module.h>
|
|
#include <net/netfilter/nf_tables.h>
|
|
static int test_validate(const struct nft_ctx *ctx, const struct nft_expr *expr,
|
|
const struct nft_data **data) { return 0; }
|
|
static struct nft_expr_ops __attribute__((unused)) test_ops = {
|
|
.validate = test_validate };
|
|
MODULE_LICENSE("GPL");
|
|
TESTEOF
|
|
echo "obj-m := nft_test.o" > "${nft_test_dir}/Makefile"
|
|
|
|
# Use env -i to prevent kbuild state (KBUILD_EXTMOD, M, MAKEFLAGS, etc.)
|
|
# leaking from an outer kbuild invocation into the compile test.
|
|
if env -i PATH="$PATH" make -j1 -C "${KSRC}" M="${nft_test_dir}" modules >/dev/null 2>&1; then
|
|
echo "ccflags-y += -DNFT_EXPR_OPS_VALIDATE_HAS_DATA"
|
|
fi
|
|
|
|
rm -rf "${nft_test_dir}"
|
|
fi
|