#!/usr/bin/sh
# remove rpath specified

rpathSuffix=(
	"/home/abuild/rpmbuild/BUILD",
	"/home/lkp/rpmbuild/BUILD"
)

rpath=(
	"/usr/lib64",
	"/lib64",
	"/usr/lib",
	"/lib",
	"/usr/lib/../lib64"
)

buildroot=$1

function rpathChange()
{
	localSrcPath=$1
	localDstPath=""

	rpathArr=(`echo $localSrcPath | tr ':' ' '`)

	for path in ${rpathArr[*]}
	do
		localflag=0
		for suffix in ${rpathSuffix[*]}
		do
			if echo "$path" | grep $suffix &> /dev/null; then
				localflag=1
				break
			fi
		done

		# Is the suffix path, delete
		if [ $localflag -eq 1 ]; then
			continue;
		fi

		#Is the standard path, delete
		if echo "${rpath[@]}" | grep -w $path &> /dev/null; then
			continue
		fi

		if [ x"$localDstPath" == x"" ]; then
			localDstPath=$path
		else
			localDstPath=$localDstPath:$path
		fi
	done

	echo $localDstPath
}

function removeRpathOrRunpath()
{
	localfile=$1

	rpathInfo=$(chrpath -l $localfile | grep "RPATH=")
	runpathInfo=$(chrpath -l $localfile | grep "RUNPATH=")

	currPath=""
	realPath=""
	needCh=0
	if [ x"$rpathInfo" != x"" ]; then
		needCh=1
		currPath=$(echo $rpathInfo | awk -F "RPATH=" '{print $2}')
		realPath=$(rpathChange $currPath)
	fi

	if [ x"$runpathInfo" != x"" ]; then
		needCh=1
                currPath=$(echo $runpathInfo | awk -F "RUNPATH=" '{print $2}')
                realPath=$(rpathChange $currPath)
	fi

	if [ $needCh -eq 0 ]; then
		return 0
	fi

	if [ x"$realPath" == x"" ]; then
		chrpath -d $localfile
	else
		chrpath -r $realPath $localfile
	fi

	return 0
}

for file in $(find $buildroot/ -executable -type f -exec file {} ';' | grep "\<ELF\>" | awk -F ':' '{print $1}')
do
	test -u $file
	if [ $? -eq 0 ]; then
		continue
	fi

	if [ -w "$file" ]; then
		removeRpathOrRunpath $file
	fi
done

exit 0
