Index: make-macosx-ub.sh
===================================================================
--- make-macosx-ub.sh	(revision 0)
+++ make-macosx-ub.sh	(revision 0)
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+DESTDIR=build/release-darwin-ub
+BASEDIR=baseq3
+MPACKDIR=missionpack
+
+BIN_OBJ="
+	build/release-darwin-ppc/ioquake3.ppc
+	build/release-darwin-x86/ioquake3.x86
+"
+BASE_OBJ="
+	build/release-darwin-ppc/$BASEDIR/cgameppc.dylib
+	build/release-darwin-x86/$BASEDIR/cgamex86.dylib
+	build/release-darwin-ppc/$BASEDIR/uippc.dylib
+	build/release-darwin-x86/$BASEDIR/uix86.dylib
+	build/release-darwin-ppc/$BASEDIR/qagameppc.dylib
+	build/release-darwin-x86/$BASEDIR/qagamex86.dylib
+"
+MPACK_OBJ="
+	build/release-darwin-ppc/$MPACKDIR/cgameppc.dylib
+	build/release-darwin-x86/$MPACKDIR/cgamex86.dylib
+	build/release-darwin-ppc/$MPACKDIR/uippc.dylib
+	build/release-darwin-x86/$MPACKDIR/uix86.dylib
+	build/release-darwin-ppc/$MPACKDIR/qagameppc.dylib
+	build/release-darwin-x86/$MPACKDIR/qagamex86.dylib
+"
+if [ ! -f Makefile ]; then
+	echo "This script must be run from the ioquake3 build directory";
+fi
+
+if [ ! -d /Developer/SDKs/MacOSX10.2.8.sdk ]; then
+	echo "
+/Developer/SDKs/MacOSX10.2.8.sdk/ is missing, this doesn't install by default
+with newer XCode releases, but you should be able to fine the installer at
+/Applications/Installers/Xcode Tools/Packages/"
+	exit 1;
+fi
+
+if [ ! -d /Developer/SDKs/MacOSX10.4u.sdk ]; then
+	echo "
+/Developer/SDKs/MacOSX10.4u.sdk/ is missing.  You must install XCode 2.2 or 
+newer in order to build Universal Binaries"
+	exit 1;
+fi
+
+(BUILD_MACOSX_UB=ppc make && BUILD_MACOSX_UB=x86 make) || exit 1;
+
+if [ ! -d $DESTDIR ]; then 
+	mkdir $DESTDIR || exit 1;
+fi
+if [ ! -d $DESTDIR/$BASEDIR ]; then
+	mkdir $DESTDIR/$BASEDIR || exit 1;
+fi
+if [ ! -d $DESTDIR/$MPACKDIR ]; then
+	mkdir $DESTDIR/$MPACKDIR || exit 1;
+fi
+
+echo "Installing Universal Binaries in $DESTDIR"
+lipo -create -o $DESTDIR/ioquake3.ub $BIN_OBJ
+cp $BASE_OBJ $DESTDIR/$BASEDIR/
+cp $MPACK_OBJ $DESTDIR/$MPACKDIR/
+cp code/libs/macosx/*.dylib $DESTDIR/
+

Property changes on: make-macosx-ub.sh
___________________________________________________________________
Name: svn:executable
   + *

Index: code/unix/sdl_glimp.c
===================================================================
--- code/unix/sdl_glimp.c	(revision 817)
+++ code/unix/sdl_glimp.c	(working copy)
@@ -67,7 +67,12 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
+#if USE_SDL_VIDEO
+#include "SDL.h"
+#include "SDL_loadso.h"
+#else
 #include <dlfcn.h>
+#endif
 
 #include "../renderer/tr_local.h"
 #include "../client/client.h"
Index: code/unix/unix_net.c
===================================================================
--- code/unix/unix_net.c	(revision 817)
+++ code/unix/unix_net.c	(working copy)
@@ -25,6 +25,10 @@
 #include "../qcommon/qcommon.h"
 
 #include <unistd.h>
+#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
+  // needed for socket_t on OSX 10.2
+  #define _BSD_SOCKLEN_T_
+#endif
 #include <sys/socket.h>
 #include <sys/time.h>
 #include <netinet/in.h>
Index: code/libs/macosx/libSDL-1.2.0.dylib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: code/qcommon/files.c
===================================================================
--- code/qcommon/files.c	(revision 817)
+++ code/qcommon/files.c	(working copy)
@@ -2829,6 +2829,10 @@
 	if (fs_basepath->string[0]) {
 		FS_AddGameDirectory( fs_basepath->string, gameName );
 	}
+        #ifdef MACOS_X
+		// allow .app bundles to be placed along side base dir
+		FS_AddGameDirectory( "./", gameName );
+        #endif
   // fs_homepath is somewhat particular to *nix systems, only add if relevant
   // NOTE: same filtering below for mods and basegame
 	if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) {
Index: code/client/snd_openal.c
===================================================================
--- code/client/snd_openal.c	(revision 817)
+++ code/client/snd_openal.c	(working copy)
@@ -1524,6 +1524,8 @@
 
 #ifdef _WIN32
 #define ALDRIVER_DEFAULT "OpenAL32.dll"
+#elif defined(MACOS_X)
+#define ALDRIVER_DEFAULT "/System/Library/Frameworks/OpenAL.framework/OpenAL"
 #else
 #define ALDRIVER_DEFAULT "libopenal.so.0"
 #endif
Index: Makefile
===================================================================
--- Makefile	(revision 817)
+++ Makefile	(working copy)
@@ -261,46 +261,106 @@
 #############################################################################
 
 ifeq ($(PLATFORM),darwin)
-  CC=gcc
-
-  # !!! FIXME: calling conventions are still broken! See Bugzilla #2519
   VM_PPC=vm_ppc_new
+  HAVE_VM_COMPILED=true
+  BASE_CFLAGS=
+  CLIENT_LDFLAGS=
+  LDFLAGS=
+  OPTIMIZE=
+  ifeq ($(BUILD_MACOSX_UB),ppc)
+    CC = gcc-3.3
+    BASE_CFLAGS += -arch ppc -DSMP \
+      -DMAC_OS_X_VERSION_MIN_REQUIRED=1020 -nostdinc \
+      -F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \
+      -I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \
+      -isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include
+    LDFLAGS += -arch ppc \
+      -L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \
+      -F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \
+      -Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk,-m 
+    ARCH=ppc
 
-  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
+    # OS X 10.2 sdk lacks dlopen() so tremded woule need libSDL anyway...
+    BUILD_SERVER=0
+
+    # because of a problem with linking on 10.2 this will generate multiply
+    # defined symbol errors.  The errors can be turned into warnings with
+    # the -m linker flag, but you can't shut up the warnings 
+    USE_OPENAL_DLOPEN=1
+
+    # Apple's OpenAL headers don't seem to match ours very well
+    USE_LOCAL_HEADERS=1
+  else
+  ifeq ($(BUILD_MACOSX_UB),x86)
+    CC=gcc-4.0
+    BASE_CFLAGS += -arch i386 -DSMP \
+      -isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+      -mmacosx-version-min=10.4 \
+      -DMAC_OS_X_VERSION_MIN_REQUIRED=1040 -nostdinc \
+      -F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
+      -I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include \
+      -isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include
+    LDFLAGS = -mmacosx-version-min=10.4 \
+      -L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1
+    ARCH=x86
+  else
+    CC=gcc
+  endif
+  endif
+
+  ifeq ($(ARCH),ppc)
+    OPTIMIZE += -faltivec
+    # Carbon is required on PPC only to make a call to MakeDataExecutable
+    # in the PPC vm (should be a better non-Carbon way).
+    LDFLAGS += -framework Carbon
+  endif
+  ifeq ($(ARCH),x86)
+    OPTIMIZE += -msse2
+    # x86 vm will crash without this since MMX instructions will be used
+    # on OS X no matter what and they corrupt the frame pointer in VM calls
+    BASE_CFLAGS += -mstackrealign
+  endif
+
+  BASE_CFLAGS += -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
   BASE_CFLAGS += -DMACOS_X -fno-common -pipe
 
   # Always include debug symbols...you can strip the binary later...
   BASE_CFLAGS += -gfull
 
+  # -framework OpenAL requires 10.4 or later...for builds shipping to the
+  #  public, you'll want to use USE_OPENAL_DLOPEN and ship your own OpenAL
+  #  library (http://openal.org/ or http://icculus.org/al_osx/)
   ifeq ($(USE_OPENAL),1)
     BASE_CFLAGS += -DUSE_OPENAL=1
-    ifeq ($(USE_OPENAL_DLOPEN),1)
+    ifneq ($(USE_OPENAL_DLOPEN),1)
+      CLIENT_LDFLAGS += -framework OpenAL
+    else
       BASE_CFLAGS += -DUSE_OPENAL_DLOPEN=1
     endif
   endif
 
   ifeq ($(USE_CODEC_VORBIS),1)
     BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
+    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
   endif
 
   ifeq ($(USE_SDL),1)
-    BASE_CFLAGS += -DUSE_SDL_VIDEO=1 -DUSE_SDL_SOUND=1 -D_THREAD_SAFE=1 -I$(SDLHDIR)/include
+    BASE_CFLAGS += -DUSE_SDL_VIDEO=1 -DUSE_SDL_SOUND=1 -D_THREAD_SAFE=1 \
+      -I$(SDLHDIR)/include
     GL_CFLAGS =
+    # We copy sdlmain before ranlib'ing it so that subversion doesn't think
+    #  the file has been modified by each build.
+    LIBSDLMAIN=$(B)/libSDLmain.a
+    LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a
+    CLIENT_LDFLAGS += -framework Cocoa -framework OpenGL \
+      $(LIBSDIR)/macosx/libSDL-1.2.0.dylib
+  else
+    # !!! FIXME: frameworks: OpenGL, Carbon, etc...
+    #CLIENT_LDFLAGS += -L/usr/X11R6/$(LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
   endif
 
-  OPTIMIZE = -O3 -ffast-math -falign-loops=16
+  OPTIMIZE += -O3 -ffast-math -falign-loops=16
 
-  ifeq ($(ARCH),ppc)
-  BASE_CFLAGS += -faltivec
-    ifneq ($(VM_PPC),)
-      HAVE_VM_COMPILED=true
-    endif
-  endif
-
-  ifeq ($(ARCH),i386)
-    # !!! FIXME: x86-specific flags here...
-  endif
-
   ifneq ($(HAVE_VM_COMPILED),true)
     BASE_CFLAGS += -DNO_VM_COMPILED
   endif
@@ -315,34 +375,6 @@
 
   NOTSHLIBCFLAGS=-mdynamic-no-pic
 
-  #THREAD_LDFLAGS=-lpthread
-  #LDFLAGS=-ldl -lm
-  LDFLAGS += -framework Carbon
-
-  ifeq ($(USE_SDL),1)
-    # We copy sdlmain before ranlib'ing it so that subversion doesn't think
-    #  the file has been modified by each build.
-    LIBSDLMAIN=$(B)/libSDLmain.a
-    LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a
-    CLIENT_LDFLAGS=-framework Cocoa -framework OpenGL $(LIBSDIR)/macosx/libSDL-1.2.0.dylib
-  else
-    # !!! FIXME: frameworks: OpenGL, Carbon, etc...
-    #CLIENT_LDFLAGS=-L/usr/X11R6/$(LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
-  endif
-
-  # -framework OpenAL requires 10.4 or later...for builds shipping to the
-  #  public, you'll want to use USE_OPENAL_DLOPEN and ship your own OpenAL
-  #  library (http://openal.org/ or http://icculus.org/al_osx/)
-  ifeq ($(USE_OPENAL),1)
-    ifneq ($(USE_OPENAL_DLOPEN),1)
-      CLIENT_LDFLAGS += -framework OpenAL
-    endif
-  endif
-
-  ifeq ($(USE_CODEC_VORBIS),1)
-    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
-  endif
-
 else # ifeq darwin
 
 
@@ -1261,6 +1293,12 @@
       $(B)/ded/snapvectora.o \
       $(B)/ded/matha.o
 endif
+ifeq ($(ARCH),x86)
+  Q3DOBJ += \
+      $(B)/ded/ftola.o \
+      $(B)/ded/snapvectora.o \
+      $(B)/ded/matha.o
+endif
 
 ifeq ($(HAVE_VM_COMPILED),true)
   ifeq ($(ARCH),i386)