summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile74
-rwxr-xr-xmake-macosx-ub.sh159
-rw-r--r--src/AL/al.h3
-rw-r--r--src/AL/alc.h4
-rw-r--r--src/client/cl_main.c4
-rw-r--r--src/qcommon/common.c2
-rw-r--r--src/qcommon/files.c16
-rw-r--r--src/qcommon/qcommon.h7
-rw-r--r--src/sys/sys_main.c10
9 files changed, 200 insertions, 79 deletions
diff --git a/Makefile b/Makefile
index 21feb0e6..1defb7d4 100644
--- a/Makefile
+++ b/Makefile
@@ -17,11 +17,21 @@ ifeq ($(COMPILE_PLATFORM),darwin)
COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/x86/)
endif
-BUILD_CLIENT =
-BUILD_CLIENT_SMP =
-BUILD_SERVER =
-BUILD_GAME_SO =
-BUILD_GAME_QVM =
+ifndef BUILD_CLIENT
+ BUILD_CLIENT =
+endif
+ifndef BUILD_CLIENT_SMP
+ BUILD_CLIENT_SMP =
+endif
+ifndef BUILD_SERVER
+ BUILD_SERVER =
+endif
+ifndef BUILD_GAME_SO
+ BUILD_GAME_SO =
+endif
+ifndef BUILD_GAME_QVM
+ BUILD_GAME_QVM =
+endif
ifneq ($(PLATFORM),darwin)
BUILD_CLIENT_SMP = 0
@@ -275,57 +285,13 @@ else # ifeq Linux
ifeq ($(PLATFORM),darwin)
HAVE_VM_COMPILED=true
- BASE_CFLAGS=
CLIENT_LDFLAGS=
- LDFLAGS=
OPTIMIZE=
- ifndef MACOSX_SDK_DIR
- MACOSX_SDK_DIR="/Developer/SDKs/MacOSX10.5.sdk"
- endif
-
# building the QVMs on MacOSX is broken, atm.
BUILD_GAME_QVM=0
-
- ifeq ($(BUILD_MACOSX_UB),ppc)
- CC=gcc-4.0
- BASE_CFLAGS += -arch ppc -DSMP \
- -DMAC_OS_X_VERSION_MIN_REQUIRED=1020 -nostdinc \
- -F"$(MACOSX_SDK_DIR)"/System/Library/Frameworks \
- -I"$(MACOSX_SDK_DIR)"/usr/lib/gcc/i686-apple-darwin9/4.0.1/include \
- -isystem "$(MACOSX_SDK_DIR)"/usr/include
- LDFLAGS += -arch ppc \
- -L"$(MACOSX_SDK_DIR)"/usr/lib/gcc/darwin/4.0 \
- -F"$(MACOSX_SDK_DIR)"/System/Library/Frameworks \
- -Wl,-syslibroot,"$(MACOSX_SDK_DIR)"
- ARCH=ppc
-
- # OS X 10.2 sdk lacks dlopen() so ded would need libSDL anyway
-# BUILD_SERVER=0
-
- else
- ifeq ($(BUILD_MACOSX_UB),x86)
- CC=gcc-4.0
- BASE_CFLAGS += -arch i386 -DSMP \
- -mmacosx-version-min=10.4 \
- -DMAC_OS_X_VERSION_MIN_REQUIRED=1040 -nostdinc \
- -F"$(MACOSX_SDK_DIR)"/System/Library/Frameworks \
- -I"$(MACOSX_SDK_DIR)"/usr/lib/gcc/i686-apple-darwin9/4.0.1/include \
- -isystem "$(MACOSX_SDK_DIR)"/usr/include
- LDFLAGS = -arch i386 -mmacosx-version-min=10.4 \
- -L"$(MACOSX_SDK_DIR)"/usr/lib/gcc/i686-apple-darwin9/4.0.1 \
- -F"$(MACOSX_SDK_DIR)"/System/Library/Frameworks \
- -Wl,-syslibroot,"$(MACOSX_SDK_DIR)"
- ARCH=x86
-# BUILD_SERVER=0
- else
- # for whatever reason using the headers in the MacOSX SDKs tend to throw
- # errors even though they are identical to the system ones which don't
- # therefore we shut up warning flags when running the universal build
- # script as much as possible.
- BASE_CFLAGS += -Wall -Wimplicit -Wstrict-prototypes
- endif
- endif
+
+ BASE_CFLAGS = -Wall -Wimplicit -Wstrict-prototypes
ifeq ($(ARCH),ppc)
OPTIMIZE += -faltivec -O3
@@ -878,6 +844,12 @@ targets: makedirs
echo " $$i"; \
done
@echo ""
+ @echo " LDFLAGS:"
+ @for i in $(LDFLAGS); \
+ do \
+ echo " $$i"; \
+ done
+ @echo ""
@echo " Output:"
@for i in $(TARGETS); \
do \
diff --git a/make-macosx-ub.sh b/make-macosx-ub.sh
index 9584e299..e12ad53b 100755
--- a/make-macosx-ub.sh
+++ b/make-macosx-ub.sh
@@ -1,12 +1,11 @@
#!/bin/sh
APPBUNDLE=Tremulous.app
BINARY=Tremulous.ub
-DEDBIN=tremded.ub
+DEDBIN=Tremded.ub
PKGINFO=APPLTREM
ICNS=misc/Tremulous.icns
DESTDIR=build/release-darwin-ub
BASEDIR=base
-SDKDIR=""
Q3_VERSION=`grep "\#define Q3_VERSION" src/qcommon/q_shared.h | \
sed -e 's/.*".* \([^ ]*\)"/\1/'`;
@@ -15,8 +14,8 @@ BIN_OBJ="
build/release-darwin-x86/tremulous.x86
"
BIN_DEDOBJ="
- build/release-darwin-ppc/ioq3ded.ppc
- build/release-darwin-i386/ioq3ded.i386
+ build/release-darwin-ppc/tremded.ppc
+ build/release-darwin-x86/tremded.x86
"
BASE_OBJ="
build/release-darwin-ppc/$BASEDIR/cgameppc.dylib
@@ -30,26 +29,141 @@ if [ ! -f Makefile ]; then
echo "This script must be run from the Tremulous build directory";
fi
-# this is kind of a hack to find out the latest SDK to use. I assume that newer SDKs apear later in this for loop,
-# thus the last valid one is the one we want.
-
-for availsdks in /Developer/SDKs/*
-do
- if [ -d $availsdks ]
- then
- SDKDIR="$availsdks"
- fi
-done
-
-if [ -z $SDKDIR ]
-then
- echo "MacOSX SDK is missing. Please install a recent version of the MacOSX SDK."
- exit 1;
-else
- echo "Using $SDKDIR for compilation"
+TIGERHOST=0
+if uname -r | grep ^8. > /dev/null; then
+ TIGERHOST=1
fi
-(BUILD_MACOSX_UB=ppc make && BUILD_MACOSX_UB=x86 make) || exit 1;
+# we want to use the oldest available SDK for max compatiblity
+unset PPC_CLIENT_SDK
+PPC_CLIENT_CC=gcc
+unset PPC_CLIENT_CFLAGS
+unset PPC_CLIENT_LDFLAGS
+unset PPC_SERVER_SDK
+unset PPC_SERVER_CFLAGS
+unset PPC_SERVER_LDFLAGS
+unset X86_SDK
+unset X86_CFLAGS
+unset X86_LDFLAGS
+if [ -d /Developer/SDKs/MacOSX10.5.sdk ]; then
+ PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.5.sdk
+ PPC_CLIENT_CC=gcc-4.0
+ PPC_CLIENT_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk \
+ -DMAC_OS_X_VERSION_MIN_REQUIRED=1050"
+ PPC_CLIENT_LDFLAGS="-arch ppc \
+ -isysroot /Developer/SDKs/MacOSX10.5.sdk \
+ -mmacosx-version-min=10.5"
+ PPC_SERVER_SDK=/Developer/SDKs/MacOSX10.5.sdk
+ PPC_SERVER_CFLAGS=$PPC_CLIENT_CFLAGS
+ PPC_SERVER_LDFLAGS=$PPC_CLIENT_LDFLAGS
+
+ X86_SDK=/Developer/SDKs/MacOSX10.5.sdk
+ X86_CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk \
+ -DMAC_OS_X_VERSION_MIN_REQUIRED=1050"
+ X86_LDFLAGS="-arch i386 \
+ -isysroot /Developer/SDKs/MacOSX10.5.sdk \
+ -mmacosx-version-min=10.5"
+ X86_ENV="CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS"
+fi
+
+if [ -d /Developer/SDKs/MacOSX10.4u.sdk ]; then
+ PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+ PPC_CLIENT_CC=gcc-4.0
+ PPC_CLIENT_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+ -DMAC_OS_X_VERSION_MIN_REQUIRED=1040"
+ PPC_CLIENT_LDFLAGS="-arch ppc \
+ -isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+ -mmacosx-version-min=10.4"
+ PPC_SERVER_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+ PPC_SERVER_CFLAGS=$PPC_CLIENT_CFLAGS
+ PPC_SERVER_LDFLAGS=$PPC_CLIENT_LDFLAGS
+
+ X86_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+ X86_CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+ -DMAC_OS_X_VERSION_MIN_REQUIRED=1040"
+ X86_LDFLAGS="-arch i386 \
+ -isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+ -mmacosx-version-min=10.4"
+ X86_ENV="CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS"
+fi
+
+if [ -d /Developer/SDKs/MacOSX10.3.9.sdk ] && [ $TIGERHOST ]; then
+ PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.3.9.sdk
+ PPC_CLIENT_CC=gcc-4.0
+ PPC_CLIENT_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.3.9.sdk \
+ -DMAC_OS_X_VERSION_MIN_REQUIRED=1030"
+ PPC_CLIENT_LDFLAGS="-arch ppc \
+ -isysroot /Developer/SDKs/MacOSX10.3.9.sdk \
+ -mmacosx-version-min=10.3"
+ PPC_SERVER_SDK=/Developer/SDKs/MacOSX10.3.9.sdk
+ PPC_SERVER_CFLAGS=$PPC_CLIENT_CFLAGS
+ PPC_SERVER_LDFLAGS=$PPC_CLIENT_LDFLAGS
+fi
+
+if [ -d /Developer/SDKs/MacOSX10.2.8.sdk ] && [ -x /usr/bin/gcc-3.3 ] && [ $TIGERHOST ]; then
+ PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.2.8.sdk
+ PPC_CLIENT_CC=gcc-3.3
+ PPC_CLIENT_CFLAGS="-arch ppc \
+ -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 \
+ -DMAC_OS_X_VERSION_MIN_REQUIRED=1020"
+ PPC_CLIENT_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"
+fi
+
+echo "Building PPC Dedicated Server against \"$PPC_SERVER_SDK\""
+echo "Building PPC Client against \"$PPC_CLIENT_SDK\""
+echo "Building X86 Client/Dedicated Server against \"$X86_SDK\""
+if [ "$PPC_CLIENT_SDK" != "/Developer/SDKs/MacOSX10.2.8.sdk" ] || \
+ [ "$PPC_SERVER_SDK" != "/Developer/SDKs/MacOSX10.3.9.sdk" ] || \
+ [ "$X86_SDK" != "/Developer/SDKs/MacOSX10.4u.sdk" ]; then
+ echo "\
+WARNING: in order to build a binary with maximum compatibility you must
+ build on Mac OS X 10.4 using Xcode 2.3 or 2.5 and have the
+ MacOSX10.2.8, MacOSX10.3.9, and MacOSX10.4u SDKs installed
+ from the Xcode install disk Packages folder."
+fi
+
+if [ -z $PPC_CLIENT_SDK ] || [ -z $PPC_SERVER_SDK ] || [ -z $X86_SDK ]; then
+ echo "\
+ERROR: This script is for building a Universal Binary. You cannot build
+ for a different architecture unless you have the proper Mac OS X SDKs
+ installed. If you just want to to compile for your own system run
+ 'make' instead of this script."
+ exit 1
+fi
+sleep 3
+
+if [ ! -d $DESTDIR ]; then
+ mkdir -p $DESTDIR
+fi
+
+# ppc dedicated server
+echo "Building Dedicated Server using $PPC_SERVER_SDK"
+sleep 2
+if [ -d build/release-darwin-ppc ]; then
+ rm -r build/release-darwin-ppc
+fi
+(ARCH=ppc BUILD_CLIENT_SMP=0 BUILD_CLIENT=0 BUILD_GAME_VM=0 BUILD_GAME_SO=0 \
+ CFLAGS=$PPC_SERVER_CFLAGS LDFLAGS=$PPC_SERVER_LDFLAGS make) || exit 1;
+cp build/release-darwin-ppc/ioq3ded.ppc $DESTDIR
+
+# ppc client
+if [ -d build/release-darwin-ppc ]; then
+ rm -r build/release-darwin-ppc
+fi
+(ARCH=ppc USE_OPENAL_DLOPEN=1 BUILD_SERVER=0 CC=$PPC_CLIENT_CC \
+ CFLAGS=$PPC_CLIENT_CFLAGS LDFLAGS=$PPC_CLIENT_LDFLAGS make) || exit 1;
+
+# intel client and server
+if [ -d build/release-darwin-x86 ]; then
+ rm -r build/release-darwin-x86
+fi
+(ARCH=x86 CFLAGS=$X86_CFLAGS LDFLAGS=$X86_LDFLAGS make) || exit 1;
echo "Creating .app bundle $DESTDIR/$APPBUNDLE"
if [ ! -d $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR ]; then
@@ -102,6 +216,7 @@ echo "
lipo -create -o $DESTDIR/$APPBUNDLE/Contents/MacOS/$BINARY $BIN_OBJ
lipo -create -o $DESTDIR/$APPBUNDLE/Contents/MacOS/$DEDBIN $BIN_DEDOBJ
+rm $DESTDIR/ioq3ded.ppc
cp $BASE_OBJ $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR/
cp src/libs/macosx/*.dylib $DESTDIR/$APPBUNDLE/Contents/MacOS/
diff --git a/src/AL/al.h b/src/AL/al.h
index 9fd55989..fd9a5375 100644
--- a/src/AL/al.h
+++ b/src/AL/al.h
@@ -339,6 +339,7 @@ ALAPI void ALAPIENTRY alDistanceModel( ALenum distanceModel );
#else /* AL_NO_PROTOTYPES */
+/*
void (ALAPIENTRY *alEnable)( ALenum capability );
void (ALAPIENTRY *alDisable)( ALenum capability );
ALboolean (ALAPIENTRY *alIsEnabled)( ALenum capability );
@@ -412,7 +413,7 @@ void (ALAPIENTRY *alDopplerFactor)( ALfloat value );
void (ALAPIENTRY *alDopplerVelocity)( ALfloat value );
void (ALAPIENTRY *alSpeedOfSound)( ALfloat value );
void (ALAPIENTRY *alDistanceModel)( ALenum distanceModel );
-
+*/
/* Type Definitions */
typedef void (ALAPIENTRY *LPALENABLE)( ALenum capability );
diff --git a/src/AL/alc.h b/src/AL/alc.h
index 980d8f1a..f3a41bce 100644
--- a/src/AL/alc.h
+++ b/src/AL/alc.h
@@ -107,7 +107,7 @@ ALCAPI void ALCAPIENTRY alcCaptureStop( ALCdevice *device );
ALCAPI void ALCAPIENTRY alcCaptureSamples( ALCdevice *device, ALCvoid *buffer, ALCsizei samples );
#else /* ALC_NO_PROTOTYPES */
-
+/*
ALCAPI ALCcontext * (ALCAPIENTRY *alcCreateContext)( ALCdevice *device, const ALCint* attrlist );
ALCAPI ALCboolean (ALCAPIENTRY *alcMakeContextCurrent)( ALCcontext *context );
ALCAPI void (ALCAPIENTRY *alcProcessContext)( ALCcontext *context );
@@ -128,7 +128,7 @@ ALCAPI ALCboolean (ALCAPIENTRY *alcCaptureCloseDevice)( ALCdevice *device )
ALCAPI void (ALCAPIENTRY *alcCaptureStart)( ALCdevice *device );
ALCAPI void (ALCAPIENTRY *alcCaptureStop)( ALCdevice *device );
ALCAPI void (ALCAPIENTRY *alcCaptureSamples)( ALCdevice *device, ALCvoid *buffer, ALCsizei samples );
-
+*/
/* Type definitions */
typedef ALCcontext * (ALCAPIENTRY *LPALCCREATECONTEXT) (ALCdevice *device, const ALCint *attrlist);
typedef ALCboolean (ALCAPIENTRY *LPALCMAKECONTEXTCURRENT)( ALCcontext *context );
diff --git a/src/client/cl_main.c b/src/client/cl_main.c
index a1701d77..14cb84b7 100644
--- a/src/client/cl_main.c
+++ b/src/client/cl_main.c
@@ -3215,13 +3215,13 @@ void CL_GlobalServers_f( void ) {
// reset the list, waiting for response
// -1 is used to distinguish a "no response"
+ NET_StringToAdr( cl_master->string, &to );
+
if( cls.masterNum == 1 ) {
- NET_StringToAdr( cl_master->string, &to );
cls.nummplayerservers = -1;
cls.pingUpdateSource = AS_MPLAYER;
}
else {
- NET_StringToAdr( cl_master->string, &to );
cls.numglobalservers = -1;
cls.pingUpdateSource = AS_GLOBAL;
}
diff --git a/src/qcommon/common.c b/src/qcommon/common.c
index e2aa156c..3d3cd38d 100644
--- a/src/qcommon/common.c
+++ b/src/qcommon/common.c
@@ -244,6 +244,8 @@ void QDECL Com_Error( int code, const char *fmt, ... ) {
static int errorCount;
int currentTime;
+ Cvar_Set( "com_errorCode", va( "%i", code ) );
+
// when we are running automated scripts, make sure we
// know if anything failed
if ( com_buildScript && com_buildScript->integer ) {
diff --git a/src/qcommon/files.c b/src/qcommon/files.c
index 94e2152e..f896929f 100644
--- a/src/qcommon/files.c
+++ b/src/qcommon/files.c
@@ -235,6 +235,12 @@ typedef struct searchpath_s {
static char fs_gamedir[MAX_OSPATH]; // this will be a single file name with no separators
static cvar_t *fs_debug;
static cvar_t *fs_homepath;
+
+#ifdef MACOS_X
+// Also search the .app bundle for .pk3 files
+static cvar_t *fs_apppath;
+#endif
+
static cvar_t *fs_basepath;
static cvar_t *fs_basegame;
static cvar_t *fs_gamedirvar;
@@ -2386,7 +2392,7 @@ Sets fs_gamedir, adds the directory to the head of the path,
then loads the zip headers
================
*/
-static void FS_AddGameDirectory( const char *path, const char *dir ) {
+void FS_AddGameDirectory( const char *path, const char *dir ) {
searchpath_t *sp;
int i;
searchpath_t *search;
@@ -2713,6 +2719,14 @@ static void FS_Startup( const char *gameName )
FS_AddGameDirectory( fs_basepath->string, gameName );
}
// fs_homepath is somewhat particular to *nix systems, only add if relevant
+
+ #ifdef MACOS_X
+ fs_apppath = Cvar_Get ("fs_apppath", Sys_DefaultAppPath(), CVAR_INIT );
+ // Make MacOSX also include the base path included with the .app bundle
+ if (fs_apppath->string[0])
+ FS_AddGameDirectory(fs_apppath->string, gameName);
+ #endif
+
// NOTE: same filtering below for mods and basegame
if (fs_homepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) {
FS_AddGameDirectory ( fs_homepath->string, gameName );
diff --git a/src/qcommon/qcommon.h b/src/qcommon/qcommon.h
index d6273d8a..e6612453 100644
--- a/src/qcommon/qcommon.h
+++ b/src/qcommon/qcommon.h
@@ -539,6 +539,8 @@ qboolean FS_ConditionalRestart( int checksumFeed );
void FS_Restart( int checksumFeed );
// shutdown and restart the filesystem so changes to fs_gamedir can take effect
+void FS_AddGameDirectory( const char *path, const char *dir );
+
char **FS_ListFiles( const char *directory, const char *extension, int *numfiles );
// directory should not have either a leading or trailing /
// if extension is "/", only subdirectories will be returned
@@ -1016,6 +1018,11 @@ void Sys_Mkdir( const char *path );
char *Sys_Cwd( void );
void Sys_SetDefaultInstallPath(const char *path);
char *Sys_DefaultInstallPath(void);
+
+#ifdef MACOS_X
+char *Sys_DefaultAppPath(void);
+#endif
+
void Sys_SetDefaultHomePath(const char *path);
char *Sys_DefaultHomePath(void);
const char *Sys_Dirname( char *path );
diff --git a/src/sys/sys_main.c b/src/sys/sys_main.c
index 284a1194..af0f66a9 100644
--- a/src/sys/sys_main.c
+++ b/src/sys/sys_main.c
@@ -95,6 +95,16 @@ char *Sys_DefaultInstallPath(void)
/*
=================
+Sys_DefaultAppPath
+=================
+*/
+char *Sys_DefaultAppPath(void)
+{
+ return Sys_BinaryPath();
+}
+
+/*
+=================
Sys_In_Restart_f
Restart the input subsystem