
             Info on using Mesa 3.0 with Linux Quake I and Quake II



Disclaimer
----------

I am _not_ a Quake expert by any means.  I pretty much only run it to
test Mesa.  There have been a lot of questions about Linux Quake and
Mesa so I'm trying to provide some useful info here.  If this file
doesn't help you then you should look elsewhere for help.  The Mesa
mailing list or the news://news.3dfx.com/3dfx.linux.glide newsgroup
might be good.

Again, all the information I have is in this file.  Please don't email
me with questions.

If you have information to contribute to this file please send it to
me at brianp@elastic.avid.com



Linux Quake
-----------

You can get Linux Quake from http://www.idsoftware.com/

Quake I and II for Linux were tested with, and include, Mesa 2.6.  You
shouldn't have too many problems if you simply follow the instructions
in the Quake distribution.



RedHat 5.0 Linux problems
-------------------------

RedHat Linux 5.x uses the GNU C library ("glibc" or "libc6") whereas
previous RedHat and other Linux distributions use "libc5" for its
runtime C library.

Linux Quake I and II were compiled for libc5.  If you compile Mesa
on a RedHat 5.x system the resulting libMesaGL.so file will not work
with Linux Quake because of the different C runtime libraries.
The symptom of this is a segmentation fault soon after starting Quake.

If you want to use a newer version of Mesa (like 3.x) with Quake on
RedHat 5.x then read on.

The solution to the C library problem is to force Mesa to use libc5.
libc5 is in /usr/i486-linux-libc5/lib on RedHat 5.x systems.

Emil Briggs (briggs@tick.physics.ncsu.edu) nicely gave me the following
info:

>   I only know what works on a RedHat 5.0 distribution. RH5 includes
> a full set of libraries for both libc5 and glibc. The loader ld.so
> uses the libc5 libraries in /usr/i486-linux-libc5/lib for programs
> linked against libc5 while it uses the glibc libraries in /lib and
> /usr/lib for programs linked against glibc.
> 
> Anyway I changed line 41 of mklib.glide to
>     GLIDELIBS="-L/usr/local/glide/lib -lglide2x -L/usr/i486-linux-libc5/lib"
> 
> And I started quake2 up with a script like this
> #!/bin/csh
> setenv LD_LIBRARY_PATH /usr/i486-linux-libc5/lib
> setenv MESA_GLX_FX f
> ./quake2 +set vid_ref gl
> kbd_mode -a
> reset


I've already patched the mklib.glide file.  You'll have to start Quake
with the script shown above though.



**********************

Daryll Strauss writes:

Here's my thoughts on the problem. On a RH 5.x system, you can NOT build
a libc5 executable or library. Red Hat just doesn't include the right
stuff to do it.

Since Quake is a libc5 based application, you are in trouble. You need
libc5 libraries.

What can you do about it? Well there's a package called gcc5 that does
MOST of the right stuff to compile with libc5. (It brings back older
header files, makes appropriate symbolic links for libraries, and sets
up the compiler to use the correct directories) You can find gcc5 here: 
ftp://ecg.mit.edu/pub/linux/gcc5-1.0-1.i386.rpm

No, this isn't quite enough. There are still a few tricks to getting
Mesa to compile as a libc5 application. First you have to make sure that
every compile uses gcc5 instead of gcc. Second, in some cases the link
line actually lists -L/usr/lib which breaks gcc5 (because it forces you
to use the glibc version of things)

If you get all the stuff correctly compiled with gcc5 it should work.
I've run Mesa 3.0B6  and its demos in a window with my Rush on a Red Hat
5.1 system. It is a big hassle, but it can be done. I've only made Quake
segfault, but I think that's from my libRush using the wrong libc. 

Yes, mixing libc5 and glibc is a major pain. I've been working to get
all my libraries compiling correctly with this setup. Someone should
make an RPM out of it and feed changes back to Brian once they get it
all working. If no one else has done so by the time I get the rest of my
stuff straightened out, I'll try to do it myself.

							- |Daryll



*********************

David Bucciarelli (tech.hmw@plus.it) writes:

I'm using the Mesa-3.0beta7 and the RedHat 5.1 and QuakeII is
working fine for me.  I had only to make a small change to the
Mesa-3.0/mklib.glide file, from:


    GLIDELIBS="-L/usr/local/glide/lib -lglide2x
-L/usr/i486-linux-libc5/lib -lm"

to:

    GLIDELIBS="-L/usr/i486-linux-libc5/lib -lglide2x"

and to make two symbolic links:

[david@localhost Mesa]$ ln -s libMesaGL.so libMesaGL.so.2
[david@localhost Mesa]$ ln -s libMesaGLU.so libMesaGLU.so.2

I'm using the Daryll's Linux glide rpm for the Voodoo2 and glibc (it
includes also the Glide for the libc5). I'm not using the /dev/3Dfx and
running QuakeII as root with the following env. var:

export
LD_LIBRARY_PATH=/dsk1/home/david/src/gl/Mesa/lib:/usr/i486-linux-libc5/lib

I think that all problems are related to the glibc, Quake will never
work if you get the following output:

[david@localhost Mesa]$ ldd lib/libMesaGL.so
        libglide2x.so => /usr/lib/libglide2x.so (0x400f8000)
        libm.so.6 => /lib/libm.so.6 (0x40244000)
        libc.so.6 => /lib/libc.so.6 (0x4025d000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)

You must get the following outputs:

[david@localhost Mesa]# ldd lib/libMesaGL.so
        libglide2x.so => /usr/i486-linux-libc5/lib/libglide2x.so
(0x400f3000)

[root@localhost quake2]# ldd quake2
        libdl.so.1 => /lib/libdl.so.1 (0x40005000)
        libm.so.5 => /usr/i486-linux-libc5/lib/libm.so.5 (0x40008000)
        libc.so.5 => /usr/i486-linux-libc5/lib/libc.so.5 (0x40010000)

[root@localhost quake2]# ldd ref_gl.so
        libMesaGL.so.2 =>
/dsk1/home/david/src/gl/Mesa/lib/libMesaGL.so.2 (0x400eb000)
        libglide2x.so => /usr/i486-linux-libc5/lib/libglide2x.so
(0x401d9000)
        libX11.so.6 => /usr/i486-linux-libc5/lib/libX11.so.6
(0x40324000)
        libXext.so.6 => /usr/i486-linux-libc5/lib/libXext.so.6
(0x403b7000)
        libvga.so.1 => /usr/i486-linux-libc5/lib/libvga.so.1
(0x403c1000)
        libm.so.5 => /usr/i486-linux-libc5/lib/libm.so.5 (0x403f5000)
        libc.so.5 => /usr/i486-linux-libc5/lib/libc.so.5 (0x403fd000)


***********************

Steve Davies (steve@one47.demon.co.uk) writes:


Try using:

    export LD_LIBRARY_PATH=/usr/i486-linux-libc5/lib
    ./quake2 +set vid_ref gl

to start the game... Works for me, but assumes that you have the
compatability libc5 RPMs installed.


***************************

WWW resources - you may find additional Linux Quake help at these URLs:


http://quake.medina.net/howto

http://webpages.mr.net/bobz

http://www.linuxgames.com/quake2/



----------------------------------------------------------------------
$Id: README.QUAKE,v 1.1.1.1 2012/03/29 17:22:08 uid42307 Exp $
