#!/bin/bash
LC_ALL=C

function dri_help(){
cat <<EOF
    参数              作用
    为空              cp 所有文件
    --h,h            custom_MemoryDevice.h
    --xls,xls        MemoryDeviceList_xxxx.xls
    --dws,dws        codegen_txxx.dws
    --dts,dts        yft_board_[dts_]config.h
                      注:需要在configs中配置 dts_cp_config=y 生效
    --help,-h,help      帮助

    --dists,dists    没有参数会检查当前分支lcm,cam与dists_info.config中当前分支的合法性
            --p,p     生成当前分支的lcm和cam信息
            --all,all 当前大分支的所有lcm和cam信息
            --ch,ch   查看已经拉到本地的大分支信息,不需要 dists.log
             注:需要在configs中配置 dists_check_config=y 生效
版本:v1.10.0
时间:2016-11-07
EOF
}

#CONFIG_LOG 决定了是否向dists.log 追加运行信息
# 为 y 写入,其它值为不写入

function yft_print_errors(){
    echo -e "\033[01;31m${*}\033[0m"
    [ "$CONFIG_LOG" == "y" ] && echo "" >> ${YFT_CONST_LOG_BUILD}
    [ "$CONFIG_LOG" == "y" ] && echo "${*}" >> ${YFT_CONST_LOG_BUILD}

    if [ "$CONFIG_WARNING" != "n" ];then
        exit 1
    fi
}
function yft_print_red(){
    echo -e "\033[01;31m${*}\033[0m"
}

function yft_print_blue() {
    echo -e "\033[01;34m${*}\033[0m"
}

function print_different(){
    yft_print_red "ERROR: ${1} is difference "
    yft_print_red "in file ${2%% *}:"
    yft_print_red  ${3}
    yft_print_red "in file ${2#* }:"
    yft_print_red  ${4}
    [ "$CONFIG_LOG" == "y" ] && echo -e "ERROR: ${1} is difference \nin file ${2%% *}:\n${3}\nin file ${2#* }:\n${4}" >> ${YFT_CONST_LOG_BUILD}

}
function dri_run(){
#    [ "$CONFIG_WARNING" != "n" ] && set -e
    local m_run_cmd="$*"
    yft_print_blue "$m_run_cmd"
    [ "$CONFIG_LOG" == "y" ] && echo "$m_run_cmd" >> ${YFT_CONST_LOG_BUILD}
    ${m_run_cmd}
}

function dri_ln(){
    if [ "" == "$1" ] || [ "" == "$2" ];then
        yft_print_errors "function dri_ln: Missing parameter"
        return
    fi
    local dists_base=`basename $2`
    local dists_dir=`dirname $2`
    local PATH_CURRENT="`pwd`"
    cd "$dists_dir"
    if [ "" == "$3" ];then
    ln -sf "${1/$dists_dir/.}" "$dists_base"
    local tmp_log="create link: $dists_base -> ${1/$CONFIG_DIR/.}" 
    else
    ln -sf "${1/$dists_dir/..}" "$3/$dists_base"
    local tmp_log="create link: ${1/$dists_dir/..} -> $3/$dists_base" 
    fi
    yft_print_blue "$tmp_log" 
    cd "$PATH_CURRENT"
    [ "$CONFIG_LOG" == "y" ] && echo "$tmp_log" >> "${PATH_CURRENT}/${YFT_CONST_LOG_BUILD}"
}

function dri_cp_mem_h(){
    
    [ -z "$FLASH_SIZE" ] && yft_print_blue "${MAIN} not found flash size"
    local FLASH_H_NAME=custom_MemoryDevice

#add bom flash name check on 13/09/2017 by bcy
    local tmp_mem_h_name=`ls dists/targets/$MAIN/$SUB/$mem_h_dists/ 2>/dev/null`
    if [ -n "$tmp_mem_h_name" ];then
        if [ "$tmp_mem_h_name" != "${FLASH_H_NAME}.h" ];then
             yft_print_errors "Error: $tmp_mem_h_name should be not exist!"
             return
        fi
    fi
#add share flash name check on 13/09/2017 by bcy
    local tmp_mem_h_name=`ls dists/targets/$MAIN/share/$mem_h_dists/ 2>/dev/null`
    if [ -n "$tmp_mem_h_name" ];then
        if [ "$tmp_mem_h_name" != "${FLASH_H_NAME}.h" ];then
             yft_print_errors "Error: $tmp_mem_h_name should be not exist!"
             return
        fi
    fi


    if [ -f "$mem_h_source/${FLASH_H_NAME}_${YFT_BOM_SUB}${FLASH_SIZE}.h" ];then
        local MEM_NAME_FILE="$mem_h_source/${FLASH_H_NAME}_${YFT_BOM_SUB}${FLASH_SIZE}.h"
    elif [ -f "$mem_h_source/${FLASH_H_NAME}_${YFT_BOM}${FLASH_SIZE}.h" ];then
        local MEM_NAME_FILE="$mem_h_source/${FLASH_H_NAME}_${YFT_BOM}${FLASH_SIZE}.h"
    elif [ -f "$mem_h_source/${FLASH_H_NAME}${FLASH_SIZE}_${YFT_MACH_TYPE}.h" ];then
        local MEM_NAME_FILE="$mem_h_source/${FLASH_H_NAME}${FLASH_SIZE}_${YFT_MACH_TYPE}.h"
    elif [ -f "$mem_h_source/${FLASH_H_NAME}${FLASH_SIZE}_${MTK_MACH_SUB_TYPE}.h" ];then
        local MEM_NAME_FILE="$mem_h_source/${FLASH_H_NAME}${FLASH_SIZE}_${MTK_MACH_SUB_TYPE}.h"
    elif [ -f "$mem_h_source/${FLASH_H_NAME}_${YFT_MACH_TYPE}${FLASH_SIZE}.h" ];then
        local MEM_NAME_FILE="$mem_h_source/${FLASH_H_NAME}_${YFT_MACH_TYPE}${FLASH_SIZE}.h"
    elif [ -f "$mem_h_source/${FLASH_H_NAME}_${YFT_MACH_TYPE}.h" ];then
        local MEM_NAME_FILE="$mem_h_source/${FLASH_H_NAME}_${YFT_MACH_TYPE}.h"
    else
        yft_print_errors "Not found $mem_h_source/${FLASH_H_NAME}${FLASH_SIZE}.h"
        return
    fi
    echo
    dri_run "cp -aL ${MEM_NAME_FILE} ${mem_h_dists}/${FLASH_H_NAME}.h"
}

