X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=applets%2Finstall.sh;h=95b4719d4b6f09982917a0cce345756daec0242c;hb=3bc4fc5857e2daba601442f95771a590bce915bc;hp=4c2a4f1b800e1cb15b295eb7d21e57168256abd7;hpb=5d44d1fda593248c154ec68b38ce946a69f9b0fc;p=oweals%2Fbusybox.git diff --git a/applets/install.sh b/applets/install.sh index 4c2a4f1b8..95b4719d4 100755 --- a/applets/install.sh +++ b/applets/install.sh @@ -1,22 +1,113 @@ #!/bin/sh -set -e +export LC_ALL=POSIX +export LC_CTYPE=POSIX -if [ "$1" == "" ]; then - echo "No installation directory, aborting." - exit 1; +prefix=$1 +if [ -z "$prefix" ]; then + echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks/--scriptwrapper]" + exit 1 fi h=`sort busybox.links | uniq` -for i in $h ; do - mypath=`echo $i | sed -e 's/\(^.*\/\)\(.*\)/\1/g' `; - myapp=`echo $i | sed -e 's/\(^.*\/\)\(.*\)/\2/g' `; - mkdir -p $1$mypath - echo " $1$mypath$myapp -> /bin/busybox" - (cd $1$mypath ; rm -f $1$mypath$myapp ; ln -s /bin/busybox $1$mypath$myapp ) -done -rm -f $1/bin/busybox -install -m 755 busybox $1/bin/busybox +linkopts="" +scriptwrapper="n" +cleanup="0" +noclobber="0" +case "$2" in + --hardlinks) linkopts="-f";; + --symlinks) linkopts="-fs";; + --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 + cp -pPR "$i" "$prefix/$libdir/" || exit 1 + chmod 0644 "$prefix/$libdir/$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"` + 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" + 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