#!/bin/sh
if [ $(id -u) != 0 ]; then
 echo "Error: You must be root to run this script!" >&2
 exit 1
fi

DISTRIBUTION=squeeze
#DISTRIBUTION=sid

LLVM_VER=2.7

apt-get update
apt-get --yes install git-core 
apt-get --yes build-dep mesa xorg-server
apt-get --yes --purge remove llvm llvm-runtime
apt-get --yes install llvm-$LLVM_VER-dev llvm-$LLVM_VER
#apt-get --yes --purge remove llvm-$LLVM_VER llvm-$LLVM_VER-runtime libllvm$LLVM_VER

[ "$(uname -m)" = "x86_64" ] && apt-get --yes install gcc-multilib g++-multilib lib32ffi-dev

if [ "$(uname -m)" = "x86_64" ] && [ ! -r /usr/lib32/libXdamage.a ]; then
 rm -rf /tmp/libxdamage
 mkdir -p /tmp/libxdamage
 cd /tmp/libxdamage
 for x in $(dpkg -l|awk '/libxdamage-dev/{print $2}'); do
  p=$(wget -qO- http://packages.debian.org/$DISTRIBUTION/i386/$x/download|awk -F\" '/ftp.de/&&/pool/{print $2}')
  wget -N $p
  dpkg-deb -x ${p##*/} extract
 done
 #sed -i /libdir/s@/lib@/lib32@ extract/usr/lib/pkgconfig/*.pc
 rm -rf extract/usr/lib/pkgconfig
 mkdir -p /usr/lib32
 cp -rv extract/usr/lib/* /usr/lib32
 ldconfig
fi

if [ "$(uname -m)" = "x86_64" ] && [ ! -r /usr/lib32/llvm-$LLVM_VER/lib/libllvm.a ]; then
 rm -rf /tmp/llvm
 mkdir -p /tmp/llvm
 cd /tmp/llvm
 for x in $(dpkg -l|awk '/llvm/{print $2}'); do
  p=$(wget -qO- http://packages.debian.org/$DISTRIBUTION/i386/$x/download|awk -F\" '/ftp.de/&&/pool/{print $2}')
  wget -N $p
  dpkg-deb -x ${p##*/} extract
 done
 rm -rf /usr/lib32/llvm
 mkdir -p /usr/lib32
 sed -i s@/usr/lib@/usr/lib32@ extract/usr/lib/llvm-$LLVM_VER/bin/llvm-config
 cp -rv extract/usr/lib/* /usr/lib32
 ldconfig
fi

cd /tmp
rm -rf mesa-HEAD
[ -f mesa-HEAD.tar.bz2 ] || wget -N http://cgit.freedesktop.org/mesa/mesa/snapshot/mesa-HEAD.tar.bz2
tar jxf mesa-HEAD.tar.bz2
cd mesa-HEAD
#rm -rf mesa
#git clone --depth 1 git://anongit.freedesktop.org/mesa/mesa
#cd mesa
#wget -qO- http://cgit.freedesktop.org/mesa/mesa/patch/?id=70227e21bbd4411956ceeb5039640140e64a11a8|patch -Rp1
autoreconf -vi
if ! false; then
if [ "$(uname -m)" = "x86_64" ]; then
 PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig ./configure --prefix=/usr $(./configure --help|awk '/--enable-texture-float/{print $1}') LLVM_CONFIG=/usr/lib/llvm-$LLVM_VER/bin/llvm-config
 [ $# -gt 0 ] && PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig ./configure --prefix=/usr --with-state-trackers=glx,dri,egl $(./configure --help|awk '/--enable-gallium|--enable-texture-float/{print $1}') LLVM_CONFIG=/usr/lib/llvm-$LLVM_VER/bin/llvm-config
 echo "Hint: mesa is compiling now without output, everything is logged to $(pwd)/log-*" >&2
 parallel=$(grep -c ^processor /proc/cpuinfo 2>/dev/null||echo 1)
 count=1
 while ! PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig make -j$parallel > log-$count 2>&1;do
  if [ $count -ge 10 ]; then
   echo "ERROR: Can not compile mesa correctly, please check for errors in log-$count!" >&2
   exit 2
  fi
  count=$((count+1))
 done 
else
 ./configure --prefix=/usr $(./configure --help|awk '/--enable-texture-float/{print $1}') LLVM_CONFIG=/usr/lib/llvm-$LLVM_VER/bin/llvm-config
 [ $# -gt 0 ] && ./configure --prefix=/usr --with-state-trackers=glx,dri,egl $(./configure --help|awk '/--enable-gallium|--enable-texture-float/{print $1}') LLVM_CONFIG=/usr/lib/llvm-$LLVM_VER/bin/llvm-config
 echo "Hint: mesa is compiling now without output, everything is logged to $(pwd)/log-*" >&2
 parallel=$(grep -c ^processor /proc/cpuinfo 2>/dev/null||echo 1)
 count=1
 while ! make -j$parallel > log-$count 2>&1;do
  if [ $count -ge 10 ]; then
   echo "ERROR: Can not compile mesa correctly, please check for errors in log-$count!" >&2
   exit 2
  fi
  count=$((count+1))
 done
fi
make install 2>&1 | tee log-install
fi

if [ "$(uname -m)" = "x86_64" ]; then
 #cd /tmp
 #rm -rf mesa-HEAD
 #tar jxf mesa-HEAD.tar.bz2
 #cd mesa-HEAD
 #autoreconf -vi
 sed -i 's@i*86|x86_64)@off)@' configure
 make clean
 ./configure --prefix=/usr --enable-32-bit --libdir=/usr/lib32 --with-dri-driverdir=/usr/lib32/dri $(./configure --help|awk '/--enable-texture-float/{print $1}')
 #[ $# -gt 0 ] && PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig ./configure --prefix=/usr -enable-32-bit --libdir=/usr/lib32 --with-dri-driverdir=/usr/lib32/dri --with-state-trackers=glx,dri,egl $(./configure --help|awk '/--enable-gallium|--enable-texture-float/{print $1}') LLVM_CONFIG=/usr/lib32/llvm-$LLVM_VER/bin/llvm-config
 [ $# -gt 0 ] && ./configure --prefix=/usr -enable-32-bit --libdir=/usr/lib32 --with-dri-driverdir=/usr/lib32/dri --with-state-trackers=glx,dri,egl $(./configure --help|awk '/--enable-gallium|--enable-texture-float/{print $1}')
 echo "Hint: mesa 32 bit is compiling now without output, everything is logged to $(pwd)/log32-*" >&2
 count=1
 while ! make -j$parallel > log32-$count 2>&1;do
  if [ $count -ge 10 ]; then
   echo "ERROR: Can not compile mesa for 32 bit correctly, please check for errors in log32-$count!" >&2
   exit 3
  fi
  count=$((count+1))
 done
 make install 2>&1 | tee log32-install
fi

cd /tmp
#rm -rf libtxc_dxtn-HEAD
#wget -N http://cgit.freedesktop.org/~mareko/libtxc_dxtn/snapshot/libtxc_dxtn-HEAD.tar.bz2
#tar jxf libtxc_dxtn-HEAD.tar.bz2
#cd libtxc_dxtn-HEAD
rm -rf libtxc_dxtn
git clone --depth 1 git://anongit.freedesktop.org/~mareko/libtxc_dxtn
cd libtxc_dxtn
./autogen.sh --prefix=/usr
make -j`grep -c ^processor /proc/cpuinfo 2>/dev/null||echo 1`
make install
if [ "$(uname -m)" = "x86_64" ]; then
 make clean
 ./configure --prefix=/usr --libdir=/usr/lib32
 make CC="gcc -m32" -j`grep -c ^processor /proc/cpuinfo 2>/dev/null||echo 1`
 make install
fi

rm -f /etc/X11/xorg.conf*
dpkg-reconfigure -phigh xserver-xorg
screen /etc/init.d/kdm restart
