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  | 
