# ----------------------------------------------------------------------------
# Copyright (c) 2026 Huawei Technologies Co., Ltd.
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
# CANN Open Software License Agreement Version 2.0 (the "License").
# Please refer to the License for details. You may not use this file except in compliance with the License.
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
# See LICENSE in the root of the software repository for the full text of the License.
# ----------------------------------------------------------------------------
# makeself.cmake - CPack External 打包脚本,使用 makeself 生成 .run 自解压包
# 由 CPack 在 staging 完成后调用,变量由 CPack 传入
set(RUN_FILE "${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}.run")
set(MAKESELF_SCRIPT "${CPACK_MAKESELF_PATH}/makeself.sh")
if(NOT EXISTS "${MAKESELF_SCRIPT}")
message(FATAL_ERROR "makeself.sh not found: ${MAKESELF_SCRIPT}")
endif()
if(NOT EXISTS "${CPACK_TEMPORARY_DIRECTORY}")
message(FATAL_ERROR "Staging directory not found: ${CPACK_TEMPORARY_DIRECTORY}")
endif()
# 确保输出目录存在
file(MAKE_DIRECTORY "${CPACK_PACKAGE_DIRECTORY}")
# 使用 makeself 将 staging 目录打包为 .run 自解压包
# startup_script 为 install.sh,支持 --install、--uninstall、--install-path 等参数
# WORKING_DIRECTORY 确保 --help-header 能正确找到 help.info(路径相对于 staging 目录)
execute_process(
COMMAND "${MAKESELF_SCRIPT}" --nocomp
--help-header share/info/ops_blas/help.info
"${CPACK_TEMPORARY_DIRECTORY}" "${RUN_FILE}"
"${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}"
share/info/ops_blas/install.sh
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
RESULT_VARIABLE MAKESELF_RESULT
ERROR_VARIABLE MAKESELF_ERROR
)
if(MAKESELF_RESULT)
message(FATAL_ERROR "makeself failed: ${MAKESELF_ERROR}")
endif()
# 告知 CPack 生成的包文件路径,CPack 会将其复制到构建目录
set(CPACK_EXTERNAL_BUILT_PACKAGES "${RUN_FILE}" PARENT_SCOPE)