#!/bin/sh
#######################################################################
# Skript zum kopieren von beliebigen Dateien
#
# Wenn ein Verzeichnis /autoinst/sps/files besteht, werden alle darin 
# befindlichen Dateien in das Verzeichnis /usr/local/share/fonts 
# kopiert.
#
#######################################################################
# Parameter
#######################################################################
# $1 Package path
# $2 logfile path
#
# copyright (c) Berghof Automationstechnik GmbH
#######################################################################
title="filecopy"
files_src_dir="$1/filecopy"
descfile_files="${files_src_dir}/files_to_copy"
descfile_dirs="${files_src_dir}/dirs_to_create"
descfile_tars="${files_src_dir}/tars_to_extract"
descfile_scripts="${files_src_dir}/scripts_to_execute"
descfile_delete_files="${files_src_dir}/files_to_delete"
tmpdir=/tmp/$(readlink /proc/self)
CR=$(printf "\r")

if [ $2 ]; then
	logfile=$2
else
	logfile=/tmp/pkginstall.log
fi

# Logausgaben in Logdatei (Konsole) und in Systemlog
printlog()
{
  logger "$title: $*"
  echo "$*"
  echo "$*" >> $logfile
}

cleanup()
{
  rm -rf "$tmpdir"
  if test 0 -eq $1 ; then
    printlog "$title: SUCCESS"
  else
	printlog "$title: error number $1"
    printlog "$title: FAILED"
  fi
  printlog ""
}

die()
{
  cleanup $1
  exit $1
}

######################################################################
# Arbeitsverzeichnis erstellen
######################################################################

printlog "########################################"
printlog "package: $title"

# Sourceverzeichnis prfen
if test ! -d ${files_src_dir} ; then
	printlog "no files in folder ${files_src_dir}"
	die 0
fi

# Verzeichnisse erstellen
if test -f ${descfile_dirs} ; then
	printlog "== create directories ... =="
	(sed "s/${CR}//g" < ${descfile_dirs}; echo) | while read DST OWNER GROUP RIGHTS; do
		# Leerzeilen filtern
		if test -z ${DST} ; then continue; fi
		# Kommentare filtern
		echo ${DST} | grep '#' > /dev/null
		if test $? = 0; then continue; fi
		printlog "${DST} (${OWNER}:${GROUP} ${RIGHTS})"
		mkdir -p ${DST} || die 1
		chown ${OWNER}:${GROUP} ${DST} || exit 1
		chmod ${RIGHTS} ${DST} || exit 1
	done || die 1
fi

# Dateien kopieren
if test -f ${descfile_files} ; then
	printlog "== copy files ... =="
	(sed "s/${CR}//g" < ${descfile_files}; echo) | while read SRC DST OWNER GROUP RIGHTS; do
		# Leerzeilen filtern
		if test -z ${DST} ; then continue; fi
		# Kommentare filtern
		echo ${SRC} | grep '#' > /dev/null
		if test $? = 0; then continue; fi
		printlog "${SRC} -> ${DST} (${OWNER}:${GROUP} ${RIGHTS})"
		cp ${files_src_dir}/${SRC} ${DST} || exit 1
		chown ${OWNER}:${GROUP} ${DST} || exit 1
		chmod ${RIGHTS} ${DST} || exit 1
	done || die 1
fi

# Pakete entpacken
if test -f ${descfile_tars} ; then
	printlog "== uncompress tars ... =="
	(sed "s/${CR}//g" < ${descfile_tars}; echo) | while read ARCHIVE DIR; do
		# Leerzeilen filtern
		if test -z ${ARCHIVE} ; then continue; fi
		# Kommentare filtern
		echo ${ARCHIVE} | grep '#' > /dev/null
		if test $? = 0; then continue; fi
		printlog "decompressing ${ARCHIVE} in ${DIR}"
		tar xzvf  ${files_src_dir}/${ARCHIVE} -C ${DIR} || exit 1
	done || die 1
fi

# Skripte ausfuehren
if test -f ${descfile_scripts} ; then
	printlog "== start scripts ... =="
	(sed "s/${CR}//g" < ${descfile_scripts}; echo) | while read SCRIPT DUMMY; do
		# Leerzeilen filtern
		if test -z ${SCRIPT} ; then continue; fi
		# Kommentare filtern
		echo ${SCRIPT} | grep '#' > /dev/null
		if test $? = 0; then continue; fi
		printlog "starting ${SCRIPT}"
		(sh ${files_src_dir}/${SCRIPT}) || exit 1
	done || die 1
fi

# Dateien lschen
if test -f ${descfile_delete_files} ; then
	printlog "== delete files ... =="
	(sed "s/${CR}//g" < ${descfile_delete_files}; echo) | while read FILE DUMMY; do
		# Leerzeilen filtern
		if test -z "${FILE}" ; then continue; fi
		# Kommentare filtern
		echo "${FILE}" | grep '#' > /dev/null
		if test ${?} = 0; then continue; fi
		printlog "deleting file ${FILE}"
		rm -rf ${FILE}
		if test ! -z $(ls -1d ${FILE}); then
			printlog "removing file(s) ${FILE} failed"
			exit 1
		fi
	done || die 1
fi

die 0
