#!/bin/sh
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

umask 077

programName="`echo "${0}" | sed -e 's%^.*/%%'`"
programMessage() {
   echo >&2 "${programName}: ${1}"
}

syntaxError() {
   programMessage "${1}"
   exit 2
}

defaultMode="0755"
defaultStripCommand="strip"

copyCommand="cp"
directoryCommand="mkdir -p"
groupCommand="chgrp"
modeCommand="chmod"
ownerCommand="chown"
stripCommand="${defaultStripCommand}"

createDirectories=false
newGroup=""
newMode="${defaultMode}"
newOwner=""
showActions=false
showUsage=false
stripSymbols=false

while [ "${#}" -gt 0 ]
do
   option="${1}"
   operand=""

   case "${option}"
   in
      -c) ;;
      -d|--directory) createDirectories=true;;
      -g|--group) operand=newGroup;;
      -h|--help) showUsage=true;;
      -m|--mode) operand=newMode;;
      -o|--owner) operand=newOwner;;
      -s|--strip) stripSymbols=true;;
      --strip-program) operand=stripCommand;;
      -v|--verbose) showActions=true;;
      -*) syntaxError "unknown option: ${option}";;
      *) break;;
   esac

   shift
   [ -z "${operand}" ] && continue
   [ "${#}" -eq 0 ] && syntaxError "missing operand: ${option}"
   eval "${operand}"'="${1}"'
   shift
done

"${showUsage}" && {
   cat <<END_OF_USAGE
Usage:
   ${programName} [-option ...] source destination
   ${programName} [-option ...] source ... destination-directory
   ${programName} -d [-option ...] new-directory ...

Options:
   -c                ignored (for backward compatibility)
   -d|--directory    create all components of specified directories
   -g|--group group  set owning group
   -h|--help         display usage summary (this text), and then exit
   -m|--mode mode    set permission mode (default is ${defaultMode})
   -o|--owner owner  set owning user
   -s|--strip        strip symbols from executables
   --strip-program   set symbol stripping command (default is ${defaultStripCommand})
   -v|--verbose      re[prt each successful action
END_OF_USAGE

   exit 0
}

changeAttributes='
   [ "${newMode}" != "" ] && {
      ${modeCommand} "${newMode}" "${path}" || exit 3
      "${showActions}" && programMessage "mode changed: ${path}"
   }

   [ "${newGroup}" != "" ] && {
      ${groupCommand} "${newGroup}" "${path}" || exit 3
      "${showActions}" && programMessage "group changed: ${path}"
   }

   [ "${newOwner}" != "" ] && {
      ${ownerCommand} "${newOwner}" "${path}" || exit 3
      "${showActions}" && programMessage "owner changed: ${path}"
   }
'

"${createDirectories}" && {
   "${stripSymbols}" && syntaxError "cannot strip a directory."
   [ "${#}" -eq 0 ] && syntaxError "directory not specified."

   for destination
   do
      [ "${destination}" = "" ] && {
         programMessage "null directory."
         continue
      }

      directory=""
      paths=""
      for component in `echo "${destination}" | sed -e 's%/% %g' -e 's%^ %/ %'  -e 's% *$%%' -e 's%  *% %g'`
      do
         directory="${directory}${component}"
         [ "${component}" = "/" ] || directory="${directory}/"

         [ -d "${directory}" ] || {
            ${directoryCommand} "${directory}" || exit 3
            "${showActions}" && programMessage "directory created: ${directory}"
            paths="${directory} ${paths}"
         }
      done

      [ -n "${paths}" ] && {
         for path in $paths
         do
            eval "${changeAttributes}"
         done
      }
   done

   exit 0
}

[ "${#}" -eq 0 ] && syntaxError "source not specified."
[ "${#}" -eq 1 ] && syntaxError "destination not specified."

count="`expr "${#}" - 1`"
destination="`( shift "${count}"; echo "${1}" )`"

if [ -d "${destination}" ]
then
   toDirectory=true
else
   [ "${#}" -eq 2 ] || syntaxError "more than one source - destination not a directory: ${destination}"
   toDirectory=false
fi

while [ "${#}" -gt 1 ]
do
   source="${1}"
   shift

   if [ -f "${source}" ]
   then
      type=file
   else
      syntaxError "source not a file: ${source}"
   fi

   path="${destination}"
   "${toDirectory}" && path="${path}/`basename ${source}`"
   ${copyCommand} "${source}" "${path}" || exit 3
   "${showActions}" && programMessage "${type} copied: ${source} -> ${path}"

   "${stripSymbols}" && {
      ${stripCommand} "${path}" || exit 3
      "${showActions}" && programMessage "symbols stripped: ${path}"
   }

   eval "${changeAttributes}"
done

exit 0
