#!/bin/bash
# ============================================================
# 在【能上网的、同版本麒麟V10 Server】机器上运行本脚本
# 作用：下载 GMT 6.1.0 编译所需的全部依赖 RPM（含依赖链）
# 然后把生成的 rpms/ 目录整体拷贝到离线机器
# 修复版：逐包下载，单个包缺失不再导致全部失败；
#         netcdf-devel 自动尝试多个候选包名
# ============================================================
set -u

echo "== 本机麒麟版本 =="
nkvers 2>/dev/null || cat /etc/kylin-release
echo "请与离线机器的版本核对一致后再继续"
echo ""

BASE=$(cd "$(dirname "$0")" && pwd)
RPMDIR="$BASE/rpms"
mkdir -p "$RPMDIR"

# 安装下载工具（麒麟V10是dnf系，没有yum-utils，装dnf-plugins-core即可）
if ! rpm -q dnf-plugins-core >/dev/null 2>&1; then
    dnf install -y dnf-plugins-core || yum install -y dnf-plugins-core || true
fi

# 普通包列表（netcdf 单独处理）
PKGS="gcc gcc-c++ make cmake libcurl-devel zlib-devel \
      lapack-devel fftw-devel pcre-devel gdal-devel \
      ghostscript graphicsmagick libgfortran"

FAILED=""

for p in $PKGS; do
    if dnf download --resolve --alldeps --destdir="$RPMDIR" "$p" >/dev/null 2>&1; then
        echo "OK   $p"
    else
        echo "失败 $p"
        FAILED="$FAILED $p"
    fi
done

# ---- netcdf 开发包：麒麟SP3源里确认没有，已改为随包提供源码 ----
# netcdf-c-4.9.2.tar.gz 与本脚本同目录，install_gmt6.sh 会在离线机上源码编译
echo ""
if [ -f "$BASE/netcdf-c-4.9.2.tar.gz" ]; then
    echo "OK   netcdf 将以源码方式安装 (netcdf-c-4.9.2.tar.gz 已就绪)"
else
    echo "!! 缺少 netcdf-c-4.9.2.tar.gz —— 请先下载:"
    echo "   https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz"
    echo "   sha256: cf11babbbdb9963f09f55079e0b019f6d0371f52f8e1264a5ba8e9fdab1a6c48"
    FAILED="$FAILED netcdf-c-4.9.2.tar.gz"
fi

echo ""
echo "== 下载完成，共 $(ls "$RPMDIR"/*.rpm 2>/dev/null | wc -l) 个RPM =="
echo "== 关键包核对 =="
MISS=0
for p in cmake gcc-c++ libcurl-devel zlib-devel; do
    if ls "$RPMDIR"/$p-[0-9]*.rpm >/dev/null 2>&1; then
        echo "OK   $p"
    else
        echo "缺失 $p  <-- 必须解决！"
        MISS=1
    fi
done
[ -f "$BASE/netcdf-c-4.9.2.tar.gz" ] || MISS=1
echo "提示 gdal-devel/graphicsmagick 缺失(可选，不影响GMT编译和出图)"

if [ -n "$FAILED" ]; then
    echo ""
    echo "== 以下项目需人工处理 =="
    echo "  $FAILED"
fi

echo ""
echo "把 rpms/ 目录与以下文件一起拷到离线机器："
echo "  gmt-6.1.0-src.tar.xz  gshhg-gmt-2.3.7.tar.gz  dcw-gmt-2.1.2.tar.gz"
echo "  netcdf-c-4.9.2.tar.gz  install_gmt6.sh"

[ $MISS -eq 0 ] && echo "" && echo "全部关键依赖就绪，可以拷贝到离线机器了。"
exit $MISS
