#!/bin/bash

# Skygge@2021
# www.skygge.com

user=$(whoami)
group=$(id -ng $user)
config=$HOME/.config/argit.conf

echo "Konfigurator kompilacji programu Ardour"
echo ""
read -p "Podaj katalog do którego ściągnę źródła programu (/usr/src/ardour-git): " -e srcdir
read -p "Podaj katalog instalacji programu (/opt/ardour): " -e installdir
read -p "Podaj ile skompilowanych wersji programu chcesz trzymać na wszelki wypadek (3): " -e versionstokeep
echo ""

[[ ! $srcdir ]] && srcdir=/usr/src/ardour-git
[[ ! $installdir ]] && installdir=/opt/ardour
[[ ! $versionstokeep ]] && versionstokeep=3

# Sprawdzam czy nie podano bzdur

# srcdir
if [ ! -d $srcdir ]; then
    echo "Zakładam katalog na źródła."
    #spr czy srcdir znajduje się w katalogu domowym użytkownika
    if [ $(echo $srcdir|grep $HOME) ]; then 
	mkdir $srcdir
    else
	echo "Będzie potrzebne hasło użytkownika root."
	sudo mkdir $srcdir
	sudo chown $user:$group $srcdir
    fi
    if [ $? -ne 0 ]; then
	echo "BŁAD: Nie udało się utworzyć katalogu. Uruchom program ponownie i podaj prawidłowe dane."
	exit 1
    else
	echo "Katalog na źródła Ardour poprawnie założony."
    fi
else
    echo -n "Katalog na źródła Ardour istnieje. Sprawdzam dostęp...."
    touch $srcdir/testfile 2>/dev/null && rm $srcdir/testfile 2>/dev/null
    if [ $? -ne 0 ]; then
	echo "BŁĄD: Nie udało się uzyskać dostępu do katalogu. Zmieniam właściciela na $user:$group."
	sudo chown $user:$group $srcdir
    else
	echo "OK."
    fi
fi

# installdir
if [ ! -d $installdir ]; then
    echo "Zakładam katalog do instalacji programu."
    #spr czy srcdir znajduje się w katalogu domowym użytkownika
    if [ $(echo $installdir|grep $HOME) ]; then 
	mkdir $installdir
    else
	echo "Będzie potrzebne hasło użytkownika root."
	sudo mkdir $installdir
	sudo chown $user:$group $installdir
    fi
    if [ $? -ne 0 ]; then
	echo "BŁĄD: Nie udało się utworzyć katalogu. Uruchom program ponownie i podaj prawidłowe dane."
	exit 1
    else
	echo "Katalog instalacji Ardour poprawnie założony."
    fi
else
    echo -n "Katalog instalacji programu Ardour istnieje. Sprawdzam dostęp...."
    touch $installdir/testfile && rm $installdir/testfile
    if [ $? -ne 0 ]; then
	echo "BŁĄD: Nie udało się uzyskać dostępu do katalogu. Zmieniam właściciela na $user:$group."
	sudo chown $user:$group $installdir
    else
	echo "OK."
    fi
fi

# Ilość wersji - czy podano integer?

if [[ ! "$versionstokeep" =~ ^[0-9]+$ ]]; then
    echo "BŁĄD: Ilość skompilowanych wersji programu nie jest liczbą naturalną. Uruchom program ponownie i podaj poprawną wartość lub pozostaw domyślną (3)."
    exit 1
fi

# Ilość rdzeni procesora w celu przyspieszenia kompilacji"
cpucores=$(cat /proc/cpuinfo |grep processor|wc -l)

# Tworzenie skryptu uruchamiającego najnowszą wersję Ardour w $installdir

cat <<'EOF' > ./ardour-git
#!/bin/bash

user=$(whoami)
group=$(id -ng $user)
config=$HOME/.config/argit.conf

# Spr czy istnieje plik konfiguracyjny
if [ ! -f $config ]; then
    echo "Nie znalazłem pliku konfiguracyjnego w $config. Uruchamiam kreator konfiguracji."
    echo "Po zakończonej konfiguracji uruchom program argit w celu pobrania źródeł programu a następnie arcompile w celu kompilacji źródeł.."
    arconfig
    exit 1
else
    . $config
fi

# Spr czy istnieje katalog instalacji
if [ ! -d $installdir ]; then
    echo "Katalog na źródła $installdir nie istnieje. Uruchamiam kreator konfiguracji."
    echo "Po zakończonej konfiguracji uruchom program argit w celu pobrania źródeł programu a następnie arcompile w celu kompilacji źródeł.."
    arconfig
    exit 1
fi

cd $installdir

# Znajdujemy najnowszą wersję
versions=`find . -mindepth 1 -maxdepth 1 -type d|sort -V|cut -d "/" -f2`

for version in $versions
do
    # czy w katalogu z wersją znajduje się plik wykonywalny do uruchomienia programu

    for number in $(seq 1 10)
    do
	[[ -x $version/bin/ardour$number ]] && currentversion=$version && currentnumber=$number
    done
done

[[ $currentversion ]] && $installdir/$currentversion/bin/ardour$currentnumber
EOF

chmod +x ardour-git
mv ardour-git $installdir

echo "#argit/arcompile configuration file">$config
echo "">>$config
echo "srcdir=$srcdir">>$config
echo "installdir=$installdir">>$config
echo "versionstokeep=$versionstokeep">>$config
echo "cpucores=$cpucores">>$config


echo "Plik konfiguracyjny utworzony w $config."
echo "Wykryłem $cpucores wątków procesora. Kompilacja będzie uruchomiona z użyciem ich wszystkich."
echo "Jeśli chcesz to zmienić, zmień parametr cores w pliku $config na żądaną wartość."

echo "Zainstaluję teraz wszystkie wymagane zależności oraz pakiety dodatkowe które są niezbędne w procesie kompilacji"
echo "oraz w późniejszym działaniu programu Ardour. Jeśli część z nich masz już zainstalowane u siebie w systemie"
echo "nie zostaną one zainstalowane ponownie."
echo "Operacja ta wymaga uprawnień roota, więc pewnie zostaniesz poproszony o podanie hasła."
sleep 3
sudo apt-get install -y git python libboost-all-dev jackd2 libjack-jackd2-dev libasound2-dev libpulse-dev libglibmm-2.4-dev libsndfile1-dev libcurl4-gnutls-dev libarchive-dev liblo-dev libtaglib-cil-dev libtaglib-ocaml-dev vamp-plugin-sdk \
librubberband-dev libudev-dev libfftw3-dev libaubio-dev libxml2-dev libcppunit-dev libusb-1.0-0-dev libwebsockets-dev libcwiid-dev libpangomm-1.4-dev liblrdf0-dev libsamplerate0-dev lv2-dev libserd-dev libsord-dev libsratom-dev liblilv-dev \
libsuil-dev libsoundtouch-dev libgtkmm-2.4-dev

echo ""

echo "W celu jak najlepszego działania programu Ardour należy przypisać konto użytkownika do grupy audio."
echo "W innym przypadku Ardour przy uruchomieniu będzie pokazywał ostrzeżenie o ustawionym limicie pamięci."
echo "Aby zmiany odniosły skutek trzeba się przelogować. Możesz zrobić to po zakończeniu całego procesu, teraz nie ma takiej potrzeby."
echo "Możesz zostać poproszony o hasło administratora."
echo ""

sudo usermod -a -G audio $user
echo "Użytkownik $user został przypisany do grupy audio."
echo "Teraz możesz przystąpić do pobrania źródeł programu Ardour za pomocą polecenia argit."
