#!/bin/bash -e

# -e exit on any error

export BLFS_BUILD=/lfs/build/X
export BLFS_SRC=/lfs/src.blfs/X11R7.3

export XORG_PREFIX="/usr/X11R7.3"
export XORG_CONFIG="--prefix=$XORG_PREFIX --sysconfdir=/etc --localstatedir=/var"

# http://gitweb.freedesktop.org/?p=xorg/util/modular.git;a=tree;h=master;hb=master

# cat > /etc/profile.d/X.sh << "EOF"
# if [ -x $XORG_PREFIX/bin/X ]; then
#         pathappend $XORG_PREFIX/bin
# fi
# if [ -d $XORG_PREFIX/lib/pkgconfig ] ; then
#         pathappend $XORG_PREFIX/lib/pkgconfig PKG_CONFIG_PATH
# fi
# EOF

if [ "$(grep $XORG_PREFIX/lib /etc/ld.so.conf)" = "" ]; then
  sed -i -e "\\|/opt/lib| a \\$XORG_PREFIX/lib" /etc/ld.so.conf
  /sbin/ldconfig
fi

# $XORG_PREFIX/lib -> /etc/ld.so.conf
. /etc/profile
export PATH=$XORG_PREFIX/bin:$PATH

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${XORG_PREFIX}/lib/pkgconfig
export PATH=${PATH}:${XORG_PREFIX}/bin

if [ -f $BLFS_BUILD/xorg-compile.log ]; then
  mv $BLFS_BUILD/xorg-compile.log /lfs
fi

rm -rf $BLFS_BUILD/*
mkdir -p $BLFS_BUILD/xc

for package in $BLFS_SRC/proto/*.tar.bz2 $BLFS_SRC/../xcb-proto-1.1.tar.bz2; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG
  make
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log #log the entire loop

for package in $BLFS_SRC/util/*.tar.bz2; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG
  make
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

(
  echo ===== libpthread-stubs
  tar -xf $BLFS_SRC/../libpthread-stubs-0.1.tar.bz2 -C $BLFS_BUILD
  cd $BLFS_BUILD/libpthread-stubs-0.1
  ./configure $XORG_CONFIG
  make
  make install && /sbin/ldconfig
) 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $(cat $BLFS_SRC/../../X11-liborder); do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $BLFS_SRC/lib/$package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  case $package in
    libXfont-*)
      patch -Np1 -i $BLFS_SRC/lib/xorg-libXfont-1.3.1-pcf-parser.diff
      ;;
  esac
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG
  make
  make install && /sbin/ldconfig
  cd ..
  rm -rf $packagedir
  case $package in
    libXau*)
      echo ===== libxcb
      tar -xf $BLFS_SRC/../libxcb-1.1.tar.bz2 -C $BLFS_BUILD
      (cd $BLFS_BUILD/libxcb-1.1; ./configure $XORG_CONFIG; make; make install && /sbin/ldconfig)
      ;;
  esac
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

ln -sf $XORG_PREFIX/lib/X11 /usr/lib/X11 &&
ln -sf $XORG_PREFIX/include/X11 /usr/include/X11

for package in $BLFS_SRC/data/xbitmaps*; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/app/*.bz2; do
  case $package in
    */luit*)
      ;;
    *)
      echo ===== $package
      packagedir=$(basename $package | sed 's/.tar.bz2//')
      tar -xf $package -C $BLFS_BUILD/xc
      cd $BLFS_BUILD/xc/$packagedir
      case $package in
        */xload-*)
          patch -Np1 -i $BLFS_SRC/../xload-1.0.1-setuid-1.patch
          ;;
        */xfs-*)
          patch -Np1 -i $BLFS_SRC/app/xorg-xfs-1.0.4-query.diff
          ;;
      esac
      echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
      ./configure $XORG_CONFIG &&
      make &&
      make install
      cd ..
      rm -rf $packagedir
      ;;
  esac
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

# xcursorgen ?

for package in $BLFS_SRC/data/xcursor*.bz2; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG &&
  make &&
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/font/font-util*.bz2; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG &&
  make &&
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/font/*.bz2; do
  case $package in
    */font-util*)
      ;;
    *)
      echo ===== $package
      packagedir=$(basename $package | sed 's/.tar.bz2//')
      tar -xf $package -C $BLFS_BUILD/xc
      cd $BLFS_BUILD/xc/$packagedir
      echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
      ./configure $XORG_CONFIG &&
      make &&
      make install
     cd ..
     rm -rf $packagedir
     ;;
  esac
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

install -d -m755 /usr/share/fonts &&
ln -sn $XORG_PREFIX/lib/X11/fonts/OTF /usr/share/fonts/X11-OTF &&
ln -sn $XORG_PREFIX/lib/X11/fonts/TTF /usr/share/fonts/X11-TTF

# Install TTF fonts from RedHat, cyrillic present here
# I don't see reasons to use M$ fonts more ;)

