This commit is contained in:
jdolan 2013-07-04 20:33:01 -04:00
commit b992d051fb
5 changed files with 71 additions and 4 deletions

33
apple/README.md Normal file
View file

@ -0,0 +1,33 @@
GtkRadiant for Apple OSX
====
This directory provides packaging steps for GtkRadiant for OSX. This document describes compiling the application on OSX as well as generating distributable bundles using the framework provided in this directory.
Dependencies & Compilation
----
Compiling GtkRadiant on OSX requires [MacPorts](http://macports.org). Homebrew is not yet supported. Install the following dependencies:
sudo port install dylibbundler gcc47 gtkglext scons
You should then be able to compile and run GtkRadiant from the `install` directory.
scons config=debug
./install/radiant.bin &
See the [GtkRadiant developers guide]() for details on build configurations and targets.
Building GtkRadiant.app
----
The `Makefile` in this directory will produce a distributable .app bundle for GtkRadiant using `dylibbundler`:
make
make image
You may encounter an error or two as `dylibbundler` attempts to fix up shared libraries that GtkRadiant depends on. This is because `dylibbundler` attempts to rewrite the load commands in these libraries, but not all libraries have enough space allocated for this purpose. Recompile the relevant ports with additional header space.
For example:
export LDFLAGS=-headerpad_max_install_names
sudo port clean --work --archive pango
sudo port -n upgrade --force pango
Repeat this process for any shared libraries which `dylibbundler` complains about. As of July 2nd 2013, Pango is the only port requiring this treatment.

View file

@ -28,7 +28,7 @@ class Config:
# platforms for which to assemble a setup
self.setup_platforms = [ 'local', 'x86', 'x64', 'win32' ]
# paks to assemble in the setup
self.setup_packs = [ 'Q3Pack', 'UrTPack', 'ETPack', 'QLPack', 'Q2Pack', 'Q2WPack' ]
self.setup_packs = [ 'Q3Pack', 'UrTPack', 'ETPack', 'QLPack', 'Q2Pack', 'Q2WPack', 'JAPack', 'STVEFPack' ]
def __repr__( self ):
return 'config: target=%s config=%s' % ( self.target_selected, self.config_selected )
@ -388,6 +388,7 @@ class Config:
'%s/bin/libpng14-14.dll' % GTK64_PREFIX,
'%s/bin/libglib-2.0-0.dll' % GTK64_PREFIX,
'%s/bin/libintl-8.dll' % GTK64_PREFIX,
'%s/bin/zlib1.dll' % GTK64_PREFIX,
]:
shutil.copy( os.path.join( srcdir, x64_dll ), 'install/x64' )

View file

@ -382,7 +382,8 @@ void Eclass_Init(){
if ( !strcmp( ValueForKey( g_qeglobals.d_project_entity, "gamemode" ), "sp" ) ) {
// SP mapping, ignore mp_*.def
char *name = (char *)pFile->data;
if ( name[0] == 'm' && name[1] == 'p' && name[2] == '_' ) {
if ( name[0] == 'm' && name[1] == 'p' && name[2] == '_'
|| name[0] == 'h' && name[1] == 'm' && name[2] == '_' ) {
Sys_Printf( "Single Player mapping mode. Ignoring '%s'\n", name );
pFile = pFile->next;
continue;
@ -392,7 +393,7 @@ void Eclass_Init(){
{
// HM mapping, ignore sp_*.def
char *name = (char *)pFile->data;
if ( name[0] == 'h' && name[1] == 'm' && name[2] == '_' ) {
if ( name[0] == 's' && name[1] == 'p' && name[2] == '_' ) {
Sys_Printf( "HoloMatch mapping mode. Ignoring '%s'\n", name );
pFile = pFile->next;
continue;

View file

@ -3376,6 +3376,9 @@ void CGameInstall::BuildDialog() {
case GAME_QL:
gtk_combo_box_append_text( GTK_COMBO_BOX( combo ), _( "Quake Live" ) );
break;
case GAME_STVEF:
gtk_combo_box_append_text( GTK_COMBO_BOX( combo ), _( "Star Trek - Voyager: Elite Force" ) );
break;
}
iGame++;
}
@ -3490,6 +3493,9 @@ void CGameInstall::Run() {
case GAME_QL:
gameFilePath += "ql.game";
break;
case GAME_STVEF:
gameFilePath += "stvef.game";
break;
}
Sys_Printf( "game file: %s\n", gameFilePath.GetBuffer() );
@ -3685,6 +3691,27 @@ void CGameInstall::Run() {
fprintf( fg, " basegame=\"baseq3\"\n" );
break;
}
case GAME_STVEF: {
fprintf( fg, " "TOOLS_ATTRIBUTE "=\"%sinstalls/"STVEF_PACK "/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".stvef\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
source += STVEF_PACK;
source += "/install/";
Str dest = m_strEngine.GetBuffer();
radCopyTree( source.GetBuffer(), dest.GetBuffer() );
// Hardcoded fix for "missing" shaderlist in gamepack
dest += "/base/scripts/shaderlist.txt";
if(CheckFile(dest.GetBuffer()) != PATH_FILE) {
source += "base/scripts/default_shaderlist.txt";
radCopyFile(source.GetBuffer(),dest.GetBuffer());
}
fprintf( fg, " basegame=\"baseEF\"\n" );
fprintf( fg, " shaderpath=\"scripts\"\n" );
fprintf( fg, " default_scale=\"0.25\"\n" );
fprintf( fg, " caulk_shader=\"textures/common/caulk\"\n" );
break;
}
}
fprintf( fg, "/>\n" );
fclose( fg );
@ -3740,6 +3767,9 @@ void CGameInstall::ScanGames() {
if ( stricmp( dirname, QL_PACK ) == 0 ) {
m_availGames[ iGame++ ] = GAME_QL;
}
if ( stricmp( dirname, STVEF_PACK ) == 0 ) {
m_availGames[ iGame++ ] = GAME_STVEF;
}
}
Sys_Printf( "No installable games found in: %s\n",
pakPaths.GetBuffer() );

View file

@ -213,6 +213,7 @@ void Dump();
#define REACTION_PACK "ReactionPack"
#define ET_PACK "ETPack"
#define QL_PACK "QLPack"
#define STVEF_PACK "STVEFPack"
class CGameInstall : public Dialog {
public:
@ -238,6 +239,7 @@ enum gameType_e {
GAME_REACTION,
GAME_ET,
GAME_QL,
GAME_STVEF,
GAME_COUNT
};