forked from woqidaideshi/openruyi-autotest
tests/functional/pkgs/llvm22: test *.cmake
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# library-prefix = llvm22
|
||||
#
|
||||
# llvm22 suite-level shared library
|
||||
# Uses flag-file + reference counting to ensure the package
|
||||
# is installed only ONCE and uninstalled only ONCE across all
|
||||
# test cases.
|
||||
|
||||
PKG_FLAG="/tmp/.beakerlib_llvm22_suite"
|
||||
DEVEL_PKG="llvm22-devel"
|
||||
|
||||
llvm22Setup() {
|
||||
if [ ! -f "$PKG_FLAG" ]; then
|
||||
if ! rpm -q "$DEVEL_PKG" 2>/dev/null; then
|
||||
echo openruyi | sudo -S dnf install -y --nogpgcheck "$DEVEL_PKG" 2>/dev/null
|
||||
echo "installed=1" > "$PKG_FLAG"
|
||||
rlLogInfo "已安装 $DEVEL_PKG 软件包(首次)"
|
||||
else
|
||||
echo "installed=0" > "$PKG_FLAG"
|
||||
rlLogInfo "$DEVEL_PKG 软件包已存在"
|
||||
fi
|
||||
echo "ref=1" >> "$PKG_FLAG"
|
||||
else
|
||||
local ref
|
||||
ref=$(grep "^ref=" "$PKG_FLAG" | cut -d= -f2)
|
||||
ref=$((ref + 1))
|
||||
sed -i "s/^ref=.*/ref=$ref/" "$PKG_FLAG"
|
||||
rlLogInfo "$DEVEL_PKG 已由其他测试安装,引用计数: $ref"
|
||||
fi
|
||||
rlCleanupAppend "llvm22Cleanup"
|
||||
}
|
||||
|
||||
llvm22Cleanup() {
|
||||
if [ ! -f "$PKG_FLAG" ]; then
|
||||
return 0
|
||||
fi
|
||||
local ref
|
||||
ref=$(grep "^ref=" "$PKG_FLAG" | cut -d= -f2)
|
||||
ref=$((ref - 1))
|
||||
if [ "$ref" -le 0 ]; then
|
||||
if grep -q "^installed=1" "$PKG_FLAG"; then
|
||||
echo openruyi | sudo -S dnf remove -y "$DEVEL_PKG" 2>/dev/null || true
|
||||
rlLogInfo "已卸载 $DEVEL_PKG 软件包(最后一个测试)"
|
||||
fi
|
||||
rm -f "$PKG_FLAG"
|
||||
else
|
||||
sed -i "s/^ref=.*/ref=$ref/" "$PKG_FLAG"
|
||||
rlLogInfo "$DEVEL_PKG 保留(还有 $ref 个测试未完成)"
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
summary: Functional test - llvm22-devel cmake devel package verification
|
||||
tag:
|
||||
- functional
|
||||
- llvm22
|
||||
duration: 10m
|
||||
tier: 1
|
||||
path: /tests/functional/pkgs/llvm22
|
||||
require:
|
||||
- llvm22-devel
|
||||
- llvm-devel
|
||||
- cmake
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- coreutils
|
||||
- beakerlib
|
||||
@@ -0,0 +1,15 @@
|
||||
summary: Functional test - llvm22-devel cmake find_package verify
|
||||
test: ./test.sh
|
||||
tag:
|
||||
- functional
|
||||
- llvm22
|
||||
duration: 5m
|
||||
tier: 1
|
||||
path: /tests/functional/pkgs/llvm22/test_llvm22_cmake_devel_verify
|
||||
require:
|
||||
- llvm22-devel
|
||||
- llvm-devel
|
||||
- cmake
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- beakerlib
|
||||
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# Functional test: llvm22-devel - cmake 导出完整性验证
|
||||
# 验证 llvm22-devel 包提供的 .cmake 文件引用的所有文件是否真实存在
|
||||
# 对应 issue: https://github.com/openRuyi-Project/openRuyi/issues/760
|
||||
# 问题: LLVMExports.cmake 引用了不存在的 .a 文件(如 libLLVMTestingAnnotations.a)
|
||||
# 导致 find_package(LLVM) 在配置阶段就直接失败
|
||||
#
|
||||
# 验证原理:
|
||||
# find_package(LLVM) → LLVMConfig.cmake → LLVMExports.cmake
|
||||
# LLVMExports.cmake 是唯一列出所有 target→文件映射的文件,
|
||||
# 加载时会校验每个 target 引用的 .a/.so 是否真实存在。
|
||||
# 其他 .cmake 文件(AddLLVM、CheckAtomic 等)是内部构建辅助模块,
|
||||
# 不在 find_package 时加载,且不包含文件路径引用,
|
||||
# 不会产生 issue#760 类问题,无需单独验证。
|
||||
|
||||
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||
. "$(dirname "$0")/../lib.sh"
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartSetup "环境准备"
|
||||
llvm22Setup
|
||||
TmpDir=$(mktemp -d)
|
||||
rlRun "cd $TmpDir" 0 "进入临时测试目录"
|
||||
|
||||
# 自动发现 LLVM cmake 目录
|
||||
LLVM_CMAKE_DIR=$(rpm -ql llvm22-devel | grep 'LLVMConfig\.cmake$' | head -1 | xargs dirname)
|
||||
rlLogInfo "LLVM cmake 目录: $LLVM_CMAKE_DIR"
|
||||
|
||||
# 统计 .cmake 文件数量
|
||||
CMAKE_COUNT=$(rpm -ql llvm22-devel | grep -c '\.cmake$')
|
||||
rlLogInfo "llvm22-devel 提供了 $CMAKE_COUNT 个 .cmake 文件"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "find_package(LLVM) COMPONENTS - 校验 LLVMExports.cmake 导出完整性"
|
||||
if [ "$CMAKE_COUNT" -eq 0 ]; then
|
||||
rlLogWarning "llvm22-devel 未提供任何 .cmake 文件,跳过 cmake 校验"
|
||||
else
|
||||
cat > "$TmpDir/CMakeLists.txt" << 'CMAKEEOF'
|
||||
cmake_minimum_required(VERSION 3.13.4)
|
||||
project(llvm_devel_components_test
|
||||
VERSION "0.1"
|
||||
LANGUAGES C CXX)
|
||||
|
||||
find_package(LLVM REQUIRED CONFIG
|
||||
COMPONENTS
|
||||
core
|
||||
support
|
||||
bitwriter
|
||||
irreader
|
||||
)
|
||||
|
||||
message(STATUS "LLVM package with COMPONENTS found successfully")
|
||||
message(STATUS "LLVM version: ${LLVM_VERSION}")
|
||||
CMAKEEOF
|
||||
|
||||
rlRun "cmake -S $TmpDir -B $TmpDir/build_components" 0 \
|
||||
"cmake 配置 (find_package LLVM with COMPONENTS)"
|
||||
fi
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartCleanup "清理测试环境"
|
||||
rlRun "cd /" 0 "离开测试目录"
|
||||
if [ -n "$TmpDir" ] && [ -d "$TmpDir" ]; then
|
||||
rlRun "rm -rf $TmpDir" 0 "清理临时测试目录"
|
||||
fi
|
||||
rlPhaseEnd
|
||||
|
||||
rlJournalPrintText
|
||||
rlJournalEnd
|
||||
Reference in New Issue
Block a user