Files
wind_power_cal/third_party/ensure_third_party.sh
T
cloud 0e28826073 修复: 升级框架并完善报告导出
- 升级 Drogon 和 Trantor,修复畸形请求导致的连接计数泄漏\n- 增加第三方框架版本校验与自动重建\n- 完善完整报告导出和接口文档
2026-08-10 09:50:09 +08:00

113 lines
4.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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] 第三方库检查完成 ✅"