# ------------------------------------------------------------------------------------------------------------
# Copyright (c) 2025 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.
# ------------------------------------------------------------------------------------------------------------

macro(get_host_linux_distributor)
    set(HOST_LINUX_DISTRIBUTOR_ID "")
    set(HOST_LINUX_DISTRIBUTOR_RELEASE "")

    find_program(LSB_RELEASE_PROGRAM lsb_release)
    if(LSB_RELEASE_PROGRAM)
        execute_process(COMMAND bash -c "lsb_release -i | sed 's@Distributor ID:\t@@g'"
            RESULT_VARIABLE result
            OUTPUT_VARIABLE HOST_LINUX_DISTRIBUTOR_ID
            OUTPUT_STRIP_TRAILING_WHITESPACE)
    elseif(EXISTS "/etc/os-release")
        execute_process(COMMAND bash -c "cat /etc/os-release | grep '^NAME' | awk -F '\"' '{print \$2}'"
            RESULT_VARIABLE result
            OUTPUT_VARIABLE HOST_LINUX_DISTRIBUTOR_ID
            OUTPUT_STRIP_TRAILING_WHITESPACE)
    endif()
    if ((result) OR (HOST_LINUX_DISTRIBUTOR_ID STREQUAL ""))
        set(HOST_LINUX_DISTRIBUTOR_ID unknown)
    endif()

    string(TOLOWER ${HOST_LINUX_DISTRIBUTOR_ID} HOST_LINUX_DISTRIBUTOR_ID)

    if ((HOST_LINUX_DISTRIBUTOR_ID STREQUAL "euleros") OR (HOST_LINUX_DISTRIBUTOR_ID STREQUAL "debian"))
        set(major_version 0)
        set(minor_version 0)
        if(LSB_RELEASE_PROGRAM)
            # Combine the Release and Codename. In the following example, the version number is 2.8
            #
            # Distributor ID:	EulerOS
            # Description:	EulerOS release 2.0 (SP8)
            # Release:	2.0
            # Codename:	SP8
            #
            execute_process(COMMAND bash -c "lsb_release -r | sed 's@[a-zA-Z:\t ]@@g' | awk -F. '{print $1}'"
                RESULT_VARIABLE result
                OUTPUT_VARIABLE major_version
                OUTPUT_STRIP_TRAILING_WHITESPACE)
            if (result)
                set(major_version 0)
            endif()

            execute_process(COMMAND bash -c "lsb_release -c | sed 's@[a-zA-Z:\t ]@@g' | awk -F '' '{print $0}' | cut -b 1-2"
                RESULT_VARIABLE result
                OUTPUT_VARIABLE minor_version
                OUTPUT_STRIP_TRAILING_WHITESPACE)
            if (result)
                set(minor_version 0)
            endif()
        elseif(EXISTS "/etc/os-release")
            # get the Release and Codename from /etc/os-release. In the following example, the version number is 2.8
            #
            # VERSION_ID="2.0"
            # VERSION="2.0 (SP8)"
            #
            execute_process(COMMAND bash -c "cat /etc/os-release | grep '^VERSION_ID=' | awk -F '\"' '{print \$2}' | awk -F. '{print \$1}'"
                RESULT_VARIABLE result
                OUTPUT_VARIABLE major_version
                OUTPUT_STRIP_TRAILING_WHITESPACE)
            if (result)
                set(major_version 0)
            endif()
            execute_process(COMMAND bash -c "cat /etc/os-release | grep '^VERSION=' | awk -F '\"' '{print \$2}' | awk -F[SP\\)] '{print \$3}'"
                RESULT_VARIABLE result
                OUTPUT_VARIABLE minor_version
                OUTPUT_STRIP_TRAILING_WHITESPACE)
            if (result)
                set(minor_version 0)
            endif()
        endif()

        if (major_version STREQUAL "")
            set(major_version 0)
        endif()

        if (minor_version STREQUAL "")
            set(minor_version 0)
        endif()

        set(HOST_LINUX_DISTRIBUTOR_RELEASE "${major_version}.${minor_version}")
    else()
        # 保留主版本号和次版本号,删除修订版本号
        # Release:	18.04
        # Release:	7.6.1810
        if(LSB_RELEASE_PROGRAM)
            execute_process(COMMAND bash -c "lsb_release -r | sed 's@[a-zA-Z:\t ]@@g' | awk -F. '{print $1 \".\" $2}' "
                RESULT_VARIABLE result
                OUTPUT_VARIABLE HOST_LINUX_DISTRIBUTOR_RELEASE
                OUTPUT_STRIP_TRAILING_WHITESPACE)
        elseif(EXISTS "/etc/os-release")
            execute_process(COMMAND bash -c "cat /etc/os-release | grep '^VERSION_ID' | awk -F '\"' '{print \$2}'"
                RESULT_VARIABLE result
                OUTPUT_VARIABLE HOST_LINUX_DISTRIBUTOR_RELEASE
                OUTPUT_STRIP_TRAILING_WHITESPACE)
        endif()
        if ((result) OR (HOST_LINUX_DISTRIBUTOR_RELEASE STREQUAL ""))
            set(HOST_LINUX_DISTRIBUTOR_RELEASE 0.0)
        endif()
    endif()

endmacro(get_host_linux_distributor)

macro(get_host_kernel_path)
    if (DEFINED CUSTOM_KERNEL_PATH)
        set(HOST_KERNEL_PATH ${CUSTOM_KERNEL_PATH} CACHE PATH "host kernel path")
    endif()
endmacro(get_host_kernel_path)