gophervr on modern Linux
========================

Cameron Kaiser's 2015 Motif port of UMN's 1995 GopherVR — a 3D
"walk around gopherspace" client — has bitrotted on modern gcc.
This bundle includes one small patch + a build script so anyone
on a current Debian/Ubuntu can have it running in about 5 minutes.

Tested on:  Debian forky/sid, gcc 15.2, libmotif-dev 2.3.8, May 2026
Should work on: any glibc Linux with X11 + Motif + gcc 12+

Files in this directory
-----------------------
  README.txt                  this file
  gophervr-modern-gcc.patch   the diff (~50 lines, two files touched)
  gophervr-modern-build.zip   one-shot bundle: README + patch + build.sh


The lazy way: one-shot install
------------------------------
  curl -O <this directory>/gophervr-modern-build.zip
  unzip gophervr-modern-build.zip
  cd gophervr-modern-build
  ./build.sh                  # installs apt deps, builds in ~/src/gophervr
  cd ~/src/gophervr/gophervr/gophervr && ./gophervr

build.sh will sudo-apt-install the deps it needs. Read it first if
you don't trust strangers' shell scripts (you shouldn't).


The hand-rolled way
-------------------
1. Install build dependencies (Debian/Ubuntu):

     sudo apt-get install -y \
       build-essential libmotif-dev xutils-dev \
       libxt-dev libxmu-dev libasound2-dev unzip curl

2. Fetch the source from Floodgap (it's a .zip mislabelled .tar.gz):

     curl -o gophervr-src.zip \
       "gopher://gopher.floodgap.com/9/gophervr/gophervr-src.tar.gz"
     unzip gophervr-src.zip
     rm -rf __MACOSX
     find gophervr -name .DS_Store -delete

3. Apply the patch:

     patch -p1 < gophervr-modern-gcc.patch

4. Build:

     cd gophervr
     make linux

5. Run (needs X11; doesn't work under Wayland-only sessions
   without XWayland):

     cd gophervr           # yes, gophervr/gophervr — nested
     DISPLAY=:0 ./gophervr

   Try gopher.floodgap.com from the File menu. Hit F1 for the help
   topics.


What the patch actually does
----------------------------
Two files, one root cause. gcc 14+ changed the default C standard
to gnu23, where `f()` in a declaration finally means `f(void)`
instead of "unspecified args (K&R)". 1995 C code is full of
empty-parens prototypes that the linker is expected to reconcile
later. gcc 14 also promoted several long-standing warnings into
errors (implicit declarations, int<->pointer conversions, mismatched
pointer types).

The fix is to tell gcc to behave like it's 2014 again:

  -std=gnu89
  -Wno-error=implicit-function-declaration
  -Wno-error=int-conversion
  -Wno-error=incompatible-pointer-types
  -fcommon

The patch threads these flags into:

  - gophervr/Makefile         (top-level `linux:` target — passes
                               them to libgopher's ./configure and
                               libtracker's make)
  - gophervr/gophervr/Imakefile.linux  (the main binary's CFLAGS)

libvogl needs no changes; it was written carefully enough that
its own prototypes survive gcc 15 untouched.


Credits
-------
  Mark McCahill et al.   original UMN GopherVR (1995, ~0.2 alpha)
  Paul Lindner            Motif port + Unix gopher client base
  Cameron Kaiser          2010s revival, OS X launcher, Floodgap
                          maintenance (this is from his 0.5.1 of
                          24 October 2015)
  regarding_someodd       modern-gcc build patch + this bundle (2026)

Original source remains GPL. So is this patch. Floodgap canonical:

  gopher://gopher.floodgap.com/1/gophervr


Troubleshooting
---------------
* "xmkmf: command not found" — apt-get install xutils-dev
* "Xm/Xm.h: No such file" — apt-get install libmotif-dev
* "configure: error: ..." in gopher/ — try `cd gopher; make clean;
  rm -f config.status config.cache` then rerun `make linux` from
  the top
* Window opens but is all black / no text — Hershey fonts can't
  load; either symlink the font file:
    sudo mkdir -p /usr/local/lib/hershey
    sudo cp gophervr/gophervr/futura.hfont /usr/local/lib/hershey/
  or just run from gophervr/gophervr/ where futura.hfont sits
  alongside the binary
* `tempnam` linker warning — cosmetic, ignore
