view scripts/install.sh @ 914:91d15ead5602

Stat cleanup. Put global stat info in a union so we don't have to malloc it and thus don't need an explicit size tracked in main(). Make date_stat_format() take a timespec and take advantage of stat having an embedded timespec (nanosecond printing), typecast the long long prints for XYZ because on some 32 bit platforms it's an int.
author Rob Landley <rob@landley.net>
date Sat, 01 Jun 2013 20:47:16 -0500
parents 150a6d81bd02
children 1c15ba60aa64
line wrap: on
line source

#!/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