1#!/bin/sh
2
3
4f=`nvram get apps_install_folder`
5case $f in
6	"asusware.arm")
7		pkg_type=`echo $f|sed -e "s,asusware\.,,"`
8		;;
9	"asusware.big")
10		pkg_type="mipsbig"
11		;;
12	"asusware.mipsbig")
13		pkg_type=`echo $f|sed -e "s,asusware\.,,"`
14		;;
15	"asusware")
16		pkg_type="mipsel"
17		;;
18	*)
19		echo "Unknown apps_install_folder: $f"
20		exit 1
21		;;
22esac
23APP_UCLIBC_VERSION=0.9.28
24APPS_DEV=`nvram get apps_dev`
25APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
26APPS_INSTALL_FOLDER=`nvram get apps_install_folder`
27APPS_INSTALL_PATH=$APPS_MOUNTED_PATH/$APPS_INSTALL_FOLDER
28
29
30if [ -z "$APPS_MOUNTED_PATH" ]; then
31	nvram set apps_state_error=2
32	exit 1
33fi
34
35APP_BIN=$APPS_INSTALL_PATH/bin
36APP_LIB=$APPS_INSTALL_PATH/lib
37
38APP_LINK_DIR=/tmp/opt
39APP_LINK_BIN=$APP_LINK_DIR/bin
40APP_LINK_LIB=$APP_LINK_DIR/lib
41
42APP_FS_TYPE=`mount | grep $APPS_MOUNTED_PATH | sed -e "s,.*on.* type \([^ ]*\) (.*$,\1,"`
43
44APPS_MOUNTED_TYPE=`mount |grep "/dev/$APPS_DEV on " |awk '{print $5}'`
45if [ "$APPS_MOUNTED_TYPE" != "vfat" ] && [ "$APPS_MOUNTED_TYPE" != "tfat" ]; then
46	if [ "$APP_FS_TYPE" != "fuseblk" ] ; then
47		chmod -R 777 $APPS_INSTALL_PATH
48	fi
49	user_account=`nvram get http_username`
50	if [ -z "$user_account" ]; then
51		user_account="admin"
52	fi
53	if [ "$APP_FS_TYPE" != "fuseblk" ] ; then
54		chown -R "$user_account":root $APPS_INSTALL_PATH
55	fi
56	rm -rf $APP_LINK_DIR
57	ln -sf $APPS_INSTALL_PATH $APP_LINK_DIR
58	exit 0
59fi
60
61# Others files or directories
62objs=`ls -a $APPS_INSTALL_PATH |grep -v ^\.__*`
63if [ -L "$APP_LINK_DIR" ] || [ ! -d "$APP_LINK_DIR" ]; then
64	rm -rf $APP_LINK_DIR
65	mkdir -p $APP_LINK_DIR
66fi
67
68for obj in $objs; do
69	if [ "$obj" == "." ] || [ "$obj" == ".." ]; then
70		continue
71	fi
72
73	if [ "$obj" != "bin" ] && [ "$obj" != "lib" ]; then
74		if [ -d "$APP_LINK_DIR/$obj" ]; then
75			rm -rf $APP_LINK_DIR/$obj
76		fi
77		ln -sf $APPS_INSTALL_PATH/$obj $APP_LINK_DIR/$obj
78	fi
79done
80
81
82# BIN
83objs=`ls -a $APP_BIN`
84if [ -L "$APP_LINK_BIN" ] || [ ! -d "$APP_LINK_BIN" ]; then
85	rm -rf $APP_LINK_BIN
86	mkdir -p $APP_LINK_BIN
87fi
88
89# ipkg-opt
90ln -sf $APP_BIN/ipkg $APP_LINK_BIN/ipkg-opt
91
92for obj in $objs; do
93	if [ "$obj" == "." ] || [ "$obj" == ".." ]; then
94		continue
95	fi
96
97	if [ -d "$APP_LINK_BIN/$obj" ]; then
98		rm -rf $APP_LINK_BIN/$obj
99	fi
100	ln -sf $APP_BIN/$obj $APP_LINK_BIN/$obj 
101done
102
103
104# LIB
105objs=`ls -a $APP_LIB`
106if [ -L "$APP_LINK_LIB" ] || [ ! -d "$APP_LINK_LIB" ]; then
107	rm -rf $APP_LINK_LIB
108	mkdir -p $APP_LINK_LIB
109fi
110
111# first find the other objs and then do uclibc.
112for obj in $objs; do
113	if [ "$obj" == "." ] || [ "$obj" == ".." ]; then
114		continue
115	fi
116
117	if [ -d "$APP_LINK_LIB/$obj" ]; then
118		rm -rf $APP_LINK_LIB/$obj
119	fi
120	ln -sf $APP_LIB/$obj $APP_LINK_LIB/$obj 
121done
122
123# ipkg-opt
124ln -sf $APP_LIB/libipkg.so.0.0.0 $APP_LINK_LIB/libipkg.so.0
125ln -sf $APP_LIB/libipkg.so.0.0.0 $APP_LINK_LIB/libipkg.so
126
127# uclibc-opt
128ln -sf $APP_LIB/ld-uClibc-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/ld-uClibc.so.0
129ln -sf $APP_LIB/ld-uClibc-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/ld-uClibc.so
130ln -sf $APP_LIB/libuClibc-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libc.so.0
131ln -sf $APP_LIB/libuClibc-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libc.so
132ln -sf $APP_LIB/libcrypt-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libcrypt.so.0
133ln -sf $APP_LIB/libcrypt-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libcrypt.so
134ln -sf $APP_LIB/libgcc_s.so.1 $APP_LINK_LIB/libgcc_s.so
135if [ "$pkg_type" == "arm" ]; then
136	ln -sf $APP_LIB/libstdc++.so.6.0.2 $APP_LINK_LIB/libstdc++.so.6
137	ln -sf $APP_LIB/libstdc++.so.6.0.2 $APP_LINK_LIB/libstdc++.so
138else
139	ln -sf $APP_LIB/libstdc++.so.6.0.8 $APP_LINK_LIB/libstdc++.so.6
140	ln -sf $APP_LIB/libstdc++.so.6.0.8 $APP_LINK_LIB/libstdc++.so
141	ln -sf $APP_LIB/libdl-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libdl.so.0
142	ln -sf $APP_LIB/libdl-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libdl.so
143	ln -sf $APP_LIB/libintl-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libintl.so.0
144	ln -sf $APP_LIB/libintl-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libintl.so
145	ln -sf $APP_LIB/libmudflap.so.0.0.0 $APP_LINK_LIB/libmudflap.so.0
146	ln -sf $APP_LIB/libmudflap.so.0.0.0 $APP_LINK_LIB/libmudflap.so
147	ln -sf $APP_LIB/libmudflapth.so.0.0.0 $APP_LINK_LIB/libmudflapth.so.0
148	ln -sf $APP_LIB/libmudflapth.so.0.0.0 $APP_LINK_LIB/libmudflapth.so
149	ln -sf $APP_LIB/libnsl-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libnsl.so.0
150	ln -sf $APP_LIB/libnsl-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libnsl.so
151fi
152ln -sf $APP_LIB/libm-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libm.so.0
153ln -sf $APP_LIB/libm-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libm.so
154ln -sf $APP_LIB/libpthread-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libpthread.so.0
155ln -sf $APP_LIB/libpthread-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libpthread.so
156ln -sf $APP_LIB/libresolv-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libresolv.so.0
157ln -sf $APP_LIB/libresolv-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libresolv.so
158ln -sf $APP_LIB/librt-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/librt.so.0
159ln -sf $APP_LIB/librt-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/librt.so
160ln -sf $APP_LIB/libthread_db-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libthread_db.so.1
161ln -sf $APP_LIB/libthread_db-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libthread_db.so
162ln -sf $APP_LIB/libutil-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libutil.so.0
163ln -sf $APP_LIB/libutil-${APP_UCLIBC_VERSION}.so $APP_LINK_LIB/libutil.so
164