Forgot to "git rm" some files.
This commit is contained in:
parent
fa8b908458
commit
cc17d0dbca
324
SConscript
324
SConscript
@ -1,324 +0,0 @@
|
|||||||
import os, sys, subprocess, time
|
|
||||||
|
|
||||||
|
|
||||||
##Fix for long command line - http://scons.org/wiki/LongCmdLinesOnWin32
|
|
||||||
class ourSpawn:
|
|
||||||
def ourspawn(self, sh, escape, cmd, args, env):
|
|
||||||
newargs = ' '.join(args[1:])
|
|
||||||
cmdline = cmd + " " + newargs
|
|
||||||
startupinfo = subprocess.STARTUPINFO()
|
|
||||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
|
||||||
proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False, env = env)
|
|
||||||
data, err = proc.communicate()
|
|
||||||
rv = proc.wait()
|
|
||||||
if rv:
|
|
||||||
print "====="
|
|
||||||
print err
|
|
||||||
print "====="
|
|
||||||
return rv
|
|
||||||
|
|
||||||
def SetupSpawn( env ):
|
|
||||||
if sys.platform == 'win32':
|
|
||||||
buf = ourSpawn()
|
|
||||||
buf.ourenv = env
|
|
||||||
env['SPAWN'] = buf.ourspawn
|
|
||||||
|
|
||||||
AddOption('--opengl',dest="opengl",action='store_true',default=False,help="Build with OpenGL interface support.")
|
|
||||||
AddOption('--opengl-renderer',dest="opengl-renderer",action='store_true',default=False,help="Build with OpenGL renderer support. (requires --opengl)")
|
|
||||||
AddOption('--renderer',dest="renderer",action='store_true',default=False,help="Save renderer")
|
|
||||||
AddOption('--win',dest="win",action='store_true',default=False,help="Windows platform target.")
|
|
||||||
AddOption('--lin',dest="lin",action='store_true',default=False,help="Linux platform target")
|
|
||||||
AddOption('--macosx',dest="macosx",action='store_true',default=False,help="Mac OS X platform target")
|
|
||||||
AddOption('--rpi',dest="rpi",action='store_true',default=False,help="Raspbain platform target")
|
|
||||||
AddOption('--64bit',dest="_64bit",action='store_true',default=False,help="64-bit platform target")
|
|
||||||
AddOption('--static',dest="static",action="store_true",default=False,help="Static linking, reduces external library dependancies but increased file size")
|
|
||||||
AddOption('--pthreadw32-static',dest="ptw32-static",action="store_true",default=False,help="Use PTW32_STATIC_LIB for pthreadw32 headers")
|
|
||||||
AddOption('--python-ver',dest="pythonver",default=False,help="Python version to use for generator.py")
|
|
||||||
AddOption('--release',dest="release",action='store_true',default=False,help="Enable optimisations (Will slow down compiling)")
|
|
||||||
AddOption('--lua-dir',dest="lua-dir",default=False,help="Directory for lua includes")
|
|
||||||
AddOption('--sdl-dir',dest="sdl-dir",default=False,help="Directory for SDL includes")
|
|
||||||
AddOption('--tool',dest="toolprefix",default=False,help="Prefix")
|
|
||||||
AddOption('--sse',dest="sse",action='store_true',default=False,help="Enable SSE optimisations")
|
|
||||||
AddOption('--sse2',dest="sse2",action='store_true',default=False,help="Enable SSE2 optimisations")
|
|
||||||
AddOption('--sse3',dest="sse3",action='store_true',default=False,help="Enable SSE3 optimisations")
|
|
||||||
AddOption('--x86',dest="x86",action='store_true',default=True,help="Target Intel x86 platform")
|
|
||||||
|
|
||||||
AddOption('--debugging', dest="debug", action="store_true", default=False, help="Enable debug options")
|
|
||||||
AddOption('--beta',dest="beta",action='store_true',default=False,help="Beta build.")
|
|
||||||
AddOption('--save-version',dest="save-version",default=False,help="Save version.")
|
|
||||||
AddOption('--minor-version',dest="minor-version",default=False,help="Minor version.")
|
|
||||||
AddOption('--build-number',dest="build-number",default=False,help="Build number.")
|
|
||||||
AddOption('--snapshot',dest="snapshot",action='store_true',default=False,help="Snapshot build.")
|
|
||||||
AddOption('--snapshot-id',dest="snapshot-id",default=False,help="Snapshot build ID.")
|
|
||||||
AddOption('--stable',dest="stable",default=True,help="Non snapshot build")
|
|
||||||
|
|
||||||
AddOption('--aao', dest="everythingAtOnce", action='store_true', default=False, help="Compile the whole game without generating intermediate objects (very slow), enable this when using compilers like clang or mscc that don't support -fkeep-inline-functions")
|
|
||||||
|
|
||||||
if((not GetOption('lin')) and (not GetOption('win')) and (not GetOption('rpi')) and (not GetOption('macosx'))):
|
|
||||||
print "You must specify a platform to target"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
if(GetOption('win')):
|
|
||||||
env = Environment(tools = ['mingw'], ENV = os.environ)
|
|
||||||
else:
|
|
||||||
env = Environment(tools = ['default'], ENV = os.environ)
|
|
||||||
|
|
||||||
if GetOption("toolprefix"):
|
|
||||||
env['CC'] = GetOption("toolprefix")+env['CC']
|
|
||||||
env['CXX'] = GetOption("toolprefix")+env['CXX']
|
|
||||||
if GetOption('win'):
|
|
||||||
env['RC'] = GetOption("toolprefix")+env['RC']
|
|
||||||
|
|
||||||
#Check for headers and libraries
|
|
||||||
if not GetOption("macosx"):
|
|
||||||
conf = Configure(env)
|
|
||||||
|
|
||||||
try:
|
|
||||||
env.ParseConfig('sdl-config --cflags')
|
|
||||||
env.ParseConfig('sdl-config --libs')
|
|
||||||
except:
|
|
||||||
if not conf.CheckLib("SDL"):
|
|
||||||
print "libSDL not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
if(GetOption("sdl-dir")):
|
|
||||||
if not conf.CheckCHeader(GetOption("sdl-dir") + '/SDL.h'):
|
|
||||||
print "sdl headers not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
else:
|
|
||||||
env.Append(CPPPATH=[GetOption("sdl-dir")])
|
|
||||||
|
|
||||||
#Find correct lua include dir
|
|
||||||
try:
|
|
||||||
env.ParseConfig('pkg-config --cflags lua5.1')
|
|
||||||
except:
|
|
||||||
if(GetOption("lua-dir")):
|
|
||||||
if not conf.CheckCHeader(GetOption("lua-dir") + '/lua.h'):
|
|
||||||
print "lua5.1 headers not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
else:
|
|
||||||
env.Append(CPPPATH=[GetOption("lua-dir")])
|
|
||||||
|
|
||||||
#Check for FFT lib
|
|
||||||
if not conf.CheckLib('fftw3f') and not conf.CheckLib('fftw3f-3'):
|
|
||||||
print "libfftw3f not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
#Check for Bzip lib
|
|
||||||
if not conf.CheckLib('bz2'):
|
|
||||||
print "libbz2 not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
#Check for zlib
|
|
||||||
if not conf.CheckLib('z'):
|
|
||||||
print "libz not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
if not conf.CheckCHeader("bzlib.h"):
|
|
||||||
print "bzip2 headers not found"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
#Check for Lua lib
|
|
||||||
if not GetOption("macosx"):
|
|
||||||
if not conf.CheckLib('lua5.1') and not conf.CheckLib('lua-5.1') and not conf.CheckLib('lua51') and not conf.CheckLib('lua'):
|
|
||||||
print "liblua not found or not installed"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
env = conf.Finish();
|
|
||||||
else:
|
|
||||||
env.Append(LIBS=['z', 'bz2', 'fftw3f'])
|
|
||||||
|
|
||||||
env.Append(CPPPATH=['src/', 'data/', 'generated/'])
|
|
||||||
env.Append(CCFLAGS=['-w', '-std=c++98', '-fkeep-inline-functions'])
|
|
||||||
env.Append(LIBS=['pthread', 'm'])
|
|
||||||
env.Append(CPPDEFINES=["LUACONSOLE", "GRAVFFT", "_GNU_SOURCE", "USE_STDINT", "_POSIX_C_SOURCE=200112L"])
|
|
||||||
|
|
||||||
if GetOption("ptw32-static"):
|
|
||||||
env.Append(CPPDEFINES=['PTW32_STATIC_LIB']);
|
|
||||||
|
|
||||||
if(GetOption('static')):
|
|
||||||
env.Append(LINKFLAGS=['-static-libgcc'])
|
|
||||||
|
|
||||||
if(GetOption('renderer')):
|
|
||||||
env.Append(CPPDEFINES=['RENDERER'])
|
|
||||||
else:
|
|
||||||
env.Append(CPPDEFINES=["USE_SDL"])
|
|
||||||
|
|
||||||
if(GetOption('rpi')):
|
|
||||||
if(GetOption('opengl')):
|
|
||||||
env.ParseConfig('pkg-config --libs glew gl glu')
|
|
||||||
openGLLibs = ['GL']
|
|
||||||
env.Append(LIBS=['X11', 'rt'])
|
|
||||||
env.Append(CPPDEFINES=["LIN"])
|
|
||||||
|
|
||||||
if(GetOption('win')):
|
|
||||||
openGLLibs = ['opengl32', 'glew32']
|
|
||||||
env.Prepend(LIBS=['mingw32', 'ws2_32', 'SDLmain', 'regex'])
|
|
||||||
env.Append(CCFLAGS=['-std=gnu++98'])
|
|
||||||
env.Append(LIBS=['winmm', 'gdi32'])
|
|
||||||
env.Append(CPPDEFINES=["WIN"])
|
|
||||||
env.Append(LINKFLAGS=['-mwindows'])
|
|
||||||
if(GetOption('_64bit')):
|
|
||||||
env.Append(CPPDEFINES=['__CRT__NO_INLINE'])
|
|
||||||
env.Append(LINKFLAGS=['-Wl,--stack=16777216'])
|
|
||||||
if(GetOption('lin')):
|
|
||||||
if(GetOption('opengl')):
|
|
||||||
env.ParseConfig('pkg-config --libs glew gl glu')
|
|
||||||
openGLLibs = ['GL']
|
|
||||||
env.Append(LIBS=['X11', 'rt'])
|
|
||||||
env.Append(CPPDEFINES=["LIN"])
|
|
||||||
if GetOption('_64bit'):
|
|
||||||
env.Append(LINKFLAGS=['-m64'])
|
|
||||||
env.Append(CCFLAGS=['-m64'])
|
|
||||||
else:
|
|
||||||
env.Append(LINKFLAGS=['-m32'])
|
|
||||||
env.Append(CCFLAGS=['-m32'])
|
|
||||||
if(GetOption('macosx')):
|
|
||||||
env.Append(CPPDEFINES=["MACOSX"])
|
|
||||||
env.Append(CCFLAGS=['-I/Library/Frameworks/SDL.framework/Headers'])
|
|
||||||
env.Append(CCFLAGS=['-I/Library/Frameworks/Lua.framework/Headers'])
|
|
||||||
env.Append(LINKFLAGS=['-lfftw3f'])
|
|
||||||
env.Append(LINKFLAGS=['-framework'])
|
|
||||||
env.Append(LINKFLAGS=['SDL'])
|
|
||||||
env.Append(LINKFLAGS=['-framework'])
|
|
||||||
env.Append(LINKFLAGS=['Lua'])
|
|
||||||
env.Append(LINKFLAGS=['-framework']);
|
|
||||||
env.Append(LINKFLAGS=['Cocoa'])
|
|
||||||
#env.Append(LINKFLAGS=['-framework SDL'])
|
|
||||||
#env.Append(LINKFLAGS=['-framework Lua'])
|
|
||||||
#env.Append(LINKFLAGS=['-framework Cocoa'])
|
|
||||||
if GetOption('_64bit'):
|
|
||||||
env.Append(LINKFLAGS=['-m64'])
|
|
||||||
env.Append(CCFLAGS=['-m64'])
|
|
||||||
else:
|
|
||||||
env.Append(LINKFLAGS=['-m32'])
|
|
||||||
env.Append(CCFLAGS=['-m32'])
|
|
||||||
|
|
||||||
if GetOption('_64bit'):
|
|
||||||
env.Append(CPPDEFINES=["_64BIT"])
|
|
||||||
|
|
||||||
if(GetOption('beta')):
|
|
||||||
env.Append(CPPDEFINES='BETA')
|
|
||||||
|
|
||||||
|
|
||||||
if(not GetOption('snapshot') and not GetOption('beta') and not GetOption('release') and not GetOption('stable')):
|
|
||||||
env.Append(CPPDEFINES='SNAPSHOT_ID=0')
|
|
||||||
env.Append(CPPDEFINES='SNAPSHOT')
|
|
||||||
elif(GetOption('snapshot') or GetOption('snapshot-id')):
|
|
||||||
if(GetOption('snapshot-id')):
|
|
||||||
env.Append(CPPDEFINES=['SNAPSHOT_ID=' + GetOption('snapshot-id')])
|
|
||||||
else:
|
|
||||||
env.Append(CPPDEFINES=['SNAPSHOT_ID=' + str(int(time.time()))])
|
|
||||||
env.Append(CPPDEFINES='SNAPSHOT')
|
|
||||||
elif(GetOption('stable')):
|
|
||||||
env.Append(CPPDEFINES='STABLE')
|
|
||||||
|
|
||||||
if(GetOption('save-version')):
|
|
||||||
env.Append(CPPDEFINES=['SAVE_VERSION=' + GetOption('save-version')])
|
|
||||||
|
|
||||||
if(GetOption('minor-version')):
|
|
||||||
env.Append(CPPDEFINES=['MINOR_VERSION=' + GetOption('minor-version')])
|
|
||||||
|
|
||||||
if(GetOption('build-number')):
|
|
||||||
env.Append(CPPDEFINES=['BUILD_NUM=' + GetOption('build-number')])
|
|
||||||
|
|
||||||
if(GetOption('x86')):
|
|
||||||
env.Append(CPPDEFINES='X86')
|
|
||||||
|
|
||||||
if(GetOption('debug')):
|
|
||||||
env.Append(CPPDEFINES='DEBUG')
|
|
||||||
env.Append(CCFLAGS='-g')
|
|
||||||
|
|
||||||
if(GetOption('sse')):
|
|
||||||
env.Append(CCFLAGS='-msse')
|
|
||||||
env.Append(CPPDEFINES='X86_SSE')
|
|
||||||
|
|
||||||
if(GetOption('sse2')):
|
|
||||||
env.Append(CCFLAGS='-msse2')
|
|
||||||
env.Append(CPPDEFINES='X86_SSE2')
|
|
||||||
|
|
||||||
if(GetOption('sse3')):
|
|
||||||
env.Append(CCFLAGS='-msse3')
|
|
||||||
env.Append(CPPDEFINES='X86_SSE3')
|
|
||||||
|
|
||||||
if(GetOption('opengl')):
|
|
||||||
env.Append(CPPDEFINES=["OGLI", "PIX32OGL"])
|
|
||||||
env.Append(LIBS=openGLLibs)
|
|
||||||
|
|
||||||
if(GetOption('opengl') and GetOption('opengl-renderer')):
|
|
||||||
env.Append(CPPDEFINES=["OGLR"])
|
|
||||||
elif(GetOption('opengl-renderer')):
|
|
||||||
print "opengl-renderer requires opengl"
|
|
||||||
raise SystemExit(1)
|
|
||||||
|
|
||||||
sources=Glob("src/*.cpp")
|
|
||||||
if(GetOption('macosx')):
|
|
||||||
sources +=["SDLMain.m"]
|
|
||||||
if(GetOption('win')):
|
|
||||||
sources += env.RES('resources/powder-res.rc')
|
|
||||||
sources+=Glob("src/*/*.cpp")
|
|
||||||
sources+=Glob("src/simulation/elements/*.cpp")
|
|
||||||
sources+=Glob("src/simulation/tools/*.cpp")
|
|
||||||
sources+=Glob("src/client/requestbroker/*.cpp")
|
|
||||||
|
|
||||||
#for source in sources:
|
|
||||||
# print str(source)
|
|
||||||
|
|
||||||
if(GetOption('win')):
|
|
||||||
sources = filter(lambda source: not 'src\\simulation\\Gravity.cpp' in str(source), sources)
|
|
||||||
sources = filter(lambda source: not 'src/simulation/Gravity.cpp' in str(source), sources)
|
|
||||||
|
|
||||||
SetupSpawn(env)
|
|
||||||
|
|
||||||
programName = "powder"
|
|
||||||
|
|
||||||
if(GetOption('renderer')):
|
|
||||||
programName = "render"
|
|
||||||
|
|
||||||
if(GetOption('win')):
|
|
||||||
if(GetOption('renderer')):
|
|
||||||
programName = "Render"
|
|
||||||
else:
|
|
||||||
programName = "Powder"
|
|
||||||
|
|
||||||
if(GetOption('_64bit')):
|
|
||||||
programName += "64"
|
|
||||||
|
|
||||||
if(not (GetOption('sse2') or GetOption('sse3'))):
|
|
||||||
programName += "-legacy"
|
|
||||||
|
|
||||||
if(GetOption('macosx')):
|
|
||||||
programName += "-x"
|
|
||||||
|
|
||||||
if(GetOption('win')):
|
|
||||||
programName += ".exe"
|
|
||||||
|
|
||||||
if(GetOption('release')):
|
|
||||||
if GetOption('macosx'):
|
|
||||||
env.Append(CCFLAGS=['-O3', '-ftree-vectorize', '-funsafe-math-optimizations', '-ffast-math', '-fomit-frame-pointer'])
|
|
||||||
else:
|
|
||||||
env.Append(CCFLAGS=['-O3', '-ftree-vectorize', '-funsafe-math-optimizations', '-ffast-math', '-fomit-frame-pointer', '-funsafe-loop-optimizations', '-Wunsafe-loop-optimizations'])
|
|
||||||
|
|
||||||
|
|
||||||
if(GetOption('pythonver')):
|
|
||||||
pythonVer = GetOption('pythonver')
|
|
||||||
elif(GetOption('lin')):
|
|
||||||
pythonVer = "python2"
|
|
||||||
else:
|
|
||||||
pythonVer = "python"
|
|
||||||
|
|
||||||
if(GetOption('win')):
|
|
||||||
envCopy = env.Clone()
|
|
||||||
envCopy.Append(CCFLAGS=['-mincoming-stack-boundary=2'])
|
|
||||||
sources+=envCopy.Object('src/simulation/Gravity.cpp')
|
|
||||||
|
|
||||||
env.Command(['generated/ElementClasses.cpp', 'generated/ElementClasses.h'], Glob('src/simulation/elements/*.cpp'), pythonVer + " generator.py elements $TARGETS $SOURCES")
|
|
||||||
sources+=Glob("generated/ElementClasses.cpp")
|
|
||||||
|
|
||||||
env.Command(['generated/ToolClasses.cpp', 'generated/ToolClasses.h'], Glob('src/simulation/tools/*.cpp'), pythonVer + " generator.py tools $TARGETS $SOURCES")
|
|
||||||
sources+=Glob("generated/ToolClasses.cpp")
|
|
||||||
|
|
||||||
env.Decider('MD5')
|
|
||||||
t=env.Program(target=programName, source=sources)
|
|
||||||
Default(t)
|
|
@ -1,2 +0,0 @@
|
|||||||
AddOption('--builddir',dest="builddir",default="build",help="Directory to build to.")
|
|
||||||
SConscript('SConscript', variant_dir=GetOption('builddir'), duplicate=0)
|
|
@ -1,126 +0,0 @@
|
|||||||
#
|
|
||||||
# SCons builder for gcc's precompiled headers
|
|
||||||
# Copyright (C) 2006 Tim Blechmann
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; see the file COPYING. If not, write to
|
|
||||||
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
# Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
# 1.1
|
|
||||||
#
|
|
||||||
# 09-11-2011 Pedro Larroy: Fixed dependency emitter not working with variant dir
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
import SCons.Action
|
|
||||||
import SCons.Builder
|
|
||||||
import SCons.Scanner.C
|
|
||||||
import SCons.Util
|
|
||||||
import SCons.Script
|
|
||||||
import os
|
|
||||||
|
|
||||||
SCons.Script.EnsureSConsVersion(0,96,92)
|
|
||||||
|
|
||||||
GchAction = SCons.Action.Action('$GCHCOM', '$GCHCOMSTR')
|
|
||||||
GchShAction = SCons.Action.Action('$GCHSHCOM', '$GCHSHCOMSTR')
|
|
||||||
|
|
||||||
def gen_suffix(env, sources):
|
|
||||||
return sources[0].get_suffix() + env['GCHSUFFIX']
|
|
||||||
|
|
||||||
GchShBuilder = SCons.Builder.Builder(action = GchShAction,
|
|
||||||
source_scanner = SCons.Scanner.C.CScanner(),
|
|
||||||
suffix = gen_suffix)
|
|
||||||
|
|
||||||
GchBuilder = SCons.Builder.Builder(action = GchAction,
|
|
||||||
source_scanner = SCons.Scanner.C.CScanner(),
|
|
||||||
suffix = gen_suffix)
|
|
||||||
|
|
||||||
def header_path(node):
|
|
||||||
h_path = node.abspath
|
|
||||||
idx = h_path.rfind('.gch')
|
|
||||||
if idx != -1:
|
|
||||||
h_path = h_path[0:idx]
|
|
||||||
if not os.path.isfile(h_path):
|
|
||||||
raise SCons.Errors.StopError("can't find header file: {0}".format(h_path))
|
|
||||||
return h_path
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise SCons.Errors.StopError("{0} file doesn't have .gch extension".format(h_path))
|
|
||||||
|
|
||||||
|
|
||||||
def static_pch_emitter(target,source,env):
|
|
||||||
SCons.Defaults.StaticObjectEmitter( target, source, env )
|
|
||||||
scanner = SCons.Scanner.C.CScanner()
|
|
||||||
path = scanner.path(env)
|
|
||||||
|
|
||||||
deps = scanner(source[0], env, path)
|
|
||||||
if env.get('Gch'):
|
|
||||||
h_path = header_path(env['Gch'])
|
|
||||||
if h_path in [x.abspath for x in deps]:
|
|
||||||
#print 'Found dep. on pch: ', target[0], ' -> ', env['Gch']
|
|
||||||
env.Depends(target, env['Gch'])
|
|
||||||
|
|
||||||
return (target, source)
|
|
||||||
|
|
||||||
def shared_pch_emitter(target,source,env):
|
|
||||||
SCons.Defaults.SharedObjectEmitter( target, source, env )
|
|
||||||
|
|
||||||
scanner = SCons.Scanner.C.CScanner()
|
|
||||||
path = scanner.path(env)
|
|
||||||
deps = scanner(source[0], env, path)
|
|
||||||
|
|
||||||
if env.get('GchSh'):
|
|
||||||
h_path = header_path(env['GchSh'])
|
|
||||||
if h_path in [x.abspath for x in deps]:
|
|
||||||
#print 'Found dep. on pch (shared): ', target[0], ' -> ', env['Gch']
|
|
||||||
env.Depends(target, env['GchSh'])
|
|
||||||
|
|
||||||
return (target, source)
|
|
||||||
|
|
||||||
def generate(env):
|
|
||||||
"""
|
|
||||||
Add builders and construction variables for the Gch builder.
|
|
||||||
"""
|
|
||||||
env.Append(BUILDERS = {
|
|
||||||
'gch': env.Builder(
|
|
||||||
action = GchAction,
|
|
||||||
target_factory = env.fs.File,
|
|
||||||
),
|
|
||||||
'gchsh': env.Builder(
|
|
||||||
action = GchShAction,
|
|
||||||
target_factory = env.fs.File,
|
|
||||||
),
|
|
||||||
})
|
|
||||||
|
|
||||||
try:
|
|
||||||
bld = env['BUILDERS']['Gch']
|
|
||||||
bldsh = env['BUILDERS']['GchSh']
|
|
||||||
except KeyError:
|
|
||||||
bld = GchBuilder
|
|
||||||
bldsh = GchShBuilder
|
|
||||||
env['BUILDERS']['Gch'] = bld
|
|
||||||
env['BUILDERS']['GchSh'] = bldsh
|
|
||||||
|
|
||||||
env['GCHCOM'] = '$CXX -Wall -o $TARGET -x c++-header -c $CXXFLAGS $CCFLAGS $_CCCOMCOM $SOURCE'
|
|
||||||
env['GCHSHCOM'] = '$CXX -o $TARGET -x c++-header -c $SHCXXFLAGS $CCFLAGS $_CCCOMCOM $SOURCE'
|
|
||||||
env['GCHSUFFIX'] = '.gch'
|
|
||||||
|
|
||||||
for suffix in SCons.Util.Split('.c .C .cc .cxx .cpp .c++'):
|
|
||||||
env['BUILDERS']['StaticObject'].add_emitter( suffix, static_pch_emitter )
|
|
||||||
env['BUILDERS']['SharedObject'].add_emitter( suffix, shared_pch_emitter )
|
|
||||||
|
|
||||||
|
|
||||||
def exists(env):
|
|
||||||
return env.Detect('g++')
|
|
Binary file not shown.
@ -1,241 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2010 Western Digital Corporation
|
|
||||||
# Alan Somers asomers (at) gmail (dot) com
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included
|
|
||||||
# in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
|
||||||
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
||||||
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
|
|
||||||
####
|
|
||||||
import os
|
|
||||||
import new
|
|
||||||
import sys
|
|
||||||
##
|
|
||||||
import SCons
|
|
||||||
|
|
||||||
if sys.version_info < (2,6,0):
|
|
||||||
from relpath import relpath
|
|
||||||
else:
|
|
||||||
from os.path import relpath
|
|
||||||
|
|
||||||
|
|
||||||
def sc_relpath(src, destdir):
|
|
||||||
"""Like relpath but aware of SCons convention regarding '#' in pathnames"""
|
|
||||||
if src[0] == '#':
|
|
||||||
return relpath(src[1:], destdir)
|
|
||||||
else:
|
|
||||||
return relpath(os.path.join(destdir, src), destdir)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MF_Executor(SCons.Executor.Executor):
|
|
||||||
"""Custom Executor that can scan each target file for its dependencies
|
|
||||||
individually, rather than giving every target the same deps.
|
|
||||||
Assumes that there is a one-to-one relationship between sources and targets
|
|
||||||
and the targets have the same basenames as their respective sources
|
|
||||||
ie. [[foo.o, bar.o], [foo.c, bar.c]]"""
|
|
||||||
def scan(self, scanner, node_list):
|
|
||||||
tgt_names = [os.path.splitext(
|
|
||||||
os.path.basename(str(i)))[0] for i in self.targets]
|
|
||||||
env = self.get_build_env()
|
|
||||||
|
|
||||||
if scanner:
|
|
||||||
for node in node_list:
|
|
||||||
tgt = \
|
|
||||||
self.targets[tgt_names.index(
|
|
||||||
os.path.splitext(
|
|
||||||
os.path.basename(str(node)))[0])]
|
|
||||||
node.disambiguate()
|
|
||||||
s = scanner.select(node)
|
|
||||||
if not s:
|
|
||||||
continue
|
|
||||||
path = self.get_build_scanner_path(s)
|
|
||||||
tgt.add_to_implicit(node.get_implicit_deps(env, s, path))
|
|
||||||
else:
|
|
||||||
kw = self.get_kw()
|
|
||||||
for node in node_list:
|
|
||||||
tgt = \
|
|
||||||
self.targets[tgt_names.index(
|
|
||||||
os.path.splitext(
|
|
||||||
os.path.basename(str(node)))[0])]
|
|
||||||
node.disambiguate()
|
|
||||||
scanner = node.get_env_scanner(env, kw)
|
|
||||||
if not scanner:
|
|
||||||
continue
|
|
||||||
scanner = scanner.select(node)
|
|
||||||
if not scanner:
|
|
||||||
continue
|
|
||||||
path = self.get_build_scanner_path(scanner)
|
|
||||||
tgt.add_to_implicit(node.get_implicit_deps(env, scanner, path))
|
|
||||||
|
|
||||||
|
|
||||||
def MF_get_single_executor(self, env, tlist, slist, executor_kw):
|
|
||||||
if not self.action:
|
|
||||||
raise UserError, "Builder %s must have an action to build %s." % \
|
|
||||||
(self.get_name(env or self.env), map(str,tlist))
|
|
||||||
return MF_Executor(self.action, env, [], tlist, slist, executor_kw)
|
|
||||||
|
|
||||||
def exists(env):
|
|
||||||
return env.WhereIs(env.subst['$CC']) or env.WhereIs(env.subst['$CXX'])
|
|
||||||
|
|
||||||
def MFProgramEmitter(target, source, env):
|
|
||||||
"""Ensures that target list is complete, and does validity checking. Sets precious"""
|
|
||||||
if len(target) == 1 and len(source) > 1:
|
|
||||||
#Looks like the user specified many sources and SCons created 1 target
|
|
||||||
#targets are implicit, but the builder doesn't know how to handle
|
|
||||||
#suffixes for multiple target files, so we'll do it here
|
|
||||||
objdir = env.get('OBJDIR', '')
|
|
||||||
#target = [os.path.join(
|
|
||||||
# objdir,
|
|
||||||
# os.path.splitext(
|
|
||||||
# os.path.basename(str(i)))[0] + '.o' ) for i in source]
|
|
||||||
elif len(source) == 1 and 'OBJDIR' in env:
|
|
||||||
target = os.path.join(
|
|
||||||
env['OBJDIR'],
|
|
||||||
os.path.splitext(
|
|
||||||
os.path.basename(str(source[0])))[0] + '.o' )
|
|
||||||
else:
|
|
||||||
#targets are explicit, we need to check their validity
|
|
||||||
tgt_names = [os.path.splitext(
|
|
||||||
os.path.basename(str(i)))[0] for i in target]
|
|
||||||
src_names = [os.path.splitext(
|
|
||||||
os.path.basename(str(i)))[0] for i in source]
|
|
||||||
tgt_dirs = [os.path.dirname(str(i)) for i in target]
|
|
||||||
if sorted(tgt_names) != sorted(src_names):
|
|
||||||
raise ValueError, "target files do not have obvious one-one relationship to source files"
|
|
||||||
if len(set(src_names)) != len(src_names):
|
|
||||||
raise ValueError, "source files may not include identically named files in different directories"
|
|
||||||
if len(set(tgt_dirs)) != 1:
|
|
||||||
raise ValueError, "Target files must all be in same directory"
|
|
||||||
|
|
||||||
for t in target:
|
|
||||||
env.Precious(t)
|
|
||||||
return target, source
|
|
||||||
|
|
||||||
def MFProgramGenerator(source, target, env, for_signature):
|
|
||||||
#Rebuild everything if
|
|
||||||
# a) the number of dependencies has changed
|
|
||||||
# b) any target does not exist
|
|
||||||
# c) the build command has changed
|
|
||||||
#Else rebuild only those c files that have changed_since_last_build
|
|
||||||
#The signature of this builder should always be the same, because the
|
|
||||||
#multifile compile is always functionally equivalent to rebuilding
|
|
||||||
#everything
|
|
||||||
|
|
||||||
if for_signature:
|
|
||||||
pared_sources = source
|
|
||||||
else:
|
|
||||||
#First a sanity check
|
|
||||||
assert len(set([os.path.splitext(str(i))[1] for i in source])) == 1, \
|
|
||||||
"All source files must have the same extension."
|
|
||||||
pared_sources = []
|
|
||||||
src_names = [os.path.splitext(os.path.basename(str(i)))[0]
|
|
||||||
for i in source]
|
|
||||||
tgt_names = [os.path.splitext(os.path.basename(str(t)))[0]
|
|
||||||
for t in target]
|
|
||||||
ni = target[0].get_binfo()
|
|
||||||
oi = target[0].get_stored_info().binfo
|
|
||||||
if ni.bactsig != oi.bactsig:
|
|
||||||
#Command line has changed
|
|
||||||
pared_sources = source
|
|
||||||
else:
|
|
||||||
for i in range(len(tgt_names)):
|
|
||||||
t = target[i]
|
|
||||||
tgt_name = tgt_names[i]
|
|
||||||
if not t.exists():
|
|
||||||
#a target does not exist
|
|
||||||
pared_sources = source
|
|
||||||
break
|
|
||||||
bi = t.get_stored_info().binfo
|
|
||||||
then = bi.bsourcesigs + bi.bdependsigs + bi.bimplicitsigs
|
|
||||||
children = t.children()
|
|
||||||
if len(children) != len(then):
|
|
||||||
#the number of dependencies has changed
|
|
||||||
pared_sources = source
|
|
||||||
break
|
|
||||||
for child, prev_ni in zip(children, then):
|
|
||||||
if child.changed_since_last_build(t, prev_ni) and \
|
|
||||||
not t in pared_sources:
|
|
||||||
#If child is a source file, not an explicit or implicit
|
|
||||||
#dependency, then it is not truly a dependency of any target
|
|
||||||
#except that with the same basename. This is a limitation
|
|
||||||
#of SCons.node, which assumes that all sources of a Node
|
|
||||||
#are dependencies of all targets. So we check for that case
|
|
||||||
#here and only rebuild as necessary.
|
|
||||||
src_name = os.path.splitext(os.path.basename(str(child)))[0]
|
|
||||||
if src_name not in tgt_names or src_name == tgt_name:
|
|
||||||
s = source[src_names.index(tgt_name)]
|
|
||||||
pared_sources.append(s)
|
|
||||||
assert len(pared_sources) > 0
|
|
||||||
destdir = str(target[0].dir)
|
|
||||||
#finding sconscript_dir is a bit of a hack. It assumes that the source
|
|
||||||
#files are always going to be in the same directory as the SConscript file
|
|
||||||
#which is not necessarily true. BUG BY Alan Somers
|
|
||||||
sconscript_dir = os.path.dirname(str(pared_sources[0]))
|
|
||||||
prefixed_sources = [relpath(str(i), destdir) for i in pared_sources]
|
|
||||||
prefixed_sources_str = ' '.join([str(i) for i in prefixed_sources])
|
|
||||||
lang_ext = os.path.splitext(prefixed_sources[0])[1]
|
|
||||||
tgt_names2 = [os.path.splitext(os.path.basename(str(t)))[0]
|
|
||||||
for t in target]
|
|
||||||
|
|
||||||
_CPPPATH = []
|
|
||||||
if 'CPPPATH' in env:
|
|
||||||
for i in env['CPPPATH']:
|
|
||||||
#if i[0] == '#':
|
|
||||||
##_CPPPATH.append(relpath(i[1:], destdir))
|
|
||||||
_CPPPATH.append(i)
|
|
||||||
#else:
|
|
||||||
# _CPPPATH.append(relpath(os.path.join(sconscript_dir, i),
|
|
||||||
# destdir))
|
|
||||||
|
|
||||||
defines = ""
|
|
||||||
for t in env['CPPDEFINES']:
|
|
||||||
defines += ("-D"+str(t)+" ")
|
|
||||||
|
|
||||||
_CPPINCFLAGS = ['-I' + i for i in _CPPPATH]
|
|
||||||
_CCOMCOM = '$CPPFLAGS $_CPPDEFFLAGS $defines %s' % ' '.join(_CPPINCFLAGS)
|
|
||||||
|
|
||||||
libstr = ""
|
|
||||||
for t in env['LIBS']:
|
|
||||||
libstr += ("-l"+t+" ")
|
|
||||||
|
|
||||||
if lang_ext == '.c' :
|
|
||||||
_CCCOM = 'cd %s && $CC $CFLAGS $CCFLAGS %s %s $LINKFLAGS %s -o %s' % \
|
|
||||||
(destdir, _CCOMCOM, prefixed_sources_str, libstr, tgt_names2[0])
|
|
||||||
#XXX BUG BY Alan Somers. $CCCOMSTR gets substituted using the full list of target files,
|
|
||||||
#not prefixed_sources
|
|
||||||
cmd = SCons.Script.Action(env.subst(_CCCOM), "$CCCOMSTR")
|
|
||||||
elif lang_ext in ['.cc', '.cpp']:
|
|
||||||
_CXXCOM = 'cd %s && $CXX $CXXFLAGS $CCFLAGS %s %s $LINKFLAGS %s -o %s' % \
|
|
||||||
(destdir, _CCOMCOM, prefixed_sources_str, libstr, tgt_names2[0])
|
|
||||||
cmd = SCons.Script.Action(env.subst(_CXXCOM), "$CXXCOMSTR")
|
|
||||||
else:
|
|
||||||
assert False, "Unknown source file extension %s" % lang_ext
|
|
||||||
return cmd
|
|
||||||
|
|
||||||
def generate(env):
|
|
||||||
"""Adds the MFObject builder to your environment"""
|
|
||||||
MFProgramBld = env.Builder(generator = MFProgramGenerator,
|
|
||||||
emitter = MFProgramEmitter,
|
|
||||||
suffix = '.o',
|
|
||||||
source_scanner=SCons.Tool.SourceFileScanner)
|
|
||||||
MFProgramBld.get_single_executor = new.instancemethod(MF_get_single_executor,
|
|
||||||
MFProgramBld, MFProgramBld.__class__)
|
|
||||||
|
|
||||||
env.Append(BUILDERS = {'MFProgram': MFProgramBld})
|
|
Binary file not shown.
@ -1,73 +0,0 @@
|
|||||||
#PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
|
||||||
#--------------------------------------------
|
|
||||||
#
|
|
||||||
#1. This LICENSE AGREEMENT is between the Python Software Foundation
|
|
||||||
#("PSF"), and the Individual or Organization ("Licensee") accessing and
|
|
||||||
#otherwise using this software ("Python") in source or binary form and
|
|
||||||
#its associated documentation.
|
|
||||||
#
|
|
||||||
#2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
|
||||||
#grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
|
||||||
#analyze, test, perform and/or display publicly, prepare derivative works,
|
|
||||||
#distribute, and otherwise use Python alone or in any derivative version,
|
|
||||||
#provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
|
||||||
#i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
|
||||||
#Python Software Foundation; All Rights Reserved" are retained in Python alone or
|
|
||||||
#in any derivative version prepared by Licensee.
|
|
||||||
#
|
|
||||||
#3. In the event Licensee prepares a derivative work that is based on
|
|
||||||
#or incorporates Python or any part thereof, and wants to make
|
|
||||||
#the derivative work available to others as provided herein, then
|
|
||||||
#Licensee hereby agrees to include in any such work a brief summary of
|
|
||||||
#the changes made to Python.
|
|
||||||
#
|
|
||||||
#4. PSF is making Python available to Licensee on an "AS IS"
|
|
||||||
#basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
|
||||||
#IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
|
||||||
#DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
|
||||||
#FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
|
||||||
#INFRINGE ANY THIRD PARTY RIGHTS.
|
|
||||||
#
|
|
||||||
#5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
|
||||||
#FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
|
||||||
#A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
|
||||||
#OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
|
||||||
#
|
|
||||||
#6. This License Agreement will automatically terminate upon a material
|
|
||||||
#breach of its terms and conditions.
|
|
||||||
#
|
|
||||||
#7. Nothing in this License Agreement shall be deemed to create any
|
|
||||||
#relationship of agency, partnership, or joint venture between PSF and
|
|
||||||
#Licensee. This License Agreement does not grant permission to use PSF
|
|
||||||
#trademarks or trade name in a trademark sense to endorse or promote
|
|
||||||
#products or services of Licensee, or any third party.
|
|
||||||
#
|
|
||||||
#8. By copying, installing or otherwise using Python, Licensee
|
|
||||||
#agrees to be bound by the terms and conditions of this License
|
|
||||||
#Agreement.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Changelog:
|
|
||||||
# 3-12-2010 Alan Somers Copied verbatim from posixpath.py in Python 2.6.4
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from os.path import *
|
|
||||||
|
|
||||||
def relpath(path, start=curdir):
|
|
||||||
"""Return a relative version of a path"""
|
|
||||||
|
|
||||||
if not path:
|
|
||||||
raise ValueError("no path specified")
|
|
||||||
|
|
||||||
start_list = abspath(start).split(sep)
|
|
||||||
path_list = abspath(path).split(sep)
|
|
||||||
|
|
||||||
# Work out how much of the filepath is shared by start and path.
|
|
||||||
i = len(commonprefix([start_list, path_list]))
|
|
||||||
|
|
||||||
rel_list = [pardir] * (len(start_list)-i) + path_list[i:]
|
|
||||||
if not rel_list:
|
|
||||||
return curdir
|
|
||||||
return join(*rel_list)
|
|
Loading…
Reference in New Issue
Block a user