summaryrefslogtreecommitdiff
path: root/applets/install.sh
blob: f6c097e57e9b1527eee68bef96b7ec1a723932c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/sh

export LC_ALL=POSIX
export LC_CTYPE=POSIX

prefix=$1
if [ -z "$prefix" ]; then
	echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks/--binaries/--scriptwrapper]"
	exit 1
fi

# Source the configuration
. ./.config

h=`sort busybox.links | uniq`

sharedlib_dir="0_lib"

linkopts=""
scriptwrapper="n"
binaries="n"
cleanup="0"
noclobber="0"
case "$2" 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";;
	"")              h="";;
	*)               echo "Unknown install option: $2"; exit 1;;
esac

if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "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 [ "$cleanup" = "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"`
	mkdir -p "$prefix/$appdir" || exit 1
	if [ "$scriptwrapper" = "y" ]; then
		if [ "$swrapall" != "y" ] && [ "$i" = "/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 [ "$binaries" = "y" ]; then
		# Copy the binary over rather
		if [ -e $sharedlib_dir/$app ]; then
			if [ "$noclobber" = "0" ] || [ ! -e "$prefix/$i" ]; then
				echo "   Copying $sharedlib_dir/$app to $prefix/$i"
				cp -pPR $sharedlib_dir/$app $prefix/$i || exit 1
			else
				echo "  $prefix/$i already exists"
			fi
		else
			echo "Error: Could not find $sharedlib_dir/$app"
			exit 1
		fi
	else
		if [ "$2" = "--hardlinks" ]; 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
		if [ "$noclobber" = "0" ] || [ ! -e "$prefix/$i" ]; then
			echo "  $prefix/$i -> $bb_path"
			ln $linkopts "$bb_path" "$prefix/$i" || exit 1
		else
			echo "  $prefix/$i already exists"
		fi
	fi
done

exit 0