Building XFree86® from a Source Distribution David Dawes, Matthieu Herrb 16 March 2005 Abstract This document describes how to build XFree86 from the source dis- tribution and is designed to be used in conjunction with the oper- ating system (OS) specific README files. NOTE: Refer to the appropriate OS-specific README file before attempting to build XFree86. These files often contain additional information that you need to successfully build for your OS. We recommend using gcc to build XFree86, but XFree86 generally builds with the native compiler for each OS platform. 1. How to get the XFree86 4.6.0 source The recommended way of getting the XFree86 4.6.0 source is to obtain it directly from the XFree86 CVS repository. There are several ways of doing that, and they are described at our CVS web page . The CVS tag for this release is "xf-4_6_0". The tag for the maintenance branch for this release is "xf-4_6-branch". Another method of getting the XFree86 4.6.0 source is to either download the 4.6.0 source tarballs from the XFree86 ftp site. The procedure for this is as follows: o The XFree86 4.6.0 source is contained in the files: XFree86-4.6.0-src-1.tgz XFree86-4.6.0-src-2.tgz XFree86-4.6.0-src-3.tgz XFree86-4.6.0-src-4.tgz XFree86-4.6.0-src-5.tgz XFree86-4.6.0-src-6.tgz XFree86-4.6.0-src-7.tgz These can be found at ftp://ftp.xfree86.org/pub/XFree86/4.6.0/source/. XFree86-4.6.0-src-4.tgz and XFree86-4.6.0-src-5.tgz contains the fonts. XFree86-4.6.0-src-6.tgz contains the documentation source. XFree86-4.6.0-src-7.tgz contains the hardcopy documentation. XFree86-4.6.0-src-1.tgz, XFree86-4.6.0-src-2.tgz and XFree86-4.6.0-src-3.tgz contains everything else. If you do not need either the documentation or the fonts, then you need only XFree86-4.6.0-src-1.tgz, XFree86-4.6.0-src-2.tgz and XFree86-4.6.0-src-3.tgz. o Extract each of these files by running the following from a directory on a filesystem containing enough space (the full source requires around 270MB, with a similar amount being required for the compiled binaries): gzip -d < XFree86-4.6.0-src-1.tgz | tar vxf - gzip -d < XFree86-4.6.0-src-2.tgz | tar vxf - gzip -d < XFree86-4.6.0-src-3.tgz | tar vxf - gzip -d < XFree86-4.6.0-src-4.tgz | tar vxf - gzip -d < XFree86-4.6.0-src-5.tgz | tar vxf - gzip -d < XFree86-4.6.0-src-6.tgz | tar vxf - gzip -d < XFree86-4.6.0-src-7.tgz | tar vxf - Alternatively, if you already have a pristine copy of the XFree86 4.5.0 source, you can download patches from ftp://ftp.xfree86.org/pub/XFree86/4.6.0/patches/ that will allow you to con- vert it to 4.6.0. Information about which patch files to download and how to apply them can be found in the "How to get XFree86" section of the README for this release. Each of the methods outlined above will produce one main source directory called xc. 2. Configuring the source before building In most cases it should not be necessary to configure anything before build- ing. If you do want to make configuration changes, you should start by going to the xc/config/cf directory, and copying the file xf86site.def to host.def. After that, read thoroughly the the host.def file, which is heavily com- mented, and set your configuration parameters. Usually you can find the default settings by checking the .cf file(s) relevant to your OS. A good rule of thumb is to only change that you understand, as it is very easy to create build problems by changing the default configuration unneces- sarily. Before making too many modifications, check the configuration param- eters specified in the xc/config/cf/README file. If you are using just the XFree86-4.6.0-src-1.tgz, XFree86-4.6.0-src-2.tgz and XFree86-4.6.0-src-3.tgz parts of the source dist, you will need to define BuildFonts to NO. 3. Using a shadow directory of symbolic links for the build We recommend that you use a shadow directory of symbolic links to do the build of XFree86, because it allows you to keep the source directory unmodi- fied during the build process. It has the following benefits: o Foreign files not under CVS's control are not touched. o Greater flexibility in building XFree86 for several different Operating Systems or hardware architectures from the same sources; shared by read- only NFS mounts. o Different configuration options can be created by putting a real copy of the host.def file in each build tree and by customizing it separately in each build tree, and then customizing it separately. To make a shadow directory of symbolic links, use the following steps: o create the directory at the top of the build tree. This is often created at the same level that the xc directory. cd the directory containing the xc directory mkdir build o use the "lndir" command to make the shadow tree: cd build lndir ../xc Note: You can refer to the xc directory by referencing it with an abso- lute path also. See the lndir(1) manual page for details. If the lndir command is not already available on your system, you can build it manually from the XFree86 sources by running the following commands: cd xc/config/util make -f Makefile.ini lndir cp lndir some directory in your PATH Occasionally there may be stale links in the build tree. This happens when files in the source tree are either removed or renamed. These stale links can be cleaned by running the "cleanlinks" script from the build directory (see the cleanlinks(1) manual page for further details). Rarely will there be changes that require the build tree to be re-created from scratch. If you think that this may be the case, look for build prob- lems, which could indicate that this is the problem. The best solution in this scenario is to remove the build tree,and then re-create it using the steps outlined above. 4. Building and installing the distribution Before building the distribution, read through your OS-specific documenta- tion in README file in xc/programs/Xserver/hw/xfree86/doc. After that go to your build directory which will either be the xc directory or the shadow tree which was create previously, and run "make World". It is also advisable to that you redirect standard output stdout and standard error output stderr to World.Log, so that you can track down problems that might occur during the build. With Bourne-like shells (examples include the Bash, the Korn, and zsh shells) use the following command: make World > World.log 2>&1 for C-shell variants (csh, tcsh, etc), use: make World >& World.log You can then follow the progress of the build by running: tail -f World.log in a terminal window. When the build is finished, you should check the World.Log file to see if there were any problems. If there were not, then install the binaries. By default "make World" stops when the first error is found. To restart that same build process after correcting the various problems, run just 'make'. If Imakefiles or part of the build configuration were changed as part of cor- recting the problem, then either re-run "make World", or run "make Every- thing". If instead, you want "make World" to continue past errors, then instead exe- cute it as follows: for Bourne-like shells: make WORLDOPTS=-k World > World.log 2>&1 for C-shell variants: make WORLDOPTS=-k World >& World.log For installation, run "make install" and "make install.man" and ensure that there is enough space in the /usr/X11R6 directory. If instead you want to install XFree86 on a filesystem other than /usr, make a symbolic link to /usr/X11R6 before running the install process. 5. Reconfiguring the server (using the source distribution) If you would like to build several different sets of servers or server(s) with a various sets of drivers then you should follow this procedure: 1. Ensure that the source for any new drivers is in the correct place (e.g., all driver source should be in a subdirectory of xc/pro- grams/Xserver/hw/xfree86/drivers). 2. Change the settings of the server definitions in host.def to specify which servers you wish to build. Also, change the driver lists to suit your needs. 3. From xc/programs/Xserver, run: make Makefile make Makefiles make includes make depend make 6. Other useful make targets There are some other useful targets defined in the top level Makefile of XFree86: Everything After a make World, make Everything replicates make World except for the cleaning of the source tree. make Everything very quickly rebuilds the tree after a source patch, but there are times when it is better to force a full build by using make World. clean This does a partial cleaning of the source tree. Removes object files and generated manual pages, but leaves the Makefiles and the generated dependencies files in place. After a make clean you need to re-run make includes make depend make to rebuild the XFree86. distclean This does a full cleaning of the source tree, removing all gener- ated files. After a make distclean, make World is the only option to rebuild XFree86. includes This generates all generated header files and in-tree symbolic links needed by the build. These files are removed by a make clean. depend This recomputes the dependencies for the various targets in all Makefiles. Depending on the operating system, the dependencies are stored in the Makefile, or as a separate file, called .depend. This target needs the generated include files produced by make includes. VerifyOS This displays the detected operating system version. If the num- bers shown do not match your system, you probably need to set them manually in host.def and report the problem to . Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml,v 3.20 dawes Exp $