#!/bin/bash
set -e

Action=$1

LIBDIR=/usr/lib/x86_64-linux-gnu/fantgpu-fh2m
BINARYDIR=/opt/fantgpu/usr/local/bin/

LDCONF=/etc/ld.so.conf.d/0-fantgpu.conf

VENDER_ID="1ec8"
ISFANT=`lspci -d ${VENDER_ID}:* -n |wc -l`

XORG_FILE=/usr/bin/Xorg



function add_ldconf(){
	local dir=$(echo $@ |awk -F',' '{print $2}')
	echo " " > ${LDCONF}
	for dir_tmp in ${dir}
	do
		if [ "x${dir_tmp}" != "x" ] && [ -d ${dir_tmp} ]; then
			LIBDIR=${dir_tmp}
		fi
		echo ${LIBDIR} >> ${LDCONF}
	done
}

#clean /etc/ld.so.conf.d
function remove_ldconf() {
	if [ -f ${LDCONF} ];then
		rm -r ${LDCONF}
	fi
}

function add_binary(){
	local dir=$(echo $@|awk -F',' '{print $3}')
	if [ "x${dir}" != "x" ] && [ -d ${dir} ]; then
		BINARYDIR=${dir}
	fi
	if [ -d ${BINARYDIR} ]; then
		for binary in $(find ${BINARYDIR} -type f -executable)
		do
			usr_local_bin=$(echo ${binary} |sed 's!/opt/fantgpu[^/]*!!')
			ln -sf ${binary} ${usr_local_bin} || true
		done
	fi
}

function remove_binary(){
	for dir in $(cat /etc/.fantgpu.cfg|grep -i "^${VENDER_ID}"|awk -F',' '{print $3}') ${BINARYDIR}
	do
		if [ -d ${dir} ]; then
			for binary in $(find ${dir} -type f -executable)
			do
				usr_local_bin=$(echo ${binary} |sed 's!/opt/fantgpu[^/]*!!')
				if [ -L ${usr_local_bin} ] && [ $(ls -ld ${usr_local_bin}|awk '{print $NF}' |grep -c fantgpu) != 0 ]; then
					rm -rf ${usr_local_bin} || true
				fi
			done
		fi
	done
}

function add_dri_link(){
	local args=$(echo $@|awk -F',' '{print $4}')
	local dir=$(echo ${args} |awk '{print $1}')
	local file=$(echo ${args} |awk '{print $2}')
	local link=$(echo ${args} |awk '{print $3}')
	if [ "x${dir}" != "x" ] && [ -d ${dir} ] && [ -f ${dir}/${file} ]; then
		pushd ${dir}
		ln -sf ${file} ${link} || true
		popd
	fi
}

function remove_dri_link(){
	while read dir
	do
		file=$(echo ${dir}|awk '{print $1}')/$(echo ${dir}|awk '{print $3}')
		if [ -L $file ]; then
			rm -rf $file || true
		fi
	done<<<$(cat /etc/.fantgpu.cfg|grep -i "^${VENDER_ID}"|awk -F',' '{print $4}')
}

function update_ldconf() {
	if [ x${ISFANT} != "x0" ]; then
		device=$(lspci -n |awk '{print $3}' |grep -i "${VENDER_ID}"|head -n 1)
		if [ -f /etc/.fantgpu.cfg ]; then
			args=$(cat /etc/.fantgpu.cfg|grep -i "^${device}"|head -n 1)
		fi
		remove_binary
		add_binary ${args}
		add_ldconf ${args}
		add_dri_link ${args}
	else
		remove_binary
		remove_ldconf
		remove_dri_link
	fi
	ldconfig
}


case $Action in
	update)
		update_ldconf
		;;
	remove)
		remove_binary
		remove_ldconf
		remove_dri_link
		;;
	*)
		exit 0
		;;
esac

exit 0
