<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jgor</id>
	<title>ThinkWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jgor"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Jgor"/>
	<updated>2026-05-23T16:16:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Code/build-experimental-X&amp;diff=26864</id>
		<title>Code/build-experimental-X</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Code/build-experimental-X&amp;diff=26864"/>
		<updated>2006-12-06T22:49:21Z</updated>

		<summary type="html">&lt;p&gt;Jgor: added change directory between git clone and git repack&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#!/bin/bash&lt;br /&gt;
# Script to fetch and build X.org, DRI, Mesa, synaptics and xkeyboard-config&lt;br /&gt;
# from CVS and GIT.&lt;br /&gt;
# If you want to skip some tasks, comment them out at the bottom of the script.&lt;br /&gt;
# Source: http://thinkwiki.org/wiki/How_to_compile_an_experimental_X_server&lt;br /&gt;
# See also:&lt;br /&gt;
#   http://wiki.x.org/wiki/ModularDevelopersGuide&lt;br /&gt;
#   http://wiki.x.org/wiki/GitPage&lt;br /&gt;
#   http://gitweb.freedesktop.org&lt;br /&gt;
#   http://dri.freedesktop.org/wiki/Building&lt;br /&gt;
#   http://www.mesa3d.org/cvs_access.html&lt;br /&gt;
#   http://www.mesa3d.org/install.html&lt;br /&gt;
#   http://web.telia.com/~u89404340/touchpad&lt;br /&gt;
#   http://www.freedesktop.org/wiki/Software_2fXKeyboardConfig&lt;br /&gt;
#   http://gitweb.freedesktop.org/?p=xorg/util/modular.git;a=blob;f=build.sh&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Init&lt;br /&gt;
&lt;br /&gt;
PIT=$HOME/3d-pit       # Download and build here&lt;br /&gt;
DEST=$PIT/install      # Install here&lt;br /&gt;
FLAGS='-O2 -g -march=pentium-m'&lt;br /&gt;
# MESA_DATE=2006-06-29 # Set this to get a historical Mesa CVS snapshot&lt;br /&gt;
RECONFIGURE=false      # Reconfigure everything even if unchanged from last run&lt;br /&gt;
MAKE_CLEAN=false       # If true, run &amp;quot;make clean&amp;quot; before building.&lt;br /&gt;
USE_XCB=false          # Use XCB?&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo Aborting.; exit 1&amp;quot; ERR&lt;br /&gt;
set -E&lt;br /&gt;
&lt;br /&gt;
die() {&lt;br /&gt;
  echo &amp;quot;$*&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
}&lt;br /&gt;
run() {&lt;br /&gt;
  echo &amp;quot;@ $@&amp;quot;&lt;br /&gt;
  &amp;quot;$@&amp;quot; || { echo &amp;quot;ERROR: Command \&amp;quot;$*\&amp;quot; failed in `pwd`&amp;quot;; exit 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fetch_from_git() {&lt;br /&gt;
  PARENT_DIR=&amp;quot;$1&amp;quot;&lt;br /&gt;
  GIT_REP=&amp;quot;$2&amp;quot;&lt;br /&gt;
  MODULE=&amp;quot;$3&amp;quot;&lt;br /&gt;
  DIR=&amp;quot;${4:-$MODULE}&amp;quot;&lt;br /&gt;
  if [ -d &amp;quot;$PARENT_DIR/$DIR&amp;quot; ]; then &lt;br /&gt;
    run cd &amp;quot;$PARENT_DIR/$DIR&amp;quot;&lt;br /&gt;
    run git pull&lt;br /&gt;
  else&lt;br /&gt;
    run cd &amp;quot;$PARENT_DIR&amp;quot;&lt;br /&gt;
    run git clone &amp;quot;$GIT_REP/$MODULE&amp;quot; &amp;quot;$DIR&amp;quot;&lt;br /&gt;
    cd &amp;quot;$DIR&amp;quot;&lt;br /&gt;
    git repack -d&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
LAST_HASH=last_dir_hash&lt;br /&gt;
dir_hash() {&lt;br /&gt;
  find . \( -name $LAST_HASH -o -path ./.git -prune \) -o -type f -ls | sort | md5sum&lt;br /&gt;
}&lt;br /&gt;
dir_hash_changed() {&lt;br /&gt;
  $RECONFIGURE || [ ! -f $LAST_HASH ] || [ &amp;quot;`dir_hash`&amp;quot; != &amp;quot;`cat $LAST_HASH`&amp;quot; ]&lt;br /&gt;
}&lt;br /&gt;
save_dir_hash() {&lt;br /&gt;
  dir_hash &amp;gt; $LAST_HASH&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Fetching and building libDRM and DRM kernel drivers&lt;br /&gt;
&lt;br /&gt;
fetch_drm() {&lt;br /&gt;
  echo &amp;quot;########### Fetch DRM ###########&amp;quot;&lt;br /&gt;
  DRM_GIT=git://anongit.freedesktop.org/git/mesa&lt;br /&gt;
  fetch_from_git &amp;quot;$PIT&amp;quot; &amp;quot;$DRM_GIT&amp;quot; drm&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build_libdrm() {&lt;br /&gt;
  echo &amp;quot;########### Build libdrm ###########&amp;quot;&lt;br /&gt;
  run cd $PIT/drm&lt;br /&gt;
  if dir_hash_changed; then&lt;br /&gt;
    run ./autogen.sh&lt;br /&gt;
    CFLAGS=&amp;quot;$FLAGS&amp;quot; run ./configure --prefix=$DEST --quiet&lt;br /&gt;
    save_dir_hash&lt;br /&gt;
  fi&lt;br /&gt;
  ! $MAKE_CLEAN || run make clean&lt;br /&gt;
  run make&lt;br /&gt;
  save_dir_hash&lt;br /&gt;
  run make install&lt;br /&gt;
  save_dir_hash&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build_drm_modules() {&lt;br /&gt;
  echo &amp;quot;########### Build DRM kernel modules ###########&amp;quot;&lt;br /&gt;
  run cd $PIT/drm/linux-core&lt;br /&gt;
  ! $MAKE_CLEAN || run make clean&lt;br /&gt;
  run make DRM_MODULES=&amp;quot;radeon&amp;quot;&lt;br /&gt;
  run sudo sh -c \&lt;br /&gt;
    'rm -fv /lib/modules/`uname -r`/kernel/drivers/char/drm/*.ko; \&lt;br /&gt;
     cp -v *.ko /lib/modules/`uname -r`/extra/; \&lt;br /&gt;
     /sbin/depmod -a'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Fetching Mesa&lt;br /&gt;
&lt;br /&gt;
fetch_mesa() {&lt;br /&gt;
  echo &amp;quot;########### Fetching Mesa ###########&amp;quot;&lt;br /&gt;
  MESA_CVS=:pserver:anonymous@anoncvs.freedesktop.org:2401/cvs/mesa&lt;br /&gt;
  run mkdir -p $PIT&lt;br /&gt;
  run cd $PIT&lt;br /&gt;
  grep -qF $MESA_CVS ~/.cvspass || run cvs -d $MESA_CVS login&lt;br /&gt;
  [ -d Mesa ] || run cvs -z3 -d $MESA_CVS co ${MESA_DATE:+-D $MESA_DATE} Mesa&lt;br /&gt;
  run cd $PIT/Mesa&lt;br /&gt;
  run cvs -z3 update -ACPd ${MESA_DATE:+-D $MESA_DATE}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Building Mesa (do this after installing base X.org libraries&lt;br /&gt;
&lt;br /&gt;
build_mesa() { (&lt;br /&gt;
  echo &amp;quot;########### Building Mesa ###########&amp;quot;&lt;br /&gt;
  # This uses both old-style and new-style vars, to support older Mesa snapshots.&lt;br /&gt;
  run cd $PIT/Mesa&lt;br /&gt;
  export DRM_SOURCE_PATH=$PIT/drm&lt;br /&gt;
  export PKG_CONFIG_PATH=&amp;quot;$DEST/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot;&lt;br /&gt;
  export DRM_SOURCE_PATH=&amp;quot;$PIT/drm&amp;quot;&lt;br /&gt;
  export DESTDIR=$DEST  INSTALL_DIR=$DEST&lt;br /&gt;
  export DRI_DRIVER_INSTALL_DIR=$DEST/lib/dri&lt;br /&gt;
  export DRI_DIRS='r300 r200 r128 radeon'&lt;br /&gt;
  export OPT_FLAGS=&amp;quot;$FLAGS&amp;quot;&lt;br /&gt;
  export PATH=&amp;quot;$DEST/bin:$PATH&amp;quot;&lt;br /&gt;
  run mkdir -p $DRI_DRIVER_INSTALL_DIR&lt;br /&gt;
  ! $MAKE_CLEAN || run make clean&lt;br /&gt;
  if [ -e configs/current ]; then&lt;br /&gt;
    run make -e&lt;br /&gt;
  else&lt;br /&gt;
    run make -e linux-dri-x86&lt;br /&gt;
  fi&lt;br /&gt;
  run make -e install&lt;br /&gt;
  run cp -v lib/*_dri.so $DRI_DRIVER_INSTALL_DIR&lt;br /&gt;
) }&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# X.org setup&lt;br /&gt;
# This is a list of modules that are in flux and likely to be related to&lt;br /&gt;
# whatever you're testing (or are required for the build), sorted by&lt;br /&gt;
# build order (see util/modular/build.sh for dependencies).&lt;br /&gt;
# Check CVS and the above URLs for other modules.&lt;br /&gt;
# For exhaustive list, see &lt;br /&gt;
# get -qO - http://gitweb.freedesktop.org/ \&lt;br /&gt;
# | perl -ne 'print &amp;quot;$1\n&amp;quot; if m!&amp;lt;a href=&amp;quot;/\?p=([^;]+);a=summary&amp;quot;&amp;gt;!' \&lt;br /&gt;
# | egrep '^xcb/|^xorg/'&lt;br /&gt;
&lt;br /&gt;
XORG_DIRS=(&lt;br /&gt;
  xorg/util/macros&lt;br /&gt;
  xorg/proto/{bigreqs,composite,fixes,damage,gl,input,kb,pm,randr,resource,xext,xcmisc}proto&lt;br /&gt;
  xorg/proto/{fontcache,fonts,kb}proto&lt;br /&gt;
  xorg/proto/{render,scrnsaver,video}proto&lt;br /&gt;
  xorg/proto/{x11,xf86dga,xf86dri,xf86misc,xf86vidmode,xinerama}proto&lt;br /&gt;
  xcb/proto&lt;br /&gt;
  xorg/lib/lib{xtrans,Xau,Xdmcp}&lt;br /&gt;
  xcb/libxcb&lt;br /&gt;
  xorg/lib/lib{X11,ICE,SM,Xt,Xmu,Xcomposite,Xrender,Xdamage,Xcursor,Xi,Xinerama}&lt;br /&gt;
  xorg/lib/lib{Xfont,Xfontcache,Xft}&lt;br /&gt;
  xorg/lib/lib{xkbui,Xrandr,Xv,XvMC,Xxf86dga,Xxf86misc,Xxf86vm}&lt;br /&gt;
  xorg/xserver&lt;br /&gt;
  xorg/driver/xf86-video-ati&lt;br /&gt;
  xorg/driver/xf86-input-{mouse,keyboard,evdev}&lt;br /&gt;
  xorg/app/{xkbutils,xkbcomp,setxkbmap,xrandr,xsetpointer}&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Fetching X.org&lt;br /&gt;
&lt;br /&gt;
fetch_xorg() {&lt;br /&gt;
  echo &amp;quot;########### Fetching (selected) X.org modules ###########&amp;quot;&lt;br /&gt;
  XORG_GIT=git://anongit.freedesktop.org/git&lt;br /&gt;
  run mkdir -p $PIT/xorg&lt;br /&gt;
  for D in &amp;quot;${XORG_DIRS[@]}&amp;quot;; do&lt;br /&gt;
    if [[ $D == xcb/* ]] &amp;amp;&amp;amp; ! $USE_XCB; then continue; fi&lt;br /&gt;
    fetch_from_git $PIT/xorg &amp;quot;$XORG_GIT&amp;quot; &amp;quot;$D&amp;quot; &amp;quot;${D#xorg/}&amp;quot;&lt;br /&gt;
  done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Building and installing X.org&lt;br /&gt;
# (On repeated runs we avoid rerunning autotools if nothing changed.)&lt;br /&gt;
&lt;br /&gt;
build_x_module() { (&lt;br /&gt;
  D=&amp;quot;${1#xorg/}&amp;quot;&lt;br /&gt;
  echo &amp;quot;########### Building xorg/$D ###########&amp;quot;&lt;br /&gt;
  export PATH=&amp;quot;$DEST/bin:$PATH&amp;quot;&lt;br /&gt;
  export PKG_CONFIG_PATH=&amp;quot;$DEST/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot;&lt;br /&gt;
  export ACLOCAL=&amp;quot;${AC_LOCAL:-aclocal} -I $DEST/share/aclocal&amp;quot;&lt;br /&gt;
  export LD_LIBRARY_PATH=&amp;quot;$DEST/lib:$LD_LIBRARY_PATH&amp;quot;&lt;br /&gt;
  if [ $D == &amp;quot;xserver&amp;quot; ]; then&lt;br /&gt;
    CONF_OPT=&amp;quot;--with-mesa-source=$PIT/Mesa --enable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xprint&amp;quot;&lt;br /&gt;
  elif [ $D == &amp;quot;lib/libX11&amp;quot; ] &amp;amp;&amp;amp; ! $USE_XCB; then&lt;br /&gt;
    CONF_OPT=&amp;quot;--with-xcb=no&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    CONF_OPT=&lt;br /&gt;
  fi&lt;br /&gt;
  run cd $PIT/xorg/$D&lt;br /&gt;
  if dir_hash_changed; then&lt;br /&gt;
    CFLAGS=&amp;quot;$FLAGS&amp;quot; run sh autogen.sh --prefix=$DEST --quiet --cache-file=$PIT/xorg/autoconf.cache $CONF_OPT&lt;br /&gt;
    save_dir_hash&lt;br /&gt;
  fi&lt;br /&gt;
  ! $MAKE_CLEAN || run make clean&lt;br /&gt;
  run make&lt;br /&gt;
  save_dir_hash&lt;br /&gt;
  run make install&lt;br /&gt;
  save_dir_hash&lt;br /&gt;
) }&lt;br /&gt;
&lt;br /&gt;
build_xorg() {&lt;br /&gt;
  run cd $PIT/xorg&lt;br /&gt;
  run mkdir -p $DEST/share/aclocal&lt;br /&gt;
  run mkdir -p $DEST/var/log&lt;br /&gt;
  for D in &amp;quot;${XORG_DIRS[@]}&amp;quot;; do&lt;br /&gt;
    if [[ $D == xcb/* ]] &amp;amp;&amp;amp; ! $USE_XCB; then continue; fi&lt;br /&gt;
    build_x_module $D || return 1&lt;br /&gt;
  done&lt;br /&gt;
  run sudo sh -c &amp;quot;chown -v root $DEST/bin/Xorg; \&lt;br /&gt;
                  chmod -v 4750 $DEST/bin/Xorg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Fetching and building xkeyboard-config&lt;br /&gt;
&lt;br /&gt;
fetch_xkeyboard_config() {&lt;br /&gt;
  echo &amp;quot;########### Fetching xkeyboard-config ###########&amp;quot;&lt;br /&gt;
  XKBC_CVS=:pserver:anoncvs@cvs.freedesktop.org:2401/cvs/xkeyboard-config&lt;br /&gt;
  run cd $PIT&lt;br /&gt;
  grep -qF $XKBC_CVS ~/.cvspass || run cvs -d $XKBC_CVS login&lt;br /&gt;
  [ -d xkeyboard-config ] || run cvs -z3 -d $XKBC_CVS co xkeyboard-config&lt;br /&gt;
  run cd $PIT/xkeyboard-config&lt;br /&gt;
  run cvs -z3 update -ACPd&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build_xkeyboard_config() { (&lt;br /&gt;
  echo &amp;quot;########### Building xkeyboard-config ###########&amp;quot;&lt;br /&gt;
  run cd $PIT/xkeyboard-config&lt;br /&gt;
  run ./autogen.sh&lt;br /&gt;
  export PKG_CONFIG_PATH=&amp;quot;$DEST/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot;&lt;br /&gt;
  export PATH=&amp;quot;$DEST/bin:$PATH&amp;quot;&lt;br /&gt;
  CFLAGS=&amp;quot;$FLAGS&amp;quot; run ./configure --quiet --prefix=$DEST \&lt;br /&gt;
    --with-xkb-base=$DEST/share/X11/xkb --with-xkb-rules-symlink=xorg&lt;br /&gt;
  run make&lt;br /&gt;
  # &amp;quot;make install&amp;quot; replaces share/X11/xkb/compiled.tmp with a junk symlink, so override it:&lt;br /&gt;
  mv $DEST/share/X11/xkb/compiled $DEST/share/X11/xkb/compiled.tmp&lt;br /&gt;
  run make install&lt;br /&gt;
  rm -f $DEST/share/X11/xkb/compiled&lt;br /&gt;
  mv $DEST/share/X11/xkb/compiled.tmp $DEST/share/X11/xkb/compiled&lt;br /&gt;
) }&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Fetching and building the synaptics driver&lt;br /&gt;
&lt;br /&gt;
fetch_synaptics() {&lt;br /&gt;
  echo &amp;quot;########### Fetch synaptics ###########&amp;quot;&lt;br /&gt;
  SYN_GIT=http://web.telia.com/~u89404340/touchpad/synaptics/.git&lt;br /&gt;
  fetch_from_git &amp;quot;$PIT&amp;quot; &amp;quot;$SYN_GIT&amp;quot; '' synaptics&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build_synaptics() { (&lt;br /&gt;
  echo &amp;quot;########### Build synaptics ###########&amp;quot;&lt;br /&gt;
  run cd $PIT/synaptics&lt;br /&gt;
  export PKG_CONFIG_PATH=&amp;quot;$DEST/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot;&lt;br /&gt;
  export PATH=&amp;quot;$DEST/bin:$PATH&amp;quot;&lt;br /&gt;
  ! $MAKE_CLEAN || run make clean&lt;br /&gt;
  run make&lt;br /&gt;
  run cp -v synaptics_drv.so $DEST/lib/xorg/modules/input/&lt;br /&gt;
) }&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Creating a script which sets env vars&lt;br /&gt;
&lt;br /&gt;
create_xsetenv() {&lt;br /&gt;
  cat &amp;lt;&amp;lt;EOF &amp;gt; $DEST/bin/xsetenv || die &amp;quot;Can't create $DEST/bin/xsetenv&amp;quot;&lt;br /&gt;
export PATH=&amp;quot;$DEST/bin:$PATH&amp;quot; &lt;br /&gt;
export LD_LIBRARY_PATH=&amp;quot;$DEST/lib:$LD_LIBRARY_PATH&amp;quot;&lt;br /&gt;
export LIBGL_DRIVERS_PATH=$DEST/lib/dri&lt;br /&gt;
EOF&lt;br /&gt;
  echo -e &amp;quot;\nRun '. $DEST/bin/xsetenv' to point env vars to this installation.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#############################################&lt;br /&gt;
# Do it:&lt;br /&gt;
&lt;br /&gt;
FETCH=true&lt;br /&gt;
BUILD=true&lt;br /&gt;
&lt;br /&gt;
if $FETCH; then&lt;br /&gt;
   fetch_drm&lt;br /&gt;
   fetch_mesa&lt;br /&gt;
   fetch_xorg&lt;br /&gt;
   fetch_xkeyboard_config&lt;br /&gt;
   fetch_synaptics&lt;br /&gt;
fi&lt;br /&gt;
if $BUILD; then&lt;br /&gt;
   build_libdrm&lt;br /&gt;
   build_drm_modules&lt;br /&gt;
   build_xorg&lt;br /&gt;
   build_mesa&lt;br /&gt;
   build_xkeyboard_config&lt;br /&gt;
   build_synaptics&lt;br /&gt;
   create_xsetenv&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo 'Done.'&lt;/div&gt;</summary>
		<author><name>Jgor</name></author>
		
	</entry>
</feed>