#!/usr/bin/env bash
#  Copyright (c) 2016 - 2022 by NuTyX team (http://nutyx.org)
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
#  USA.
#
usage () {
  echo '
USAGE
      mybld [option] <collection>|<package> [version]

OPTIONS
      -c, --cleanup <collection>
              Clean the /<version>/<collection> folder in a safety way.


      -R, --runtime <dependency package>
              Return the list of package depending on the <dependency package>.

      -A, --ask
              Ask for confirmation.

      -p, --pause
              Make a pause after enter in to the chroot.

      -n, --new <collection>/<package> [version] [description] [url] [sources]
              Create a new <collection>/<package>/Pkgfile.

      -i, --increment <package>
             Increment the release number and build the package.

      -I, --init
             Create all the necessary folder (sources, LOGS and depot).

      -s, --sync [package|collection]
             Synchronize all the binaries of the [package|collection].

MORE INFO
       mybld(8)

'|more
}

check_root() {
  if [ "$UID" == "0" ]; then
    echo "The 'root' account is not allow to building packages"
    exit 1
  fi
}

generate_Pkgfile() {
  if [ ! -d ${COLLECTION} ]; then
    echo  "
>>>     The collection '${COLLECTION}' does not exist
"
    exit 1
  fi
  if [ "$(git config user.name)" == "" ];then
    echo "
>>>     your username is not set in your $HOME/.gitconfig
"
    exit 1
  fi
  if [ "$(git config user.email)" == "" ];then
    echo "
>>>     your email is  not set in your $HOME/.gitconfig
"
    exit 1
  fi
  if [ -f ${COLLECTION}/${PARAM}/Pkgfile ];then
    echo "
>>>     ABORT: File '${COLLECTION}/${PARAM}/Pkgfile' already exist !!!
"
    exit 1
  fi
  mkdir -p "${COLLECTION}/${PARAM}"
  echo "description='${3}'
url='${4}'

packager=\"$(git config user.name) <$(git config user.email)>\"
contributors=\"\"

makedepends=()
run=()
set=()

name=${PARAM}
version=${2}

source=(${5})

build() {
cd \$name-\$version
./configure --prefix=/usr
make
make DESTDIR=\$PKG install
}" > ${COLLECTION}/${PARAM}/Pkgfile
  $EDITOR ${COLLECTION}/${PARAM}/Pkgfile
}

create_folders () {
  if [ -z "$VERSION" ]; then
    echo "
>>>     VERSION is not SET
"
    exit 1
  fi
  sudo mkdir -p $ROOT/$VERSION
  sudo chown -R $(whoami):$(whoami) $ROOT/$VERSION
  sudo mkdir -p /$ROOTMOUNT/{logs/$(uname -m)/$VERSION,sources,$(uname -m)/$VERSION}
  sudo chown -R $(whoami):$(whoami) /$ROOTMOUNT
}
ding() {
PLAY="$(which paplay)"
if [ -z $PLAY ]; then
  echo " ====> Install pulseaudio, cannot play sound
"
  return
fi
$PLAY /usr/share/sounds/cards/ding.wav &
}
rsync_binaries () {
  if [ -z "$VERSION" ]; then
    echo "
>>>     VERSION is not SET
"
    exit 1
  fi
  if [ ! -z ${PARAM[0]} ]; then
    echo "
sudo mkdir -p $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/
sudo chown -R $(whoami):$(whoami) $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/
rsync -av --delete $URL/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/  \\
$ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/
"
    echo -n "  OK ? (y) : "
    answer
    sudo mkdir -p $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/
    sudo chown -R $(whoami):$(whoami) $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/
    rsync -av --delete $URL/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/ \
$ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/${PARAM[0]}/
    exit 0
  fi

  if [ ! -z $COLLECTION ]; then
    echo "
sudo mkdir -p $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/
sudo chown -R $(whoami):$(whoami) $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/
rsync -av --delete $URL/$(uname -m)/$VERSION/$COLLECTION/ $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/
"
    echo -n "  OK ? (y) : "
    answer
    sudo mkdir -p $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/
    sudo chown -R $(whoami):$(whoami) $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/
    rsync -av --delete $URL/$(uname -m)/$VERSION/$COLLECTION/ $ROOTMOUNT/$(uname -m)/$VERSION/$COLLECTION/
    exit 0
  fi

  echo "
mkdir -p $ROOTMOUNT/$(uname -m)/$VERSION/
sudo chown -R $(whoami):$(whoami) $ROOTMOUNT/$(uname -m)/$VERSION/
rsync -av --delete $URL/$(uname -m)/$VERSION/ $ROOTMOUNT/$(uname -m)/$VERSION/
"
  echo -n "  OK ? (y) : "
  answer
  mkdir -p $ROOTMOUNT/$(uname -m)/$VERSION/
  sudo chown -R $(whoami):$(whoami) $ROOTMOUNT/$(uname -m)/$VERSION/
  rsync -av --delete $URL/$(uname -m)/$VERSION/ $ROOTMOUNT/$(uname -m)/$VERSION/
  exit 0
}