tar -xf $BLFS_SRC/../liberation-fonts.tar.gz -C $BLFS_BUILD/..
( echo ===== liberation-fonts
  for f in $BLFS_BUILD/../liberation-fonts/*.ttf; do
    install -o root -g root -m 644 $f $XORG_PREFIX/lib/X11/fonts/TTF
  done 
  $XORG_PREFIX/bin/mkfontscale -e $XORG_PREFIX//lib/X11/fonts/encodings $XORG_PREFIX/lib/X11/fonts/TTF
  $XORG_PREFIX/bin/mkfontdir -e $XORG_PREFIX//lib/X11/fonts/encodings $XORG_PREFIX/lib/X11/fonts/TTF
) 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

tar -xf $BLFS_SRC/../XML-Parser-2.36.tar.gz -C $BLFS_BUILD/..
( echo ===== XML-Parser
  cd $BLFS_BUILD/../XML-Parser-2.36 &&
  perl Makefile.PL &&
  make &&
  make install
) 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/../xkeyboard-config-1.3.tar.bz2; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG --with-xkb-base=$XORG_PREFIX/share/X11/xkb --with-xkb-rules-symlink=xorg &&
  make &&
  make install &&
  install -dv -m755 $XORG_PREFIX/share/doc/xkeyboard-config-1.3 &&
  install -v -m644 docs/{README,HOWTO}* $XORG_PREFIX/share/doc/xkeyboard-config-1.3
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/app/luit*.bz2 ; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  ./configure $XORG_CONFIG &&
  make &&
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

(
  tar -xf $BLFS_SRC/../MesaLib-7.0.3.tar.bz2 -C $BLFS_BUILD
  tar -xf $BLFS_SRC/../MesaGLUT-7.0.3.tar.bz2 -C $BLFS_BUILD
  tar -xf $BLFS_SRC/../MesaDemos-7.0.3.tar.bz2 -C $BLFS_BUILD
  echo ===== Mesa
  cd $BLFS_BUILD/Mesa-7.0.3 &&
  make linux-dri-x86 OPT_FLAGS="-O2 -fno-strict-aliasing" \
     DRI_DRIVER_INSTALL_DIR=${XORG_PREFIX}/lib/X11/modules/dri \
     X11_INCLUDES=-I${XORG_PREFIX}/include \
     EXTRA_LIB_PATH=-L${XORG_PREFIX}/lib
  make install INSTALL_DIR=${XORG_PREFIX} \
               DRI_DRIVER_INSTALL_DIR=${XORG_PREFIX}/lib/X11/modules/dri &&
  install -d ${XORG_PREFIX}/share/doc/MesaLib-7.0.3 &&
  install -m 644 docs/* ${XORG_PREFIX}/share/doc/MesaLib-7.0.3
  install -m 755 progs/xdemos/glx{info,gears} ${XORG_PREFIX}/bin
  ln -s ${XORG_PREFIX}/include/GL /usr/include
  # find . -type f -exec sed -i "s@/usr/X11R6@$XORG_PREFIX@g" {} \; &&
  # sed -i 's@lib/modules@lib/X11/modules@' src/glx/x11/dri_glx.c &&
  # sed -i 's@lib/modules@lib/X11/modules@' src/mesa/drivers/dri/Makefile.template
  # sed -i 's%>& /dev/null%>/dev/null%' src/mesa/drivers/dri/Makefile.template
) 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

(
  echo "===== pixman-1"
  tar -xf $BLFS_SRC/../pixman-0.9.6.tar.bz2 -C $BLFS_BUILD
  cd $BLFS_BUILD/pixman-0.9.6;
  ./configure $XORG_CONFIG &&
  make &&
  make install
) 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/xserver/xorg*.bz2 ; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  # patch -Np1 -i $BLFS_SRC/../xorg-server-1.2.0-xcmisc-1.patch &&
  patch -Np1 -i $BLFS_SRC/xserver/xorg-xserver-1.4-multiple-overflows-v2.diff
  ./configure $XORG_CONFIG \
              --with-mesa-source="$BLFS_BUILD/Mesa-7.0.3" \
              --with-module-dir=$XORG_PREFIX/lib/X11/modules \
              --with-dri-driver-path=$XORG_PREFIX/lib/X11/modules/dri \
              --with-xkb-output=/var/lib/xkb \
              --enable-install-setuid &&
  make &&
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

for package in $BLFS_SRC/driver/*.bz2 ; do
  echo ===== $package
  packagedir=$(basename $package | sed 's/.tar.bz2//')
  tar -xf $package -C $BLFS_BUILD/xc
  cd $BLFS_BUILD/xc/$packagedir
  echo +++++++ in dir $BLFS_BUILD/xc/$packagedir
  case $packagedir in
    xf86-input-evdev-[0-9]* | xf86-video-ati-[0-9]* | \
    xf86-video-fbdev-[0-9]* | xf86-video-glint-[0-9]* | \
    xf86-video-newport-[0-9]* )
      sed -i -e "s/\xc3\xb8/\\\\[\/o]/" \
             -e "s/\xc3\xa4/\\\\[:a]/" \
             -e "s/\xc3\x9c/\\\\[:U]/" man/*.man
    ;;
    xf86-video-intel-*)
      find . -name Makefile -exec sed -i -e 's/= =/= /' -e 's/-rpath /-rpath/' {} \;
      make distclean;
      autoconf
      automake
    ;;
  esac
  ./configure $XORG_CONFIG --with-xorg-module-dir=$XORG_PREFIX/lib/X11/modules &&
  make &&
  make install
  cd ..
  rm -rf $packagedir
done 2>&1 | tee -a $BLFS_BUILD/xorg-compile.log

install -o root -g root -m 0755 ${BLFS_SRC}/../startup/init.d/xfs /etc/init.d
insserv xfs

if [ -f $BLFS_BUILD/xorg-compile.log ]; then
  mv $BLFS_BUILD/xorg-compile.log /lfs
fi
