<!DOCTYPE linuxdoc PUBLIC "-//Xorg//DTD linuxdoc//EN" [
<!ENTITY % defs SYSTEM "defs.ent"> %defs;
]>
<article>

<title>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>&bsol;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>&bsol;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>&bsol;x11&bsol;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>&bsol;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 &bsol;x11&bsol;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>&bsol;x11</tt> <verb>xc&bsol;config&bsol;util&bsol;added added-XXX</verb>
      If there is no <tt>added-XXX</tt> file available, you can make one with
      the following instructions:
      <verb>
      grep "&bsol;*&bsol;*&bsol;* 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>&bsol;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 &bsol;x11 -name *.rej -print 
      find &bsol;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 &bsol;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>&num;define WacomSupport            NO
            &num;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>&num;define BuildDynamicLoading   NO</tt>
	    This does not work.
      </itemize>
<item>Go to the directory <tt>xc&bsol;util&bsol;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/&bsol;X11R&relvers;&bsol;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/&bsol;imake.exe/ to the <tt/&bsol;X11R&relvers;&bsol;bin/ directory 
      manually. Some day this might be fixed.
</enum>
</enum>

Well, you see, this was quite easy :-)





</article>
