diff options
-rw-r--r-- | Makefile | 74 | ||||
-rwxr-xr-x | make-macosx-ub.sh | 159 | ||||
-rw-r--r-- | src/AL/al.h | 3 | ||||
-rw-r--r-- | src/AL/alc.h | 4 | ||||
-rw-r--r-- | src/client/cl_main.c | 4 | ||||
-rw-r--r-- | src/qcommon/common.c | 2 | ||||
-rw-r--r-- | src/qcommon/files.c | 16 | ||||
-rw-r--r-- | src/qcommon/qcommon.h | 7 | ||||
-rw-r--r-- | src/sys/sys_main.c | 10 |
9 files changed, 200 insertions, 79 deletions
@@ -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 |