%defs; ]>
Notes on Rebuilding X11R&relvers;/OS2 from Scratch <author>Holger Veit <date>Last modified March 8th, 2000 <ident> </ident> <toc> <sect>Preface <p> X11 was initially developed on Unix-based systems. Usually Unix systems provide a rich number of tools and utilities to get certain things done. Under OS/2, these tools are not installed, but ports are available which are sometimes functionally equivalent to Unix utilities with the same name, but also differ sometimes in a subtle way. This guide will give you hints if you intend to rebuild the system from scratch under OS/2. <p> Please also read <htmlurl name=README.OS2 url=OS2.html> for end-user information, and set at least the environment variables described there. <p> At the current time, the most recent version available is X11R&relvers; This is a full and unrestricted version which comes with complete source code. 4.0 is a highly experimental release, so many features that might have worked in earlier versions, may now no longer work, or work differently. Be aware that for OS/2, X11R&relvers; is considered to be alpha software. <sect>Tools required <p> I have tried to reduce the number of external tools, but when looking back it seems I were not very successful. At least I managed to get everything working with the native CMD.EXE shell only. However, there is still plenty of software required. Most of this software is available from <tt/hobbes.nmsu.edu/ or <tt/ftp.leo.org/ via anonymous FTP. The following shopping list shows what you will need: <itemize> <item>gcc EMX/gcc emx 0.9C patch4 or later (0.9d preferred!) <item>gzip GNU zip/unzip <item>tar GNU tar <item>patch Larry Wall's patch utility (attention: incompatible tool with same name in OS/2) <item>install BSD/GNU install <item>rm,mv,cp GNU file utilities <item>tee,.. GNU shell utilities <item>groff GNU nroff/troff <item>sed GNU sed stream editor <item>grep GNU grep <item>gawk GNU awk <item>make GNU make 3.71/3.72 (use the one from Xprog.zip!) <item>flex GNU flex <item>bison GNU bison <item>m4 GNU m4 <item>find GNU find (attention: incompatible tool with the same name in OS/2) </itemize> If there is no version number given, any new version will do. Particularly critical is only EMX/gcc and GNU make. Note that the second GCC implementation which might still be available from some archives is NOT compatible. Furthermore, you need the X11R&relvers; sources. These are available from the common X.org repositories. Look into a directory which is often named /pub/R&relvers;. <sect>Compiling and Installing <p> You need about 300MB of free HPFS space for the whole system. This does not include space for the postscript and troff documentation files. I have never installed them. Nor did I install the test subtree. <enum> <item>Install all the above utilities. Refer to the corresponding documentation. Verify that everything works well, particularly EMX. <item>It is a good idea to use the same or a similar structure I have. I have made a directory <tt>\x11</tt> on the partition for compiling and have put everything below this tree. I found that a clean tree occupies less than the half space of the disk, this gives me the opportunity to rename this tree to <tt>\x11old</tt> and copy a new version to the same disk to produce diffs. Last time the complete tree was arranged under the root directory <tt>xc</tt>, this would become <tt>\x11\xc</tt> then. <item>To unpack the files you would usually execute the command <verb>gzip -dc file.tar.gz | tar xvf -</verb> in the <tt>\x11</tt> directory. At the end you will usually see the irritating, but non-fatal message "gzip: stdout Broken pipe". Ignore it. <item>After that, is is likely necessary to apply some patches, either from the X.Org Foundation. Before you do this, enter <verb> chmod -R a+rw \x11\xc </verb> to make certain files in the tree writable. <item>There should be a file <tt>added-XXX</tt> accompanying the patch file which lists the files that are newly created. The patch program has a problem with creating new directories, so we need to create them on advance. For each <tt/added-XXX/ file you find, execute from <tt>\x11</tt> <verb>xc\config\util\added added-XXX</verb> If there is no <tt>added-XXX</tt> file available, you can make one with the following instructions: <verb> grep "\*\*\* xc/" patchfile >added-file </verb> Edit <tt/added-file/ with a text editor and remove the <tt/*** / at the beginning and the time stamp at the end (search for a TAB and erase to the end of the line). You get a list of file paths, one in a line, which is the input to the added utility. <item>After that you can apply the patches in the right order. Usually this is done by a command <verb> patch -p -E <patchfile 2>&1 | tee patchlog </verb> from the <tt>\x11</tt> directory. Be aware to use the right patch - OS/2 has a utility with the same name and different functionality. Don't use the recommended <tt/-s/ option, this makes <tt/patch/ quiet, and you won't see problems in the patchlog file. Use <verb> find \x11 -name *.rej -print find \x11 -name *# -print </verb> to find any rejects and unapplied patches (attention: yet another OS/2 program with wrong functionality). Normally there shouldn't be any problems of this kind, else you have made a mistake. Finally remove the original files with <verb> find \x11 -name *.orig -print -exec rm {} ; </verb> <item>Go to the <tt>xc/config/cf</tt> directory and edit the <tt>xorgsite.def</tt> file to match your requirements (you probably don't want to compile all X servers). Certain changes must be set to the following values: <itemize> <item>Disable if not already done any PC98 server; PC98 (Japanese X11R&relvers;) does not work yet. Porters from Japan are welcome! <item><tt>#define WacomSupport NO #define ElographicsSupport NO</tt> Both options are not yet supported. <item>Tcl* and Tk* don't need to be set explicitly. Reasonable defaults are in the other config files, provided you have a complete X11R&relvers;/OS2 binary tree with the tcl/tk runtime support installed. <item><tt>#define BuildDynamicLoading NO</tt> This does not work. </itemize> <item>Go to the directory <tt>xc\util\compress</tt> and <tt>make compress.exe</tt> there. Install the program produced there in your path. I stumbled more than once on half-ported compress programs on OS/2 ftp servers that are defective w.r.t. reading and writing stdin/stdout. In some stage (font compression) otherwise you will get a core dump of mkfontdir, because all compressed fonts are corrupt. <item>Set the environment variable <tt/X11ROOT/ to something different than it is; otherwise the installation process will overwrite your original X11R&relvers;/OS2 installation. If you have not set this variable, go back to the prefix section of this document: you have forgotten something. <item>Copy the file <tt>xc/programs/Xserver/hw/xfree86/etc/bindist/OS2/host.def.os2</tt> to the location <tt>xc/config/cf/host.def</tt>. Use this file to do any specific modifications to imake variables, rather than editing the file xorg.cf, imake.tmpl, or os2.cf directly. <item>Copy the file <tt>xc/config/util/buildos2.cmd</tt> into the <tt/xc/ directory. If this is a second or later attempt, you might need to copy the saved toplevel Makefile.os2 back to Makefile. <item>Execute this <tt/buildos2.cmd/ command in the <tt/xc/ directory; it will produce a logfile <tt>buildxc.log</tt> in this directory. <item>Go have a bucket of coffee, or better, buy new coffee - in Colombia! The compile will need between 2 and 20 hours, depending on your selections, and the horse power of your hardware. <item>When finished, view the logfile for errors, and fix the problems if there are some. I have managed to compile the whole system flawlessly, so there is at least one configuration that works. <item>Finally, from the <tt/xc/ dir, execute <verb> xmake install xmake install.man </verb> <item>There are a few minor glitches in the installation: <enum> <item>The xdm and linkkit directories will fail in compile and installation. This is no problem and has no effect on the rest of the system. <item>The imake.exe which is installed in <tt/\X11R&relvers;\bin/ is usually defective. The one which was built initially and installed in the root directory of the drive where you have the source tree is okay. So simply copy this <tt/\imake.exe/ to the <tt/\X11R&relvers;\bin/ directory manually. Some day this might be fixed. </enum> </enum> Well, you see, this was quite easy :-) </article>