parse_arguments() {
  while [ "$1" ]; do
    case $1 in
    -c|--cleanup)
      CLEANUP="yes"
      shift
      if [ -z ${1} ]; then
        echo "You need to specify a collection"
        exit 1
      fi
      PARAM+=($1);;

    -n|--new)
      shift
      COLLECTION="$(echo ${1}|cut -d '/' -f1)"
      PARAM="$(echo ${1}|cut -d '/' -f2)"
      if [ ! -f "${COLLECTION}/${PARAM}/Pkgfile" ]; then
        COLLECTION="$(echo ${1}|cut -d '/' -f1)"
        generate_Pkgfile "$@"
        exit 0
      fi
      echo "
  >>>     The package '${PARAM}' already exist in the '${COLLECTION}' collection !!!
  "
      exit 1;;

    -R|--runtime)
      RUNTIME="yes"
      shift
      if [ -z ${1} ]; then
        echo "You need to specify a runtime dependancy package name"
        exit 1
      fi
      PARAM+=($1)
      find_collection
      if [ -z "${COLLECTION}" ]; then
        echo "
>>> WARNING package '${PARAM[0]}' not found in any collection
"
      fi
      find_runtime ${1}
      exit 0;;

    -i|--increment)
      INCREMENT="yes"
      shift
      PARAM+=($1);;

    -p|--pause)
      PAUSE=" && export PATH=/root/$GIT/scripts:$PATH && printf \"You are now in the chroot.\n\
Type exit when finish.\n\n Good Luck !!!\n\n\" && bash";;

    -I|--init)
      INIT="yes";;

    -s|--sync)
      SYNC="yes"
      if [ ! -z $2 ]; then
        shift
        PARAM+=($1)
      fi;;

    -A|--ask)
      CONFIRM="yes"
      echo "====> you ask confirmation" ;;

    -h|--help)
      usage
      exit 0 ;;

    -*|--*)
      usage
      exit 1;;
    *)
        PARAM+=($1)
    esac

    shift
  done
}

interrupted() {
  echo "Interrupted !!!"
}

trap "interrupted" SIGHUP SIGINT SIGQUIT SIGTERM

umount_all() {
  for FOLDER in $MOUNT_POINTS ; do
    [ -d $ROOT/${VERSION}/${COLLECTION}/${FOLDER} ] || continue
    if mountpoint $ROOT/${VERSION}/${COLLECTION}/${FOLDER} > /dev/null;then
      sudo umount -R $ROOT/${VERSION}/${COLLECTION}/${FOLDER} || exit 1
    fi
    rm -d $ROOT/${VERSION}/${COLLECTION}/${FOLDER} || exit 1
  done
}