function dri_xls_read_config(){
    source "${xls_source}/xls_configs"
    eval "MACH_TYPE_TMP=\$${YFT}"
    if [ "$MACH_TYPE_TMP" != "" ];then
       local MACH_TYPE_TMP_SOURCE=`echo $MACH_TYPE_TMP|cut -d : -f 1`
       local MACH_TYPE_TMP_DISTS=`echo $MACH_TYPE_TMP|cut -d : -f 2`
       if [ "$MACH_TYPE_TMP_SOURCE" == '' ] || [ "$MACH_TYPE_TMP_DISTS" == '' ];then
            yft_print_errors "Error:in file ${xls_source}/xls_configs: ${YFT}=$MACH_TYPE_TMP"
            return
       fi

       MACH_TYPE=$MACH_TYPE_TMP_SOURCE 
       XLS_MACH_TYPE_DISTS=$MACH_TYPE_TMP_DISTS
    fi
}

function dri_cp_xls(){

    local XLS_NAME=MemoryDeviceList
    local FLASH_SIZE_SUFFIX=`echo $FLASH_SIZE | awk 'match($0,"_[0-9]+g[0-9]+g([a-zA-Z]+)",a){print a[1]}'`
    [ "$FLASH_SIZE_SUFFIX" != "" ] && FLASH_SIZE_SUFFIX="_$FLASH_SIZE_SUFFIX"
    MACH_TYPE=`echo $YFT|cut -d '_' -f 1`
    MACH_TYPE=`echo "MT${MACH_TYPE:3}"|tr '[a-z]' '[A-Z]'`
    XLS_MACH_TYPE_DISTS=$MACH_TYPE
#vvvvvv    flash_configs 的处理  vvvvvv
    if [ -f "${xls_source}/xls_configs" ];then
        dri_xls_read_config
    fi 
 #   echo "type:$MACH_TYPE"
#vvvvvv    flash_configs 的处理  vvvvvv

    if [ -f "$xls_source/${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}_${YFT_BOM_SUB}.xls" ];then
        local FLASH_CONFIG_XLS_NAME=${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}_${YFT_BOM_SUB}.xls
    elif [ -f "$xls_source/${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}_${YFT_BOM}.xls" ];then
        local FLASH_CONFIG_XLS_NAME=${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}_${YFT_BOM}.xls
    elif [ -f "$xls_source/${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}.xls" ];then
        local FLASH_CONFIG_XLS_NAME=${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}.xls
    else
        yft_print_errors "Not found $xls_source/${XLS_NAME}_${MACH_TYPE}${FLASH_SIZE_SUFFIX}.xls"
        return
    fi
    echo
    dri_run "cp -aL ${xls_source}/${FLASH_CONFIG_XLS_NAME} ${xls_dists}/${XLS_NAME}_${XLS_MACH_TYPE_DISTS}.xls"
}

function dri_dws_read_config(){
    [ ! -f "${dws_source}/dws_configs" ] && \
        yft_print_errors "Not found ${dws_source}/dws_configs" && exit 1

    local config=`cat "${dws_source}/dws_configs" | grep -E "^[^#]+[ \"']${YFT}[ \"']"`
    [ -z "$config" ] && yft_print_errors "error:in file ${dws_source}/dws_configs: \"${YFT}\" is not found" && exit 1
    if [[ `echo "$config"|wc -l` > 1 ]];then
        yft_print_red "error:in file ${dws_source}/dws_configs: \"${YFT}\" is repeated definition:"
        cat "${dws_source}/dws_configs" | grep -nE "^[^#]+[ \"']${YFT}[ \"']" | grep -E --color=always "^[0-9]+:"
        yft_print_errors "Read ${dws_source}/dws_configs failed"
        exit 1
    fi
    DWS_SUFFIX=`echo $config | cut -d '=' -f 1`
    DWS_SUFFIX="_`echo $DWS_SUFFIX`"
    [ -z "${DWS_SUFFIX}" ] && yft_print_errors "In file ${dws_source}/dws_configs: syntax error" && exit 1
}

