#external by cuma
if [ ! "$EXTERNAL_ENABLED" == "y" ]; then
	echo external is used by make
	exit 1
fi
EXTERNAL_DIRECTORY=`echo $EXTERNAL_DIRECTORY|sed 's/\/*$//'`
mkdir -p "${EXTERNAL_MOD_DIR}"

#preparation for Downloader outsourcing
OUT_DIR="outboard"
OUT_CONF="downloader.conf"
ERROR="EXTERNAL SCRIPT ERROR:"
WARNING="EXTERNAL SCRIPT WARNING:"
if [ "$EXTERNAL_DOWNLOADER" == "y" ]; then
	if [ -e "$OUT_DIR" ]; then
		[ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echo "  \"$(pwd)/$OUT_DIR\" is used as directory for outsourced files"
		[ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echo "  all existing files in this directory will be rewritten"
	else
		[ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echo "  creating directory \"$(pwd)/$OUT_DIR\" for outsourced files"
		mkdir $OUT_DIR
		TMPERR=$?
		if [ $TMPERR -eq 1 ]; then
			echo "$ERROR Directory \"$OUT_DIR\" can not be created"
			exit 1
		fi 
	fi
	if [ -e "$OUT_DIR/$OUT_CONF" ]; then
		echo "  removing old Downloader configuration file $OUT_DIR/$OUT_CONF"
		rm "$OUT_DIR/$OUT_CONF"
		TMPERR=$?
		if [ $TMPERR -eq 1 ]; then
			echo "$ERROR $OUT_DIR/$OUT_CONF can not be deleted"
			exit 1
		fi 
	fi
	echo "  creating new Downloader configuration file $OUT_DIR/$OUT_CONF"
	touch "$OUT_DIR/$OUT_CONF"
fi

EXTERNAL_FILES="$EXTERNAL_OWN_FILES"
[ "$EXTERNAL_FREETZ_LIB_libart_lgpl_2" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libart_lgpl_2.so.2.3.19"
[ "$EXTERNAL_FREETZ_LIB_libcrypto" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libcrypto.so.0.9.8"
[ "$EXTERNAL_FREETZ_LIB_libcurl" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libcurl.so.4.1.1"
[ "$EXTERNAL_FREETZ_LIB_libdevmapper" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libdevmapper.so.1.02"
[ "$EXTERNAL_FREETZ_LIB_libelf" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libelf.so.0.8.10"
[ "$EXTERNAL_FREETZ_LIB_libfreetype" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libfreetype.so.6.3.16"
[ "$EXTERNAL_FREETZ_LIB_libglib_1" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libglib-1.2.so.0.0.10"
[ "$EXTERNAL_FREETZ_LIB_libglib_2" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libglib-2.0.so.0.1800.2"
[ "$EXTERNAL_FREETZ_LIB_libgmodule_2" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libgmodule-2.0.so.0.1800.2"
[ "$EXTERNAL_FREETZ_LIB_libgobject_2" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libgobject-2.0.so.0.1800.2"
[ "$EXTERNAL_FREETZ_LIB_libgthread_2" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libgthread-2.0.so.0.1800.2"
[ "$EXTERNAL_FREETZ_LIB_libhistory" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libhistory.so.5.2"
[ "$EXTERNAL_FREETZ_LIB_libiconv" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libiconv.so.2.2.0"
[ "$EXTERNAL_FREETZ_LIB_libid3tag" == "y" ] && EXTERNAL_FILES+=" /lib/libid3tag.so.0.3.0"
[ "$EXTERNAL_FREETZ_LIB_libmad" == "y" ] && EXTERNAL_FILES+=" /lib/libmad.so.0.2.1"
[ "$EXTERNAL_FREETZ_LIB_libncurses" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libncurses.so.5.6"
[ "$EXTERNAL_FREETZ_LIB_libpng12" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libpng12.so.0.10.0"
[ "$EXTERNAL_FREETZ_LIB_libpopt" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libpopt.so.0.0.0"
[ "$EXTERNAL_FREETZ_LIB_libreadline" == "y" ] && EXTERNAL_FILES+=" /usr/lib/libreadline.so.5.2"
[ "$EXTERNAL_FREETZ_LIB_libresolv" == "y" ] && EXTERNAL_FILES+=" /lib/libresolv-${FREETZ_TARGET_UCLIBC_VERSION}.so"
[ "$EXTERNAL_FREETZ_PACKAGE_BASH" == "y" ] && EXTERNAL_FILES+=" /bin/bash"
[ "$EXTERNAL_FREETZ_PACKAGE_BIP" == "y" ] && EXTERNAL_FILES+=" /usr/bin/bip"
[ "$EXTERNAL_FREETZ_PACKAGE_BLUEZ_UTILS" == "y" ] && EXTERNAL_FILES+=" /usr/bin/dund /usr/bin/pand /usr/bin/rfcomm /usr/bin/l2ping /usr/bin/sdptool /usr/sbin/hcid /usr/sbin/sdpd /usr/sbin/hciconfig /usr/sbin/hcitool"
[ "$EXTERNAL_FREETZ_PACKAGE_CHECKMAILD" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/checkmaild"
[ "$EXTERNAL_FREETZ_PACKAGE_CRYPTSETUP" == "y" ] && EXTERNAL_FILES+=" /usr/bin/cryptsetup"
[ "$EXTERNAL_FREETZ_PACKAGE_CTORRENT" == "y" ] && EXTERNAL_FILES+=" /usr/bin/ctorrent" 
[ "$EXTERNAL_FREETZ_PACKAGE_CURL" == "y" ] && EXTERNAL_FILES+=" /usr/bin/curl"
[ "$EXTERNAL_FREETZ_PACKAGE_DECO" == "y" ] && EXTERNAL_FILES+=" /usr/bin/deco"
[ "$EXTERNAL_FREETZ_PACKAGE_DTACH" == "y" ] && EXTERNAL_FILES+=" /usr/bin/dtach"
[ "$EXTERNAL_FREETZ_PACKAGE_DTMFBOX" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/dtmfbox"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_e2fsck" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/e2fsck"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_mke2fs" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/mke2fs"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_mklost_found" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/mklost+found"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_tune2fs" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/tune2fs"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_dumpe2fs" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/dumpe2fs"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_chattr" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/chattr"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_lsattr" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/lsattr"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_e2image" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/e2image"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_e2undo" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/e2undo"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_debugfs" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/debugfs"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_logsave" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/logsave"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_badblocks" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/badblocks"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_filefrag" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/filefrag"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_blkid" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/blkid"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_uuidd" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/uuidd"
[ "$EXTERNAL_FREETZ_PACKAGE_E2FSPROGS_uuidgen" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/uuidgen"
[ "$EXTERNAL_FREETZ_PACKAGE_ESPEAK" == "y" ] && EXTERNAL_FILES+=" /usr/bin/speak"
[ "$EXTERNAL_FREETZ_PACKAGE_INOTIFY_TOOLS" == "y" ] && EXTERNAL_FILES+=" /usr/bin/inotifywait /usr/bin/inotifywatch /usr/lib/libinotifytools.so.0.4.1"
[ "$EXTERNAL_FREETZ_PACKAGE_IODINE" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/iodined"
[ "$EXTERNAL_FREETZ_PACKAGE_IRSSI" == "y" ] && EXTERNAL_FILES+=" /usr/bin/irssi" 
[ "$EXTERNAL_FREETZ_PACKAGE_HTTPTUNNEL" == "y" ] && EXTERNAL_FILES+=" /usr/bin/hts"
[ "$EXTERNAL_FREETZ_PACKAGE_LDD" == "y" ] && EXTERNAL_FILES+=" /usr/bin/ldd"
[ "$EXTERNAL_FREETZ_PACKAGE_LSOF" == "y" ] && EXTERNAL_FILES+=" /usr/bin/lsof"
[ "$EXTERNAL_FREETZ_PACKAGE_LTRACE" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/ltrace"
[ "$EXTERNAL_FREETZ_PACKAGE_LYNX" == "y" ] && EXTERNAL_FILES+=" /usr/bin/lynx"
[ "$EXTERNAL_FREETZ_PACKAGE_MADPLAY" == "y" ] && EXTERNAL_FILES+=" /usr/bin/madplay"
[ "$EXTERNAL_FREETZ_PACKAGE_MC" == "y" ] && EXTERNAL_FILES+=" /usr/bin/mc.bin"
[ "$EXTERNAL_FREETZ_PACKAGE_MTR" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/mtr"
[ "$EXTERNAL_FREETZ_PACKAGE_NANO" == "y" ] && EXTERNAL_FILES+=" /usr/bin/nano"
[ "$EXTERNAL_FREETZ_PACKAGE_NETCAT" == "y" ] && EXTERNAL_FILES+=" /usr/bin/netcat"
[ "$EXTERNAL_FREETZ_PACKAGE_NTFS" == "y" ] && EXTERNAL_FILES+=" /usr/bin/ntfs-3g"
[ "$EXTERNAL_FREETZ_PACKAGE_OPENVPN" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/openvpn"
[ "$EXTERNAL_FREETZ_PACKAGE_PHP" == "y" ] && EXTERNAL_FILES+=" /usr/bin/php-cgi"
[ "$EXTERNAL_FREETZ_PACKAGE_PRIVOXY" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/privoxy"
[ "$EXTERNAL_FREETZ_PACKAGE_RRDTOOL" == "y" ] && EXTERNAL_FILES+=" /usr/bin/rrdtool /usr/lib/librrd.so.2.0.15"
[ "$EXTERNAL_FREETZ_PACKAGE_SAMBA_smbd" == "y" ] && EXTERNAL_FILES+=" /sbin/smbd"
[ "$EXTERNAL_FREETZ_PACKAGE_SAMBA_nmbd" == "y" ] && EXTERNAL_FILES+=" /sbin/nmbd"
[ "$EXTERNAL_FREETZ_PACKAGE_SAMBA_smbpasswd" == "y" ] && EXTERNAL_FILES+=" /sbin/smbpasswd"
[ "$EXTERNAL_FREETZ_PACKAGE_SCREEN" == "y" ] && EXTERNAL_FILES+=" /usr/bin/screen.bin"
[ "$EXTERNAL_FREETZ_PACKAGE_STRACE" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/strace"
[ "$EXTERNAL_FREETZ_PACKAGE_STUNNEL" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/stunnel"
[ "$EXTERNAL_FREETZ_PACKAGE_TCPDUMP" == "y" ] && EXTERNAL_FILES+=" /usr/bin/tcpdump"
[ "$EXTERNAL_FREETZ_PACKAGE_TOR" == "y" ] && EXTERNAL_FILES+=" /usr/sbin/tor"
[ "$EXTERNAL_FREETZ_PACKAGE_TRANSMISSION_CLIENT" == "y" ] && EXTERNAL_FILES+=" /usr/bin/transmissioncli"
[ "$EXTERNAL_FREETZ_PACKAGE_TRANSMISSION_DAEMON" == "y" ] && EXTERNAL_FILES+=" /usr/bin/transmission-daemon"
[ "$EXTERNAL_FREETZ_PACKAGE_TRANSMISSION_REMOTE" == "y" ] && EXTERNAL_FILES+=" /usr/bin/transmission-remote"
[ "$EXTERNAL_FREETZ_PACKAGE_TRANSMISSION_WEBINTERFACE" == "y" ] && EXTERNAL_FILES+=" /usr/share/transmission-web-home"
[ "$EXTERNAL_FREETZ_PACKAGE_TREE" == "y" ] && EXTERNAL_FILES+=" /usr/bin/tree"
[ "$EXTERNAL_FREETZ_PACKAGE_VIM" == "y" ] && EXTERNAL_FILES+=" /usr/bin/vim"
[ "$EXTERNAL_FREETZ_PACKAGE_WPUT" == "y" ] && EXTERNAL_FILES+=" /usr/bin/wput"

EXTERNAL_FILES="`echo $EXTERNAL_FILES|sed 's/ / \//g;s/\/\/*/\//g'`"

for EXTERNAL_FILE in $EXTERNAL_FILES; do
	FILENAME=$(basename $EXTERNAL_FILE)
	if [ -L "${FILESYSTEM_MOD_DIR}$EXTERNAL_FILE" ]; then
		[ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echo "$WARNING ${FILESYSTEM_MOD_DIR}$EXTERNAL_FILE is a symbolic link. It will not be outsourced"
	else
	EXTERNAL_LINKSUBDIR=""
	EXTERNAL_TARGETDIR="${EXTERNAL_MOD_DIR}"
	if [ "$EXTERNAL_SUBDIRS" == "y" ]; then
		EXTERNAL_LINKSUBDIR="`dirname $EXTERNAL_FILE`"
		EXTERNAL_TARGETDIR+="$EXTERNAL_LINKSUBDIR"
		mkdir -p "$EXTERNAL_TARGETDIR"
	fi
	EXTERNAL_TEMP="${FILESYSTEM_MOD_DIR}$EXTERNAL_FILE"
        if [ "$EXTERNAL_DOWNLOADER" == "y" ]; then
            FILEPERM=$(ls -l $EXTERNAL_TEMP | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o",k)}')
			[ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echo "  packing $FILENAME.gz for Downloader"
			gzip -c "$EXTERNAL_TEMP" > "$OUT_DIR/$FILENAME.gz"
			TMPERR=$?
			if [ $TMPERR -eq 1 ]; then
				echo "$ERROR $OUT_DIR/$FILENAME.gz can not be created"
				exit 1
			fi
        fi
	if [ `ls "$EXTERNAL_TEMP" 2>/dev/null | wc -l` -gt 0 ]; then
		mv "$EXTERNAL_TEMP" "$EXTERNAL_TARGETDIR/"
		EXTERNAL_MSG="moved"
            if [ "$EXTERNAL_DOWNLOADER" == "y" ]; then
                echo "$FILENAME $FILEPERM $EXTERNAL_DIRECTORY$EXTERNAL_LINKSUBDIR" >> $OUT_DIR/$OUT_CONF
            fi
	else
		EXTERNAL_MSG="not found"
	fi
        ln -s "$EXTERNAL_DIRECTORY$EXTERNAL_LINKSUBDIR/$FILENAME" "${FILESYSTEM_MOD_DIR}$EXTERNAL_FILE"
	[ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echo "  $EXTERNAL_FILE... $EXTERNAL_MSG & linked"
    fi    
done
echo "$EXTERNAL_DIRECTORY" > "${EXTERNAL_MOD_DIR}/.external"
if [ "$EXTERNAL_DOWNLOADER" == "y" ]; then
	echo "  NOTE: Please upload gezipped Downloader files from"
	echo "        \"$(pwd)/$OUT_DIR\" to your http or ftp server"
	echo "        and copy the Downloader configuration from"
	echo "        \"$(pwd)/$OUT_DIR/$OUT_CONF\" into Downloader WEBUI"
else
	[ "$EXTERNAL_CREATEPAK" == "y" ] || echo "  NOTE: Please copy content of build/modified/external/ to $EXTERNAL_DIRECTORY on your box BEFORE you flash the reduced image"
fi
