#!/bin/bash

analyse () {
  code_retour=$1
  if [ "$code_retour" != "0" ]
  then
    echo "ERREUR"
    \rm -rf /tmp/$$
    exit 1
  fi
}

COREUTILS="http://ftp.gnu.org/pub/gnu/coreutils/coreutils-6.9.tar.gz"
COREUTILS_PATCH="http://dev.gentoo.org/~vapier/dist/coreutils-6.9-patches-1.3.tar.bz2"

#COREUTILS="http://localhost/coreutils-6.9.tar.gz"
#COREUTILS_PATCH="http://localhost/coreutils-6.9-patches-1.3.tar.bz2"

#################################################################
# Preparation environnement
echo "Preparation de l'environnement "
mkdir /tmp/$$
analyse $? $LINENO
cd /tmp/$$
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
# Telechargements
echo "Telechargement des sources : $COREUTILS"
wget $COREUTILS 
analyse $? $LINENO
sleep 5 && echo ""

echo "Telechargement du patch : $COREUTILS_PATCH"
wget $COREUTILS_PATCH
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
# Decompression des archives
COREUTILS_fich=$(basename $COREUTILS)
COREUTILS_PATCH_fich=$(basename $COREUTILS_PATCH)

echo "Decompression de $COREUTILS_fich"
tar zxvf $COREUTILS_fich > /dev/null
analyse $? $LINENO
sleep 5 && echo ""
echo "Decompression de $COREUTILS_PATCH_fich"
tar xjvf $COREUTILS_PATCH_fich > /dev/null
analyse $? $LINENO
sleep 5 && echo ""

dossier_coreutils=$(echo "$COREUTILS_fich" | sed "s#\.tar\.gz##g")

#################################################################
echo "Creation lien symbolique : coreutils -> $dossier_coreutils"
ln -s $dossier_coreutils coreutils
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
echo "Application du patch de la progress bar sur coreutils"
patch -p0 < patch/generic/001_all_coreutils-gen-progress-bar.patch
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
echo "Modification des sources pour la compilation sous Ubuntu"
cd coreutils
for file in src/{copy,touch}.c lib/utimens.{c,h} ; do \
   cp -v $file{,.orig}
   sed 's/futimens/gl_&/' $file.orig > $file
done
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
echo "Debut de la generation"
./configure --program-prefix=patch-  CC=c99 CFLAGS=-g
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
echo "Lancement du make"
make
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
echo "Installation des executables : (Utilisation de la commande sudo)"
echo "  - /usr/bin/patch-cp"
sudo install -o root -g root -m 755 src/cp /usr/local/bin/patch-cp
analyse $? $LINENO
sudo install -o root -g root -m 755 src/mv /usr/local/bin/patch-mv
analyse $? $LINENO
sleep 5 && echo ""

#################################################################
taille_restante=$(df -m . | awk '(NR==2){ print $4; }')

if [ $taille_restante -lt 2500 ]
then
  echo "Il n'y a pas assez d'espace sur /tmp pour que le script teste l'installation"
  echo "Vous pouvez des a present tester sur des gros fichiers en executant les commandes :"
  echo "  - patch-cp -g src dest"
  echo "  - patch-mv -g src dest"
else
  FICH_TEST=/tmp/tmp.$$
  echo "TESTS : "
  echo "  - Creation fichier de 1 Go"
  dd if=/dev/zero of=$FICH_TEST bs=1k count=1000000
  analyse $? $LINENO
  sleep 5 && echo ""
  echo "  - Copie du fichier : patch-cp -g $FICH_TEST ${FICH_TEST}2"
  patch-cp -g $FICH_TEST ${FICH_TEST}2
  analyse $? $LINENO
  sleep 5 && echo ""
  \rm $FICH_TEST  ${FICH_TEST}2
fi

cd
\rm -rf /tmp/$$
