#!/bin/bash
###############################################################################
# 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>.
###############################################################################

. "${0%/*}/prologue.sh"

executeCommand() {
   "${@}"
}

updateFiles() {
   fromRoot="${1}"
   fromDirectory="${2}"
   toDirectory="${3}"
   shift 3

   executeCommand mkdir -p -- "${outputRoot}/${toDirectory}"
   set -- `cd "${fromRoot}/${fromDirectory}" && echo ${*}`

   for fromFile
   do
      fromPath="${fromRoot}/${fromDirectory}/${fromFile}"
      [ -e "${fromPath}" ] && executeCommand cp -a -- "${fromPath}" "${outputRoot}/${toDirectory}/"
   done
}

outputRoot=""
sourceRoot=""
buildRoot=""

while getopts ":o:s:b:" option
do
   case "${option}"
   in
      o) outputRoot="${OPTARG}";;
      s) sourceRoot="${OPTARG}";;
      b) buildRoot="${OPTARG}";;

      :) syntaxError "missing value: -${OPTARG}";;
     \?) syntaxError "unknown option: -${OPTARG}";;
      *) syntaxError "unimplemented option: -${option}";;
   esac
done

shift `expr "${OPTIND}" - 1`
[ "${#}" -eq 0 ] || syntaxError "too many parameters"

[ -n "${outputRoot}" ] || outputRoot="doc"
verifyOutputDirectory "${outputRoot}"

[ -n "${sourceRoot}" ] || sourceRoot=`dirname "${0}"`
verifyInputDirectory "${sourceRoot}"
sourceRoot=`resolveDirectory "${sourceRoot}"`

if [ -n "${buildRoot}" ]
then
   verifyInputDirectory "${buildRoot}"
   buildRoot=`resolveDirectory "${buildRoot}"`
else
   buildRoot="${sourceRoot}"
fi

updateFiles "${sourceRoot}" "." "." "README" "LICENSE-*"

sourceDocuments="${sourceRoot}/${documentsSubdirectory}"
buildDocuments="${buildRoot}/${documentsSubdirectory}"

for document in `cd "${sourceDocuments}" && echo README.*`
do
   make -s -C "${buildDocuments}" "${document#README.}.html"
done

updateFiles "${sourceRoot}" "${documentsSubdirectory}" "." "BUGS" "ChangeLog" "CONTRIBUTORS" "HISTORY" "TODO" "*.csv"
updateFiles "${buildRoot}" "${documentsSubdirectory}" "." "brltty.conf" "*.html"

for manual in `cd "${sourceDocuments}" && echo Manual-*/*`
do
   for documentExtension in doc htm html pdf sgml txt
   do
      updateFiles "${sourceRoot}" "${documentsSubdirectory}/${manual}" "${manual}" "*.${documentExtension}"
   done
done

for manual in BrlAPIref
do
   updateFiles "${buildRoot}" "${documentsSubdirectory}/${manual}/html" "${manual}" "*.html"
done

executeCommand "${sourceRoot}/mkdocktb" -o "${outputRoot}/KeyTables" -s "${sourceRoot}" -b "${buildRoot}"

exit 0
