Xorg Libraries

Introduction to Xorg Libraries

The Xorg libraries provide library routines that are used within all X Window applications.

[Note]

Note

Development versions of GLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.

Xorg Libraries Dependencies

Required

Fontconfig-2.15.0 and libxcb-1.17.0

Optional

ncompress (for some tests) and W3m (to generate additional PDF or text documentation for the libXfont package).

[Note]

Note

This may take a while to build. Feel free to do something else while this is building.

Downloading Xorg Libraries

First, create a list of files to be downloaded:

cat > lib-7-list << "EOF"
xtrans-1.5.0.tar.xz
libX11-1.8.10.tar.xz
libXext-1.3.6.tar.xz
libFS-1.0.10.tar.xz
libICE-1.1.1.tar.xz
libSM-1.2.4.tar.xz
libXScrnSaver-1.2.4.tar.xz
libXt-1.3.0.tar.xz
libXmu-1.2.1.tar.xz
libXpm-3.5.17.tar.xz
libXaw-1.0.16.tar.xz
libXfixes-6.0.1.tar.xz
libXcomposite-0.4.6.tar.xz
libXrender-0.9.11.tar.xz
libXcursor-1.2.2.tar.xz
libXdamage-1.1.6.tar.xz
libfontenc-1.1.8.tar.xz
libXfont2-2.0.7.tar.xz
libXft-2.3.8.tar.xz
libXi-1.8.1.tar.xz
libXinerama-1.1.5.tar.xz
libXrandr-1.5.4.tar.xz
libXres-1.2.2.tar.xz
libXtst-1.2.5.tar.xz
libXv-1.0.12.tar.xz
libXvMC-1.0.14.tar.xz
libXxf86dga-1.1.6.tar.xz
libXxf86vm-1.1.5.tar.xz
libpciaccess-0.18.1.tar.xz
libxkbfile-1.1.3.tar.xz
libxshmfence-1.3.2.tar.xz
libXpresent-1.0.1.tar.xz
EOF

To download the needed files using Wget-1.24.5, use the following commands:

mkdir lib &&
cd lib &&
grep -v '^#' ../lib-7-list | wget -i- -c \
    -B https://www.x.org/pub/individual/lib/

Installation of Xorg Libraries

[Note]

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the sudo package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

Some libraries come with a test suite. If you wish to execute them, either comment out the rm -rf ... below, so that, after all libraries are installed, you can come back to the corresponding directory and run make check, or do individual builds, running the tests for each of those distributed with working test suites. Alternatively, you can uncomment the line #make check ..., and at the end, check the test results with:

grep -A9 summary *make_check.log

GLFS developers have confirmed that libX11, libXt, libXmu, libXpm, and libxshmfence are distributed with working test suites.

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

for package in $(grep -v '^#' ../lib-7-list)
do
  packagedir=${package%.tar.?z*}
  echo "Building $packagedir"

  tar -xf $package
  pushd $packagedir
  docdir="--docdir=$XORG_PREFIX/share/doc/$packagedir"
  
  case $packagedir in
    libXfont2-[0-9]* )
      ./configure $XORG_CONFIG $docdir --disable-devel-docs
    ;;

    libXt-[0-9]* )
      ./configure $XORG_CONFIG $docdir \
                  --with-appdefaultdir=/etc/X11/app-defaults
    ;;

    libXpm-[0-9]* )
      ./configure $XORG_CONFIG $docdir --disable-open-zfile
    ;;
  
    libpciaccess* )
      mkdir build
      cd    build
        meson setup --prefix=$XORG_PREFIX --buildtype=release ..
        ninja
        #ninja test
        as_root ninja install
      popd     # $packagedir
      rm -rf $packagedir
      continue # for loop
    ;;

    * )
      ./configure $XORG_CONFIG $docdir
    ;;
  esac

  make
  #make check 2>&1 | tee ../$packagedir-make_check.log
  as_root make install
  popd
  rm -rf $packagedir
  as_root /sbin/ldconfig
done

For multilib, install all of the lib32 variants of the packages by running the following commands:

