#!/bin/bash # # Kamil Kaminski # revision 9 # echo -e "X.Org utility script\n" # compiler flags export CFLAGS="-march=native -mtune=native -O2 -fomit-frame-pointer" export CXXFLAGS="-march=native -mtune=native -O2 -fomit-frame-pointer" #export CPATH="/usr/local/include" #export ACLOCAL="aclocal -I /usr/local/share/aclocal" #export PREFIX=/usr/local #export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig" #export CPATH="/opt/gfx-test/include" export ACLOCAL="aclocal -I /opt/gfx-test/share/aclocal" export PKG_CONFIG_PATH="/opt/gfx-test/lib/pkgconfig:/opt/gfx-test/share/pkgconfig" export PREFIX="/opt/gfx-test" PATH=$PATH:$PREFIX/bin MAKE="make -j2" # list of repositories REPOS="\ git://anongit.freedesktop.org/git/xorg/util/makedepend \ git://anongit.freedesktop.org/git/cairo \ git://anongit.freedesktop.org/git/mesa/drm \ git://anongit.freedesktop.org/git/mesa/mesa \ git://anongit.freedesktop.org/git/nouveau/xf86-video-nouveau \ git://anongit.freedesktop.org/git/pixman \ git://anongit.freedesktop.org/git/xcb/libxcb \ git://anongit.freedesktop.org/git/xcb/proto \ git://anongit.freedesktop.org/git/xcb/pthread-stubs \ git://anongit.freedesktop.org/git/xkeyboard-config \ git://anongit.freedesktop.org/git/xorg/app/xkbcomp \ git://anongit.freedesktop.org/git/xorg/driver/xf86-input-evdev \ git://anongit.freedesktop.org/git/xorg/driver/xf86-input-keyboard \ git://anongit.freedesktop.org/git/xorg/driver/xf86-input-mouse \ git://anongit.freedesktop.org/git/xorg/driver/xf86-video-fbdev \ git://anongit.freedesktop.org/git/xorg/driver/xf86-video-intel \ git://anongit.freedesktop.org/git/xorg/driver/xf86-video-nv \ git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vesa \ git://anongit.freedesktop.org/git/xorg/font/misc-misc \ git://anongit.freedesktop.org/git/xorg/lib/libX11 \ git://anongit.freedesktop.org/git/xorg/lib/libXdamage \ git://anongit.freedesktop.org/git/xorg/lib/libXext \ git://anongit.freedesktop.org/git/xorg/lib/libXfixes \ git://anongit.freedesktop.org/git/xorg/lib/libXfont \ git://anongit.freedesktop.org/git/xorg/lib/libXinerama \ git://anongit.freedesktop.org/git/xorg/lib/libXrandr \ git://anongit.freedesktop.org/git/xorg/lib/libXv \ git://anongit.freedesktop.org/git/xorg/lib/libXvMC \ git://anongit.freedesktop.org/git/xorg/lib/libXxf86vm \ git://anongit.freedesktop.org/git/xorg/lib/libfontenc \ git://anongit.freedesktop.org/git/xorg/lib/libpciaccess \ git://anongit.freedesktop.org/git/xorg/lib/libxkbfile \ git://anongit.freedesktop.org/git/xorg/lib/libxtrans \ git://anongit.freedesktop.org/git/xorg/proto/bigreqsproto \ git://anongit.freedesktop.org/git/xorg/proto/compositeproto \ git://anongit.freedesktop.org/git/xorg/proto/damageproto \ git://anongit.freedesktop.org/git/xorg/proto/dri2proto \ git://anongit.freedesktop.org/git/xorg/proto/evieproto \ git://anongit.freedesktop.org/git/xorg/proto/fixesproto \ git://anongit.freedesktop.org/git/xorg/proto/fontsproto \ git://anongit.freedesktop.org/git/xorg/proto/glproto \ git://anongit.freedesktop.org/git/xorg/proto/inputproto \ git://anongit.freedesktop.org/git/xorg/proto/kbproto \ git://anongit.freedesktop.org/git/xorg/proto/randrproto \ git://anongit.freedesktop.org/git/xorg/proto/recordproto \ git://anongit.freedesktop.org/git/xorg/proto/renderproto \ git://anongit.freedesktop.org/git/xorg/proto/resourceproto \ git://anongit.freedesktop.org/git/xorg/proto/scrnsaverproto \ git://anongit.freedesktop.org/git/xorg/proto/videoproto \ git://anongit.freedesktop.org/git/xorg/proto/x11proto \ git://anongit.freedesktop.org/git/xorg/proto/xcmiscproto \ git://anongit.freedesktop.org/git/xorg/proto/xextproto \ git://anongit.freedesktop.org/git/xorg/proto/xf86dgaproto \ git://anongit.freedesktop.org/git/xorg/proto/xf86driproto \ git://anongit.freedesktop.org/git/xorg/proto/xf86vidmodeproto \ git://anongit.freedesktop.org/git/xorg/proto/xineramaproto \ git://anongit.freedesktop.org/git/xorg/util/macros \ git://anongit.freedesktop.org/git/xorg/xserver \ git://anongit.freedesktop.org/git/mesa/demos" # list of modules that will get compiled generically, without any extra flags modules="\ makedepend \ bigreqsproto \ compositeproto \ damageproto \ dri2proto \ evieproto \ fixesproto \ fontsproto \ glproto \ inputproto \ kbproto \ macros \ proto \ pthread-stubs \ randrproto \ recordproto \ renderproto \ resourceproto \ scrnsaverproto \ videoproto \ x11proto \ xcmiscproto \ xextproto \ xf86dgaproto \ xf86driproto \ xf86vidmodeproto \ xineramaproto \ libXdamage \ libXext \ libXfixes \ libfontenc \ libxtrans \ libXfont \ libXinerama \ libXrandr \ libXv \ libXvMC \ libXxf86vm \ libpciaccess \ libxcb \ libxkbfile \ misc-misc \ pixman \ xkbcomp \ xkeyboard-config \ libX11" # list of modules that may get compiled with custom flags modules2="\ cairo \ drm \ mesa \ xf86-input-evdev \ xf86-input-keyboard \ xf86-input-mouse \ xf86-video-fbdev \ xf86-video-intel \ xf86-video-nouveau \ xf86-video-nv \ xf86-video-vesa \ xserver" init() { for repo in $REPOS; do REPONAME=`basename $repo` if [ -d $REPONAME ]; then echo -e "\e[00;32m$REPONAME\e[00m \e[00;33mis already initialized, skipping\e[00m" else git clone $repo fi done } update_modules() { for module in $modules2; do REPONAME=`basename $module` if [ ! -d $REPONAME ]; then echo -e "\e[00;31m$REPONAME\e[00m \e[00;33mdoes not exist, skipping\e[00m" else cd $module echo -n "$module: " git pull #git rebase master cd .. fi done for module in $modules; do REPONAME=`basename $module` if [ ! -d $REPONAME ]; then echo -e "\e[00;31m$REPONAME\e[00m \e[00;33mdoes not exist, skipping\e[00m" else cd $module echo -n "$module: " git pull #git rebase master cd .. fi done } build() { exec 2> >(tee ../xorg.log) echo -e "\e[00;32mbuilding X.Org\n\e[00m" if [ -d $PREFIX ]; then echo "$PREFIX exists, removing..." rm -rf $PREFIX mkdir -p $PREFIX/share/aclocal mkdir -p $PREFIX/bin else mkdir -p $PREFIX/share/aclocal mkdir -p $PREFIX/bin fi if [ -d pthread-stubs ]; then cd pthread-stubs echo "building pthread-stubs" ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;31mpthread-stubs has not been cloned\e[00m" fi if [ -d macros ]; then cd macros echo "building macros" ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;31mmacros has not been cloned\e[00m" fi for i in $modules; do if [ -d $i ]; then cd $i echo ====================== echo configuring $i echo ====================== ./autogen.sh --prefix=$PREFIX echo ====================== echo building $i echo ====================== if [ $? -ne 0 ]; then echo "failed to configure $i." exit fi ($MAKE) make install cd .. else echo -e "\e[00;33m$i has not been cloned\e[00m" fi done if [ -d drm ]; then cd drm ./autogen.sh --prefix=$PREFIX --enable-nouveau-experimental-api ($MAKE) make install cd .. else echo -e "\e[00;33mdrm has not been cloned\e[00m" fi if [ -d mesa ]; then cd mesa ./autogen.sh --prefix=$PREFIX --with-dri-driverdir=$PREFIX/lib/dri \ --with-dri-drivers=swrast,nouveau \ --enable-glx-tls --enable-xcb --enable-gles1 --enable-gles2 \ --enable-openvg --enable-gallium-nouveau \ --disable-gallium-i915 --disable-gallium-i965 \ --disable-gallium-radeon --disable-gallium-r600 \ --enable-gallium-llvm # --disable-gallium-svga --disable-asm --enable-debug if [ $? -ne 0 ]; then echo "failed to configure Mesa." exit fi ($MAKE) make install #mkdir -p $PREFIX/bin #install -m755 progs/xdemos/{glxinfo,glxgears} $PREFIX/bin cd .. else echo -e "\e[00;33mmesa has not been cloned\e[00m" fi if [ -d xserver ]; then cd xserver ./autogen.sh --prefix=$PREFIX --enable-glx-tls if [ $? -ne 0 ]; then echo "failed to configure X server." exit fi ($MAKE) make install chown root $PREFIX/bin/Xorg chmod +s $PREFIX/bin/Xorg cd .. else echo -e "\e[00;33mxserver has not been cloned\e[00m" fi if [ -d cairo ]; then cd cairo ./autogen.sh --prefix=$PREFIX --enable-gl ($MAKE) make install cd .. else echo -e "\e[00;33mcairo has not been cloned\e[00m" fi if [ -d xf86-input-mouse ]; then cd xf86-input-mouse ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-input-mouse has not been cloned\e[00m" fi if [ -d xf86-input-keyboard ]; then cd xf86-input-keyboard ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-input-keyboard has not been cloned\e[00m" fi if [ -d xf86-video-nouveau ]; then cd xf86-video-nouveau ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-video-nouveau has not been cloned\e[00m" fi if [ -d xf86-video-nv ]; then cd xf86-video-nv ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-video-nv has not been cloned\e[00m" fi if [ -d xf86-video-vesa ]; then cd xf86-video-vesa ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-video-vesa has not been cloned\e[00m" fi if [ -d xf86-video-fbdev ]; then cd xf86-video-fbdev ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-video-fbdev has not been cloned\e[00m" fi if [ -d xf86-input-evdev ]; then cd xf86-input-evdev ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-input-evdev has not been cloned\e[00m" fi if [ -d xf86-video-intel ]; then cd xf86-video-intel ./autogen.sh --prefix=$PREFIX ($MAKE) make install cd .. else echo -e "\e[00;33mxf86-video-intel has not been cloned\e[00m" fi } case "$1" in init) init ;; build) build ;; update) update_modules ;; *) echo "usage: $0 init | build | update" exit 3 esac