function dri_cp_dws(){
    local DWS_NAME=codegen
    echo
    export DWS_SUFFIX=''
    [ "${dws_read_config}" == "y" ] && dri_dws_read_config

    if [ -f "${dws_source}/${DWS_NAME}_${YFT_BOM_SUB}${DWS_SUFFIX}.dws" ];then
        local DWS_NAME_FILE=${DWS_NAME}_${YFT_BOM_SUB}${DWS_SUFFIX}.dws
    elif [ -f "${dws_source}/${DWS_NAME}_${YFT_BOM}${DWS_SUFFIX}.dws" ];then
        local DWS_NAME_FILE=${DWS_NAME}_${YFT_BOM}${DWS_SUFFIX}.dws
    else
        yft_print_errors "Not found ${dws_source}/${DWS_NAME}_${YFT_BOM}${DWS_SUFFIX}.dws"
        return
    fi

    for each in $dws_dists;do
        dri_run "cp -aL ${dws_source}/${DWS_NAME_FILE} ${each}/${DWS_NAME}.dws"
    done
}

function dri_cp_dts(){
    echo

    local BOARD_NAME_FILE=''
    local DIS_DIS_INCLUDE_PATH="yft_include"
    for each in $BOARD_LIST;do
        if [ -f "${dts_source}/${YFT_BOM_SUB}_${each}" ];then
            BOARD_NAME_FILE=${YFT_BOM_SUB}_${each}
        elif [ -f "${dts_source}/${YFT_BOM}_${each}" ];then
            BOARD_NAME_FILE=${YFT_BOM}_${each}
        else
            BOARD_NAME_FILE=''
            yft_print_errors "Not found ${dts_source}/${YFT_BOM}_${each}"
        fi
        if [ ! -z "$BOARD_NAME_FILE" ];then
            dri_ln "${dts_source}/${BOARD_NAME_FILE}" "${dts_dists}/${each}" "${DIS_DIS_INCLUDE_PATH}"
          #  dri_run "cp -aL ${dts_source}/${BOARD_NAME_FILE} ${dts_dists}/${DIS_DIS_INCLUDE_PATH}/${each}"

        fi 
    done
}

