#!/bin/sh
#Make .pfs (for PuppyRus), by Zay.
#Version 0.16
#Modify 15.02.2013
#150328 sfs

for arg in "$@"
do
  case "${arg}" in 
    "-o" | "--out-file") onuserout="on";;
    "-p" | "--name" | "--name-pack" | "--name-package") usepkname="on";;
    "-n" | "--no-dirs-empty") dirs="off";;
    "-m" | "--md5") md5cr="on";;
    "-e" | "--empty" | "--no-md5") ;;
    "-no-progress" | "--no-progress") noprogress="-no-progress";;
    "-processors" | "--processors" ) numproc="on";;
    "-"*[A-Za-z]*) echo "$(basename "$0"): invalid option -- '$(echo ${arg} | tr -d '-')'"; exit 1;;
    *) if [ "${usepkname}" = "on" ]; then packname="${arg}"
       elif [ "${onuserout}" = "on" ]; then userout="${arg}"
       elif [ "${numproc}" = "on" ]; then useproc="-processors ${arg}"
       else pfsdir="${arg}"; fi
       onuserout="off"; usepkname="off"; numproc="off";;
  esac
done
pwddir="$(pwd)"
[ "${pfsdir}" = "" ] && pfsdir="${pwddir}"
if [ -d "${pfsdir}" ]; then
  cd "${pfsdir}"
else
  echo "Directory \"${pfsdir}\" not found!"; exit 1
fi
[ "${packname}" != "" ] && pfsname="${packname}" || pfsname="$(basename "${pfsdir}")"
echo "${pfsname}"

mkdir -p "./etc/packages/mount/${pfsname}"
[ $? -gt 0 ] && exit 1
[ "$(pwd)" != "/" ] && find "./etc/packages/mount/" -mindepth 1 -maxdepth 1 -type d ! -name "${pfsname}" -exec rm -rf "{}" \;
[ ! -f "./etc/packages/mount/${pfsname}/pfs.specs" ] && echo "name=\"${pfsname}\"" >"./etc/packages/mount/${pfsname}/pfs.specs"

allfiles="$(find . ! -type d | grep -v -F './etc/packages/' | cut -f2- -d'.' | sort -f)"
if [ "${allfiles}" = "" ]; then
  echo "Files not found!"; exit 1
fi
echo "${allfiles}" >"./etc/packages/mount/${pfsname}/pfs.files" && pfsn="$(basename ${pfsname} -`uname -m`)" && mkdir -p "./var/lib/pacman/local/${pfsn}" && printf "%%FILES%%\n${allfiles}\n" > "./var/lib/pacman/local/${pfsn}/files"
[ $? -gt 0 ] && exit 1

[ "${dirs}" != "off" ] && dirsempty="$(find . -type d -empty | cut -f2- -d'.' | sort -f)" 
dirsfile="./etc/packages/mount/${pfsname}/pfs.dirs.empty"
[ "${dirs}" = "off" -o "${dirsempty}" = "" ] && [ -f "${dirsfile}" ] && rm -f "${dirsfile}"
[ "${dirsempty}" != "" ] && echo "${dirsempty}" >"${dirsfile}"

[ "${md5cr}" = "on" ] && md5s="$(find . -type f -exec md5sum "{}" \; | grep -v -F './etc/packages/' | sed 's/\.//' | sort -k 2 -f)"
md5file="./etc/packages/mount/${pfsname}/pfs.md5sums"
[ "${md5cr}" != "on" -o "${md5s}" = "" ] && [ -f "${md5file}" ] && rm -f "${md5file}"
[ "${md5s}" != "" ] && echo "${md5s}" >"${md5file}"

[ "${pfsdir}" = "${pwddir}" ] && cd ../ || cd "${pwddir}"
[ "${userout}" = "" ] && userout="./${pfsname}.pfs"

###sfs
    d2="var/lib/pacman/local/$(basename "$1" -`uname -m`)"
    mkdir -p "$1""_DEV/$d2"
    mv "$1/$d2/files" "$1""_DEV/$d2"
    find "$1" "$1""_DEV/$d2" -type d -empty -delete

mksquashfs "${pfsdir}" "${userout}" -comp xz -Xbcj x86 -noappend ${noprogress} ${useproc}

exit $?
