0e28826073
- 升级 Drogon 和 Trantor,修复畸形请求导致的连接计数泄漏\n- 增加第三方框架版本校验与自动重建\n- 完善完整报告导出和接口文档
113 lines
4.9 KiB
Bash
Executable File
113 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# ===================== 第三方库自动编译(Drogon) =====================
|
||
# 检查 Drogon + Trantor 编译产物,缺失时自动从 drogon_repo 源码编译。
|
||
# 仅在编译产物不存在时触发,日常开发零开销。
|
||
#
|
||
# 参考: edge_collector/collector/ensure_third_party.sh
|
||
# 用法:
|
||
# source ensure_third_party.sh # 被 build.sh / run.sh 引用
|
||
# bash ensure_third_party.sh # 也可独立运行
|
||
|
||
set -euo pipefail
|
||
|
||
# 如果变量已由调用方设置则复用,否则自行推导
|
||
SCRIPT_DIR="${SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
|
||
THIRD_PARTY="${THIRD_PARTY:-${SCRIPT_DIR}}"
|
||
|
||
# ---- 架构检测 ----
|
||
if [ -z "${TARGET_ARCH:-}" ]; then
|
||
ARCH=$(uname -m)
|
||
case "${ARCH}" in
|
||
x86_64) TARGET_ARCH="x64" ;;
|
||
aarch64|arm64) TARGET_ARCH="arm64" ;;
|
||
armv7*|arm) TARGET_ARCH="arm32" ;;
|
||
*) TARGET_ARCH="x64" ;;
|
||
esac
|
||
fi
|
||
|
||
export TARGET_ARCH
|
||
export DROGON_INSTALL="${THIRD_PARTY}/drogon/install/${TARGET_ARCH}"
|
||
|
||
# --- Drogon + Trantor (本地安装) ---
|
||
# Drogon 使用 find_package(CONFIG) 模式,需要完整 cmake install 树。
|
||
# 编译后安装到 third_party/drogon/install/${TARGET_ARCH}/,
|
||
# 由顶层 CMakeLists.txt 通过 CMAKE_PREFIX_PATH 注入查找路径。
|
||
DROGON_REPO="${THIRD_PARTY}/drogon_repo"
|
||
DROGON_CONFIG="${DROGON_INSTALL}/libs/cmake/Drogon/DrogonConfig.cmake"
|
||
EXPECTED_DROGON_VERSION="1.9.13"
|
||
EXPECTED_TRANTOR_VERSION="1.5.28"
|
||
|
||
framework_versions_match() {
|
||
local drogon_header="${DROGON_INSTALL}/include/drogon/version.h"
|
||
local drogon_cmake="${DROGON_INSTALL}/libs/cmake/Drogon/DrogonConfigVersion.cmake"
|
||
local trantor_cmake="${DROGON_INSTALL}/libs/cmake/Trantor/TrantorConfigVersion.cmake"
|
||
local drogon_link trantor_link
|
||
|
||
[ -f "${drogon_header}" ] &&
|
||
[ -f "${drogon_cmake}" ] &&
|
||
[ -f "${trantor_cmake}" ] &&
|
||
grep -Fq "#define DROGON_VERSION \"${EXPECTED_DROGON_VERSION}\"" "${drogon_header}" &&
|
||
grep -Fq "set(PACKAGE_VERSION \"${EXPECTED_DROGON_VERSION}\")" "${drogon_cmake}" &&
|
||
grep -Fq "set(PACKAGE_VERSION \"${EXPECTED_TRANTOR_VERSION}\")" "${trantor_cmake}" || return 1
|
||
|
||
drogon_link="$(readlink "${DROGON_INSTALL}/libs/libdrogon.so.1" 2>/dev/null || true)"
|
||
trantor_link="$(readlink "${DROGON_INSTALL}/libs/libtrantor.so.1" 2>/dev/null || true)"
|
||
[ "${drogon_link}" = "libdrogon.so.${EXPECTED_DROGON_VERSION}" ] &&
|
||
[ "${trantor_link}" = "libtrantor.so.${EXPECTED_TRANTOR_VERSION}" ]
|
||
}
|
||
|
||
if ! grep -Fq "set(DROGON_PATCH_VERSION 13)" "${DROGON_REPO}/CMakeLists.txt" ||
|
||
! grep -Fq "set(TRANTOR_PATCH_VERSION 28)" "${DROGON_REPO}/trantor/CMakeLists.txt"; then
|
||
echo "[third_party] 错误:Drogon 源码不是 ${EXPECTED_DROGON_VERSION} / Trantor ${EXPECTED_TRANTOR_VERSION}" >&2
|
||
return 1 2>/dev/null || exit 1
|
||
fi
|
||
|
||
if framework_versions_match; then
|
||
echo "[third_party] Drogon ${EXPECTED_DROGON_VERSION} / Trantor ${EXPECTED_TRANTOR_VERSION} 已编译,跳过 (${DROGON_INSTALL})"
|
||
else
|
||
if [ ! -f "${DROGON_REPO}/CMakeLists.txt" ]; then
|
||
echo "[third_party] ⚠️ 源码目录不存在: drogon_repo,跳过 Drogon"
|
||
echo "[third_party] (后续 cmake find_package(Drogon) 将报错)"
|
||
return 0 2>/dev/null || exit 0
|
||
elif [ ! -f "${DROGON_REPO}/trantor/CMakeLists.txt" ]; then
|
||
echo "[third_party] ⚠️ Trantor 源码未就位: drogon_repo/trantor/,跳过 Drogon"
|
||
echo "[third_party] (后续 cmake find_package(Drogon) 将报错)"
|
||
return 0 2>/dev/null || exit 0
|
||
else
|
||
if [ -e "${DROGON_INSTALL}" ]; then
|
||
echo "[third_party] 框架产物版本不匹配,重建 ${DROGON_INSTALL}"
|
||
rm -rf "${DROGON_INSTALL}"
|
||
fi
|
||
echo "[third_party] 编译 Drogon ${EXPECTED_DROGON_VERSION} + Trantor ${EXPECTED_TRANTOR_VERSION} → ${DROGON_INSTALL}"
|
||
|
||
DROGON_BUILD="${DROGON_REPO}/build"
|
||
rm -rf "${DROGON_BUILD}"
|
||
mkdir -p "${DROGON_BUILD}"
|
||
|
||
cmake -S "${DROGON_REPO}" -B "${DROGON_BUILD}" \
|
||
-DCMAKE_BUILD_TYPE=Release \
|
||
-DCMAKE_INSTALL_PREFIX="${DROGON_INSTALL}" \
|
||
-DCMAKE_INSTALL_LIBDIR=libs \
|
||
-DBUILD_SHARED_LIBS=ON \
|
||
-DUSE_SUBMODULE=ON \
|
||
-DBUILD_CTL=OFF \
|
||
-DBUILD_EXAMPLES=OFF \
|
||
-DBUILD_ORM=OFF \
|
||
-DBUILD_TESTING=OFF \
|
||
-DBUILD_BROTLI=ON \
|
||
-DBUILD_YAML_CONFIG=OFF
|
||
|
||
cmake --build "${DROGON_BUILD}" -j"$(nproc)"
|
||
cmake --install "${DROGON_BUILD}"
|
||
rm -rf "${DROGON_BUILD}"
|
||
|
||
if ! framework_versions_match; then
|
||
echo "[third_party] 错误:框架安装版本校验失败" >&2
|
||
return 1 2>/dev/null || exit 1
|
||
fi
|
||
echo "[third_party] ✅ Drogon ${EXPECTED_DROGON_VERSION} / Trantor ${EXPECTED_TRANTOR_VERSION} → ${DROGON_INSTALL}"
|
||
fi
|
||
fi
|
||
|
||
echo "[third_party] 第三方库检查完成 ✅"
|