function dri_cp_imgsensorh(){
    echo

if [ "$MTK_MACH_TYPE" == "mt6761" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6762" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6765" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6739" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6769" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6771" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6779" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6580" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6757" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6873" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6853" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6833" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6877" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6789" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6885" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6893" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
elif [ "$MTK_MACH_TYPE" == "mt6891" ];then
	echo "$MTK_MACH_TYPE kd_imgsensor.h no need for links at the moment"
else
        rm device/mediatek/common/kernel-headers/kd_imgsensor.h
    dri_ln "../../../../${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h" "device/mediatek/common/kernel-headers/kd_imgsensor.h"
fi
}

function get_mk_list(){
    local mk=$1 mod=$2
    local list=`cat ${mk} | grep "^${mod}"|cut -d '=' -f 2|sed "s/\"\|\'//g"|tr ' ' '\n'|sort`
    echo ${list//\"/}|tr ' ' '\n'|sort
}

function yft_is_yft(){
local YFT_CONST_DIR_PROJECT_FLAG=`grep "YFT_CONST_DIR_PROJECT_FLAG=" -m1 -r dists/scripts/main|cut -d '=' -f2|sed "s/['\"]//g"`

[ ! -d "${DISTS_PRJT_DIR}/${YFT_CONST_DIR_PROJECT_FLAG}" ] && yft_print_red "Not found ${DISTS_PRJT_DIR}/${YFT_CONST_DIR_PROJECT_FLAG}" 1>&2 && return 1

export YFT_HAL_MK=$(find ${DISTS_PRJT_DIR}/${YFT_CONST_DIR_PROJECT_FLAG} -name ProjectConfig.mk -print)
if [ "1" -ne "`echo "${YFT_HAL_MK}"| wc -l`" ]; then
    yft_print_red "error: There are NOT ONLY one project.mk in ${DISTS_PRJT_DIR}!"
    return 1
fi
# if [ -z "$YFT" ];then
    YFT=$(echo ${YFT_HAL_MK} | sed "s|.*${YFT_CONST_DIR_PROJECT_FLAG}/||g" | sed 's|/.*||g')
# fi

        echo "yft_is_yft ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        echo "yft_is_yft YFT_MACH_TYPE=$YFT_MACH_TYPE"
        echo "yft_is_yft MTK_MACH_TYPE=$MTK_MACH_TYPE"
        echo "yft_is_yft YFT_HAL_CAM_DIR=$YFT_HAL_CAM_DIR"
        echo "yft_is_yft YFT_HAL_LENS_DIR=$YFT_HAL_LENS_DIR"
        echo "yft_is_yft ARM_DIR=$ARM_DIR"
        echo "yft_is_yft KERNEL_DIR=$KERNEL_DIR"
        echo "yft_is_yft ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
if [ "$MTK_MACH_TYPE" == "mt6789" ];then
	export YFT_LK_MK=${DISTS_PRJT_DIR}/vendor/mediatek/proprietary/bootable/bootloader/lk2/project/yft_bootable_config.mk
	export YFT_LK_LCM_DIR=vendor/mediatek/proprietary/bootable/bootloader/lk2/dev/lcm
else
	export YFT_LK_MK=${DISTS_PRJT_DIR}/vendor/mediatek/proprietary/bootable/bootloader/lk/project/yft_bootable_config.mk
	export YFT_LK_LCM_DIR=vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm
fi

if [ "$YFT_37T_MACH_TYPE" == "true" ];then
	export YFT_KERNEL_CAM_DIR=$KERNEL_DIR/drivers/misc/mediatek/imgsensor/src/mt6735
elif [ "$MTK_MACH_TYPE" == "mt6762" ];then
	export YFT_KERNEL_CAM_DIR=$KERNEL_DIR/drivers/misc/mediatek/imgsensor/src/mt6765
elif [ "$MTK_MACH_TYPE" == "mt6765" ];then
	export YFT_KERNEL_CAM_DIR=$KERNEL_DIR/drivers/misc/mediatek/imgsensor/src/mt6765
else
	export YFT_KERNEL_CAM_DIR=$KERNEL_DIR/drivers/misc/mediatek/imgsensor/src/$MTK_MACH_TYPE
fi
	export YFT_KERNEL_LCM_DIR=$KERNEL_DIR/drivers/misc/mediatek/lcm

if [ "$MTK_MACH_TYPE" == "mt6789" ];then
export YFT_KERNEL_MK_USR=${DISTS_PRJT_DIR}/$KERNEL_DIR/arch/${ARM_DIR}/configs/mgk_64_k510_defconfig
else
export YFT_KERNEL_MK_DEBUG=${DISTS_PRJT_DIR}/$KERNEL_DIR/arch/${ARM_DIR}/configs/${YFT}_debug_defconfig
export YFT_KERNEL_MK_USR=${DISTS_PRJT_DIR}/$KERNEL_DIR/arch/${ARM_DIR}/configs/${YFT}_defconfig
fi

if [ -f "${DISTS_PRJT_DIR}/$KERNEL_DIR/arch/${ARM_DIR}/configs/yft_kernel_config" ];then
    export YFT_KERNEL_MK_DEBUG=${DISTS_PRJT_DIR}/$KERNEL_DIR/arch/${ARM_DIR}/configs/yft_kernel_config
if [ "$MTK_MACH_TYPE" == "mt6789" ];then
    local lk_lcmlist=`get_mk_list ${YFT_LK_MK} MTK_LCM_LIST_SUPPORT`
    export k_lcmlist_eng=`get_mk_list ${YFT_LK_MK} MTK_LCM_LIST_SUPPORT`
else
    local lk_lcmlist=`get_mk_list ${YFT_LK_MK} CUSTOM_LK_LCM`
    export k_lcmlist_eng=`get_mk_list ${YFT_LK_MK} CUSTOM_LK_LCM`
fi
    export k_camlist_eng=`get_mk_list ${YFT_KERNEL_MK_DEBUG} CONFIG_CUSTOM_KERNEL_IMGSENSOR`

    echo bob.chen-checkconfig41 $k_lcmlist_eng
    echo bob.chen-checkconfig42 $k_camlist_eng
    echo bob.chen-checkconfig43 ${YFT_KERNEL_MK_DEBUG}


    [[ "$lk_lcmlist" != "$k_lcmlist_eng" ]] && print_different LCM "${YFT_LK_MK} ${YFT_KERNEL_MK_DEBUG}" "$lk_lcmlist" "$k_lcmlist_eng" && return 1
elif [ -f "$YFT_KERNEL_MK_DEBUG" ];then

if [ "$MTK_MACH_TYPE" == "mt6789" ];then
    local lk_lcmlist=`get_mk_list ${YFT_LK_MK} MTK_LCM_LIST_SUPPORT`
    export k_lcmlist_eng=`get_mk_list ${YFT_LK_MK} MTK_LCM_LIST_SUPPORT`
else
    local lk_lcmlist=`get_mk_list ${YFT_LK_MK} CUSTOM_LK_LCM`
    export k_lcmlist_eng=`get_mk_list ${YFT_LK_MK} CUSTOM_LK_LCM`
fi
    local k_lcmlist_usr=`get_mk_list ${YFT_KERNEL_MK_USR} CONFIG_CUSTOM_KERNEL_LCM`
    export k_camlist_eng=`get_mk_list ${YFT_KERNEL_MK_DEBUG} CONFIG_CUSTOM_KERNEL_IMGSENSOR`
    local k_camlist_usr=`get_mk_list ${YFT_KERNEL_MK_USR} CONFIG_CUSTOM_KERNEL_IMGSENSOR`

    echo bob.chen-checkconfig3 $k_camlist_eng

    [[ "$k_lcmlist_eng" != "$k_lcmlist_usr" ]] && print_different LCM "${YFT_KERNEL_MK_DEBUG} ${YFT_KERNEL_MK_USR}" "$k_lcmlist_eng" "$k_lcmlist_usr" && return 1
    [[ "$k_camlist_eng" != "$k_camlist_usr" ]] && print_different CAM "${YFT_KERNEL_MK_DEBUG} ${YFT_KERNEL_MK_USR}"  "$k_camlist_eng" "$k_camlist_usr" && return 1
    [[ "$lk_lcmlist" != "$k_lcmlist_eng" ]] && print_different LCM "${YFT_LK_MK} ${YFT_KERNEL_MK_DEBUG}" "$lk_lcmlist" "$k_lcmlist_eng" && return 1
else
    yft_print_errors "ERROR: ${YFT_KERNEL_MK_DEBUG} is not found !" ; return 1
fi
    export p_lenslist=`get_mk_list ${YFT_HAL_MK} CUSTOM_HAL_LENS`
    return 0
}

function mmi_ln_to_backup(){
local BACKUP_DIR=vendor/yft/drivers/backup
local prefix="../../../../.."
local each=

[ ! -d "$BACKUP_DIR/lk" ] && mkdir -p $BACKUP_DIR/lk
[ ! -d "$BACKUP_DIR/kernel" ] && mkdir -p $BACKUP_DIR/kernel
[ ! -d "$BACKUP_DIR/hal" ] && mkdir -p $BACKUP_DIR/hal

for each in $k_lcmlist_eng;do
if [ -d "$YFT_LK_LCM_DIR/$each" ];then
	dri_ln "$prefix/$YFT_LK_LCM_DIR/$each" $BACKUP_DIR/lk/$each
fi
dri_ln "$prefix/$YFT_KERNEL_LCM_DIR/$each" $BACKUP_DIR/kernel/$each
done
for each in $k_camlist_eng;do
dri_ln "$prefix/$YFT_KERNEL_CAM_DIR/$each" $BACKUP_DIR/kernel/$each
dri_ln "$prefix/$YFT_HAL_CAM_DIR/$each" $BACKUP_DIR/hal/$each
done
for each in $p_lenslist;do
if [ -d $YFT_HAL_LENS_DIR/$each ];then
	dri_ln "$prefix/$YFT_HAL_LENS_DIR/$each" $BACKUP_DIR/hal/$each
else
	local lens_name
	if [ "$each" == "dummy_lens" ];then
		lens_name="lens_para_Dummy.cpp"
	else
		lens_name=`cat $YFT_HAL_LENS_DIR/Android.mk | grep -i $each | cut -d '=' -f 2`
		lens_name=${lens_name// /}
	fi
	dri_ln "$prefix/$YFT_HAL_LENS_DIR/$lens_name" $BACKUP_DIR/hal/$lens_name
fi
done
}


function dri_check_dists_config(){
    # yft_is_yft ;exit
    local len=0;  #行数
    local lcmlist=''
    local camlist=''
    local lenslist=""
    local tmp=""
    local last_flag=">:"
    local file=dists/targets/${MAIN}/dists_info.config
    local rf_list=
    if [ ! -f "${file}" ];then
        yft_print_errors "ERROR: Not found ${file}" ; return 1
    fi

    local str="`cat ${file} | grep -nE "^>:[[:space:]]*${SUB}[[:space:]]*\$"`"
    local tmp=`echo "$str"|wc -l`
    # echo -e "tmp : $tmp\n str:----$str----"
    if [[ -z "$str" ]]; then
        yft_print_errors "ERROR: Not found ${SUB} in file ${file}" ; return 1
    elif [[ $tmp > 1 ]];then
        yft_print_errors "ERROR: ${SUB} is Duplication in file ${file}:\n$str" ; return 1
    fi
    if [ "$dists_check_config" == "y" ];then
        yft_is_yft
        [ $? != 0 ] && yft_print_errors "ERROR: fuck16. check ${file} failed" && return 1
    fi
    len=`echo $str|cut -d ':' -f 1`
    [ "$CONFIG_LOG" == "y" ] && echo 
    while read string;do
        # 合并多余空格
        ((len++))
        str=`echo $string`
        if [[ "${str}" == "" || "${str:0:1}" == "#" ]];then
            [ "${str}" == "" ] && last_flag=""
            continue
        elif [[ "${str:0:4}" == "LCM:" ]]; then
            last_flag="${str:0:4}"
            tmp=${str:4}
            [[ `echo $tmp|wc -w` != 2 ]] && yft_print_errors "syntax error: at line ${len} in file ${file}:\n$string " && return 1
            lcmlist="${lcmlist} $(echo $tmp|cut -d ' ' -f 2)"
            [ "$CONFIG_LOG" == "y" ] && echo "$string" | tee -a  "$YFT_CONST_LOG_BUILD"
        elif [[ "${str:0:4}" == "CAM:" ]]; then
            last_flag="${str:0:4}"
            tmp=${str:4}
            str=`echo $tmp|wc -w`
            if [[ "$str" ==  2 || "$str" == 3 ]];then
                camlist="${camlist} $(echo $tmp|cut -d ' ' -f 2)"
                if [ $str == 3 ];then
                    # 是否开启检查...
                    if [ "$dists_check_config" == "y" ];then
                        lens="$(echo $tmp|cut -d ' ' -f 3)"
                        if [ -z "$(echo "$p_lenslist"|grep -w "$lens")" ];then
                            yft_print_errors "ERROR:lens '${lens}' is not config in file ${YFT_HAL_MK} (CUSTOM_HAL_LENS)\nit's in ${file}:\n${len}:$string"
                            exit 1
                        fi
                    fi
                fi
            [ "$CONFIG_LOG" == "y" ] && echo "$string" | tee -a  "$YFT_CONST_LOG_BUILD"
            else
                yft_print_errors "syntax error: at line ${len} in file ${file}:\n$string "; return 1
            fi
        elif [[ "${str:0:3}" == "RF:" ]]; then
            last_flag="${str:0:3}"
            tmp=${str:3}
            if [ ! -z "$rf_list" ];then
                yft_print_errors "ERROR: RF is not only one in file ${file}"
            fi
            str=`echo $tmp|wc -w`
            if [[ "$str" != 1 ]];then
                 yft_print_errors "ERROR: RF is not only one in file ${file}"
            fi
            rf_list=`echo ${tmp}`
        elif [[ "${str:0:2}" == ">:" ]];then
            if [ "$last_flag" == ">:" ];then
                continue
            else
                break
            fi
        else
            yft_print_errors "syntax error: at line ${len} in file ${file}\n${len}:$string " ; return 1
        fi
    done <<< "`tail -n +$((len+1)) $file`"

    if [ "$dists_check_config" == "y" ];then
        [ -z "$lcmlist" ] && yft_print_errors "ERROR: LCM: is not found in file ${file}" && return 1
        lcmlist=`echo ${lcmlist//\"/}|tr ' ' '\n'|sort`
        tmp=`echo "$lcmlist"|uniq -d`
        [ ! -z "$tmp" ] && yft_print_errors "ERROR: LCM: is duplication in file ${file}" && return 1
        [ -z "$camlist" ] && yft_print_errors "ERROR: CAM:'${tmp}' is not found in file ${file}" && return 1
        camlist=`echo ${camlist//\"/}|tr ' ' '\n'|sort`
        tmp=`echo "$camlist"|uniq -d`
        [ ! -z "$tmp" ] && yft_print_errors "ERROR: CAM:'${tmp}' is duplication in file ${file}" && return 1

        [[ "$lcmlist" != "$k_lcmlist_eng" ]] && print_different LCM "${file} ${YFT_KERNEL_MK_DEBUG}" "$lcmlist" "$k_lcmlist_eng" && exit 1
    echo bob.chen-checkconfig1 $camlist
    echo bob.chen-checkconfig2 $k_camlist_eng
        [[ "$camlist" != "$k_camlist_eng" ]] && print_different CAM "${file} ${YFT_KERNEL_MK_DEBUG}" "$camlist" "$k_camlist_eng" && exit 1
    fi
    if [ -z "${rf_list}" ];then
        yft_print_errors "ERROR:not found 'RF:' in file ${file} "
    fi
    [ "$CONFIG_LOG" == "y" ] && echo "RF_MODE=${rf_list}" | tee -a "$YFT_CONST_LOG_BUILD"
}


function dri_check_dists_print(){
    yft_is_yft
    [ $? != 0 ] && return 1
    echo -e "\n>: ${SUB}"
    echo "$k_lcmlist_eng" |awk '{print "LCM: -                  " $0}'
    echo "$k_camlist_eng" |awk '{print "CAM: -                  " $0}'
}

function dri_check_dists_print_all(){
    sublist=`ls -1 dists/targets/${MAIN}|grep -iEv "share|yft_custom|dists_info\.config"`
    [ -z "$sublist" ] && yft_print_red "ERROR: ${MAIN_PATH} is not found project" && return
    echo "# dists/targets/${MAIN}"
    for SUB in $sublist;do
        [ ! -d "dists/targets/${MAIN}/$SUB" ] && continue
        DISTS_PRJT_DIR=dists/targets/${MAIN}/${SUB}
        dri_check_dists_print
    done
}

function dri_change_dists(){
    local MAINALL=`ls -1 dists/targets|grep -iEv "share|yft_custom|dists_info\.config"`
    local max_len=`echo "$MAINALL"|wc -L`
    MAINALL=($MAINALL)
    local i=0
    local bool=0
    for each in ${MAINALL[@]};do
        ((i++))
        if [ $bool == 1 ];then
            bool=0
            printf "  %2s: %s\n" $i $each
        else
            bool=1
            printf "  %2s: %-${max_len}s" $i $each
        fi
    done
    echo
    echo -n ">: "
    read n
    [ -z "`echo "$n" | grep -E '^[0-9]+$'`" ] && yft_print_errors "Input error"
    (( $n > $i )) && yft_print_errors "Input error"
    (( $n <= 0 )) && yft_print_errors "Input error"
    ((n--))
    MAIN=${MAINALL[$n]}
    dri_check_dists_print_all
}

function dri_check_dists(){
    #"$dists_check_config" == "y" 
    case "$1" in
        "" ) dri_check_dists_config ;;
        "p"|"--p" )  dri_check_dists_print ;;
        "all"|"--all" ) dri_check_dists_print_all ;;
        "ch"|"--ch" ) dri_change_dists ;;
        * ) echo "Without this parameter: $1" ;;
    esac
}

