#!/bin/sh

# This script first starts faked (the deamon), and then it will run
# the requested program with fake root privileges.

usage () {
  echo "fakeroot, create a fake root environment."
  echo "   usage: fakeroot [-l|--lib fakerootlib] [command]"
}

# strip /bin/fakeroot to find install prefix
BINDIR=`dirname $0`
PREFIX=`dirname ${BINDIR}`
    
LIB=libfakeroot.so.0
PATHS=${PREFIX}/lib/libfakeroot:${PREFIX}/lib/64/libfakeroot
FAKED=${BINDIR}/faked

GETOPTEST=`getopt --version`
case $GETOPTEST in
getopt*) # GNU getopt
    TEMP=`getopt -l lib: -l faked: -- +l:f: "$@"`
    ;;
*) # POSIX getopt ?
    TEMP=`getopt l:f: "$@"`
    ;;
esac

if test "$?" != "0"; then
  echo Terminating...
  exit 1
fi

eval set -- "$TEMP"

while test "X$1" != "X--"; do
  case "$1" in
    -l|--lib)
       shift
       LIB=`eval echo "$1"`
       PATHS=
       ;;
    -f|--faked)
       shift
       FAKED=$1
       ;;
    -h|--help)
       usage;
       exit 0
       ;;
  esac
  shift
done

shift #get rid of the '--'

unset FAKEROOTKEY
KEY_PID=`eval $FAKED`
FAKEROOTKEY=`echo $KEY_PID|cut -d: -f1`
PID=`echo $KEY_PID|cut -d: -f2`

trap "kill -TERM $PID" EXIT

if test -z "$FAKEROOTKEY" -o -z "$PID"; then
  echo Error while starting faked.
  exit 1
fi

# Keep other library paths
if test -n "$LD_LIBRARY_PATH"; then
  PATHS="$LD_LIBRARY_PATH:$PATHS"
fi
# ...and preloaded libs
if test -n "$LD_PRELOAD"; then
  LIB="$LD_PRELOAD $LIB"
fi

if test -z "$*"; then
  FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH=$PATHS LD_PRELOAD=$LIB ${SHELL:-/bin/sh}
  RESULT=$?
else
  FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH=$PATHS LD_PRELOAD=$LIB sh -c "$*"
  RESULT=$?
fi

exit $RESULT