for package in $(grep -v '^#' ../lib-7-list)
do
  packagedir=${package%.tar.?z*}
  echo "Building lib32-$packagedir"

  tar -xf $package
  pushd $packagedir
  libdir="--libdir=$XORG_PREFIX/lib32"
  docdir="--docdir=$XORG_PREFIX/share/doc/$packagedir"
  host="--host=i686-pc-linux-gnu"
  
  case $packagedir in
    libXfont2-[0-9]* )
      CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=$XORG_PREFIX/lib32/pkgconfig  \
      ./configure $XORG_CONFIG $libdir $host $docdir --disable-devel-docs
    ;;

    libXt-[0-9]* )
      CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=$XORG_PREFIX/lib32/pkgconfig \
      ./configure $XORG_CONFIG $libdir $host $docdir                    \
                  --with-appdefaultdir=/etc/X11/app-defaults
    ;;

    libXpm-[0-9]* )
      CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=$XORG_PREFIX/lib32/pkgconfig  \
      ./configure $XORG_CONFIG $libdir $host $docdir --disable-open-zfile
    ;;
  
    libpciaccess* )
      mkdir build
      cd    build
        CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=$XORG_PREFIX/lib32/pkgconfig \
        meson setup --prefix=$XORG_PREFIX $libdir --buildtype=release ..
        ninja
        #ninja test
        DESTDIR=$PWD/DESTDIR ninja install
        as_root cp -vr DESTDIR/$XORG_PREFIX/lib32/* $XORG_PREFIX/lib32
        rm -rf DESTDIR
        as_root /sbin/ldconfig
      popd     # $packagedir
      rm -rf $packagedir
      continue # for loop
    ;;

    xtrans* )
        CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=$XORG_PREFIX/lib32/pkgconfig \
        ./configure $XORG_CONFIG $libdir $host $docdir
        make
        make DESTDIR=$PWD/DESTDIR install
        as_root cp -vr DESTDIR/$XORG_PREFIX/share/pkgconfig/* $XORG_PREFIX/lib32/pkgconfig
        rm -rf DESTDIR
      popd
      rm -rf $packagedir
      continue
    ;;

    * )
      CC="gcc -m32" CXX="g++ -m32"                   \
      PKG_CONFIG_PATH=$XORG_PREFIX/lib32/pkgconfig   \
      ./configure $XORG_CONFIG $libdir $host $docdir
    ;;
  esac

  make
  #make check 2>&1 | tee ../$packagedir-make_check.log
  make DESTDIR=$PWD/DESTDIR install
  as_root cp -vr DESTDIR/$XORG_PREFIX/lib32/* $XORG_PREFIX/lib32
  rm -rf DESTDIR
  popd
  rm -rf $packagedir
  as_root /sbin/ldconfig
done

Finally, exit the shell that was started earlier:

exit

Command Explanations

--disable-open-zfile: Allow libXpm to build without the optional compress command present.

--disable-devel-docs: Disable generation of text documentation in the libXfont2 package if xmlto is installed without a text browser. Omit this parameter (or the entire case statement) if a text browser is installed.

--with-fop: Use fop to generate PDF documentation (only for the libXfont package).

Configuration of Xorg Libraries

If you've chosen to install Xorg into /usr, then no further configuration is necessary and you can skip the rest of this section. If you've opted for an alternate prefix, you should create two symlinks to satisfy the expected environment of several packages. Execute the following commands as the root user:

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

If you are doing multilib, create another symlink as the root user:

ln -sv $XORG_PREFIX/lib32/X11 /usr/lib32/X11

Contents

Installed Programs: cxpm and sxpm
Installed Libraries: libfontenc.so, libFS.so, libICE.so, libpciaccess.so, libSM.so, libX11.so, libX11-xcb, libXaw6.so, libXaw7.so, libXaw.so, libXcomposite.so, libXcursor.so, libXdamage.so, libXext.so, libXfixes.so, libXfont2.so, libXft.so, libXinerama.so, libXi.so, libxkbfile.so, libXmu.so, libXmuu.so, libXpm.so, libXpresent.so, libXrandr.so, libXrender.so, libXRes.so, libxshmfence.so, libXss.so, libXt.so, libXtst.so, libXvMC.so, libXvMCW.so, libXv.so, libXxf86dga.so and libXxf86vm.so
Installed Directories: $XORG_PREFIX/include/X11/fonts, $XORG_PREFIX/include/X11/ICE, $XORG_PREFIX/include/X11/SM, $XORG_PREFIX/include/X11/Xmu, $XORG_PREFIX/include/X11/Xtrans, $XORG_PREFIX/share/doc/libFS, $XORG_PREFIX/share/doc/libICE-1.1.1, $XORG_PREFIX/share/doc/libSM-1.2.4, $XORG_PREFIX/share/doc/libX11-1.8.10, $XORG_PREFIX/share/doc/libXaw, $XORG_PREFIX/share/doc/libXext, $XORG_PREFIX/share/doc/libXi, $XORG_PREFIX/share/doc/libXmu-1.2.1, $XORG_PREFIX/share/doc/libXrender, $XORG_PREFIX/share/doc/libXt, $XORG_PREFIX/share/doc/libXtst, $XORG_PREFIX/share/doc/libXvMC, $XORG_PREFIX/share/doc/xtrans and $XORG_PREFIX/share/X11/locale

Short Descriptions

cxpm

checks the format of an XPM file

sxpm

shows an XPM file and/or converts XPM 1 or 2 files to XPM 3

libfontenc.so

is the X11 font encoding library

libFS.so

is the library interface to the X Font Server

libICE.so

is the X Inter Client Exchange Library

libpciaccess.so

is the generic PCI Access library for X

libSM.so

is the X Session Management Library

libX11.so

is the Xlib Library

libXaw6.so

is the X Athena Widgets Library, version 6

libXaw7.so

is the X Athena Widgets Library, version 7

libXaw.so

are symbolic links to the current X Athena Widgets Library, version 7

libXcomposite.so

is the X Composite Library

libXcursor.so

is the X Cursor management library

libXdamage.so

is the X Damage Library

libXext.so

is the Misc X Extension Library

libXfixes.so

provides augmented versions of core protocol requests

libXfont2.so

is the X font library

libXft.so

is the X FreeType interface library

libXinerama.so

is the Xinerama Library

libXi.so

is the X Input Extension Library

libxkbfile.so

is the xkbfile Library

libXmu.so

is the X interface library for miscellaneous utilities not part of the Xlib standard

libXmuu.so

is the Mini Xmu Library

libXpm.so

is the X Pixmap Library

libXpresent.so

is the library interface to the X Present Extension

libXrandr.so

is the X Resize, Rotate and Reflection extension library

libXrender.so

is the X Render Library

libXRes.so

is the X-Resource extension client library

libxshmfence.so

exposes an event API on top of Linux futexes

libXss.so

is the X11 Screen Saver extension client library

libXt.so

is the X Toolkit Library

libXtst.so

is the Xtst Library

libXvMC.so

is the X-Video Motion Compensation Library

libXvMCW.so

is the XvMC Wrapper including the Nonstandard VLD extension

libXv.so

is the X Window System video extension library

libXxf86dga.so

is the client library for the XFree86-DGA extension

libXxf86vm.so

is the client library for the XFree86-VidMode X extension