function yft_parse_var(){
    echo "yft_parse_var ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
    echo "yft_parse_var YFT: ${YFT}"
    part2=${YFT%%_*}
    echo "yft_parse_var part2: ${part2}"
    part2=${part2:1:4}
    echo "yft_parse_var--- part2: ${part2}"
    if [[ "${part2}" == 63v1 ]];then
            export MTK_MACH_TYPE=mt6763
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor/ver2
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 62v1 ]];then
            export MTK_MACH_TYPE=mt6762
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6765/hal/imgsensor/ver1
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/mt6765/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 65v1 ]];then
            export MTK_MACH_TYPE=mt6765
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6765/hal/imgsensor/ver1
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/mt6765/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 69v1 ]];then
            export MTK_MACH_TYPE=mt6769
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6768/hal/imgsensor/ver1
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/mt6768/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 39tv ]];then
            export MTK_MACH_TYPE=mt6739
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 39tv ]];then
            export MTK_MACH_TYPE=mt6739
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 61v1 ]];then
            export MTK_MACH_TYPE=mt6761
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            elif [ "$part3" == "3" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi

    elif [[ "${part2}" == 37mv ]];then
            export MTK_MACH_TYPE=mt6737t
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/D1/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "-sbsb-------------yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
	    export YFT_37T_MACH_TYPE=true
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi

    elif [[ "${part2}" == 71v1 ]];then
            export MTK_MACH_TYPE=mt6771
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi

    elif [[ "${part2}" == 79v1 ]];then
            export MTK_MACH_TYPE=mt6779
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 6873 ]];then
            export MTK_MACH_TYPE=mt6873
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 6853 ]];then
            export MTK_MACH_TYPE=mt6853
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 6833 ]];then
            export MTK_MACH_TYPE=mt6853
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
	    export MTK_MACH_TYPE=mt6833	#bob.chen reset it again. only cam use 6853.
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 6877 ]];then
            export MTK_MACH_TYPE=mt6853
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
	    export MTK_MACH_TYPE=mt6877	#bob.chen reset it again. only cam use 6853.
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 6893 ]];then
            export MTK_MACH_TYPE=mt6885
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
	    export MTK_MACH_TYPE=mt6893	#bob.chen reset it again. only cam use 6893.
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 6891 ]];then
            export MTK_MACH_TYPE=mt6885
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
	    export MTK_MACH_TYPE=mt6891	#bob.chen reset it again. only cam use 6891.
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
     elif [[ "${part2}" == 80h || "${part2}" == 80 ]];then
            export MTK_MACH_TYPE=mt6580
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    elif [[ "${part2}" == 57p ]];then
            export MTK_MACH_TYPE=mt6757
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6757/hal/imgsensor/ver2
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/mt6757/hal/lens/ver2
    # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 3`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red mt6757不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
