mirror of
https://github.com/dhewm/dhewm3.git
synced 2024-11-23 04:51:56 +00:00
Get rid of the scons build system
This only works for linux and cmake works on all platforms. Hopefully this prevents invalid reports.
This commit is contained in:
parent
1a5499e6f5
commit
dca4721c8f
8 changed files with 0 additions and 1402 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,4 +2,3 @@ build
|
||||||
*~
|
*~
|
||||||
.*.swp
|
.*.swp
|
||||||
*.pyc
|
*.pyc
|
||||||
neo/site.conf
|
|
||||||
|
|
496
neo/SConstruct
496
neo/SConstruct
|
@ -1,496 +0,0 @@
|
||||||
# -*- mode: python -*-
|
|
||||||
# DOOM build script
|
|
||||||
# TTimo <ttimo@idsoftware.com>
|
|
||||||
# http://scons.sourceforge.net
|
|
||||||
|
|
||||||
import sys, os, time, commands, re, pickle, StringIO, popen2, commands, pdb, zipfile, string
|
|
||||||
import SCons
|
|
||||||
|
|
||||||
sys.path.append( 'sys/scons' )
|
|
||||||
import scons_utils
|
|
||||||
|
|
||||||
conf_filename='site.conf'
|
|
||||||
# choose configuration variables which should be saved between runs
|
|
||||||
# ( we handle all those as strings )
|
|
||||||
serialized=['CC', 'CXX', 'X86', 'BUILD', 'IDNET_HOST', 'DEDICATED',
|
|
||||||
'DEBUG_MEMORY', 'LIBC_MALLOC', 'ID_NOLANADDRESS',
|
|
||||||
'TARGET_CORE', 'TARGET_GAME', 'TARGET_D3XP', 'TARGET_MONO', 'TARGET_DEMO', 'NOCURL',
|
|
||||||
'BUILD_ROOT', 'BUILD_GAMEPAK', 'BASEFLAGS' ]
|
|
||||||
|
|
||||||
# global build mode ------------------------------
|
|
||||||
|
|
||||||
g_sdk = not os.path.exists( 'sys/scons/SConscript.core' )
|
|
||||||
|
|
||||||
# ------------------------------------------------
|
|
||||||
|
|
||||||
# help -------------------------------------------
|
|
||||||
|
|
||||||
help_string = """
|
|
||||||
Usage: scons [OPTIONS] [TARGET] [CONFIG]
|
|
||||||
|
|
||||||
[OPTIONS] and [TARGET] are covered in command line options, use scons -H
|
|
||||||
|
|
||||||
[CONFIG]: KEY="VALUE" [...]
|
|
||||||
a number of configuration options saved between runs in the """ + conf_filename + """ file
|
|
||||||
erase """ + conf_filename + """ to start with default settings again
|
|
||||||
|
|
||||||
CC (default gcc)
|
|
||||||
CXX (default g++)
|
|
||||||
Specify C and C++ compilers (defaults gcc and g++)
|
|
||||||
ex: CC="gcc-3.3"
|
|
||||||
You can use ccache and distcc, for instance:
|
|
||||||
CC="ccache distcc gcc" CXX="ccache distcc g++"
|
|
||||||
|
|
||||||
BUILD (default debug)
|
|
||||||
Use debug-all/debug/release to select build settings
|
|
||||||
ex: BUILD="release"
|
|
||||||
debug-all: no optimisations, debugging symbols
|
|
||||||
debug: -O -g
|
|
||||||
release: all optimisations, including CPU target etc.
|
|
||||||
|
|
||||||
BUILD_ROOT (default 'build')
|
|
||||||
change the build root directory
|
|
||||||
|
|
||||||
TARGET_GAME (default 1)
|
|
||||||
Build the base game code
|
|
||||||
|
|
||||||
TARGET_D3XP (default 1)
|
|
||||||
Build the d3xp game code
|
|
||||||
|
|
||||||
BUILD_GAMEPAK (default 0)
|
|
||||||
Build a game pak
|
|
||||||
|
|
||||||
BASEFLAGS (default '')
|
|
||||||
Add compile flags
|
|
||||||
|
|
||||||
X86 (default 0)
|
|
||||||
cross compile for x86 (only applicable on x86_64)
|
|
||||||
|
|
||||||
NOCONF (default 0, not saved)
|
|
||||||
ignore site configuration and use defaults + command line only
|
|
||||||
"""
|
|
||||||
|
|
||||||
if ( not g_sdk ):
|
|
||||||
help_string += """
|
|
||||||
DEDICATED (default 0)
|
|
||||||
Control regular / dedicated type of build:
|
|
||||||
0 - client
|
|
||||||
1 - dedicated server
|
|
||||||
2 - both
|
|
||||||
|
|
||||||
TARGET_CORE (default 1)
|
|
||||||
Build the core
|
|
||||||
|
|
||||||
TARGET_MONO (default 0)
|
|
||||||
Build a monolithic binary
|
|
||||||
|
|
||||||
TARGET_DEMO (default 0)
|
|
||||||
Build demo client ( both a core and game, no mono )
|
|
||||||
NOTE: if you *only* want the demo client, set TARGET_CORE and TARGET_GAME to 0
|
|
||||||
|
|
||||||
IDNET_HOST (default to source hardcoded)
|
|
||||||
Override builtin IDNET_HOST with your own settings
|
|
||||||
|
|
||||||
DEBUG_MEMORY (default 0)
|
|
||||||
Enables memory logging to file
|
|
||||||
|
|
||||||
LIBC_MALLOC (default 1)
|
|
||||||
Toggle idHeap memory / libc malloc usage
|
|
||||||
When libc malloc is on, memory size statistics are wrong ( no _msize )
|
|
||||||
|
|
||||||
ID_NOLANADDRESS (default 0)
|
|
||||||
Don't recognize any IP as LAN address. This is useful when debugging network
|
|
||||||
code where LAN / not LAN influences application behaviour
|
|
||||||
|
|
||||||
SETUP (default 0, not saved)
|
|
||||||
build a setup. implies release build
|
|
||||||
|
|
||||||
SDK (default 0, not saved)
|
|
||||||
build an SDK release
|
|
||||||
|
|
||||||
NOCURL (default 0)
|
|
||||||
set to 1 to disable usage of libcurl and http/ftp downloads feature
|
|
||||||
"""
|
|
||||||
|
|
||||||
Help( help_string )
|
|
||||||
|
|
||||||
# end help ---------------------------------------
|
|
||||||
|
|
||||||
# sanity -----------------------------------------
|
|
||||||
|
|
||||||
EnsureSConsVersion( 0, 96 )
|
|
||||||
|
|
||||||
# end sanity -------------------------------------
|
|
||||||
|
|
||||||
# system detection -------------------------------
|
|
||||||
|
|
||||||
# CPU type
|
|
||||||
g_cpu = ''
|
|
||||||
|
|
||||||
uname = commands.getoutput('uname -m')
|
|
||||||
if uname == 'x86_64':
|
|
||||||
g_cpu = 'x86_64'
|
|
||||||
|
|
||||||
if len(g_cpu) < 1:
|
|
||||||
exp = re.compile('.*i?86.*')
|
|
||||||
if exp.match(uname):
|
|
||||||
g_cpu = 'x86'
|
|
||||||
|
|
||||||
if len(g_cpu) < 1:
|
|
||||||
uname = commands.getoutput('uname -p')
|
|
||||||
if (uname == 'powerpc'):
|
|
||||||
g_cpu = 'ppc'
|
|
||||||
|
|
||||||
if len(g_cpu) < 1:
|
|
||||||
g_cpu = 'cpu'
|
|
||||||
|
|
||||||
g_os = commands.getoutput('uname -s')
|
|
||||||
|
|
||||||
# end system detection ---------------------------
|
|
||||||
|
|
||||||
# default settings -------------------------------
|
|
||||||
|
|
||||||
CC = 'gcc'
|
|
||||||
CXX = 'g++'
|
|
||||||
BUILD = 'debug'
|
|
||||||
X86 = '0'
|
|
||||||
DEDICATED = '0'
|
|
||||||
TARGET_CORE = '1'
|
|
||||||
TARGET_GAME = '1'
|
|
||||||
TARGET_D3XP = '1'
|
|
||||||
TARGET_MONO = '0'
|
|
||||||
TARGET_DEMO = '0'
|
|
||||||
IDNET_HOST = ''
|
|
||||||
DEBUG_MEMORY = '0'
|
|
||||||
LIBC_MALLOC = '1'
|
|
||||||
ID_NOLANADDRESS = '0'
|
|
||||||
BUILD_ROOT = 'build'
|
|
||||||
SETUP = '0'
|
|
||||||
SDK = '0'
|
|
||||||
NOCONF = '0'
|
|
||||||
NOCURL = '0'
|
|
||||||
BUILD_GAMEPAK = '0'
|
|
||||||
BASEFLAGS = ''
|
|
||||||
|
|
||||||
# end default settings ---------------------------
|
|
||||||
|
|
||||||
# site settings ----------------------------------
|
|
||||||
|
|
||||||
if ( not ARGUMENTS.has_key( 'NOCONF' ) or ARGUMENTS['NOCONF'] != '1' ):
|
|
||||||
site_dict = {}
|
|
||||||
if (os.path.exists(conf_filename)):
|
|
||||||
site_file = open(conf_filename, 'r')
|
|
||||||
p = pickle.Unpickler(site_file)
|
|
||||||
site_dict = p.load()
|
|
||||||
print 'Loading build configuration from ' + conf_filename + ':'
|
|
||||||
for k, v in site_dict.items():
|
|
||||||
exec_cmd = k + '=\'' + v + '\''
|
|
||||||
print ' ' + exec_cmd
|
|
||||||
exec(exec_cmd)
|
|
||||||
else:
|
|
||||||
print 'Site settings ignored'
|
|
||||||
|
|
||||||
# end site settings ------------------------------
|
|
||||||
|
|
||||||
# command line settings --------------------------
|
|
||||||
|
|
||||||
for k in ARGUMENTS.keys():
|
|
||||||
exec_cmd = k + '=\'' + ARGUMENTS[k] + '\''
|
|
||||||
print 'Command line: ' + exec_cmd
|
|
||||||
exec( exec_cmd )
|
|
||||||
|
|
||||||
# end command line settings ----------------------
|
|
||||||
|
|
||||||
# save site configuration ----------------------
|
|
||||||
|
|
||||||
if ( not ARGUMENTS.has_key( 'NOCONF' ) or ARGUMENTS['NOCONF'] != '1' ):
|
|
||||||
for k in serialized:
|
|
||||||
exec_cmd = 'site_dict[\'' + k + '\'] = ' + k
|
|
||||||
exec(exec_cmd)
|
|
||||||
|
|
||||||
site_file = open(conf_filename, 'w')
|
|
||||||
p = pickle.Pickler(site_file)
|
|
||||||
p.dump(site_dict)
|
|
||||||
site_file.close()
|
|
||||||
|
|
||||||
# end save site configuration ------------------
|
|
||||||
|
|
||||||
# configuration rules --------------------------
|
|
||||||
|
|
||||||
if ( SETUP != '0' ):
|
|
||||||
DEDICATED = '2'
|
|
||||||
BUILD = 'release'
|
|
||||||
|
|
||||||
if ( g_sdk or SDK != '0' ):
|
|
||||||
TARGET_CORE = '0'
|
|
||||||
TARGET_GAME = '1'
|
|
||||||
TARGET_D3XP = '1'
|
|
||||||
TARGET_MONO = '0'
|
|
||||||
TARGET_DEMO = '0'
|
|
||||||
|
|
||||||
# end configuration rules ----------------------
|
|
||||||
|
|
||||||
# general configuration, target selection --------
|
|
||||||
|
|
||||||
# common flags
|
|
||||||
# BASE + CORE + OPT for engine
|
|
||||||
# BASE + GAME + OPT for game
|
|
||||||
# _noopt versions of the environements are built without the OPT
|
|
||||||
|
|
||||||
BASECPPFLAGS = [ ]
|
|
||||||
CORECPPPATH = [ ]
|
|
||||||
CORELIBPATH = [ ]
|
|
||||||
CORECPPFLAGS = [ ]
|
|
||||||
GAMECPPFLAGS = [ ]
|
|
||||||
BASELINKFLAGS = [ ]
|
|
||||||
CORELINKFLAGS = [ ]
|
|
||||||
|
|
||||||
# for release build, further optimisations that may not work on all files
|
|
||||||
OPTCPPFLAGS = [ ]
|
|
||||||
|
|
||||||
if (g_cpu == 'x86_64' and X86 == '1'):
|
|
||||||
print('cross compiling for x86')
|
|
||||||
g_cpu = 'x86'
|
|
||||||
BASECPPFLAGS.append('-m32')
|
|
||||||
BASELINKFLAGS.append('-m32')
|
|
||||||
|
|
||||||
g_build = '%s/%s-%s' % (BUILD_ROOT, g_cpu, BUILD)
|
|
||||||
|
|
||||||
SConsignFile( g_build + '/scons.signatures' )
|
|
||||||
|
|
||||||
if ( DEBUG_MEMORY != '0' ):
|
|
||||||
g_build += '-debugmem'
|
|
||||||
|
|
||||||
if ( LIBC_MALLOC != '1' ):
|
|
||||||
g_build += '-nolibcmalloc'
|
|
||||||
|
|
||||||
LINK = CXX
|
|
||||||
|
|
||||||
BASECPPFLAGS.extend( BASEFLAGS.split(' ') )
|
|
||||||
BASECPPFLAGS.append( '-pipe' )
|
|
||||||
# warn all
|
|
||||||
BASECPPFLAGS.append( '-Wall' )
|
|
||||||
BASECPPFLAGS.append( '-Wno-unknown-pragmas' )
|
|
||||||
|
|
||||||
# gcc 4.x option only - only export what we mean to from the game SO
|
|
||||||
BASECPPFLAGS.append( '-fvisibility=hidden' )
|
|
||||||
|
|
||||||
if ( "BSD" in g_os ):
|
|
||||||
BASECPPFLAGS.append( '-I/usr/local/include' )
|
|
||||||
BASECPPFLAGS.append( '-I/usr/local/include/SDL' )
|
|
||||||
BASELINKFLAGS.append('-L/usr/local/lib')
|
|
||||||
else:
|
|
||||||
BASECPPFLAGS.append( '-I/usr/include/SDL' )
|
|
||||||
|
|
||||||
BASECPPFLAGS.append( '-I.' )
|
|
||||||
|
|
||||||
if ( g_sdk or SDK != '0' ):
|
|
||||||
BASECPPFLAGS.append( '-D_D3SDK' )
|
|
||||||
|
|
||||||
if ( BUILD == 'debug-all' ):
|
|
||||||
OPTCPPFLAGS = [ '-g', '-D_DEBUG' ]
|
|
||||||
elif ( BUILD == 'debug' ):
|
|
||||||
OPTCPPFLAGS = [ '-g', '-O1', '-D_DEBUG' ]
|
|
||||||
elif ( BUILD == 'release' ):
|
|
||||||
# -fomit-frame-pointer: "-O also turns on -fomit-frame-pointer on machines where doing so does not interfere with debugging."
|
|
||||||
# on x86 have to set it explicitely
|
|
||||||
# -finline-functions: implicit at -O3
|
|
||||||
# -fschedule-insns2: implicit at -O2
|
|
||||||
# no-unsafe-math-optimizations: that should be on by default really. hit some wonko bugs in physics code because of that
|
|
||||||
OPTCPPFLAGS = [ '-O3', '-ffast-math', '-fno-unsafe-math-optimizations', '-fomit-frame-pointer' ]
|
|
||||||
if (g_cpu == 'x86'):
|
|
||||||
OPTCPPFLAGS.append('-march=pentium3')
|
|
||||||
|
|
||||||
else:
|
|
||||||
print 'Unknown build configuration ' + BUILD
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
if ( DEBUG_MEMORY != '0' ):
|
|
||||||
BASECPPFLAGS += [ '-DID_DEBUG_MEMORY', '-DID_REDIRECT_NEWDELETE' ]
|
|
||||||
|
|
||||||
if ( LIBC_MALLOC != '1' ):
|
|
||||||
BASECPPFLAGS.append( '-DUSE_LIBC_MALLOC=0' )
|
|
||||||
|
|
||||||
if ( len( IDNET_HOST ) ):
|
|
||||||
CORECPPFLAGS.append( '-DIDNET_HOST=\\"%s\\"' % IDNET_HOST)
|
|
||||||
|
|
||||||
if ( ID_NOLANADDRESS != '0' ):
|
|
||||||
CORECPPFLAGS.append( '-DID_NOLANADDRESS' )
|
|
||||||
|
|
||||||
# TODO fix these warnings
|
|
||||||
BASECPPFLAGS.append('-Wno-sign-compare')
|
|
||||||
BASECPPFLAGS.append('-Wno-switch')
|
|
||||||
BASECPPFLAGS.append('-Wno-format-security')
|
|
||||||
|
|
||||||
# create the build environements
|
|
||||||
g_base_env = Environment( ENV = os.environ, CC = CC, CXX = CXX, LINK = LINK, CPPFLAGS = BASECPPFLAGS, LINKFLAGS = BASELINKFLAGS, CPPPATH = CORECPPPATH, LIBPATH = CORELIBPATH )
|
|
||||||
scons_utils.SetupUtils( g_base_env )
|
|
||||||
|
|
||||||
g_env = g_base_env.Clone()
|
|
||||||
|
|
||||||
g_env['CPPFLAGS'] += OPTCPPFLAGS
|
|
||||||
g_env['CPPFLAGS'] += CORECPPFLAGS
|
|
||||||
g_env['LINKFLAGS'] += CORELINKFLAGS
|
|
||||||
|
|
||||||
g_env_noopt = g_base_env.Clone()
|
|
||||||
g_env_noopt['CPPFLAGS'] += CORECPPFLAGS
|
|
||||||
|
|
||||||
g_game_env = g_base_env.Clone()
|
|
||||||
g_game_env['CPPFLAGS'] += OPTCPPFLAGS
|
|
||||||
g_game_env['CPPFLAGS'] += GAMECPPFLAGS
|
|
||||||
|
|
||||||
# maintain this dangerous optimization off at all times
|
|
||||||
g_env.Append( CPPFLAGS = '-fno-strict-aliasing' )
|
|
||||||
g_env_noopt.Append( CPPFLAGS = '-fno-strict-aliasing' )
|
|
||||||
g_game_env.Append( CPPFLAGS = '-fno-strict-aliasing' )
|
|
||||||
|
|
||||||
# mark the globals
|
|
||||||
|
|
||||||
local_dedicated = 0
|
|
||||||
# 0 for monolithic build
|
|
||||||
local_gamedll = 1
|
|
||||||
# carry around rather than using .a, avoids binutils bugs
|
|
||||||
idlib_objects = []
|
|
||||||
game_objects = []
|
|
||||||
local_demo = 0
|
|
||||||
# curl usage. there is a global toggle flag
|
|
||||||
local_curl = 0
|
|
||||||
# if idlib should produce PIC objects ( depending on core or game inclusion )
|
|
||||||
local_idlibpic = 0
|
|
||||||
# switch between base game build and d3xp game build
|
|
||||||
local_d3xp = 0
|
|
||||||
|
|
||||||
GLOBALS = 'g_env g_env_noopt g_game_env g_os g_cpu g_build idlib_objects game_objects local_dedicated local_gamedll local_demo local_idlibpic local_curl local_d3xp OPTCPPFLAGS'
|
|
||||||
|
|
||||||
# end general configuration ----------------------
|
|
||||||
|
|
||||||
# targets ----------------------------------------
|
|
||||||
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
|
|
||||||
doom = None
|
|
||||||
doomded = None
|
|
||||||
game = None
|
|
||||||
doom_mono = None
|
|
||||||
doom_demo = None
|
|
||||||
game_demo = None
|
|
||||||
|
|
||||||
# build curl if needed
|
|
||||||
if ( NOCURL == '0' and ( TARGET_CORE == '1' or TARGET_MONO == '1' ) ):
|
|
||||||
local_curl = 1
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
|
|
||||||
if ( TARGET_CORE == '1' ):
|
|
||||||
local_gamedll = 1
|
|
||||||
local_demo = 0
|
|
||||||
local_idlibpic = 0
|
|
||||||
if ( DEDICATED == '0' or DEDICATED == '2' ):
|
|
||||||
local_dedicated = 0
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
|
|
||||||
VariantDir( g_build + '/obj-core', '.', duplicate = 0 )
|
|
||||||
idlib_objects = SConscript( g_build + '/obj-core/sys/scons/SConscript.idlib' )
|
|
||||||
Export( 'GLOBALS ' + GLOBALS ) # update idlib_objects
|
|
||||||
doom = SConscript( g_build + '/obj-core/sys/scons/SConscript.core' )
|
|
||||||
g_env.Default(doom)
|
|
||||||
|
|
||||||
if ( DEDICATED == '1' or DEDICATED == '2' ):
|
|
||||||
local_dedicated = 1
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
|
|
||||||
VariantDir( g_build + '/dedicated', '.', duplicate = 0 )
|
|
||||||
idlib_objects = SConscript( g_build + '/dedicated/sys/scons/SConscript.idlib' )
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
doomded = SConscript( g_build + '/dedicated/sys/scons/SConscript.core' )
|
|
||||||
g_env.Default(doomded)
|
|
||||||
|
|
||||||
if ( TARGET_GAME == '1' or TARGET_D3XP == '1' ):
|
|
||||||
local_gamedll = 1
|
|
||||||
local_demo = 0
|
|
||||||
local_dedicated = 0
|
|
||||||
local_idlibpic = 1
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
dupe = 0
|
|
||||||
if ( SDK == '1' ):
|
|
||||||
# building an SDK, use scons for dependencies walking
|
|
||||||
# clear the build directory to be safe
|
|
||||||
g_env.PreBuildSDK( [ g_build + '/game', g_build + '/d3xp' ] )
|
|
||||||
dupe = 1
|
|
||||||
VariantDir( g_build + '/obj-base', '.', duplicate = dupe )
|
|
||||||
idlib_objects = SConscript( g_build + '/obj-base/sys/scons/SConscript.idlib' )
|
|
||||||
if ( TARGET_GAME == '1' ):
|
|
||||||
local_d3xp = 0
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
game = SConscript( g_build + '/obj-base/sys/scons/SConscript.game' )
|
|
||||||
g_env.Default(game)
|
|
||||||
if ( BUILD_GAMEPAK == '1' ):
|
|
||||||
Command( '#game01-base.pk4', [ game, game ], Action( g_env.BuildGamePak ) )
|
|
||||||
if ( TARGET_D3XP == '1' ):
|
|
||||||
# uses idlib as compiled for game/
|
|
||||||
local_d3xp = 1
|
|
||||||
VariantDir( g_build + '/obj-d3xp', '.', duplicate = dupe )
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
d3xp = SConscript( g_build + '/obj-d3xp/sys/scons/SConscript.game' )
|
|
||||||
g_env.Default(d3xp)
|
|
||||||
if ( BUILD_GAMEPAK == '1' ):
|
|
||||||
Command( '#game01-d3xp.pk4', [ d3xp, d3xp ], Action( g_env.BuildGamePak ) )
|
|
||||||
|
|
||||||
if ( TARGET_MONO == '1' ):
|
|
||||||
# NOTE: no D3XP atm. add a TARGET_MONO_D3XP
|
|
||||||
local_gamedll = 0
|
|
||||||
local_dedicated = 0
|
|
||||||
local_demo = 0
|
|
||||||
local_idlibpic = 0
|
|
||||||
local_d3xp = 0
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
VariantDir( g_build + '/mono', '.', duplicate = 0 )
|
|
||||||
idlib_objects = SConscript( g_build + '/mono/sys/scons/SConscript.idlib' )
|
|
||||||
game_objects = SConscript( g_build + '/mono/sys/scons/SConscript.game' )
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
doom_mono = SConscript( g_build + '/mono/sys/scons/SConscript.core' )
|
|
||||||
g_env.Default(doom_mono)
|
|
||||||
|
|
||||||
if ( TARGET_DEMO == '1' ):
|
|
||||||
# NOTE: no D3XP atm. add a TARGET_DEMO_D3XP
|
|
||||||
local_demo = 1
|
|
||||||
local_dedicated = 0
|
|
||||||
local_gamedll = 1
|
|
||||||
local_idlibpic = 0
|
|
||||||
local_curl = 0
|
|
||||||
local_d3xp = 0
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
VariantDir( g_build + '/demo', '.', duplicate = 0 )
|
|
||||||
idlib_objects = SConscript( g_build + '/demo/sys/scons/SConscript.idlib' )
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
doom_demo = SConscript( g_build + '/demo/sys/scons/SConscript.core' )
|
|
||||||
g_env.Default(doom_demo)
|
|
||||||
|
|
||||||
local_idlibpic = 1
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
VariantDir( g_build + '/demo/game', '.', duplicate = 0 )
|
|
||||||
idlib_objects = SConscript( g_build + '/demo/game/sys/scons/SConscript.idlib' )
|
|
||||||
Export( 'GLOBALS ' + GLOBALS )
|
|
||||||
game_demo = SConscript( g_build + '/demo/game/sys/scons/SConscript.game' )
|
|
||||||
g_env.Default(doom_demo)
|
|
||||||
|
|
||||||
if ( SETUP != '0' ):
|
|
||||||
brandelf = Program( 'brandelf', 'sys/linux/setup/brandelf.c' )
|
|
||||||
if ( TARGET_CORE == '1' and TARGET_GAME == '1' and TARGET_D3XP == '1' ):
|
|
||||||
setup = Command( 'setup', [ brandelf, doom, doomded, game, d3xp ], Action( g_env.BuildSetup ) )
|
|
||||||
else:
|
|
||||||
print 'Skipping main setup: TARGET_CORE == 0 or TARGET_GAME == 0'
|
|
||||||
if ( TARGET_DEMO == '1' ):
|
|
||||||
setup_demo = Command( 'setup-demo', [ brandelf, doom_demo, game_demo ], Action( g_env.BuildSetup ) )
|
|
||||||
# if building two setups, make sure JOBS doesn't parallelize them
|
|
||||||
try:
|
|
||||||
g_env.Depends( setup_demo, setup )
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
print 'Skipping demo setup ( TARGET_DEMO == 0 )'
|
|
||||||
|
|
||||||
if ( SDK != '0' ):
|
|
||||||
setup_sdk = Command( 'sdk', [ ], Action( g_env.BuildSDK ) )
|
|
||||||
g_env.Depends( setup_sdk, [ game, d3xp ] )
|
|
||||||
|
|
||||||
# end targets ------------------------------------
|
|
|
@ -1,271 +0,0 @@
|
||||||
# -*- mode: python -*-
|
|
||||||
# DOOM build script
|
|
||||||
# TTimo <ttimo@idsoftware.com>
|
|
||||||
# http://scons.sourceforge.net
|
|
||||||
|
|
||||||
import sys, os
|
|
||||||
import scons_utils
|
|
||||||
|
|
||||||
Import( 'GLOBALS' )
|
|
||||||
Import( GLOBALS )
|
|
||||||
|
|
||||||
renderer_string = ' \
|
|
||||||
jpeg_memory_src.cpp \
|
|
||||||
Cinematic.cpp \
|
|
||||||
GuiModel.cpp \
|
|
||||||
Image_files.cpp \
|
|
||||||
Image_init.cpp \
|
|
||||||
Image_load.cpp \
|
|
||||||
Image_process.cpp \
|
|
||||||
Image_program.cpp \
|
|
||||||
Interaction.cpp \
|
|
||||||
Material.cpp \
|
|
||||||
MegaTexture.cpp \
|
|
||||||
Model.cpp \
|
|
||||||
ModelDecal.cpp \
|
|
||||||
ModelManager.cpp \
|
|
||||||
ModelOverlay.cpp \
|
|
||||||
Model_beam.cpp \
|
|
||||||
Model_ase.cpp \
|
|
||||||
Model_liquid.cpp \
|
|
||||||
Model_lwo.cpp \
|
|
||||||
Model_ma.cpp \
|
|
||||||
Model_md3.cpp \
|
|
||||||
Model_md5.cpp \
|
|
||||||
Model_prt.cpp \
|
|
||||||
Model_sprite.cpp \
|
|
||||||
RenderEntity.cpp \
|
|
||||||
RenderSystem.cpp \
|
|
||||||
RenderSystem_init.cpp \
|
|
||||||
RenderWorld.cpp \
|
|
||||||
RenderWorld_demo.cpp \
|
|
||||||
RenderWorld_load.cpp \
|
|
||||||
RenderWorld_portals.cpp \
|
|
||||||
VertexCache.cpp \
|
|
||||||
draw_arb.cpp \
|
|
||||||
draw_arb2.cpp \
|
|
||||||
draw_common.cpp \
|
|
||||||
draw_nv10.cpp \
|
|
||||||
draw_nv20.cpp \
|
|
||||||
draw_r200.cpp \
|
|
||||||
tr_backend.cpp \
|
|
||||||
tr_deform.cpp \
|
|
||||||
tr_font.cpp \
|
|
||||||
tr_guisurf.cpp \
|
|
||||||
tr_light.cpp \
|
|
||||||
tr_lightrun.cpp \
|
|
||||||
tr_main.cpp \
|
|
||||||
tr_orderIndexes.cpp \
|
|
||||||
tr_polytope.cpp \
|
|
||||||
tr_render.cpp \
|
|
||||||
tr_rendertools.cpp \
|
|
||||||
tr_shadowbounds.cpp \
|
|
||||||
tr_stencilshadow.cpp \
|
|
||||||
tr_subview.cpp \
|
|
||||||
tr_trace.cpp \
|
|
||||||
tr_trisurf.cpp \
|
|
||||||
tr_turboshadow.cpp'
|
|
||||||
|
|
||||||
renderer_list = scons_utils.BuildList( 'renderer', renderer_string )
|
|
||||||
|
|
||||||
framework_string = ' \
|
|
||||||
CVarSystem.cpp \
|
|
||||||
CmdSystem.cpp \
|
|
||||||
Common.cpp \
|
|
||||||
Compressor.cpp \
|
|
||||||
Console.cpp \
|
|
||||||
DemoFile.cpp \
|
|
||||||
DeclAF.cpp \
|
|
||||||
DeclEntityDef.cpp \
|
|
||||||
DeclFX.cpp \
|
|
||||||
DeclManager.cpp \
|
|
||||||
DeclParticle.cpp \
|
|
||||||
DeclPDA.cpp \
|
|
||||||
DeclSkin.cpp \
|
|
||||||
DeclTable.cpp \
|
|
||||||
EditField.cpp \
|
|
||||||
EventLoop.cpp \
|
|
||||||
File.cpp \
|
|
||||||
FileSystem.cpp \
|
|
||||||
KeyInput.cpp \
|
|
||||||
Unzip.cpp \
|
|
||||||
UsercmdGen.cpp \
|
|
||||||
Session_menu.cpp \
|
|
||||||
Session.cpp \
|
|
||||||
async/AsyncClient.cpp \
|
|
||||||
async/AsyncNetwork.cpp \
|
|
||||||
async/AsyncServer.cpp \
|
|
||||||
async/MsgChannel.cpp \
|
|
||||||
async/NetworkSystem.cpp \
|
|
||||||
async/ServerScan.cpp'
|
|
||||||
|
|
||||||
framework_list = scons_utils.BuildList( 'framework', framework_string )
|
|
||||||
|
|
||||||
cm_string = ' \
|
|
||||||
CollisionModel_contacts.cpp \
|
|
||||||
CollisionModel_contents.cpp \
|
|
||||||
CollisionModel_debug.cpp \
|
|
||||||
CollisionModel_files.cpp \
|
|
||||||
CollisionModel_load.cpp \
|
|
||||||
CollisionModel_rotate.cpp \
|
|
||||||
CollisionModel_trace.cpp \
|
|
||||||
CollisionModel_translate.cpp'
|
|
||||||
cm_list = scons_utils.BuildList( 'cm', cm_string )
|
|
||||||
|
|
||||||
dmap_string = ' \
|
|
||||||
dmap.cpp \
|
|
||||||
facebsp.cpp \
|
|
||||||
gldraw.cpp \
|
|
||||||
glfile.cpp \
|
|
||||||
leakfile.cpp \
|
|
||||||
map.cpp \
|
|
||||||
optimize.cpp \
|
|
||||||
output.cpp \
|
|
||||||
portals.cpp \
|
|
||||||
shadowopt3.cpp \
|
|
||||||
tritjunction.cpp \
|
|
||||||
tritools.cpp \
|
|
||||||
ubrush.cpp \
|
|
||||||
usurface.cpp'
|
|
||||||
|
|
||||||
dmap_list = scons_utils.BuildList( 'tools/compilers/dmap', dmap_string )
|
|
||||||
|
|
||||||
aas_string = ' \
|
|
||||||
AASBuild.cpp \
|
|
||||||
AASBuild_file.cpp \
|
|
||||||
AASBuild_gravity.cpp \
|
|
||||||
AASBuild_ledge.cpp \
|
|
||||||
AASBuild_merge.cpp \
|
|
||||||
AASCluster.cpp \
|
|
||||||
AASFile.cpp \
|
|
||||||
AASFile_optimize.cpp \
|
|
||||||
AASFile_sample.cpp \
|
|
||||||
AASReach.cpp \
|
|
||||||
AASFileManager.cpp \
|
|
||||||
Brush.cpp \
|
|
||||||
BrushBSP.cpp'
|
|
||||||
|
|
||||||
aas_list = scons_utils.BuildList( 'tools/compilers/aas', aas_string )
|
|
||||||
|
|
||||||
roq_string = ' \
|
|
||||||
NSBitmapImageRep.cpp \
|
|
||||||
codec.cpp \
|
|
||||||
roq.cpp \
|
|
||||||
roqParam.cpp'
|
|
||||||
|
|
||||||
roq_list = scons_utils.BuildList( 'tools/compilers/roqvq', roq_string )
|
|
||||||
|
|
||||||
renderbump_list = [ 'tools/compilers/renderbump/renderbump.cpp' ]
|
|
||||||
|
|
||||||
snd_string = ' \
|
|
||||||
snd_cache.cpp \
|
|
||||||
snd_decoder.cpp \
|
|
||||||
snd_efxfile.cpp \
|
|
||||||
snd_emitter.cpp \
|
|
||||||
snd_shader.cpp \
|
|
||||||
snd_system.cpp \
|
|
||||||
snd_wavefile.cpp \
|
|
||||||
snd_world.cpp'
|
|
||||||
|
|
||||||
snd_list = scons_utils.BuildList( 'sound', snd_string )
|
|
||||||
|
|
||||||
ui_string = ' \
|
|
||||||
BindWindow.cpp \
|
|
||||||
ChoiceWindow.cpp \
|
|
||||||
DeviceContext.cpp \
|
|
||||||
EditWindow.cpp \
|
|
||||||
FieldWindow.cpp \
|
|
||||||
GameBearShootWindow.cpp \
|
|
||||||
GameBustOutWindow.cpp \
|
|
||||||
GameSSDWindow.cpp \
|
|
||||||
GuiScript.cpp \
|
|
||||||
ListGUI.cpp \
|
|
||||||
ListWindow.cpp \
|
|
||||||
MarkerWindow.cpp \
|
|
||||||
RegExp.cpp \
|
|
||||||
RenderWindow.cpp \
|
|
||||||
SimpleWindow.cpp \
|
|
||||||
SliderWindow.cpp \
|
|
||||||
UserInterface.cpp \
|
|
||||||
Window.cpp \
|
|
||||||
Winvar.cpp'
|
|
||||||
|
|
||||||
ui_list = scons_utils.BuildList( 'ui', ui_string )
|
|
||||||
|
|
||||||
sys_string = ' \
|
|
||||||
sys_local.cpp \
|
|
||||||
cpu.cpp \
|
|
||||||
threads.cpp \
|
|
||||||
posix/posix_net.cpp \
|
|
||||||
posix/posix_main.cpp \
|
|
||||||
posix/posix_signal.cpp \
|
|
||||||
linux/main.cpp \
|
|
||||||
stub/util_stub.cpp'
|
|
||||||
|
|
||||||
if ( local_dedicated == 0 ):
|
|
||||||
sys_string += ' \
|
|
||||||
glimp.cpp \
|
|
||||||
events.cpp'
|
|
||||||
else:
|
|
||||||
sys_string += ' \
|
|
||||||
stub/stub_gl.cpp \
|
|
||||||
stub/openal_stub.cpp \
|
|
||||||
linux/dedicated.cpp'
|
|
||||||
|
|
||||||
sys_list = scons_utils.BuildList( 'sys', sys_string )
|
|
||||||
|
|
||||||
tools_string = ' \
|
|
||||||
guied/GEWindowWrapper_stub.cpp'
|
|
||||||
|
|
||||||
tools_list = scons_utils.BuildList( 'tools', tools_string )
|
|
||||||
|
|
||||||
core_list = framework_list + renderer_list + ui_list \
|
|
||||||
+ cm_list + dmap_list + renderbump_list + aas_list + roq_list \
|
|
||||||
+ snd_list + sys_list + tools_list
|
|
||||||
|
|
||||||
for i in range( len( core_list ) ):
|
|
||||||
core_list[ i ] = '../../' + core_list[ i ]
|
|
||||||
|
|
||||||
local_env = g_env.Clone()
|
|
||||||
|
|
||||||
if ( local_dedicated == 1 ):
|
|
||||||
local_env.Append( CPPDEFINES = [ 'ID_DEDICATED' ] )
|
|
||||||
|
|
||||||
if ( local_gamedll == 1 ):
|
|
||||||
local_env.Append( CPPDEFINES = [ '__DOOM_DLL__' ] )
|
|
||||||
|
|
||||||
if ( local_demo == 1 ):
|
|
||||||
local_env.Append( CPPDEFINES = [ 'ID_DEMO_BUILD' ] )
|
|
||||||
|
|
||||||
if ( local_curl == 0 ):
|
|
||||||
local_env.Append( CPPDEFINES = [ 'ID_ENABLE_CURL=0' ] )
|
|
||||||
|
|
||||||
local_env.Append( LIBS = [ 'SDL', 'SDLmain', 'jpeg', 'vorbisfile' ] )
|
|
||||||
|
|
||||||
if ( local_dedicated == 0 ):
|
|
||||||
local_env.Append( LIBS = [ 'GL' ] )
|
|
||||||
|
|
||||||
if (g_os == "Linux"):
|
|
||||||
local_env.Append( LIBS = [ 'dl' ] )
|
|
||||||
|
|
||||||
if ( local_curl == 1 ):
|
|
||||||
local_env.Append( LIBS = [ 'curl', 'z' ] )
|
|
||||||
if ( local_dedicated == 0 ):
|
|
||||||
local_env.Append( LIBS = [ 'openal' ] )
|
|
||||||
|
|
||||||
source_list = core_list
|
|
||||||
source_list += idlib_objects
|
|
||||||
|
|
||||||
if ( local_gamedll == 0 ):
|
|
||||||
source_list += game_objects
|
|
||||||
|
|
||||||
basename = 'doom'
|
|
||||||
if ( local_dedicated == 1 ):
|
|
||||||
basename += 'ded'
|
|
||||||
elif ( local_gamedll == 0 ):
|
|
||||||
basename += '-mon'
|
|
||||||
if ( local_demo == 1 ):
|
|
||||||
basename += '-demo'
|
|
||||||
|
|
||||||
d3wm = local_env.Program( target = '%s/%s.%s' % (g_build, basename, g_cpu), source = source_list )
|
|
||||||
Return( 'd3wm' )
|
|
|
@ -1,115 +0,0 @@
|
||||||
# -*- mode: python -*-
|
|
||||||
# DOOM build script
|
|
||||||
# TTimo <ttimo@idsoftware.com>
|
|
||||||
# http://scons.sourceforge.net
|
|
||||||
|
|
||||||
import sys, os
|
|
||||||
import scons_utils
|
|
||||||
|
|
||||||
Import( 'GLOBALS' )
|
|
||||||
Import( GLOBALS )
|
|
||||||
|
|
||||||
game_string = ' \
|
|
||||||
AF.cpp \
|
|
||||||
AFEntity.cpp \
|
|
||||||
Actor.cpp \
|
|
||||||
Camera.cpp \
|
|
||||||
Entity.cpp \
|
|
||||||
BrittleFracture.cpp \
|
|
||||||
Fx.cpp \
|
|
||||||
GameEdit.cpp \
|
|
||||||
Game_local.cpp \
|
|
||||||
Game_network.cpp \
|
|
||||||
Item.cpp \
|
|
||||||
IK.cpp \
|
|
||||||
Light.cpp \
|
|
||||||
Misc.cpp \
|
|
||||||
Mover.cpp \
|
|
||||||
Moveable.cpp \
|
|
||||||
MultiplayerGame.cpp \
|
|
||||||
Player.cpp \
|
|
||||||
PlayerIcon.cpp \
|
|
||||||
PlayerView.cpp \
|
|
||||||
Projectile.cpp \
|
|
||||||
Pvs.cpp \
|
|
||||||
SecurityCamera.cpp \
|
|
||||||
SmokeParticles.cpp \
|
|
||||||
Sound.cpp \
|
|
||||||
Target.cpp \
|
|
||||||
Trigger.cpp \
|
|
||||||
Weapon.cpp \
|
|
||||||
WorldSpawn.cpp \
|
|
||||||
ai/AAS.cpp \
|
|
||||||
ai/AAS_debug.cpp \
|
|
||||||
ai/AAS_pathing.cpp \
|
|
||||||
ai/AAS_routing.cpp \
|
|
||||||
ai/AI.cpp \
|
|
||||||
ai/AI_events.cpp \
|
|
||||||
ai/AI_pathing.cpp \
|
|
||||||
ai/AI_Vagary.cpp \
|
|
||||||
gamesys/DebugGraph.cpp \
|
|
||||||
gamesys/Class.cpp \
|
|
||||||
gamesys/Event.cpp \
|
|
||||||
gamesys/SaveGame.cpp \
|
|
||||||
gamesys/SysCmds.cpp \
|
|
||||||
gamesys/SysCvar.cpp \
|
|
||||||
gamesys/TypeInfo.cpp \
|
|
||||||
anim/Anim.cpp \
|
|
||||||
anim/Anim_Blend.cpp \
|
|
||||||
anim/Anim_Import.cpp \
|
|
||||||
anim/Anim_Testmodel.cpp \
|
|
||||||
script/Script_Compiler.cpp \
|
|
||||||
script/Script_Interpreter.cpp \
|
|
||||||
script/Script_Program.cpp \
|
|
||||||
script/Script_Thread.cpp \
|
|
||||||
physics/Clip.cpp \
|
|
||||||
physics/Force.cpp \
|
|
||||||
physics/Force_Constant.cpp \
|
|
||||||
physics/Force_Drag.cpp \
|
|
||||||
physics/Force_Field.cpp \
|
|
||||||
physics/Force_Spring.cpp \
|
|
||||||
physics/Physics.cpp \
|
|
||||||
physics/Physics_AF.cpp \
|
|
||||||
physics/Physics_Actor.cpp \
|
|
||||||
physics/Physics_Base.cpp \
|
|
||||||
physics/Physics_Monster.cpp \
|
|
||||||
physics/Physics_Parametric.cpp \
|
|
||||||
physics/Physics_Player.cpp \
|
|
||||||
physics/Physics_RigidBody.cpp \
|
|
||||||
physics/Physics_Static.cpp \
|
|
||||||
physics/Physics_StaticMulti.cpp \
|
|
||||||
physics/Push.cpp'
|
|
||||||
|
|
||||||
if ( local_d3xp ):
|
|
||||||
game_string += ' \
|
|
||||||
Grabber.cpp \
|
|
||||||
physics/Force_Grab.cpp'
|
|
||||||
game_name = 'd3xp'
|
|
||||||
game_list = scons_utils.BuildList( 'd3xp', game_string )
|
|
||||||
else:
|
|
||||||
game_name = 'base'
|
|
||||||
game_list = scons_utils.BuildList( 'game', game_string )
|
|
||||||
|
|
||||||
|
|
||||||
for i in range( len( game_list ) ):
|
|
||||||
game_list[ i ] = '../../' + game_list[ i ]
|
|
||||||
|
|
||||||
local_env = g_game_env.Clone()
|
|
||||||
if ( local_d3xp ):
|
|
||||||
local_env.Append( CPPDEFINES = [ '_D3XP', 'CTF' ] )
|
|
||||||
local_env.Append( CPPFLAGS = [ '-Id3xp' ] )
|
|
||||||
else:
|
|
||||||
local_env.Append( CPPFLAGS = [ '-Igame' ] )
|
|
||||||
|
|
||||||
if ( local_demo == 1 ):
|
|
||||||
local_env.Append( CPPDEFINES = [ 'ID_DEMO_BUILD' ] )
|
|
||||||
|
|
||||||
if ( local_gamedll == 1 ):
|
|
||||||
local_env.Append( CPPDEFINES = [ 'GAME_DLL' ] )
|
|
||||||
ret = local_env.SharedLibrary( '%s/game%s-%s.so' % (g_build, g_cpu, game_name), game_list + idlib_objects, SHLIBPREFIX='' )
|
|
||||||
Return( 'ret' )
|
|
||||||
else:
|
|
||||||
ret_list = []
|
|
||||||
for i in game_list:
|
|
||||||
ret_list += local_env.StaticObject( source = i )
|
|
||||||
Return( 'ret_list' )
|
|
|
@ -1,85 +0,0 @@
|
||||||
# -*- mode: python -*-
|
|
||||||
# DOOM build script
|
|
||||||
# TTimo <ttimo@idsoftware.com>
|
|
||||||
# http://scons.sourceforge.net
|
|
||||||
|
|
||||||
import scons_utils
|
|
||||||
|
|
||||||
Import( 'GLOBALS' )
|
|
||||||
Import( GLOBALS )
|
|
||||||
|
|
||||||
idlib_string = ' \
|
|
||||||
bv/Bounds.cpp \
|
|
||||||
bv/Frustum.cpp \
|
|
||||||
bv/Sphere.cpp \
|
|
||||||
bv/Box.cpp \
|
|
||||||
geometry/DrawVert.cpp \
|
|
||||||
geometry/Winding2D.cpp \
|
|
||||||
geometry/Surface_SweptSpline.cpp \
|
|
||||||
geometry/Winding.cpp \
|
|
||||||
geometry/Surface.cpp \
|
|
||||||
geometry/Surface_Patch.cpp \
|
|
||||||
geometry/TraceModel.cpp \
|
|
||||||
geometry/JointTransform.cpp \
|
|
||||||
hashing/CRC32.cpp \
|
|
||||||
hashing/MD4.cpp \
|
|
||||||
hashing/MD5.cpp \
|
|
||||||
math/Angles.cpp \
|
|
||||||
math/Lcp.cpp \
|
|
||||||
math/Math.cpp \
|
|
||||||
math/Matrix.cpp \
|
|
||||||
math/Ode.cpp \
|
|
||||||
math/Plane.cpp \
|
|
||||||
math/Pluecker.cpp \
|
|
||||||
math/Polynomial.cpp \
|
|
||||||
math/Quat.cpp \
|
|
||||||
math/Rotation.cpp \
|
|
||||||
math/Simd.cpp \
|
|
||||||
math/Simd_Generic.cpp \
|
|
||||||
math/Simd_AltiVec.cpp \
|
|
||||||
math/Simd_MMX.cpp \
|
|
||||||
math/Simd_3DNow.cpp \
|
|
||||||
math/Simd_SSE.cpp \
|
|
||||||
math/Simd_SSE2.cpp \
|
|
||||||
math/Simd_SSE3.cpp \
|
|
||||||
math/Vector.cpp \
|
|
||||||
BitMsg.cpp \
|
|
||||||
LangDict.cpp \
|
|
||||||
Lexer.cpp \
|
|
||||||
Lib.cpp \
|
|
||||||
containers/HashIndex.cpp \
|
|
||||||
Dict.cpp \
|
|
||||||
Str.cpp \
|
|
||||||
Parser.cpp \
|
|
||||||
MapFile.cpp \
|
|
||||||
CmdArgs.cpp \
|
|
||||||
Token.cpp \
|
|
||||||
Base64.cpp \
|
|
||||||
Timer.cpp \
|
|
||||||
Heap.cpp'
|
|
||||||
|
|
||||||
idlib_list = scons_utils.BuildList( 'idlib', idlib_string )
|
|
||||||
|
|
||||||
for i in range( len( idlib_list ) ):
|
|
||||||
idlib_list[ i ] = '../../' + idlib_list[ i ]
|
|
||||||
|
|
||||||
local_env = g_env.Clone()
|
|
||||||
local_env_noopt = g_env.Clone()
|
|
||||||
|
|
||||||
# max allowed -O1
|
|
||||||
flags = OPTCPPFLAGS
|
|
||||||
try:
|
|
||||||
flags.remove( '-O3' )
|
|
||||||
flags.insert( 0, '-O1' )
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
local_env_noopt.Append( CPPFLAGS = flags )
|
|
||||||
|
|
||||||
ret_list = []
|
|
||||||
if ( local_idlibpic == 0 ):
|
|
||||||
for f in idlib_list:
|
|
||||||
ret_list += local_env.StaticObject( source = f )
|
|
||||||
else:
|
|
||||||
for f in idlib_list:
|
|
||||||
ret_list += local_env.SharedObject( source = f )
|
|
||||||
Return( 'ret_list' )
|
|
|
@ -1,89 +0,0 @@
|
||||||
import os, sys
|
|
||||||
|
|
||||||
import scons_utils
|
|
||||||
|
|
||||||
class idSDK( scons_utils.idSetupBase ):
|
|
||||||
|
|
||||||
def PreBuildSDK( self, build_path ):
|
|
||||||
self.build_path = build_path
|
|
||||||
print 'PreBuildSDK: ' + repr( build_path )
|
|
||||||
for p in build_path:
|
|
||||||
self.SimpleCommand( 'rm -rf ' + p )
|
|
||||||
|
|
||||||
def Visit( self, arg, dirname, names ):
|
|
||||||
#print 'visit: %s %s' % ( dirname, repr( names ) )
|
|
||||||
for i in names:
|
|
||||||
if ( i[len(i)-2:] == '.h' or i[len(i)-4:] == '.cpp' ):
|
|
||||||
self.file_list.append( os.path.join( dirname, i ) )
|
|
||||||
|
|
||||||
def BuildSDK( self, target = None, source = None, env = None ):
|
|
||||||
print 'Building SDK release'
|
|
||||||
# extract the file list
|
|
||||||
self.file_list = []
|
|
||||||
for p in self.build_path:
|
|
||||||
os.path.walk( p, self.Visit, None )
|
|
||||||
main_version = self.ExtractEngineVersion()
|
|
||||||
version = self.ExtractBuildVersion()
|
|
||||||
sdk_dirname = 'doom3-linux-%s.%s-sdk' % ( main_version, version )
|
|
||||||
sdk_srcdir = os.path.join( sdk_dirname, 'src' )
|
|
||||||
if ( os.path.exists( sdk_dirname ) ):
|
|
||||||
self.SimpleCommand( 'rm -rf ' + sdk_dirname )
|
|
||||||
self.SimpleCommand( 'mkdir -p ' + sdk_srcdir )
|
|
||||||
for i in self.file_list:
|
|
||||||
# NOTE: same len on all paths game/d3xp. probably breaks for anything else
|
|
||||||
short = i[ len( self.build_path[0] ) + 1: ]
|
|
||||||
target = os.path.join( sdk_srcdir, short )
|
|
||||||
dir = os.path.dirname( target )
|
|
||||||
if ( not os.path.exists( dir ) ):
|
|
||||||
self.SimpleCommand( 'mkdir -p ' + dir )
|
|
||||||
self.SimpleCommand( 'cp ' + i + ' ' + target )
|
|
||||||
# remove a bunch of files from hardcoded list
|
|
||||||
delete = [ 'framework/Compressor.h', 'framework/Console.h', 'framework/DemoChecksum.h', 'framework/DemoFile.h',
|
|
||||||
'framework/EditField.h', 'framework/EventLoop.h', 'framework/KeyInput.h', 'framework/Session.h',
|
|
||||||
'framework/async/AsyncClient.h', 'framework/async/AsyncNetwork.h', 'framework/async/AsyncServer.h',
|
|
||||||
'framework/async/MsgChannel.h', 'framework/async/ServerScan.h',
|
|
||||||
'mssdk', 'punkbuster', 'sys/osx',
|
|
||||||
'tools/comafx/StdAfx.h', 'tools/compilers/compiler_public.h', 'tools/edit_public.h' ]
|
|
||||||
for i in delete:
|
|
||||||
target = os.path.join( sdk_srcdir, i )
|
|
||||||
self.SimpleCommand( 'rm -rf ' + target )
|
|
||||||
# copy files from a hardcoded list
|
|
||||||
force_copy = [ 'SConstruct', 'sys/scons/SConscript.game', 'sys/scons/SConscript.idlib', 'sys/scons/scons_utils.py',
|
|
||||||
'game/Game.def', 'd3xp/Game.def',
|
|
||||||
'idlib/geometry/Surface_Polytope.cpp', 'idlib/hashing/CRC8.cpp', 'idlib/math/Complex.cpp',
|
|
||||||
'idlib/math/Simd_3DNow.cpp', 'idlib/math/Simd_AltiVec.cpp', 'idlib/math/Simd_MMX.cpp', 'idlib/math/Simd_SSE.cpp',
|
|
||||||
'idlib/math/Simd_SSE2.cpp', 'idlib/math/Simd_SSE3.cpp',
|
|
||||||
'MayaImport/exporter.h', 'MayaImport/maya_main.cpp', 'MayaImport/maya_main.h',
|
|
||||||
'MayaImport/mayaimport.def', 'MayaImport/Maya4.5/maya.h', 'MayaImport/maya5.0/maya.h',
|
|
||||||
'MayaImport/Maya6.0/maya.h',
|
|
||||||
'd3xp/EndLevel.cpp', 'd3xp/EndLevel.h'
|
|
||||||
]
|
|
||||||
for i in force_copy:
|
|
||||||
target = os.path.join( sdk_srcdir, i )
|
|
||||||
dir = os.path.dirname( target )
|
|
||||||
if ( not os.path.exists( dir ) ):
|
|
||||||
self.SimpleCommand( 'mkdir -p ' + dir )
|
|
||||||
self.SimpleCommand( 'cp ' + i + ' ' + target )
|
|
||||||
# copy sdk media
|
|
||||||
if ( not os.path.exists( 'sys/linux/setup/media-sdk' ) ):
|
|
||||||
print 'sdk media is missing (sys/linux/setup/media-sdk)'
|
|
||||||
sys.exit( 1 )
|
|
||||||
self.SimpleCommand( 'cp -R sys/linux/setup/media-sdk/* ' + sdk_dirname )
|
|
||||||
# .zip files are auto-expanded by lokisetup, and there's no disable feature
|
|
||||||
# zip up the maya toplevel stuff
|
|
||||||
self.SimpleCommand( 'cd ' + sdk_dirname + ' && zip MayaSetupStuff.zip MayaImportx86* && rm MayaImportx86*' )
|
|
||||||
# put the setup in
|
|
||||||
self.SimpleCommand( 'cp -R -f sys/linux/setup/image-base/* ' + sdk_dirname )
|
|
||||||
self.SimpleCommand( 'cp -R -f sys/linux/setup/image-sdk/* ' + sdk_dirname )
|
|
||||||
# M4
|
|
||||||
m4_dict = { 'M4_VERSION' : main_version }
|
|
||||||
self.M4Processing( sdk_dirname + '/setup.data/setup.xml.in', m4_dict )
|
|
||||||
# create the FreeBSD symlinks
|
|
||||||
self.SimpleCommand( 'cd ' + sdk_dirname + '/setup.data/bin ; ln -s Linux FreeBSD' )
|
|
||||||
# create amd64 symlinks
|
|
||||||
self.SimpleCommand( 'cd ' + sdk_dirname + '/setup.data/bin/Linux ; ln -s x86 amd64' )
|
|
||||||
# remove .svn entries
|
|
||||||
self.SimpleCommand( 'find ' + sdk_dirname + ' -name \'.svn\' -type d | xargs rm -rf' )
|
|
||||||
# put it together
|
|
||||||
self.SimpleCommand( 'sys/linux/setup/makeself/makeself.sh ' + sdk_dirname + ' ' + sdk_dirname + '.x86.run \'DOOM III SDK\' ./setup.sh' )
|
|
||||||
print 'TODO: do a build check in SDK directory'
|
|
|
@ -1,159 +0,0 @@
|
||||||
import sys, os, string, time, commands, re, pickle, StringIO, popen2, commands, pdb, zipfile, tempfile
|
|
||||||
|
|
||||||
import scons_utils
|
|
||||||
|
|
||||||
class idSetup( scons_utils.idSetupBase ):
|
|
||||||
|
|
||||||
# do not alter the sources, specially with strip and brandelfing
|
|
||||||
def BuildSetup( self, target = None, source = None, env = None ):
|
|
||||||
brandelf_path = source[0].abspath
|
|
||||||
if ( target[0].path == 'setup-demo' ):
|
|
||||||
print 'Building demo setup'
|
|
||||||
demo_build = True
|
|
||||||
core_path = source[1].abspath
|
|
||||||
game_path = source[2].abspath
|
|
||||||
else:
|
|
||||||
print 'Building setup'
|
|
||||||
demo_build = False
|
|
||||||
core_path = source[1].abspath
|
|
||||||
ded_path = source[2].abspath
|
|
||||||
game_path = source[3].abspath
|
|
||||||
d3xp_path = source[4].abspath
|
|
||||||
# identify dynamic dependencies that we bundle with the binary
|
|
||||||
ldd_deps = []
|
|
||||||
ldd_output = self.SimpleCommand( 'ldd -r ' + core_path )
|
|
||||||
pat = re.compile( '.*lib(stdc\+\+|gcc_s).* => (.*) \(.*\)' )
|
|
||||||
for i in string.split( ldd_output, '\n' ):
|
|
||||||
if ( pat.match( i ) ):
|
|
||||||
ldd_deps.append( pat.split( i )[ 2 ] )
|
|
||||||
# prep the binaries and update the paths
|
|
||||||
temp_dir = tempfile.mkdtemp( prefix = 'doomsetup' )
|
|
||||||
if ( demo_build ):
|
|
||||||
self.SimpleCommand( 'cp %s %s/doom.x86' % ( core_path, temp_dir ) )
|
|
||||||
core_path = '%s/doom.x86' % temp_dir
|
|
||||||
self.SimpleCommand( 'cp %s %s/gamex86.so' % ( game_path, temp_dir ) )
|
|
||||||
game_path = '%s/gamex86.so' % temp_dir
|
|
||||||
self.SimpleCommand( 'strip ' + core_path )
|
|
||||||
self.SimpleCommand( 'strip ' + game_path )
|
|
||||||
self.SimpleCommand( brandelf_path + ' -t Linux ' + core_path )
|
|
||||||
else:
|
|
||||||
self.SimpleCommand( 'cp %s %s/doom.x86' % ( core_path, temp_dir ) )
|
|
||||||
core_path = '%s/doom.x86' % temp_dir
|
|
||||||
self.SimpleCommand( 'cp %s %s/doomded.x86' % ( ded_path, temp_dir ) )
|
|
||||||
ded_path = '%s/doomded.x86' % temp_dir
|
|
||||||
self.SimpleCommand( 'cp %s %s/gamex86-base.so' % ( game_path, temp_dir ) )
|
|
||||||
game_path = '%s/gamex86-base.so' % temp_dir
|
|
||||||
self.SimpleCommand( 'cp %s %s/gamex86-d3xp.so' % ( d3xp_path, temp_dir ) )
|
|
||||||
d3xp_path = '%s/gamex86-d3xp.so' % temp_dir
|
|
||||||
self.SimpleCommand( 'strip ' + core_path )
|
|
||||||
self.SimpleCommand( 'strip ' + ded_path )
|
|
||||||
self.SimpleCommand( 'strip ' + game_path )
|
|
||||||
self.SimpleCommand( 'strip ' + d3xp_path )
|
|
||||||
self.SimpleCommand( brandelf_path + ' -t Linux ' + core_path )
|
|
||||||
self.SimpleCommand( brandelf_path + ' -t Linux ' + ded_path )
|
|
||||||
# main version tag - ENGINE_VERSION in Licensee.h
|
|
||||||
main_version = self.ExtractEngineVersion( )
|
|
||||||
# build number
|
|
||||||
version = self.ExtractBuildVersion( )
|
|
||||||
if ( demo_build ):
|
|
||||||
base_dirname = 'doom3-linux-%s.%s-demo' % ( main_version, version )
|
|
||||||
else:
|
|
||||||
base_dirname = 'doom3-linux-%s.%s' % ( main_version, version )
|
|
||||||
if ( os.path.exists( base_dirname ) ):
|
|
||||||
self.SimpleCommand( 'rm -rf %s' % base_dirname )
|
|
||||||
self.SimpleCommand( 'mkdir %s' % base_dirname )
|
|
||||||
self.SimpleCommand( 'cp -R sys/linux/setup/image-base/* ' + base_dirname )
|
|
||||||
if ( demo_build ):
|
|
||||||
self.SimpleCommand( 'cp -R -f sys/linux/setup/image-demo/* ' + base_dirname )
|
|
||||||
else:
|
|
||||||
self.SimpleCommand( 'cp -R -f sys/linux/setup/image/* ' + base_dirname )
|
|
||||||
# process M4 stuff
|
|
||||||
if ( demo_build ):
|
|
||||||
m4_dict = { 'M4_PRODUCT' : 'doom3-demo', 'M4_DESC' : 'DOOM III demo', 'M4_VERSION' : '%s.%s' % ( main_version, version ) }
|
|
||||||
else:
|
|
||||||
m4_dict = { 'M4_PRODUCT' : 'doom3', 'M4_DESC' : 'DOOM III', 'M4_VERSION' : '%s.%s' % ( main_version, version ) }
|
|
||||||
M4_LDD = ''
|
|
||||||
for i in ldd_deps:
|
|
||||||
if ( len( M4_LDD ) ):
|
|
||||||
M4_LDD += '\n'
|
|
||||||
M4_LDD += os.path.basename( i )
|
|
||||||
m4_dict[ 'M4_LDD' ] = M4_LDD
|
|
||||||
self.M4Processing( base_dirname + '/setup.data/setup.xml.in', m4_dict )
|
|
||||||
# build the game pak
|
|
||||||
if ( demo_build ):
|
|
||||||
# the demo doesn't use a game pak
|
|
||||||
self.SimpleCommand( 'cp ' + game_path + ' ' + base_dirname )
|
|
||||||
else:
|
|
||||||
# comment out this part to stick to game paks already provided in the media tree
|
|
||||||
# print 'zipping together base game01.pk4'
|
|
||||||
# game_zip = zipfile.ZipFile( 'sys/linux/setup/media/base/game01.pk4', 'w', zipfile.ZIP_DEFLATED )
|
|
||||||
# game_zip.write( game_path, 'gamex86.so' )
|
|
||||||
# game_zip.write( 'sys/linux/setup/binary.conf', 'binary.conf' )
|
|
||||||
# game_zip.printdir()
|
|
||||||
# game_zip.close()
|
|
||||||
# print 'zipping together d3xp game01.pk4'
|
|
||||||
# game_zip = zipfile.ZipFile( 'sys/linux/setup/media/d3xp/game01.pk4', 'w', zipfile.ZIP_DEFLATED )
|
|
||||||
# game_zip.write( d3xp_path, 'gamex86.so' )
|
|
||||||
# game_zip.write( 'sys/linux/setup/binary.conf', 'binary.conf' )
|
|
||||||
# game_zip.printdir()
|
|
||||||
# game_zip.close()
|
|
||||||
pass
|
|
||||||
# copy media
|
|
||||||
if ( demo_build ):
|
|
||||||
# we use a different repository path for large binary data
|
|
||||||
# extract or symlink from media-demo
|
|
||||||
if ( not os.path.exists( 'sys/linux/setup/media-demo' ) ):
|
|
||||||
print 'demo media is missing (sys/linux/setup/media-demo)'
|
|
||||||
sys.exit( 1 )
|
|
||||||
# check the md5 of the demo pack to be sure
|
|
||||||
md5sum = self.SimpleCommand( 'md5sum sys/linux/setup/media-demo/demo/demo00.pk4' )
|
|
||||||
if ( md5sum != '70c2c63ef1190158f1ebd6c255b22d8e sys/linux/setup/media-demo/demo/demo00.pk4' ):
|
|
||||||
print 'demo media has invalid checksum'
|
|
||||||
sys.exit( 1 )
|
|
||||||
self.SimpleCommand( 'cp -R sys/linux/setup/media-demo/* ' + base_dirname )
|
|
||||||
else:
|
|
||||||
if ( not os.path.exists( 'sys/linux/setup/media' ) ):
|
|
||||||
print 'media is missing (sys/linux/setup/media)'
|
|
||||||
sys.exit( 1 )
|
|
||||||
# copy the CHANGES file
|
|
||||||
self.SimpleCommand( 'cp -v sys/linux/setup/media/CHANGES ' + base_dirname )
|
|
||||||
# copy out the pk4 files from the main media tree
|
|
||||||
self.SimpleCommand( 'mkdir ' + base_dirname + '/base' )
|
|
||||||
self.SimpleCommand( 'mkdir ' + base_dirname + '/d3xp' )
|
|
||||||
self.SimpleCommand( 'find sys/linux/setup/media/ -name "*.pk4" | grep -v zpak | cut -b 23- | while read i ; do cp -v sys/linux/setup/media/$i ' + base_dirname + '/$i ; done' )
|
|
||||||
# copy
|
|
||||||
self.SimpleCommand( 'cp ' + core_path + ' ' + base_dirname + '/bin/Linux/x86' )
|
|
||||||
if ( not demo_build ):
|
|
||||||
self.SimpleCommand( 'cp ' + ded_path + ' ' + base_dirname + '/bin/Linux/x86' )
|
|
||||||
for i in ldd_deps:
|
|
||||||
self.SimpleCommand( 'cp ' + i + ' ' + base_dirname + '/' + os.path.basename( i ) )
|
|
||||||
# punkbuster
|
|
||||||
if ( not demo_build ):
|
|
||||||
self.SimpleCommand( 'cp -R punkbuster/setup/pb ' + base_dirname )
|
|
||||||
self.SimpleCommand( 'cp -Rf punkbuster/setup/linux/pb ' + base_dirname )
|
|
||||||
self.SimpleCommand( 'cp sys/linux/setup/media/PB_EULA.txt ' + base_dirname + '/pb' )
|
|
||||||
# put a version tag, xqf request
|
|
||||||
f = open( base_dirname + '/version.info', 'w' )
|
|
||||||
f.write( main_version + '\n' )
|
|
||||||
f.write( self.ExtractProtocolVersion() + '\n' )
|
|
||||||
f.close()
|
|
||||||
# create the FreeBSD symlinks
|
|
||||||
self.SimpleCommand( 'cd ' + base_dirname + '/bin ; ln -s Linux FreeBSD' )
|
|
||||||
self.SimpleCommand( 'cd ' + base_dirname + '/setup.data/bin ; ln -s Linux FreeBSD' )
|
|
||||||
# create amd64 symlinks
|
|
||||||
self.SimpleCommand( 'cd ' + base_dirname + '/bin/Linux ; ln -s x86 amd64' )
|
|
||||||
self.SimpleCommand( 'cd ' + base_dirname + '/setup.data/bin/Linux ; ln -s x86 amd64' )
|
|
||||||
# remove .svn entries
|
|
||||||
self.SimpleCommand( 'find ' + base_dirname + ' -name \'.svn\' -type d | xargs rm -rf' )
|
|
||||||
# remove D3XP related stuff until final release
|
|
||||||
#self.SimpleCommand( 'rm -rf ' + base_dirname + '/d3xp/*' )
|
|
||||||
# package it
|
|
||||||
target_setup = base_dirname + '.x86.run'
|
|
||||||
if ( demo_build ):
|
|
||||||
self.SimpleCommand( 'sys/linux/setup/makeself/makeself.sh ' + base_dirname + ' ' + target_setup + ' \'DOOM III demo\' ./setup.sh' )
|
|
||||||
else:
|
|
||||||
self.SimpleCommand( 'sys/linux/setup/makeself/makeself.sh ' + base_dirname + ' ' + target_setup + ' \'DOOM III\' ./setup.sh' )
|
|
||||||
# take out the temp dir
|
|
||||||
self.SimpleCommand( 'rm -rf %s' % temp_dir )
|
|
||||||
# success
|
|
||||||
return None
|
|
|
@ -1,186 +0,0 @@
|
||||||
# -*- mode: python -*-
|
|
||||||
import sys, os, string, time, commands, re, pickle, StringIO, popen2, commands, pdb, zipfile, tempfile
|
|
||||||
import SCons
|
|
||||||
|
|
||||||
# need an Environment and a matching buffered_spawn API .. encapsulate
|
|
||||||
class idBuffering:
|
|
||||||
silent = False
|
|
||||||
|
|
||||||
def buffered_spawn( self, sh, escape, cmd, args, env ):
|
|
||||||
stderr = StringIO.StringIO()
|
|
||||||
stdout = StringIO.StringIO()
|
|
||||||
command_string = ''
|
|
||||||
for i in args:
|
|
||||||
if ( len( command_string ) ):
|
|
||||||
command_string += ' '
|
|
||||||
command_string += i
|
|
||||||
try:
|
|
||||||
retval = self.env['PSPAWN']( sh, escape, cmd, args, env, stdout, stderr )
|
|
||||||
except OSError, x:
|
|
||||||
if x.errno != 10:
|
|
||||||
raise x
|
|
||||||
print 'OSError ignored on command: %s' % command_string
|
|
||||||
retval = 0
|
|
||||||
print command_string
|
|
||||||
if ( retval != 0 or not self.silent ):
|
|
||||||
sys.stdout.write( stdout.getvalue() )
|
|
||||||
sys.stderr.write( stderr.getvalue() )
|
|
||||||
return retval
|
|
||||||
|
|
||||||
class idSetupBase:
|
|
||||||
|
|
||||||
def SimpleCommand( self, cmd ):
|
|
||||||
print cmd
|
|
||||||
ret = commands.getstatusoutput( cmd )
|
|
||||||
if ( len( ret[ 1 ] ) ):
|
|
||||||
sys.stdout.write( ret[ 1 ] )
|
|
||||||
sys.stdout.write( '\n' )
|
|
||||||
if ( ret[ 0 ] != 0 ):
|
|
||||||
raise 'command failed'
|
|
||||||
return ret[ 1 ]
|
|
||||||
|
|
||||||
def TrySimpleCommand( self, cmd ):
|
|
||||||
print cmd
|
|
||||||
ret = commands.getstatusoutput( cmd )
|
|
||||||
sys.stdout.write( ret[ 1 ] )
|
|
||||||
|
|
||||||
def M4Processing( self, file, d ):
|
|
||||||
file_out = file[:-3]
|
|
||||||
cmd = 'm4 '
|
|
||||||
for ( key, val ) in d.items():
|
|
||||||
cmd += '--define=%s="%s" ' % ( key, val )
|
|
||||||
cmd += '%s > %s' % ( file, file_out )
|
|
||||||
self.SimpleCommand( cmd )
|
|
||||||
|
|
||||||
def ExtractProtocolVersion( self ):
|
|
||||||
f = open( 'framework/Licensee.h' )
|
|
||||||
l = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
major = 'X'
|
|
||||||
p = re.compile( '^#define ASYNC_PROTOCOL_MAJOR\t*(.*)' )
|
|
||||||
for i in l:
|
|
||||||
if ( p.match( i ) ):
|
|
||||||
major = p.match( i ).group(1)
|
|
||||||
break
|
|
||||||
|
|
||||||
f = open( 'framework/async/AsyncNetwork.h' )
|
|
||||||
l = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
minor = 'X'
|
|
||||||
p = re.compile( '^const int ASYNC_PROTOCOL_MINOR\t*= (.*);' )
|
|
||||||
for i in l:
|
|
||||||
if ( p.match( i ) ):
|
|
||||||
minor = p.match( i ).group(1)
|
|
||||||
break
|
|
||||||
|
|
||||||
return '%s.%s' % ( major, minor )
|
|
||||||
|
|
||||||
def ExtractEngineVersion( self ):
|
|
||||||
f = open( 'framework/Licensee.h' )
|
|
||||||
l = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
version = 'X'
|
|
||||||
p = re.compile( '^#define.*ENGINE_VERSION\t*"DOOM (.*)"' )
|
|
||||||
for i in l:
|
|
||||||
if ( p.match( i ) ):
|
|
||||||
version = p.match( i ).group(1)
|
|
||||||
break
|
|
||||||
|
|
||||||
return version
|
|
||||||
|
|
||||||
def ExtractBuildVersion( self ):
|
|
||||||
f = open( 'framework/BuildVersion.h' )
|
|
||||||
l = f.readlines()[ 4 ]
|
|
||||||
f.close()
|
|
||||||
pat = re.compile( '.* = (.*);\n' )
|
|
||||||
return pat.split( l )[ 1 ]
|
|
||||||
|
|
||||||
def checkLDD( target, source, env ):
|
|
||||||
file = target[0]
|
|
||||||
if (not os.path.isfile(file.abspath)):
|
|
||||||
print('ERROR: CheckLDD: target %s not found\n' % target[0])
|
|
||||||
Exit(1)
|
|
||||||
( status, output ) = commands.getstatusoutput( 'ldd -r %s' % file )
|
|
||||||
if ( status != 0 ):
|
|
||||||
print 'ERROR: ldd command returned with exit code %d' % ldd_ret
|
|
||||||
os.system( 'rm %s' % target[ 0 ] )
|
|
||||||
sys.exit(1)
|
|
||||||
lines = string.split( output, '\n' )
|
|
||||||
have_undef = 0
|
|
||||||
for i_line in lines:
|
|
||||||
#print repr(i_line)
|
|
||||||
regex = re.compile('undefined symbol: (.*)\t\\((.*)\\)')
|
|
||||||
if ( regex.match(i_line) ):
|
|
||||||
symbol = regex.sub('\\1', i_line)
|
|
||||||
try:
|
|
||||||
env['ALLOWED_SYMBOLS'].index(symbol)
|
|
||||||
except:
|
|
||||||
have_undef = 1
|
|
||||||
if ( have_undef ):
|
|
||||||
print output
|
|
||||||
print "ERROR: undefined symbols"
|
|
||||||
os.system('rm %s' % target[0])
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def SharedLibrarySafe( env, target, source ):
|
|
||||||
ret = env.SharedLibrary( target, source, SHLIBPREFIX='' )
|
|
||||||
env.AddPostAction( ret, checkLDD )
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def NotImplementedStub( *whatever ):
|
|
||||||
print 'Not Implemented'
|
|
||||||
sys.exit( 1 )
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
|
||||||
|
|
||||||
class idGamePaks( idSetupBase ):
|
|
||||||
|
|
||||||
def BuildGamePak( self, target = None, source = None, env = None ):
|
|
||||||
# NOTE: ew should have done with zipfile module
|
|
||||||
temp_dir = tempfile.mkdtemp( prefix = 'gamepak' )
|
|
||||||
self.SimpleCommand( 'cp %s %s' % ( source[0].abspath, os.path.join( temp_dir, 'gamex86.so' ) ) )
|
|
||||||
self.SimpleCommand( 'strip %s' % os.path.join( temp_dir, 'gamex86.so' ) )
|
|
||||||
self.SimpleCommand( 'echo 2 > %s' % ( os.path.join( temp_dir, 'binary.conf' ) ) )
|
|
||||||
self.SimpleCommand( 'cd %s ; zip %s gamex86.so binary.conf' % ( temp_dir, os.path.join( temp_dir, target[0].abspath ) ) )
|
|
||||||
self.SimpleCommand( 'rm -r %s' % temp_dir )
|
|
||||||
return None
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
|
||||||
|
|
||||||
# get a clean error output when running multiple jobs
|
|
||||||
def SetupBufferedOutput( env, silent ):
|
|
||||||
buf = idBuffering()
|
|
||||||
buf.silent = silent
|
|
||||||
buf.env = env
|
|
||||||
env['SPAWN'] = buf.buffered_spawn
|
|
||||||
|
|
||||||
# setup utilities on an environement
|
|
||||||
def SetupUtils( env ):
|
|
||||||
gamepaks = idGamePaks()
|
|
||||||
env.BuildGamePak = gamepaks.BuildGamePak
|
|
||||||
env.SharedLibrarySafe = SharedLibrarySafe
|
|
||||||
try:
|
|
||||||
import SDK
|
|
||||||
sdk = SDK.idSDK()
|
|
||||||
env.PreBuildSDK = sdk.PreBuildSDK
|
|
||||||
env.BuildSDK = sdk.BuildSDK
|
|
||||||
except:
|
|
||||||
print 'SDK.py hookup failed'
|
|
||||||
env.PreBuildSDK = NotImplementedStub
|
|
||||||
env.BuildSDK = NotImplementedStub
|
|
||||||
try:
|
|
||||||
import Setup
|
|
||||||
setup = Setup.idSetup()
|
|
||||||
env.BuildSetup = setup.BuildSetup
|
|
||||||
except:
|
|
||||||
print 'Setup.py hookup failed'
|
|
||||||
env.BuildSetup = NotImplementedStub
|
|
||||||
|
|
||||||
def BuildList( s_prefix, s_string ):
|
|
||||||
s_list = string.split( s_string )
|
|
||||||
for i in range( len( s_list ) ):
|
|
||||||
s_list[ i ] = s_prefix + '/' + s_list[ i ]
|
|
||||||
return s_list
|
|
Loading…
Reference in a new issue