remove_all() {
  for FOLDER in $MOUNT_POINTS ; do
    [ -d $ROOT/${VERSION}/${COLLECTION}/${FOLDER} ] && exit 1
  done
  [ -z $ROOT/${1} ] && exit 1
  [ ! -d $ROOT/${1} ] && exit 0
  for i in run sys proc dev/pts dev/shm dev; do
    [ -d $ROOT/${1}/${i} ] || continue
    mountpoint $ROOT/${1}/${i} > /dev/null || continue
    sudo umount -R $ROOT/${1}/${i} || exit 1
  done
  for FOLDER in $ROOT/${1}/* ; do
    [ -d ${FOLDER} ] || continue
    ! mountpoint ${FOLDER} > /dev/null || continue
    sudo rm -r $FOLDER || exit 1
  done
  find $ROOT/${VERSION}/${COLLECTION} -maxdepth 1 -type f -delete
  rm -d $ROOT/${VERSION}/${COLLECTION} || exit 1
  echo "
>>>   $ROOT/${1} cleanup successfully ...
"
}

answer() {
  read a
  if [ "$a" != "y" ] && [ "$a" != "Y" ] && [ "$a" != "yes" ]; then
    echo "
Answer should be 'y, Y or yes'
"
    error "$ROOT/${VERSION}/${COLLECTION}"
  fi
}

error() {
  umount_all
  remove_all ${1}
  exit 1
}
find_new_packager () {
  newpackager="$(git config user.name) <$(git config user.email)>"
  newpackagername="$(git config user.name)"
  [ "$packager" == "$newpackager" ] && return
  oldpackager="$(echo ${packager%[ ,<]*}|sed "s/\b\(.\)/\l\1/g")"
  newcontributors="$(echo $contributors|sed -e "s/Pierre B/Pierre/g" \
   -e "s/\b\(.\)/\l\1/g" -e "s/$oldpackager//")"

  newcontributors+=",$oldpackager"
  newcontributors="$(echo $newcontributors|sed -e "s/\b\(.\)/\l\1/g" \
  -e "s/$newpackagername//g" -e "s/ /,/g" -e "s/\(,\)\1\+/\1/g" \
  -e "s/\b\(.\)/\u\1/g" -e "s/^,//g" -e "s/,$//g")"
}
find_version () {
  local i=0 p c n
  #TODO consider 'mycollection' 'mycollection-extra' if exists
  for c in base cli cli-extra gui gui-extra
  do
     #FIXME version="1.2.4" or version='1.2.3' doesn't work
     for n in $(grep -wl version="${PARAM[0]}"$ $c/*/Pkgfile)
     do
        PACKAGES_LIST[i]="$(dirname $n)"
        i=$((i+1))
     done
     [ -z $PACKAGES_LIST ] || COLLECTION=$c
     [ -z  $COLLECTION ] || return
  done
  i=0
  for n in ${PACKAGES_LIST[@]}
  do
    [ "$p" == "$(dirname $n)" ] && continue
    COLLECTION[i]="$(dirname $n)"
    p="$(dirname $n)"
    i=$((i+1))
  done
}
find_collection () {
  #FIXME name="mypackage", name='mypackage' doesn't work
  for n in $(grep -wl name="${PARAM[0]}"$ */*/Pkgfile)
  do
    unset COLLECTION
    COLLECTION="$(dirname $(dirname $n))"
    [ -z $COLLECTION ] || break
  done
  [ -z $COLLECTION ] || return

  COLLECTION="$(find . -type d -name ${PARAM[0]})"
  [ -z $COLLECTION ] || COLLECTION=$(basename $COLLECTION)
  [ -z $COLLECTION ] || unset PARAM
}

find_runtime () {
  for i in $(find ${ROOTMOUNT}/$(uname -m)/${VERSION}/ -name "*$(uname -m).cards*"); do
    LANG=C pkginfo -a $i|grep "${1}1"|grep "Dependencies"|cut -d ":" -f1
  done
}
setup_pkgmk_conf() {
[ -z  $PKGMK_PACK_SOURCE_DIR ] && PKGMK_PACK_SOURCE_DIR="/usr/src"
[ -z  $PKGMK_GROUPS ] && PKGMK_GROUPS="devel man doc sources"
[ -z  $PKGMK_WGET_OPTS ] && PKGMK_WGET_OPTS="--prefer-family=IPv4 --quiet"
[ -z  $PKGMK_KEEP_SOURCES ] && PKGMK_KEEP_SOURCES="yes"
[ -z  $PKGMK_WORK_DIR ] && PKGMK_WORK_DIR="/tmp/work"
[ -z  $PKGMK_COMPRESSION_OPTS ] && PKGMK_COMPRESSION_OPTS="-9 --threads=$(getconf _NPROCESSORS_ONLN)"
[ -z  $PKGMK_COMPRESS_PACKAGE ] && PKGMK_COMPRESS_PACKAGE="yes"
[ -z  $PKGMK_COMPRESSION_MODE ] && PKGMK_COMPRESSION_MODE="xz"
[ -z  $PKGMK_LOCALES ] && PKGMK_LOCALES="af an ar as az be bg \
bs ca cs cy da de el es fi fr ga gl gn he hi hr hu ia id is it \
ja ka kk km kn ko lt lv mk ml mr ms my nl nn oc or pa pt pl rm \
ro ru rw si sq sk sl sr sv ta te th tr uk ur uz vi xh zh"



  PKGMK_CONF='
export CFLAGS="-O2 -pipe"
export CXXFLAGS="${CFLAGS}"
export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)"
PKGMK_CLEAN="no"
PKGMK_SOURCE_DIR="/sources"
PKGMK_IGNORE_REPO="no"
PKGMK_IGNORE_COLLECTION="no"
PKGMK_IGNORE_RUNTIMEDEPS="no"
PKGMK_GROUPS=(devel man doc sources)'


  PKGMK_CONF+="
PKGMK_PACK_SOURCE_DIR=\"$PKGMK_PACK_SOURCE_DIR\"
PKGMK_LOCALES=($PKGMK_LOCALES)
PKGMK_WGET_OPTS=\"$PKGMK_WGET_OPTS\"
PKGMK_KEEP_SOURCES=\"$PKGMK_KEEP_SOURCES\"
PKGMK_WORK_DIR=\"$PKGMK_WORK_DIR\"
PKGMK_GROUPS=($PKGMK_GROUPS)
PKGMK_COMPRESSION_OPTS=\"$PKGMK_COMPRESSION_OPTS\"
PKGMK_COMPRESS_PACKAGE=\"$PKGMK_COMPRESS_PACKAGE\"
PKGMK_COMPRESSION_MODE=\"$PKGMK_COMPRESSION_MODE\""
}
setup_base_config() {
  [ -z "$BASE" ] && CARDS_CONF+="
base /DEPOT/$1"
}
setup_cards_conf() {
  CARDS_CONF="group devel
group lib"
  FOUND="no"
  MYCOLLECTION="${COLLECTION%-extra}"
  for i in "${COLLECTIONS[@]}"
  do
     [ $i == $MYCOLLECTION ] && FOUND="yes"
  done
  if [ $FOUND == "yes" ]; then
    unset MYCOLLECTION
  fi
  FOUND="no"
  for i in "$MYCOLLECTION" "${COLLECTIONS[@]}"
  do
    [ -z $i ] && continue
    if [ $FOUND == "yes" ];then
      CARDS_CONF+="
dir /DEPOT/$i"
      setup_base_config "$i"
      continue
    fi
    if [ $COLLECTION == $i-extra ]; then
      CARDS_CONF+="
dir /DEPOT/$i-extra
dir /DEPOT/$i"
      setup_base_config "$i-extra"
      setup_base_config "$i"
      FOUND="yes"
    fi
    if  [ $COLLECTION == $i ]; then
      CARDS_CONF+="
dir /DEPOT/$i"
      setup_base_config "$i"
      FOUND="yes"
    fi
  done
  if [ ! -z "$BASE" ]; then
    for i in ${BASE[@]}; do
      CARDS_CONF+="
base /DEPOT/$i"
    done
  fi
  CARDS_CONF+="
logdir /LOGS"
}
#
#
########################################################################
# BEGIN HERE
########################################################################

check_root
[ -f $HOME/.mybld ] && source $HOME/.mybld
[ -z "$ROOTMOUNT" ] && ROOTMOUNT="$HOME/www"
[ -z "$ROOT" ] && ROOT="$HOME/mybld"
[ -z "$URL" ] && URL="https://repo.great-os.org/"
[ -z "$EDITOR" ] && EDITOR="nano"
[ -z "$COLLECTIONS" ] && COLLECTIONS=(gui cli base)

if [ -z "${1}" ]; then
  echo "
>>> At least one argument is mandatory
"
  exit 1
fi
if ! ( $(which rsync > /dev/null) ); then
  echo "
>>>     'rsync' not available
"
  exit 1
fi
if ! ( $(which git > /dev/null) ); then
  echo "
>>>     'git' not available
"
  exit 1
fi
if ! ( $(which $EDITOR > /dev/null) ); then
  echo "
>>>     '$EDITOR' not available
"
  exit 1
fi
if [ ! -d .git ]; then
  echo "
>>> No Git project found in '"$(pwd)"', The '.git' folder not exist.
"
  exit 1
fi

[ -z "$VERSION" ] && VERSION="$(git branch --show-current)"

GIT_PROJ=$(pwd)

if [ -z "$GIT_PROJ" ]; then
  error "Git root: ${GIT_PROJ} empty"
  exit 1
fi

GIT=$(basename $GIT_PROJ)

CLEANUP="no"

parse_arguments "$@"
find_version

if [ "$INIT" == "yes" ]; then
  create_folders
  exit 0
fi

[ -z "$PACKAGES_LIST" ] || CONFIRM="yes"

[ -z "$COLLECTION" ] && find_collection

if [ "$SYNC" == "yes" ]; then
  rsync_binaries
fi

if [ -z "${PARAM[0]}" ]; then
  if [ -z "${COLLECTION}" ]; then
    echo "
>>> Specify the collection
"
    exit  1
  fi
fi

if [ -z "${COLLECTION}" ]; then
  echo "
>>> package '${PARAM[0]}' not found in any collection
"
  exit  1
fi

if [[ -d "$ROOT/${VERSION}/${COLLECTION}" && "$CLEANUP" != "yes" ]]; then
  mount | grep /"${VERSION}/${COLLECTION}"
  echo "
>>> $ROOT/${VERSION}/${COLLECTION} exist ...
"
  echo -n "Safety cleanup of $ROOT/${VERSION}/${COLLECTION} ? : "
  answer
  CLEANUP="auto"
fi

if [ "$CLEANUP" != "no" ]; then
  MOUNT_POINTS="DEPOT LOGS sources"
  umount_all
  remove_all "/${VERSION}/${COLLECTION}"
  [ "$CLEANUP" == "yes" ] && exit 0
fi

if [ -z ${PACKAGES_LIST} ]; then
 if [ ! -z "${PARAM[1]}" ]; then
  CONFIRM="yes"
    if [ ! -f "$COLLECTION/${PARAM[0]}/Pkgfile" ]; then
      echo " $COLLECTION/${PARAM[0]}/Pkgfile not exist"
      exit 1
    fi
    . "$COLLECTION"/"${PARAM[0]}"/Pkgfile
    if [ -z "$version" ]; then
      echo ">>> version variable not set !"
      exit 1
    fi
    if [ "$version" == "${PARAM[1]}" ]; then
      echo ">>> version is the same !!!"
      exit 1
    fi
 fi
 if [ "$INCREMENT" == "yes" ]; then
  CONFIRM="yes"
  if [ ! -f "$COLLECTION/${PARAM[0]}/Pkgfile" ]; then
    echo " $COLLECTION/${PARAM[0]}/Pkgfile not exist"
    exit 1
  fi
  . "$COLLECTION"/"${PARAM[0]}"/Pkgfile
  [ -z "$release" ] && release=1

 fi
fi
# check if VERSION folder exist
if ! [ -d "$ROOT/$VERSION" ]; then
  echo ">>>   $ROOT/$VERSION folder not exist."
  exit 1
fi

# check if VERSION is own by me
if ! [ -O "$ROOT/$VERSION" ]; then
  echo ">>> $ROOT/$VERSION is not own by $(whoami)"
  exit 1
fi


setup_cards_conf

DEVEL="cards.devel \
&& cd /root/$GIT \
$PAUSE \
&& bash scripts/$COLLECTION"

[ -z "${PARAM[0]}" ] && CHROOT="ncurses readline bash"
[ -z "$PACKAGES_LIST" ] || CHROOT="ncurses readline bash"

if [ ! -z ${PACKAGES_LIST} ]; then
   DEVEL="$DEVEL -a"
else
  if [ -z "${PARAM[0]}" ]; then
    DEVEL="$DEVEL -a"
  else
    DEVEL="$DEVEL ${PARAM[0]}"
  fi
fi

setup_pkgmk_conf

export DEVEL VERSION
echo ""
if [ -f $HOME/.mybld ];then
  echo " $HOME/.mybld:
 =================================
"

  cat $HOME/.mybld
else
  echo ">>>       $HOME/.mybld not found"
fi
echo ""
echo " pkgmk.conf:
 ==========="
echo "$PKGMK_CONF"
echo ""
echo " cards.conf:
 ==========="
echo "$CARDS_CONF"
echo ""
echo " COLLECTION: $COLLECTION"
echo "GIT Project: $GIT_PROJ"
echo "    VERSION: $VERSION"
echo "      DEVEL: $DEVEL "
echo "     CHROOT: $CHROOT"
echo "The command: KERNEL="NONE" DNS="$DNS" CHROOT="$CHROOT" LFS="$ROOT/${VERSION}/${COLLECTION}" DEPOT="/DEPOT" DEVEL="$DEVEL" install-great-os"
echo ""
echo "The rsync  : rsync -a $GIT_PROJ/${COLLECTION}/ $ROOT/${VERSION}/${COLLECTION}/root/$GIT/${COLLECTION}/"
echo ""
echo " install-great-os:
 =============="
KERNEL="NONE" DNS="$DNS" CHROOT="$CHROOT" LFS="$ROOT/${VERSION}/${COLLECTION}" DEPOT="/DEPOT" DEVEL="$DEVEL" install-great-os -t
echo ""

if [ -z "$PACKAGES_LIST" ]; then
  if [ ! -z "${PARAM[1]}" ]; then
    find_new_packager
    echo ""
    echo " Upgrading ${PARAM[0]}:"
    echo "       version: $version -> ${PARAM[1]}"
    if [ "$packager" != "$newpackager" ]; then
      echo "      packager: $packager -> $newpackager"
      echo "  contributors: $contributors -> $newcontributors"
    fi
    echo ""
  fi
else
  for i in ${PACKAGES_LIST[@]}
  do
    . $i/Pkgfile
    find_new_packager
    echo " Upgrading $(basename $i): $version -> ${PARAM[1]}"
    if [ "$packager" != "$newpackager" ]; then
       echo "      packager: $packager -> $newpackager"
       echo "  contributors: $contributors -> $newcontributors"
       echo ""
    fi
  done
  echo ""
fi

if [ "$INCREMENT" == "yes" ]; then
  find_new_packager
  echo " Upgrading ${PARAM[0]}:"
  echo "       version: $version-$release -> $version-$((release+1))"
  if [ "$packager" != "$newpackager" ]; then
    echo "      packager: $packager -> $newpackager"
    echo "  contributors: $contributors -> $newcontributors"
  fi
  echo ""
fi
if [ "$CONFIRM" == "yes" ]; then
  echo -n "  OK ? (y) : "
  answer
fi

#
##### Main Config files ######
mkdir -p "$ROOT/${VERSION}/${COLLECTION}/etc" || exit 1
echo "$PKGMK_CONF" > $ROOT/$VERSION/$COLLECTION/etc/pkgmk.conf
echo "$CARDS_CONF" > $ROOT/$VERSION/$COLLECTION/etc/cards.conf
##############################

if [ -z "$PACKAGES_LIST" ]; then
   if [ ! -z "${PARAM[1]}" ]; then
     sed -i "s@version=$version@version=${PARAM[1]}@" \
      "$COLLECTION"/"${PARAM[0]}"/Pkgfile
     sed -i "/release=/d" "$COLLECTION"/"${PARAM[0]}"/Pkgfile
     if [ "$packager" != "$newpackager" ]; then
      sed -e 's/^\(packager=\).*/\1/g' \
       -e "s/packager=/packager=\"$newpackager\"/" \
       -i "$COLLECTION"/"${PARAM[0]}"/Pkgfile
      sed -e 's/^\(contributors=\).*/\1/g' \
       -e "s/contributors=/contributors=\"$newcontributors\"/" \
       -i "$COLLECTION"/"${PARAM[0]}"/Pkgfile
     fi
   fi
else
  for i in ${PACKAGES_LIST[@]}
  do
    . $i/Pkgfile
    find_new_packager
    sed -i "s@version=$version@version=${PARAM[1]}@" \
      "${i}"/Pkgfile
     sed -i "/release=/d" "${i}"/Pkgfile
     if [ "$packager" != "$newpackager" ]; then
      sed -e 's/^\(packager=\).*/\1/g' \
       -e "s/packager=/packager=\"$newpackager\"/" \
       -i "${i}"/Pkgfile
      sed -e 's/^\(contributors=\).*/\1/g' \
       -e "s/contributors=/contributors=\"$newcontributors\"/" \
       -i "${i}"/Pkgfile
     fi
  done
fi
if [ "${PARAM[1]}" = "" ]; then
    if [ -f "$COLLECTION/${PARAM[0]}/Pkgfile" ]; then
        . "$COLLECTION"/"${PARAM[0]}"/Pkgfile
        if [ -z "$version" ]; then
            echo ">>> version variable not set !"
            exit 1
        fi
    fi
fi

if [ "$INCREMENT" == "yes" ]; then
  sed -i "/release=/d" "$COLLECTION"/"${PARAM[0]}"/Pkgfile
  sed -i "/^version=/ a release=$((release+1))" "$COLLECTION"/"${PARAM[0]}"/Pkgfile
  if [ "$packager" != "$newpackager" ]; then
    sed -e 's/^\(packager=\).*/\1/g' \
    -e "s/packager=/packager=\"$newpackager\"/" \
    -i "$COLLECTION"/"${PARAM[0]}"/Pkgfile
    sed -e 's/^\(contributors=\).*/\1/g' \
    -e "s/contributors=/contributors=\"$newcontributors\"/" \
    -i "$COLLECTION"/"${PARAM[0]}"/Pkgfile
  fi
fi

if [ "${PARAM[1]}" = "" ]; then
    if [ -f "$COLLECTION/${PARAM[0]}/Pkgfile" ]; then
        . "$COLLECTION"/"${PARAM[0]}"/Pkgfile
	if ( $(which pkgmk > /dev/null) ); then
		cd "$COLLECTION/${PARAM[0]}/"
		pkgmk -td
		rc=$?
		cd - > /dev/null
		[ $rc -ne 0 ] && exit 1
	else
		echo "=====> cards.devel is not install !
=====> Cannot check if URL source(s) is valid"
        fi
    fi
fi

mkdir -p $ROOT/${VERSION}/${COLLECTION}/DEPOT || error /${VERSION}/${COLLECTION}
if [ -d ${ROOTMOUNT}/$(uname -m)/${VERSION} ]; then
  sudo mount --bind ${ROOTMOUNT}/$(uname -m)/${VERSION} $ROOT/${VERSION}/${COLLECTION}/DEPOT || error /${VERSION}/${COLLECTION}
  if [ -z "${PARAM[0]}" ]; then
     if [ ! -f $ROOT/${VERSION}/${COLLECTION}/DEPOT/${COLLECTION}/.PKGREPO ]; then
        sudo mkdir -p $ROOT/${VERSION}/${COLLECTION}/DEPOT/${COLLECTION}
        sudo touch $ROOT/${VERSION}/${COLLECTION}/DEPOT/${COLLECTION}/.PKGREPO
     fi
  fi
else
  error /${VERSION}/${COLLECTION}
fi
MOUNT_POINTS="DEPOT"

mkdir -p $ROOT/${VERSION}/${COLLECTION}/LOGS
if [ -d ${ROOTMOUNT}/logs/$(uname -m)/${VERSION} ];then
  sudo mount --bind ${ROOTMOUNT}/logs/$(uname -m)/${VERSION} $ROOT/${VERSION}/${COLLECTION}/LOGS || error /${VERSION}/${COLLECTION}
else
  error /${VERSION}/${COLLECTION}
fi
MOUNT_POINTS="$MOUNT_POINTS LOGS"


mkdir -p $ROOT/${VERSION}/${COLLECTION}/sources || error /${VERSION}/${COLLECTION}
if [ -d ${ROOTMOUNT}/sources ]; then
  sudo mount --bind ${ROOTMOUNT}/sources $ROOT/${VERSION}/${COLLECTION}/sources || error /${VERSION}/${COLLECTION}
else
  error /${VERSION}/${COLLECTION}
fi
MOUNT_POINTS="$MOUNT_POINTS sources"

mkdir -p $ROOT/${VERSION}/${COLLECTION}/root/$GIT/scripts || error /${VERSION}/${COLLECTION}
rsync -a $GIT_PROJ/${COLLECTION}/ $ROOT/${VERSION}/${COLLECTION}/root/$GIT/${COLLECTION}/ || error "rsync"

ln -sv /usr/bin/build-port $ROOT/${VERSION}/${COLLECTION}/root/$GIT/scripts/${COLLECTION}

echo 'running the command:
sudo KERNEL="NONE" DNS="$DNS" CHROOT="$CHROOT" LFS="$ROOT/${VERSION}/${COLLECTION}" DEPOT="/DEPOT" DEVEL="$DEVEL" install-great-os || error /${VERSION}/${COLLECTION}'
sudo KERNEL="NONE" DNS="$DNS" CHROOT="$CHROOT" LFS="$ROOT/${VERSION}/${COLLECTION}" DEPOT="/DEPOT" DEVEL="$DEVEL" install-great-os || error /${VERSION}/${COLLECTION}

ding
umount_all
remove_all "/${VERSION}/${COLLECTION}"
unset VERSION DEVEL

# Don't try to commit if no specific package was build
if [ -z "${PARAM[0]}" ]; then
  exit 0
fi
echo -n "  Commit ? (y) : "
answer

cd "${GIT_PROJECT}"
source /etc/profile.d/cards.sh

if [ -z ${PACKAGES_LIST} ]; then
   commit "$COLLECTION/${PARAM[0]}"
else
   for i in ${PACKAGES_LIST[@]}
   do
       commit "$i"
   done
fi
exit 0
