#!/bin/bash
currdir=$(pwd)
dirname=$(pwd|rev|cut -d/ -f1|rev)
[[ $dirname != SOURCES ]] && { echo "Not in SOURCES"; exit 1; }

# Create new spec file in SPECS
cp -f spec.tpl ../SPECS/pcb-rnd.spec.new

# Get version from old spec
ver=$(cat ../SPECS/pcb-rnd.spec | grep -m 1 "Version:" |tr '\t' ' '|tr -s ' '| cut -d' ' -f2)
# Get rel from old spec
rel=$(cat ../SPECS/pcb-rnd.spec | grep -m 1 "%define rel"|rev|cut -d' ' -f1|rev)
# Check if define svn is commented in old spec
svn=$(cat ../SPECS/pcb-rnd.spec | grep -m 1 "define svn"|cut -c1)
if [[ $svn == "%" ]]; then # Use svn snapshot tarball
    svnrev=$(cat ../SPECS/pcb-rnd.spec | grep -m 1 "%define svn"|rev|cut -d' ' -f1|rev)
    sed -i "s/\@svn-revision\@/%define svn     $svnrev/" $currdir/../SPECS/pcb-rnd.spec.new
    version=$svnrev
else
    sed -i "s/\@svn-revision\@/#define svn/" $currdir/../SPECS/pcb-rnd.spec.new
    version=$ver
fi

# Extract tarball in SOURCES
tar -xf pcb-rnd-$version.tar.gz

# Set version from old spec into new spec
sed -i "s/\@version\@/Version:        $ver/" $currdir/../SPECS/pcb-rnd.spec.new
# Set rel from old spec into new spec
sed -i "s/\@release\@/%define rel     $rel/" $currdir/../SPECS/pcb-rnd.spec.new

# Generate upstream packaging lists
cd pcb-rnd-$version/doc/developer/packaging
./packages.sh || { echo "packages.sh failed"; exit 1; }

cd $currdir

# Save path to auto dir 
auto="pcb-rnd-$version/doc/developer/packaging/auto/"

# Configure args
args=$(cat "$auto"Configure.args|tr '\n' ':'|tr ':' ' ')
sed -i "s:@MAIN_CONFIGURE_OPTIONS@:$args:" ../SPECS/pcb-rnd.spec.new

cd $auto
# Sub-package Requires
for p in pcb-rnd-*.deps; do
if [[ $(echo $p|cut -c1-3) == "pcb" ]]; then
pkg=$(echo $p|rev|cut -d/ -f1|rev|cut -d- -f3-|cut -d. -f1)
else
pkg=$(echo $p|cut -d. -f1)
fi
	while read line; do
	    line=$(echo $line|sed  's/wget //')
        line=$(echo "$line"|sed 's/ / = %{version}-%{release}\\nRequires:       /g')
        line=$(echo "$line"|sed 's/pcb-rnd/%{name}/g')
        echo "Requires:       $line = %{version}-%{release}" >> $currdir/tmp.txt
	done < "pcb-rnd-$pkg.deps"
tmptxt="$(cat $currdir/tmp.txt)"
sed -i "s/@${pkg}-req@/${tmptxt//$'\n'/\\n}/" $currdir/../SPECS/pcb-rnd.spec.new
rm -f $currdir/tmp.txt
done

# files
for p in *.files; do
if [[ $(echo $p|cut -c1-3) == "pcb" ]]; then
pkg=$(echo $p|rev|cut -d/ -f1|rev|cut -d- -f3-|cut -d. -f1)
else
pkg=$(echo $p|cut -d. -f1)
fi
    [[ $pkg == "doc"  ]] && continue
	files=$(cat $p|sed 's:\\n: :g')
	files=$(echo $files|sed -e 's/$PREFIX/%{_usr}/g')
	files=$(echo $files|sed -e 's:%{_usr}/share:%{_datadir}:g')
	files=$(echo $files|sed -e 's:%{_datadir}/man:%{_mandir}:g')
	files=$(echo $files|sed -e 's:%{_usr}/include:%{_includedir}:g')
	files=$(echo $files|sed -e 's:%{_usr}/bin:%{_bindir}:g')
	files=$(echo $files|sed -e 's:%{_usr}/lib/librnd/plugins:%{libplugindir}:g')
	files=$(echo $files|sed -e 's:%{_usr}/lib:%{_libdir}:g')
	files=$(echo $files|sed -e 's/$P/%{plugindir}/g')
    files=$(echo $files|sed -e "s/\$C/%config(noreplace)\@%{_datadir}\/%{name}/g")
	files=$(echo $files|sed -e "s/\$LP/%{libplugindir}/g")
    files=$(echo $files|sed -e "s/\$LC/%config(noreplace)\@%{_datadir}\/librnd/g")
    files=$(echo $files|sed -e 's/pcb-rnd/%{name}/g')
    files=$(echo $files|sed -e 's/ /\\n/g')
    files=$(echo $files|sed -e 's/@/ /g')
sed -i "s:@${pkg}-files@:${files//$'\n'/\\n}:" $currdir/../SPECS/pcb-rnd.spec.new
done

# Summary
for p in *.short; do
if [[ $(echo $p|cut -c1-3) == "pcb" ]]; then
pkg=$(echo $p|rev|cut -d/ -f1|rev|cut -d- -f3-|cut -d. -f1)
else
pkg=$(echo $p|cut -d. -f1)
fi
summary=$(cat $p|sed 's_\.$__'|sed 's_pcb-rnd __'|sed 's_ for pcb-rnd__'|sed 's_._\u&_')
sed -i "s_@${pkg}-summary@_${summary//$'\n'/\\n}_" $currdir/../SPECS/pcb-rnd.spec.new
done

# Main description
cat ../description.txt|fmt -s -w 80 > desc.txt
sed -i -l 79 '/%description/{
       r desc.txt
       :a
       n
       ba
     }' $currdir/../SPECS/pcb-rnd.spec.new
     
# Sub-package descriptions
for p in *.long; do
if [[ $(echo $p|cut -c1-3) == "pcb" ]]; then
pkg=$(echo $p|rev|cut -d/ -f1|rev|cut -d- -f3-|cut -d. -f1)
else
pkg=$(echo $p|cut -d. -f1)
fi
desc=$(cat $p|sed 's/\t//g'|fmt -w79)
sed -i "s_@${pkg}-desc@_${desc//$'\n'/\\n}_" $currdir/../SPECS/pcb-rnd.spec.new
done


# Add * to man files for compressed versions
sed -i 's/%{_man.*/&*/g' $currdir/../SPECS/pcb-rnd.spec.new
# Move these files to /usr/lib on 64 bit
sed -i 's:%{_libdir}/%{name}/\*.scm:%{_usr}/lib/%{name}/\*.scm:' $currdir/../SPECS/pcb-rnd.spec.new

# Save original spec as backup
cp -f $currdir/../SPECS/pcb-rnd.spec $currdir/../SPECS/pcb-rnd.spec~ || \
{ echo "Problem backing up old spec"; exit 1; }

# Write new spec.
cp -f $currdir/../SPECS/pcb-rnd.spec.new $currdir/../SPECS/pcb-rnd.spec || \
{ echo "Problem writing new spec"; exit 1; }

# Remove pcb-rnd.spec.new
rm -f $currdir/../SPECS/pcb-rnd.spec.new

echo "../SPECS/pcb-rnd.spec has been updated :)"