#6753 / 6735 / 6735m
     elif [[ "${part2}" == 6789 ]];then
            export MTK_MACH_TYPE=mt6789
            export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/imgsensor
            export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/$MTK_MACH_TYPE/hal/lens
            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
		elif [ "$part3" == "b" ];then
            	export ARM_DIR=arm
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    else
	if [[ "${part2}" == 37m ]];then
		export MTK_MACH_SUB_TYPE=MT6737
		export MTK_MACH_SUB2_TYPE=MT6735
		echo "yft-drv this is 37m base. " $MTK_MACH_SUB_TYPE $MTK_MACH_SUB2_TYPE
	fi
        export MTK_MACH_TYPE
        case "${part2}" in
            "37m")
                local HAL_DIR=D2 
                MTK_MACH_TYPE=mt6735m
                ;;
            "37t")
                local HAL_DIR=D1
                MTK_MACH_TYPE=mt6735
                ;;
            "53v")
                local HAL_DIR=D1
                MTK_MACH_TYPE=mt6753
                ;;
            *)  yft_print_red "不能识别的项目2\"${YFT}\""
                #return 1 
                ;;
        esac
        export YFT_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/${HAL_DIR}/imgsensor
        export YFT_HAL_LENS_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/${HAL_DIR}/lens

            # 区分cpu是32还是64位
            part3=`echo ${YFT}|cut -d '_' -f 2`
	    echo "yft_parse_var part3: ${part3}";
            part3=${part3:0:1}
	    echo "yft_parse_var part3: ${part3}";
            if [ "$part3" == "6" ];then
                export ARM_DIR=arm64
            elif [ "$part3" == "4" ];then
                export ARM_DIR=arm64
            else
		export ARM_DIR=arm
                yft_print_red $MTK_MACH_TYPE不能识别的项目64bit as 32bit project=\"${YFT}\"
                #return 1
            fi
    fi
        
	# echo "yft 111: $YFT";
	part4=`echo ${YFT}|cut -d '_' -f 3`
	echo "yft_parse_var part4: $part4";
	if [ "$part4" == "k419" ];then
		export KERNEL_DIR=kernel-4.19	
	elif [[ $MTK_MACH_TYPE == mt6739 || $MTK_MACH_TYPE == mt6771 || $MTK_MACH_TYPE == mt6873  || $MTK_MACH_TYPE == mt6853 || $MTK_MACH_TYPE == mt6877 || $MTK_MACH_TYPE == mt6833 ]];then
        export KERNEL_DIR=kernel-4.14
	elif [[ $MTK_MACH_TYPE == mt6763 || $MTK_MACH_TYPE == mt6761 || $MTK_MACH_TYPE == mt6762 || $MTK_MACH_TYPE == mt6765 || $MTK_MACH_TYPE == mt6779 || $MTK_MACH_TYPE == mt6757  || $MTK_MACH_TYPE == mt6769 || $MTK_MACH_TYPE == mt6893 || $MTK_MACH_TYPE == mt6891 ]];then
		export KERNEL_DIR=kernel-4.19		
	elif [[ $MTK_MACH_TYPE == mt6580 ]];then
            export KERNEL_DIR=kernel-4.19-lc		
	elif [[ $MTK_MACH_TYPE == mt6789 ]];then
            export KERNEL_DIR=kernel-5.10
        else
            export KERNEL_DIR=kernel-3.18
        fi
	export YFT_MACH_TYPE=MT${MTK_MACH_TYPE:2}

        echo "yft_parse_var --------------------------------------------------------------------------"
        echo "yft_parse_var YFT_MACH_TYPE=$YFT_MACH_TYPE"
        echo "yft_parse_var MTK_MACH_TYPE=$MTK_MACH_TYPE"
        echo "yft_parse_var YFT_HAL_CAM_DIR=$YFT_HAL_CAM_DIR"
        echo "yft_parse_var YFT_HAL_LENS_DIR=$YFT_HAL_LENS_DIR"
        echo "yft_parse_var ARM_DIR=$ARM_DIR"
        echo "yft_parse_var KERNEL_DIR=$KERNEL_DIR"
        echo "yft_parse_var ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
}

