#!/bin/sh

# Based on /usr/share/initramfs-tools/hooks/zz-busybox from busybox Debian
# package

# This hook copies toybox binary into the initramfs directory
# and creates all necessary links to it.
# It should be placed last into the hooks directory, in order to
# not overwrite commands which are provided by other means.

set -e

case "${1:-}" in
  prereqs)  echo ""; exit 0;;
esac

TB_BIN=/bin/toybox

[ n = "$TOYBOX" ] && exit 0

[ -r /usr/share/initramfs-tools/hook-functions ] || exit 0
. /usr/share/initramfs-tools/hook-functions

if [ -f $DESTDIR/bin/sh ] && cmp -s $DESTDIR/bin/sh $TB_BIN ; then
  # initramfs copies toybox into /bin/sh, undo this
  rm -f $DESTDIR/bin/sh
fi
rm -f $DESTDIR/bin/toybox	# for compatibility with old initramfs
copy_exec $TB_BIN /bin/toybox

for alias in $($TB_BIN --long); do
  alias="${alias#/}"
  case "$alias" in
    # strip leading /usr, we don't use it
    usr/*) alias="${alias#usr/}" ;;
    */*) ;;
    *) alias="bin/$alias" ;;  # make it into /bin
  esac

  # Workaround for Debian Bug #1013074
  #  Toybox upstream discussion: https://github.com/landley/toybox/issues/359
  if [ "$alias" = "bin/fstype" ]
  then
    if ! [ -e "$DESTDIR/bin/fstype" ]
    then
      cat > "$DESTDIR/bin/fstype" <<EOF
#!/bin/sh

FSTYPE=\$(toybox fstype \$1)

if [ -z "\$FSTYPE" ]
then
  echo "FSTYPE=unknown"
else
  echo "FSTYPE=\$(toybox fstype \$1)"
fi
EOF
      chmod +x "$DESTDIR/bin/fstype"
    fi
    continue
  fi

  [ -e "$DESTDIR/$alias" ] || \
    ln "$DESTDIR/usr/bin/toybox" "$DESTDIR/$alias"
done
