| #!/bin/bash |
| |
| # Grab default values for $CFLAGS and such. |
| |
| source ./configure |
| |
| # Parse command line arguments. |
| |
| [ -z "$PREFIX" ] && PREFIX="." |
| |
| LONG_PATH="" |
| while [ ! -z "$1" ] |
| do |
| # Create symlinks instead of hardlinks? |
| |
| [ "$1" == "--symlink" ] && LINK_TYPE="-s" |
| |
| # Uninstall? |
| |
| [ "$1" == "--uninstall" ] && UNINSTALL=1 |
| |
| # Delete destination command if it exists? |
| |
| [ "$1" == "--force" ] && DO_FORCE="-f" |
| |
| # Use {,usr}/{bin,sbin} paths instead of all files in one directory? |
| |
| if [ "$1" == "--long" ] |
| then |
| LONG_PATH="bin/" |
| fi |
| |
| shift |
| done |
| |
| echo "Compile instlist..." |
| |
| $DEBUG $HOSTCC -I . scripts/install.c -o instlist || exit 1 |
| COMMANDS="$(./instlist $LONG_PATH)" |
| |
| echo "Install commands..." |
| |
| # Copy toybox itself |
| |
| if [ -z "$UNINSTALL" ] |
| then |
| mkdir -p ${PREFIX}/${LONG_PATH} || exit 1 |
| cp toybox ${PREFIX}/${LONG_PATH} || exit 1 |
| else |
| rm "${PREFIX}/${LONG_PATH}/toybox" 2>/dev/null |
| rmdir "${PREFIX}/${LONG_PATH}" 2>/dev/null |
| fi |
| cd "${PREFIX}" |
| |
| # Make links to toybox |
| |
| for i in $COMMANDS |
| do |
| # Figure out target of link |
| |
| if [ -z "$LONG_PATH" ] |
| then |
| DOTPATH="" |
| else |
| # Create subdirectory for command to go in (if necessary) |
| |
| DOTPATH="$(echo $i | sed 's@\(.*/\).*@\1@')" |
| if [ -z "$UNINSTALL" ] |
| then |
| mkdir -p "$DOTPATH" || exit 1 |
| else |
| rmdir "$DOTPATH" 2>/dev/null |
| fi |
| |
| if [ -z "$LINK_TYPE" ] |
| then |
| dotpath="bin/" |
| else |
| if [ "$DOTPATH" != "$LONG_PATH" ] |
| then |
| DOTPATH="$(echo $DOTPATH | sed -e 's@[^/]*/@../@g')"$LONG_PATH |
| else |
| DOTPATH="" |
| fi |
| fi |
| fi |
| |
| # Create link |
| [ -z "$UNINSTALL" ] && |
| ln $DO_FORCE $LINK_TYPE ${DOTPATH}toybox $i || |
| rm $i 2>/dev/null |
| done |