function yft_generated_var(){
        readonly YFT_CONST_GENERATED="yft_generated_var.ini"
        if [ -e "${YFT_CONST_GENERATED}" ]; then
        	rm ${YFT_CONST_GENERATED}
        fi

        yft_parse_var

        echo "yft_generated_var +++++++++++++------yft_generated_var.ini------++++++++++++++++++++++++"
        echo "YFT_MACH_TYPE=$YFT_MACH_TYPE" | tee -a ${YFT_CONST_GENERATED}
        echo "MTK_MACH_TYPE=$MTK_MACH_TYPE" | tee -a ${YFT_CONST_GENERATED}
        echo "YFT_HAL_CAM_DIR=$YFT_HAL_CAM_DIR" | tee -a ${YFT_CONST_GENERATED}
        echo "YFT_HAL_LENS_DIR=$YFT_HAL_LENS_DIR" | tee -a ${YFT_CONST_GENERATED}
        echo "ARM_DIR=$ARM_DIR" | tee -a ${YFT_CONST_GENERATED}
        echo "KERNEL_DIR=$KERNEL_DIR" | tee -a ${YFT_CONST_GENERATED}
        echo "yft_generated_var ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

}

function drivers_main(){
    readonly YFT_CONST_LOG_BUILD="dists.log"
 
    local P_ONE=$1  #yft
    local P_TWO=$2  #main

    if [ "$3" == "" ];then
        CONFIG_DIR=vendor/yft/drivers
        if [ -f "${CONFIG_DIR}/configs" ];then
            :
        elif [[ -f "./configs" && -f "../../../repo" ]]; then
            cd ../../..
        else
            yft_print_errors "PATH ERROR"
            exit 1
        fi
        [ "$1" == "" ] && P_ONE="all"
    else
        CONFIG_DIR="$3"
    fi

    if [ "$1" == "dists" ] && [ "$2" == "ch" ];then
        source ${CONFIG_DIR}/configs
        dri_change_dists
        exit
    fi

    [ ! -f "${YFT_CONST_LOG_BUILD}" ] && yft_print_errors "Not found ${YFT_CONST_LOG_BUILD}" && return
    local YFT_CONST_LOG_INFO=`cat ${YFT_CONST_LOG_BUILD}`

    export YFT=`echo "${YFT_CONST_LOG_INFO}" | grep ENV_YFT_BUILD_PLATFORM_NAME | cut -d '=' -f 2`
    [ -z "$YFT" ] && yft_print_errors "Not found ENV_YFT_BUILD_PLATFORM_NAME" && return
    export MAIN=`echo "${YFT_CONST_LOG_INFO}" | grep ENV_YFT_BUILD_PROJECT_DIR_PARENT | cut -d '=' -f 2`
    [ -z "$MAIN" ] && yft_print_errors "Not found ENV_YFT_BUILD_PROJECT_DIR_PARENT" && return
    export SUB=`echo "${YFT_CONST_LOG_INFO}" | grep ENV_YFT_BUILD_PROJECT_NAME | cut -d '=' -f 2`
    [ -z "$SUB" ] && yft_print_errors "Not found ENV_YFT_BUILD_PROJECT_NAME" && return
    unset YFT_CONST_LOG_INFO

    yft_generated_var
    source ${CONFIG_DIR}/configs

    typeset -l YFT_BOM=`echo ${MAIN}|cut -d '_' -f 1`
    typeset -l YFT_BOM_SUB=`echo ${SUB}| awk -F'[-_]' '{print $1}'`
    
    #yft-drv modify for cobom flash begin 20180224
    local Is_combo=`echo ${MAIN} | grep -Eo '[\_]cobom[\_]'`
    echo "is_combo=${Is_combo}"
    if [ -z "$Is_combo" ] ;
    then   
    FLASH_SIZE=`echo ${MAIN} | tail -c 3 | tr a-z A-Z`
    else
    FLASH_SIZE=`echo ${MAIN} | grep -Eo '_[0-9]{1,4}g[0-9]{1,3}g_[0-9]{1,4}g[0-9]{1,3}g[a-zA-Z]*'`
    fi
    #yft-drv modify for cobom flash end 20180224


    export DISTS_PRJT_DIR=dists/targets/${MAIN}/${SUB}

    case "$P_ONE" in
        "$YFT"|"all")
            [ "$P_TWO" == "$MAIN" ] && CONFIG_LOG='y' #写入日志 dists.log
            dri_cp_xls
            dri_cp_mem_h
            dri_cp_dws
            [ "$dts_cp_config" == "y" ] && dri_cp_dts
			dri_cp_imgsensorh
            dri_check_dists_config
            mmi_ln_to_backup
            ;;
        "h"|"--h") dri_cp_mem_h ;;
        "xls"|"--xls") dri_cp_xls ;;
        "dws"|"--dws") dri_cp_dws ;;
        "help"|"-h"|"--help") dri_help ;;
        "dists"|"--dists") dri_check_dists ${@#$1} ;;
        *) 
            # if [ "$P_ONE" == "--dists" ] || [ "$P_ONE" == "dists" ];then
            #     if [ "$dists_check_config" == "y" ] ;then
            #         dri_check_dists ${@#$1}
            #     else
            #         yft_print_errors "if you want to used this parameter 'dists',please open dists_check_config=y in ${CONFIG_DIR}/configs"
            #     fi
            #     return
            if [ "$P_ONE" == "--dts" ] || [ "$P_ONE" == "dts" ];then
                if  [ "$dts_cp_config" == "y" ];then
                    dri_cp_dts ; return
                else
                    yft_print_errors "if you want to used this parameter 'dts',please open dts_cp_config=y in ${CONFIG_DIR}/configs"
                fi
                return
            fi
            yft_print_errors "Without this parameter: $P_ONE"
            exit 1
            ;;
    esac
    echo
}

drivers_main $@
