# -----------------------------------------------------------------------------------------------------------
# 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.
# -----------------------------------------------------------------------------------------------------------
include_guard(GLOBAL)
set(CLI11_FILE "cli11-2.2.0.tar.gz")
set(CLI11_URL "https://raw.gitcode.com/src-openeuler/cli11/blobs/58c912141164a5c0f0139bfa91343fefe151d525/${CLI11_FILE}")
set(CLI11_PKG_PATH ${CMAKE_SOURCE_DIR}/third_party/${CLI11_FILE})
set(CLI11_TARGET_DIR ${CMAKE_SOURCE_DIR}/third_party/CLI11)
set(CLI11_HEADER ${CLI11_TARGET_DIR}/CLI11.hpp)
set(CLI11_INTERNAL_HEADER ${CLI11_TARGET_DIR}/CLI/CLI.hpp)
message(STATUS "[ThirdParty] CLI11_URL=${CLI11_URL}")
message(STATUS "[ThirdParty] CLI11_TARGET_DIR=${CLI11_TARGET_DIR}")
if(EXISTS "${CLI11_HEADER}" AND EXISTS "${CLI11_INTERNAL_HEADER}")
message(STATUS "[ThirdParty] CLI11 already available in ${CLI11_TARGET_DIR}")
else()
if(NOT EXISTS "${CLI11_PKG_PATH}")
message(STATUS "[ThirdParty] Downloading CLI11 from ${CLI11_URL}")
file(DOWNLOAD
${CLI11_URL}
${CLI11_PKG_PATH}
STATUS _dl_status
TIMEOUT 600
)
list(GET _dl_status 0 _dl_code)
if(NOT _dl_code EQUAL 0)
message(FATAL_ERROR
"[ThirdParty] Failed to download CLI11 archive (${_dl_status}).\n"
"URL: ${CLI11_URL}\n"
"You can manually download and place the tarball at: ${CLI11_PKG_PATH}")
endif()
message(STATUS "[ThirdParty] CLI11 archive saved to ${CLI11_PKG_PATH}")
else()
message(STATUS "[ThirdParty] Found local CLI11 package: ${CLI11_PKG_PATH}")
endif()
set(_cli11_extract_dir "${CMAKE_BINARY_DIR}/_cli11_tmp")
file(MAKE_DIRECTORY ${_cli11_extract_dir})
file(ARCHIVE_EXTRACT
INPUT ${CLI11_PKG_PATH}
DESTINATION ${_cli11_extract_dir}
)
set(_cli11_src_include "${_cli11_extract_dir}/CLI11-2.2.0/include")
if(NOT EXISTS "${_cli11_src_include}/CLI/CLI.hpp")
message(FATAL_ERROR
"[ThirdParty] CLI11 extraction failed. "
"Expected CLI/CLI.hpp in ${_cli11_src_include}")
endif()
if(EXISTS "${CLI11_TARGET_DIR}/CLI")
file(REMOVE_RECURSE ${CLI11_TARGET_DIR}/CLI)
endif()
file(MAKE_DIRECTORY ${CLI11_TARGET_DIR})
file(RENAME ${_cli11_src_include}/CLI ${CLI11_TARGET_DIR}/CLI)
file(WRITE ${CLI11_HEADER}
"#pragma once\n"
"// Forwarding header for backward compatibility\n"
"#include \"CLI/CLI.hpp\"\n"
)
file(REMOVE_RECURSE ${_cli11_extract_dir})
if(NOT EXISTS "${CLI11_HEADER}")
message(FATAL_ERROR
"[ThirdParty] CLI11 setup failed. "
"Missing CLI11.hpp in ${CLI11_TARGET_DIR}")
endif()
message(STATUS "[ThirdParty] CLI11 extracted to ${CLI11_TARGET_DIR}")
endif()
add_library(cli11_lib INTERFACE)
target_include_directories(cli11_lib INTERFACE ${CLI11_TARGET_DIR})
add_library(CLI11::CLI11 ALIAS cli11_lib)