#!/bin/sh

export LC_ALL=POSIX
export LC_CTYPE=POSIX

prefix=$1
if [ -z "$prefix" ]; then
	echo "usage: applets/install.sh DESTINATION TYPE [OPTS ...]"
	echo "  TYPE is one of: --symlinks --hardlinks --binaries --scriptwrapper --none"
	echo "  OPTS is one or more of: --cleanup --noclobber"
	exit 1
fi
shift # Keep only remaining options

# Source the configuration
. ./.config

h=`sort busybox.links | uniq`

sharedlib_dir="0_lib"

linkopts=""
scriptwrapper="n"
binaries="n"
cleanup="0"
noclobber="0"
while [ ${#} -gt 0 ]; do
	case "$1" in
		--hardlinks)     linkopts="-f";;
		--symlinks)      linkopts="-fs";;
		--binaries)      binaries="y";;
		--scriptwrapper) scriptwrapper="y"; swrapall="y";;
		--sw-sh-hard)    scriptwrapper="y"; linkopts="-f";;
		--sw-sh-sym)     scriptwrapper="y"; linkopts="-fs";;
		--cleanup)       cleanup="1";;
		--noclobber)     noclobber="1";;
		--none)          h="";;
		*)               echo "Unknown install option: $1"; exit 1;;
	esac
	shift
done

if [ -n "$DO_INSTALL_LIBS" ] && [ x"$DO_INSTALL_LIBS" != x"n" ]; then
	# get the target dir for the libs
	# assume it starts with lib
	libdir=$($CC -print-file-name=libc.so | \
		 sed -n 's%^.*\(/lib[^\/]*\)/libc.so%\1%p')
	if test -z "$libdir"; then
		libdir=/lib
	fi

	mkdir -p "$prefix/$libdir" || exit 1
	for i in $DO_INSTALL_LIBS; do
		rm -f "$prefix/$libdir/$i" || exit 1
		if [ -f "$i" ]; then
			echo "   Installing $i to the target at $prefix/$libdir/"
			cp -pPR "$i" "$prefix/$libdir/" || exit 1
			chmod 0644 "$prefix/$libdir/`basename $i`" || exit 1
		fi
	done
fi

if [ x"$cleanup" = x"1" ] && [ -e "$prefix/bin/busybox" ]; then
	inode=`ls -i "$prefix/bin/busybox" | awk '{print $1}'`
	sub_shell_it=`
		cd "$prefix"
		for d in usr/sbin usr/bin sbin bin; do
			pd=$PWD
			if [ -d "$d" ]; then
				cd "$d"
				ls -iL . | grep "^ *$inode" | awk '{print $2}' | env -i xargs rm -f
			fi
			cd "$pd"
		done
		`
	exit 0
fi

rm -f "$prefix/bin/busybox" || exit 1
mkdir -p "$prefix/bin" || exit 1
install -m 755 busybox "$prefix/bin/busybox" || exit 1

for i in $h; do
	appdir=`dirname "$i"`
	app=`basename "$i"`
	if [ x"$noclobber" = x"1" ] && ([ -e "$prefix/$i" ] || [ -h "$prefix/$i" ]); then
		echo "  $prefix/$i already exists"
		continue
	fi
	mkdir -p "$prefix/$appdir" || exit 1
	if [ x"$scriptwrapper" = x"y" ]; then
		if [ x"$swrapall" != x"y" ] && [ x"$i" = x"/bin/sh" ]; then
			ln $linkopts busybox "$prefix/$i" || exit 1
		else
			rm -f "$prefix/$i"
			echo "#!/bin/busybox" >"$prefix/$i"
			chmod +x "$prefix/$i"
		fi
		echo "	$prefix/$i"
	elif [ x"$binaries" = x"y" ]; then
		# Copy the binary over rather
		if [ -e "$sharedlib_dir/$app" ]; then
			echo "   Copying $sharedlib_dir/$app to $prefix/$i"
			cp -pPR "$sharedlib_dir/$app" "$prefix/$i" || exit 1
		else
			echo "Error: Could not find $sharedlib_dir/$app"
			exit 1
		fi
	else
		if [ x"$linkopts" = x"-f" ]; then
			bb_path="$prefix/bin/busybox"
		else
			case "$appdir" in
			/)
				bb_path="bin/busybox"
			;;
			/bin)
				bb_path="busybox"
			;;
			/sbin)
				bb_path="../bin/busybox"
			;;
			/usr/bin | /usr/sbin)
				bb_path="../../bin/busybox"
			;;
			*)
				echo "Unknown installation directory: $appdir"
				exit 1
			;;
			esac
		fi
		echo "  $prefix/$i -> $bb_path"
		ln $linkopts "$bb_path" "$prefix/$i" || exit 1
	fi
done

exit 0
