anotehr scons fix

This commit is contained in:
Joseph Eagar
2010-09-25 02:32:30 +00:00
parent 9d4c9583e8
commit 99d1c11fed

View File

@@ -60,223 +60,223 @@ libs = {}
vcp = []
def getresources():
return resources
return resources
def init_lib_dict():
for pt in possible_types:
libs[pt] = {}
for pt in possible_types:
libs[pt] = {}
# helper func for add_lib_to_dict
def internal_lib_to_dict(dict = None, libtype = None, libname = None, priority = 100):
if not libname in dict[libtype]:
done = None
while not done:
if dict[libtype].has_key(priority):
priority = priority + 1
else:
done = True
dict[libtype][priority] = libname
if not libname in dict[libtype]:
done = None
while not done:
if dict[libtype].has_key(priority):
priority = priority + 1
else:
done = True
dict[libtype][priority] = libname
# libtype and priority can both be lists, for defining lib in multiple places
def add_lib_to_dict(env, dict = None, libtype = None, libname = None, priority = 100):
if not dict or not libtype or not libname:
print "Passed wrong arg"
env.Exit()
if not dict or not libtype or not libname:
print "Passed wrong arg"
env.Exit()
if type(libtype) is str and type(priority) is int:
internal_lib_to_dict(dict, libtype, libname, priority)
elif type(libtype) is list and type(priority) is list:
if len(libtype)==len(priority):
for lt, p in zip(libtype, priority):
internal_lib_to_dict(dict, lt, libname, p)
else:
print "libtype and priority lists are unequal in length"
env.Exit()
else:
print "Wrong type combinations for libtype and priority. Only str and int or list and list"
env.Exit()
if type(libtype) is str and type(priority) is int:
internal_lib_to_dict(dict, libtype, libname, priority)
elif type(libtype) is list and type(priority) is list:
if len(libtype)==len(priority):
for lt, p in zip(libtype, priority):
internal_lib_to_dict(dict, lt, libname, p)
else:
print "libtype and priority lists are unequal in length"
env.Exit()
else:
print "Wrong type combinations for libtype and priority. Only str and int or list and list"
env.Exit()
def create_blender_liblist(lenv = None, libtype = None):
if not lenv or not libtype:
print "missing arg"
if not lenv or not libtype:
print "missing arg"
lst = []
if libtype in possible_types:
curlib = libs[libtype]
sortlist = curlib.keys()
sortlist.sort()
for sk in sortlist:
v = curlib[sk]
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
target = os.path.abspath(os.getcwd() + os.sep + root_build_dir + 'lib' + os.sep +lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX'])
else:
target = os.path.abspath(root_build_dir + 'lib' + os.sep +lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX'])
lst.append(target)
lst = []
if libtype in possible_types:
curlib = libs[libtype]
sortlist = curlib.keys()
sortlist.sort()
for sk in sortlist:
v = curlib[sk]
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
target = os.path.abspath(os.getcwd() + os.sep + root_build_dir + 'lib' + os.sep +lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX'])
else:
target = os.path.abspath(root_build_dir + 'lib' + os.sep +lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX'])
lst.append(target)
return lst
return lst
## TODO: static linking
def setup_staticlibs(lenv):
statlibs = [
#here libs for static linking
]
statlibs = [
#here libs for static linking
]
libincs = []
libincs = []
if lenv['WITH_BF_FFMPEG']:
libincs += Split(lenv['BF_FFMPEG_LIBPATH'])
if lenv['WITH_BF_FFMPEG']:
libincs += Split(lenv['BF_FFMPEG_LIBPATH'])
libincs.extend([
lenv['BF_OPENGL_LIBPATH'],
lenv['BF_JPEG_LIBPATH'],
lenv['BF_PNG_LIBPATH'],
lenv['BF_ZLIB_LIBPATH'],
lenv['BF_LIBSAMPLERATE_LIBPATH'],
lenv['BF_ICONV_LIBPATH']
])
libincs.extend([
lenv['BF_OPENGL_LIBPATH'],
lenv['BF_JPEG_LIBPATH'],
lenv['BF_PNG_LIBPATH'],
lenv['BF_ZLIB_LIBPATH'],
lenv['BF_LIBSAMPLERATE_LIBPATH'],
lenv['BF_ICONV_LIBPATH']
])
libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
if lenv['WITH_BF_PYTHON']:
libincs += Split(lenv['BF_PYTHON_LIBPATH'])
if lenv['WITH_BF_SDL']:
libincs += Split(lenv['BF_SDL_LIBPATH'])
if lenv['WITH_BF_JACK']:
libincs += Split(lenv['BF_JACK_LIBPATH'])
if lenv['WITH_BF_SNDFILE']:
libincs += Split(lenv['BF_SNDFILE_LIBPATH'])
if lenv['WITH_BF_OPENEXR']:
libincs += Split(lenv['BF_OPENEXR_LIBPATH'])
if lenv['WITH_BF_STATICOPENEXR']:
statlibs += Split(lenv['BF_OPENEXR_LIB_STATIC'])
if lenv['WITH_BF_LCMS']:
libincs += Split(lenv['BF_LCMS_LIBPATH'])
if lenv['WITH_BF_TIFF']:
libincs += Split(lenv['BF_TIFF_LIBPATH'])
if lenv['WITH_BF_FFTW3']:
libincs += Split(lenv['BF_FFTW3_LIBPATH'])
libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
if lenv['WITH_BF_PYTHON']:
libincs += Split(lenv['BF_PYTHON_LIBPATH'])
if lenv['WITH_BF_SDL']:
libincs += Split(lenv['BF_SDL_LIBPATH'])
if lenv['WITH_BF_JACK']:
libincs += Split(lenv['BF_JACK_LIBPATH'])
if lenv['WITH_BF_SNDFILE']:
libincs += Split(lenv['BF_SNDFILE_LIBPATH'])
if lenv['WITH_BF_OPENEXR']:
libincs += Split(lenv['BF_OPENEXR_LIBPATH'])
if lenv['WITH_BF_STATICOPENEXR']:
statlibs += Split(lenv['BF_OPENEXR_LIB_STATIC'])
if lenv['WITH_BF_LCMS']:
libincs += Split(lenv['BF_LCMS_LIBPATH'])
if lenv['WITH_BF_TIFF']:
libincs += Split(lenv['BF_TIFF_LIBPATH'])
if lenv['WITH_BF_FFTW3']:
libincs += Split(lenv['BF_FFTW3_LIBPATH'])
if lenv['WITH_BF_FFMPEG'] and lenv['WITH_BF_STATICFFMPEG']:
statlibs += Split(lenv['BF_FFMPEG_LIB_STATIC'])
if lenv['WITH_BF_INTERNATIONAL']:
libincs += Split(lenv['BF_GETTEXT_LIBPATH'])
if lenv['WITH_BF_INTERNATIONAL']:
libincs += Split(lenv['BF_GETTEXT_LIBPATH'])
if lenv['WITH_BF_GETTEXT_STATIC']:
statlibs += Split(lenv['BF_GETTEXT_LIB_STATIC'])
if lenv['WITH_BF_FREETYPE_STATIC']:
statlibs += Split(lenv['BF_FREETYPE_LIB_STATIC'])
if lenv['WITH_BF_OPENAL']:
libincs += Split(lenv['BF_OPENAL_LIBPATH'])
if lenv['WITH_BF_STATICOPENAL']:
statlibs += Split(lenv['BF_OPENAL_LIB_STATIC'])
if lenv['WITH_BF_STATICOPENGL']:
statlibs += Split(lenv['BF_OPENGL_LIB_STATIC'])
if lenv['WITH_BF_STATICCXX']:
statlibs += Split(lenv['BF_CXX_LIB_STATIC'])
if lenv['WITH_BF_OPENAL']:
libincs += Split(lenv['BF_OPENAL_LIBPATH'])
if lenv['WITH_BF_STATICOPENAL']:
statlibs += Split(lenv['BF_OPENAL_LIB_STATIC'])
if lenv['WITH_BF_STATICOPENGL']:
statlibs += Split(lenv['BF_OPENGL_LIB_STATIC'])
if lenv['WITH_BF_STATICCXX']:
statlibs += Split(lenv['BF_CXX_LIB_STATIC'])
if lenv['WITH_BF_PYTHON'] and lenv['WITH_BF_STATICPYTHON']:
statlibs += Split(lenv['BF_PYTHON_LIB_STATIC'])
if lenv['WITH_BF_PYTHON'] and lenv['WITH_BF_STATICPYTHON']:
statlibs += Split(lenv['BF_PYTHON_LIB_STATIC'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
libincs += Split(lenv['BF_PTHREADS_LIBPATH'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
libincs += Split(lenv['BF_PTHREADS_LIBPATH'])
if lenv['WITH_BF_COLLADA']:
libincs += Split(lenv['BF_OPENCOLLADA_LIBPATH'])
if lenv['OURPLATFORM'] not in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
libincs += Split(lenv['BF_PCRE_LIBPATH'])
libincs += Split(lenv['BF_EXPAT_LIBPATH'])
if lenv['WITH_BF_COLLADA']:
libincs += Split(lenv['BF_OPENCOLLADA_LIBPATH'])
if lenv['OURPLATFORM'] not in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
libincs += Split(lenv['BF_PCRE_LIBPATH'])
libincs += Split(lenv['BF_EXPAT_LIBPATH'])
if lenv['WITH_BF_OPENMP']:
if lenv['OURPLATFORM'] == 'linuxcross':
libincs += Split(lenv['BF_OPENMP_LIBPATH'])
if lenv['WITH_BF_OPENMP']:
if lenv['OURPLATFORM'] == 'linuxcross':
libincs += Split(lenv['BF_OPENMP_LIBPATH'])
# setting this last so any overriding of manually libs could be handled
if lenv['OURPLATFORM'] not in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross'):
libincs.append('/usr/lib')
# setting this last so any overriding of manually libs could be handled
if lenv['OURPLATFORM'] not in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross'):
libincs.append('/usr/lib')
return statlibs, libincs
return statlibs, libincs
def setup_syslibs(lenv):
syslibs = [
lenv['BF_JPEG_LIB'],
lenv['BF_PNG_LIB'],
lenv['BF_ZLIB_LIB'],
lenv['BF_LIBSAMPLERATE_LIB']
]
syslibs = [
lenv['BF_JPEG_LIB'],
lenv['BF_PNG_LIB'],
lenv['BF_ZLIB_LIB'],
lenv['BF_LIBSAMPLERATE_LIB']
]
if not lenv['WITH_BF_FREETYPE_STATIC']:
syslibs += Split(lenv['BF_FREETYPE_LIB'])
if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']:
if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
else:
syslibs.append(lenv['BF_PYTHON_LIB'])
syslibs += Split(lenv['BF_FREETYPE_LIB'])
if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']:
if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
else:
syslibs.append(lenv['BF_PYTHON_LIB'])
if lenv['WITH_BF_INTERNATIONAL'] and not lenv['WITH_BF_GETTEXT_STATIC']:
syslibs += Split(lenv['BF_GETTEXT_LIB'])
if lenv['WITH_BF_OPENAL']:
if not lenv['WITH_BF_STATICOPENAL']:
syslibs += Split(lenv['BF_OPENAL_LIB'])
if lenv['WITH_BF_OPENMP'] and lenv['CC'] != 'icc':
if lenv['CC'] == 'cl.exe':
syslibs += ['vcomp']
else:
syslibs += ['gomp']
if lenv['WITH_BF_ICONV']:
syslibs += Split(lenv['BF_ICONV_LIB'])
if lenv['WITH_BF_OPENEXR']:
if not lenv['WITH_BF_STATICOPENEXR']:
syslibs += Split(lenv['BF_OPENEXR_LIB'])
if lenv['WITH_BF_TIFF']:
syslibs += Split(lenv['BF_TIFF_LIB'])
syslibs += Split(lenv['BF_GETTEXT_LIB'])
if lenv['WITH_BF_OPENAL']:
if not lenv['WITH_BF_STATICOPENAL']:
syslibs += Split(lenv['BF_OPENAL_LIB'])
if lenv['WITH_BF_OPENMP'] and lenv['CC'] != 'icc':
if lenv['CC'] == 'cl.exe':
syslibs += ['vcomp']
else:
syslibs += ['gomp']
if lenv['WITH_BF_ICONV']:
syslibs += Split(lenv['BF_ICONV_LIB'])
if lenv['WITH_BF_OPENEXR']:
if not lenv['WITH_BF_STATICOPENEXR']:
syslibs += Split(lenv['BF_OPENEXR_LIB'])
if lenv['WITH_BF_TIFF']:
syslibs += Split(lenv['BF_TIFF_LIB'])
if lenv['WITH_BF_FFMPEG'] and not lenv['WITH_BF_STATICFFMPEG']:
syslibs += Split(lenv['BF_FFMPEG_LIB'])
if lenv['WITH_BF_OGG']:
syslibs += Split(lenv['BF_OGG_LIB'])
if lenv['WITH_BF_JACK']:
syslibs += Split(lenv['BF_JACK_LIB'])
if lenv['WITH_BF_SNDFILE']:
syslibs += Split(lenv['BF_SNDFILE_LIB'])
if lenv['WITH_BF_FFTW3']:
syslibs += Split(lenv['BF_FFTW3_LIB'])
if lenv['WITH_BF_SDL']:
syslibs += Split(lenv['BF_SDL_LIB'])
if not lenv['WITH_BF_STATICOPENGL']:
syslibs += Split(lenv['BF_OPENGL_LIB'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross', 'win64-vc'):
syslibs += Split(lenv['BF_PTHREADS_LIB'])
if lenv['WITH_BF_LCMS']:
syslibs.append(lenv['BF_LCMS_LIB'])
if lenv['WITH_BF_COLLADA']:
syslibs.append(lenv['BF_PCRE_LIB'])
syslibs += Split(lenv['BF_OPENCOLLADA_LIB'])
syslibs.append(lenv['BF_EXPAT_LIB'])
syslibs += Split(lenv['BF_FFMPEG_LIB'])
if lenv['WITH_BF_OGG']:
syslibs += Split(lenv['BF_OGG_LIB'])
if lenv['WITH_BF_JACK']:
syslibs += Split(lenv['BF_JACK_LIB'])
if lenv['WITH_BF_SNDFILE']:
syslibs += Split(lenv['BF_SNDFILE_LIB'])
if lenv['WITH_BF_FFTW3']:
syslibs += Split(lenv['BF_FFTW3_LIB'])
if lenv['WITH_BF_SDL']:
syslibs += Split(lenv['BF_SDL_LIB'])
if not lenv['WITH_BF_STATICOPENGL']:
syslibs += Split(lenv['BF_OPENGL_LIB'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross', 'win64-vc'):
syslibs += Split(lenv['BF_PTHREADS_LIB'])
if lenv['WITH_BF_LCMS']:
syslibs.append(lenv['BF_LCMS_LIB'])
if lenv['WITH_BF_COLLADA']:
syslibs.append(lenv['BF_PCRE_LIB'])
syslibs += Split(lenv['BF_OPENCOLLADA_LIB'])
syslibs.append(lenv['BF_EXPAT_LIB'])
syslibs += lenv['LLIBS']
syslibs += lenv['LLIBS']
return syslibs
return syslibs
def propose_priorities():
print bc.OKBLUE+"Priorities:"+bc.ENDC
for t in possible_types:
print bc.OKGREEN+"\t"+t+bc.ENDC
new_priority = 0
curlib = libs[t]
sortlist = curlib.keys()
sortlist.sort()
print bc.OKBLUE+"Priorities:"+bc.ENDC
for t in possible_types:
print bc.OKGREEN+"\t"+t+bc.ENDC
new_priority = 0
curlib = libs[t]
sortlist = curlib.keys()
sortlist.sort()
for sk in sortlist:
v = curlib[sk]
#for p,v in sorted(libs[t].iteritems()):
print "\t\t",new_priority, v
new_priority += 5
for sk in sortlist:
v = curlib[sk]
#for p,v in sorted(libs[t].iteritems()):
print "\t\t",new_priority, v
new_priority += 5
## TODO: see if this can be made in an emitter
def buildinfo(lenv, build_type):
"""
Generate a buildinfo object
"""
build_date = time.strftime ("%Y-%m-%d")
build_time = time.strftime ("%H:%M:%S")
build_rev = os.popen('svnversion').read()[:-1] # remove \n
"""
Generate a buildinfo object
"""
build_date = time.strftime ("%Y-%m-%d")
build_time = time.strftime ("%H:%M:%S")
build_rev = os.popen('svnversion').read()[:-1] # remove \n
if build_rev == '':
build_rev = '<UNKNOWN>'
if lenv['BF_DEBUG']:
@@ -284,523 +284,523 @@ def buildinfo(lenv, build_type):
else:
build_type = "Release"
obj = []
if lenv['BF_BUILDINFO']:
obj = []
if lenv['BF_BUILDINFO']:
lenv.Append (CPPDEFINES = ['BUILD_TIME="%s"'%(build_time),
'BUILD_DATE="%s"'%(build_date),
'BUILD_TYPE="%s"'%(build_type),
'BUILD_REV="%s"'%(build_rev),
'NAN_BUILDINFO',
'BUILD_PLATFORM="%s:%s"'%(platform.system(), platform.architecture()[0])])
obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type,
[root_build_dir+'source/creator/buildinfo.c'])]
return obj
'NAN_BUILDINFO',
'BUILD_PLATFORM="%s:%s"'%(platform.system(), platform.architecture()[0])])
obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type,
[root_build_dir+'source/creator/buildinfo.c'])]
return obj
##### END LIB STUFF ############
##### ACTION STUFF #############
def my_print_cmd_line(self, s, target, source, env):
sys.stdout.write(' ' * 70 + '\r')
sys.stdout.flush()
sys.stdout.write(s + "\r")
sys.stdout.flush()
sys.stdout.write(' ' * 70 + '\r')
sys.stdout.flush()
sys.stdout.write(s + "\r")
sys.stdout.flush()
def my_compile_print(target, source, env):
a = '%s' % (source[0])
d, f = os.path.split(a)
return bc.OKBLUE+"Compiling"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
a = '%s' % (source[0])
d, f = os.path.split(a)
return bc.OKBLUE+"Compiling"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
def my_moc_print(target, source, env):
a = '%s' % (source[0])
d, f = os.path.split(a)
return bc.OKBLUE+"Creating MOC"+bc.ENDC+ " ==> '"+bc.OKGREEN+"%s" %(f) + "'"+bc.ENDC
a = '%s' % (source[0])
d, f = os.path.split(a)
return bc.OKBLUE+"Creating MOC"+bc.ENDC+ " ==> '"+bc.OKGREEN+"%s" %(f) + "'"+bc.ENDC
def my_linking_print(target, source, env):
t = '%s' % (target[0])
d, f = os.path.split(t)
return bc.OKBLUE+"Linking library"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
t = '%s' % (target[0])
d, f = os.path.split(t)
return bc.OKBLUE+"Linking library"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
def my_program_print(target, source, env):
t = '%s' % (target[0])
d, f = os.path.split(t)
return bc.OKBLUE+"Linking program"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
t = '%s' % (target[0])
d, f = os.path.split(t)
return bc.OKBLUE+"Linking program"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
def msvc_hack(env):
static_lib = SCons.Tool.createStaticLibBuilder(env)
program = SCons.Tool.createProgBuilder(env)
env['BUILDERS']['Library'] = static_lib
env['BUILDERS']['StaticLibrary'] = static_lib
env['BUILDERS']['Program'] = program
static_lib = SCons.Tool.createStaticLibBuilder(env)
program = SCons.Tool.createProgBuilder(env)
env['BUILDERS']['Library'] = static_lib
env['BUILDERS']['StaticLibrary'] = static_lib
env['BUILDERS']['Program'] = program
def set_quiet_output(env):
mycaction = Action("$CCCOM", strfunction=my_compile_print)
myshcaction = Action("$SHCCCOM", strfunction=my_compile_print)
mycppaction = Action("$CXXCOM", strfunction=my_compile_print)
myshcppaction = Action("$SHCXXCOM", strfunction=my_compile_print)
mylibaction = Action("$ARCOM", strfunction=my_linking_print)
mylinkaction = Action("$LINKCOM", strfunction=my_program_print)
mycaction = Action("$CCCOM", strfunction=my_compile_print)
myshcaction = Action("$SHCCCOM", strfunction=my_compile_print)
mycppaction = Action("$CXXCOM", strfunction=my_compile_print)
myshcppaction = Action("$SHCXXCOM", strfunction=my_compile_print)
mylibaction = Action("$ARCOM", strfunction=my_linking_print)
mylinkaction = Action("$LINKCOM", strfunction=my_program_print)
static_ob, shared_ob = SCons.Tool.createObjBuilders(env)
static_ob.add_action('.c', mycaction)
static_ob.add_action('.cpp', mycppaction)
shared_ob.add_action('.c', myshcaction)
shared_ob.add_action('.cpp', myshcppaction)
static_ob, shared_ob = SCons.Tool.createObjBuilders(env)
static_ob.add_action('.c', mycaction)
static_ob.add_action('.cpp', mycppaction)
shared_ob.add_action('.c', myshcaction)
shared_ob.add_action('.cpp', myshcppaction)
static_lib = SCons.Builder.Builder(action = mylibaction,
emitter = '$LIBEMITTER',
prefix = '$LIBPREFIX',
suffix = '$LIBSUFFIX',
src_suffix = '$OBJSUFFIX',
src_builder = 'StaticObject')
static_lib = SCons.Builder.Builder(action = mylibaction,
emitter = '$LIBEMITTER',
prefix = '$LIBPREFIX',
suffix = '$LIBSUFFIX',
src_suffix = '$OBJSUFFIX',
src_builder = 'StaticObject')
program = SCons.Builder.Builder(action = mylinkaction,
emitter = '$PROGEMITTER',
prefix = '$PROGPREFIX',
suffix = '$PROGSUFFIX',
src_suffix = '$OBJSUFFIX',
src_builder = 'Object',
target_scanner = SCons.Defaults.ProgScan)
program = SCons.Builder.Builder(action = mylinkaction,
emitter = '$PROGEMITTER',
prefix = '$PROGPREFIX',
suffix = '$PROGSUFFIX',
src_suffix = '$OBJSUFFIX',
src_builder = 'Object',
target_scanner = SCons.Defaults.ProgScan)
env['BUILDERS']['Object'] = static_ob
env['BUILDERS']['StaticObject'] = static_ob
env['BUILDERS']['StaticLibrary'] = static_lib
env['BUILDERS']['Library'] = static_lib
env['BUILDERS']['Program'] = program
if env['BF_LINE_OVERWRITE']:
SCons.Action._ActionAction.print_cmd_line = my_print_cmd_line
env['BUILDERS']['Object'] = static_ob
env['BUILDERS']['StaticObject'] = static_ob
env['BUILDERS']['StaticLibrary'] = static_lib
env['BUILDERS']['Library'] = static_lib
env['BUILDERS']['Program'] = program
if env['BF_LINE_OVERWRITE']:
SCons.Action._ActionAction.print_cmd_line = my_print_cmd_line
class CompZipFile(zipfile.ZipFile):
"""Partial copy of python2.6's zipfile.ZipFile (see http://www.python.org)
to get a extractall() that works on py2.5 and probably earlier distributions."""
def __init__(self, file, mode="r", compression=zipfile.ZIP_STORED, allowZip64=False):
if sys.version_info < (2, 6):
zipfile.ZipFile.__init__(self, file, mode, compression)
else:
zipfile.ZipFile.__init__(self, file, mode, compression, allowZip64)
"""Partial copy of python2.6's zipfile.ZipFile (see http://www.python.org)
to get a extractall() that works on py2.5 and probably earlier distributions."""
def __init__(self, file, mode="r", compression=zipfile.ZIP_STORED, allowZip64=False):
if sys.version_info < (2, 6):
zipfile.ZipFile.__init__(self, file, mode, compression)
else:
zipfile.ZipFile.__init__(self, file, mode, compression, allowZip64)
if not hasattr(self,"extractall"): # use our method
print "Debug: Using comp_extractall!"
self.extractall= self.comp_extractall
if not hasattr(self,"extractall"): # use our method
print "Debug: Using comp_extractall!"
self.extractall= self.comp_extractall
def comp_extractall(self, path=None, members=None, pwd=None): #renamed method
"""Extract all members from the archive to the current working
directory. `path' specifies a different directory to extract to.
`members' is optional and must be a subset of the list returned
by namelist().
"""
if members is None:
members = self.namelist()
def comp_extractall(self, path=None, members=None, pwd=None): #renamed method
"""Extract all members from the archive to the current working
directory. `path' specifies a different directory to extract to.
`members' is optional and must be a subset of the list returned
by namelist().
"""
if members is None:
members = self.namelist()
for zipinfo in members:
self.comp_extract(zipinfo, path, pwd) # use our method
for zipinfo in members:
self.comp_extract(zipinfo, path, pwd) # use our method
def comp_extract(self, member, path=None, pwd=None): #renamed method
"""Extract a member from the archive to the current working directory,
using its full name. Its file information is extracted as accurately
as possible. `member' may be a filename or a ZipInfo object. You can
specify a different directory using `path'.
"""
if not isinstance(member, zipfile.ZipInfo):
member = self.getinfo(member)
def comp_extract(self, member, path=None, pwd=None): #renamed method
"""Extract a member from the archive to the current working directory,
using its full name. Its file information is extracted as accurately
as possible. `member' may be a filename or a ZipInfo object. You can
specify a different directory using `path'.
"""
if not isinstance(member, zipfile.ZipInfo):
member = self.getinfo(member)
if path is None:
path = os.getcwd()
if path is None:
path = os.getcwd()
return self.comp_extract_member(member, path, pwd) # use our method
return self.comp_extract_member(member, path, pwd) # use our method
def comp_extract_member(self, member, targetpath, pwd): #renamed method
"""Extract the ZipInfo object 'member' to a physical
file on the path targetpath.
"""
# build the destination pathname, replacing
# forward slashes to platform specific separators.
if targetpath[-1:] in (os.path.sep, os.path.altsep):
targetpath = targetpath[:-1]
def comp_extract_member(self, member, targetpath, pwd): #renamed method
"""Extract the ZipInfo object 'member' to a physical
file on the path targetpath.
"""
# build the destination pathname, replacing
# forward slashes to platform specific separators.
if targetpath[-1:] in (os.path.sep, os.path.altsep):
targetpath = targetpath[:-1]
# don't include leading "/" from file name if present
if member.filename[0] == '/':
targetpath = os.path.join(targetpath, member.filename[1:])
else:
targetpath = os.path.join(targetpath, member.filename)
# don't include leading "/" from file name if present
if member.filename[0] == '/':
targetpath = os.path.join(targetpath, member.filename[1:])
else:
targetpath = os.path.join(targetpath, member.filename)
targetpath = os.path.normpath(targetpath)
targetpath = os.path.normpath(targetpath)
# Create all upper directories if necessary.
upperdirs = os.path.dirname(targetpath)
if upperdirs and not os.path.exists(upperdirs):
os.makedirs(upperdirs)
# Create all upper directories if necessary.
upperdirs = os.path.dirname(targetpath)
if upperdirs and not os.path.exists(upperdirs):
os.makedirs(upperdirs)
if member.filename[-1] == '/':
os.mkdir(targetpath)
return targetpath
if member.filename[-1] == '/':
os.mkdir(targetpath)
return targetpath
#use StrinIO instead so we don't have to reproduce more functionality.
source = cStringIO.StringIO(self.read(member.filename))
target = file(targetpath, "wb")
shutil.copyfileobj(source, target)
source.close()
target.close()
#use StrinIO instead so we don't have to reproduce more functionality.
source = cStringIO.StringIO(self.read(member.filename))
target = file(targetpath, "wb")
shutil.copyfileobj(source, target)
source.close()
target.close()
return targetpath
return targetpath
def unzip_pybundle(from_zip,to_dir,exclude_re):
zip= CompZipFile(from_zip, mode='r')
exclude_re= list(exclude_re) #single re object or list of re objects
debug= 0 #list files instead of unpacking
good= []
if debug: print '\nFiles not being unpacked:\n'
for name in zip.namelist():
is_bad= 0
for r in exclude_re:
if r.match(name):
is_bad=1
if debug: print name
break
if not is_bad:
good.append(name)
if debug:
print '\nFiles being unpacked:\n'
for g in good:
print g
else:
zip.extractall(to_dir, good)
zip= CompZipFile(from_zip, mode='r')
exclude_re= list(exclude_re) #single re object or list of re objects
debug= 0 #list files instead of unpacking
good= []
if debug: print '\nFiles not being unpacked:\n'
for name in zip.namelist():
is_bad= 0
for r in exclude_re:
if r.match(name):
is_bad=1
if debug: print name
break
if not is_bad:
good.append(name)
if debug:
print '\nFiles being unpacked:\n'
for g in good:
print g
else:
zip.extractall(to_dir, good)
def my_winpybundle_print(target, source, env):
pass
pass
def WinPyBundle(target=None, source=None, env=None):
import re
py_zip= env.subst( env['LCGDIR'] )
if py_zip[0]=='#':
py_zip= py_zip[1:]
import re
py_zip= env.subst( env['LCGDIR'] )
if py_zip[0]=='#':
py_zip= py_zip[1:]
if env['BF_DEBUG']:
py_zip+= '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '_d.zip'
else:
py_zip+= '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '.zip'
py_zip+= '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '.zip'
py_target = env.subst( env['BF_INSTALLDIR'] )
if py_target[0]=='#':
py_target=py_target[1:]
py_target = os.path.join(py_target, VERSION, 'python', 'lib')
def printexception(func,path,ex):
if os.path.exists(path): #do not report if path does not exist. eg on a fresh build.
print str(func) + ' failed on ' + str(path)
print "Trying to remove existing py bundle."
shutil.rmtree(py_target, False, printexception)
exclude_re=[re.compile('.*/test/.*'),
re.compile('^config/.*'),
re.compile('^distutils/.*'),
re.compile('^idlelib/.*'),
re.compile('^lib2to3/.*'),
re.compile('^tkinter/.*')]
print "Unpacking '" + py_zip + "' to '" + py_target + "'"
unzip_pybundle(py_zip,py_target,exclude_re)
py_target = env.subst( env['BF_INSTALLDIR'] )
if py_target[0]=='#':
py_target=py_target[1:]
py_target = os.path.join(py_target, VERSION, 'python', 'lib')
def printexception(func,path,ex):
if os.path.exists(path): #do not report if path does not exist. eg on a fresh build.
print str(func) + ' failed on ' + str(path)
print "Trying to remove existing py bundle."
shutil.rmtree(py_target, False, printexception)
exclude_re=[re.compile('.*/test/.*'),
re.compile('^config/.*'),
re.compile('^distutils/.*'),
re.compile('^idlelib/.*'),
re.compile('^lib2to3/.*'),
re.compile('^tkinter/.*')]
print "Unpacking '" + py_zip + "' to '" + py_target + "'"
unzip_pybundle(py_zip,py_target,exclude_re)
def my_appit_print(target, source, env):
a = '%s' % (target[0])
d, f = os.path.split(a)
return "making bundle for " + f
a = '%s' % (target[0])
d, f = os.path.split(a)
return "making bundle for " + f
def AppIt(target=None, source=None, env=None):
import shutil
import commands
import os.path
a = '%s' % (target[0])
builddir, b = os.path.split(a)
libdir = env['LCGDIR'][1:]
osxarch = env['MACOSX_ARCHITECTURE']
installdir = env['BF_INSTALLDIR']
print("compiled architecture: %s"%(osxarch))
print("Installing to %s"%(installdir))
python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
print("unzipping to app-bundle: %s"%(python_zip))
bldroot = env.Dir('.').abspath
binary = env['BINARYKIND']
if b=='verse':
print bc.OKBLUE+"no bundle for verse"+bc.ENDC
return 0
sourcedir = bldroot + '/source/darwin/%s.app'%binary
sourceinfo = bldroot + "/source/darwin/%s.app/Contents/Info.plist"%binary
targetinfo = installdir +'/' + "%s.app/Contents/Info.plist"%binary
cmd = installdir + '/' +'%s.app'%binary
if os.path.isdir(cmd):
shutil.rmtree(cmd)
shutil.copytree(sourcedir, cmd)
cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
commands.getoutput(cmd)
cmd = 'cp %s/%s %s/%s.app/Contents/MacOS/%s'%(builddir, binary,installdir, binary, binary)
commands.getoutput(cmd)
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/'%(installdir, binary, VERSION)
# print cmd
commands.getoutput(cmd)
cmd = installdir + '/%s.app/Contents/MacOS/%s'%(binary,VERSION)
shutil.copy(bldroot + '/release/bin/.blender/.bfont.ttf', cmd)
shutil.copy(bldroot + '/release/bin/.blender/.Blanguages', cmd)
cmd = 'cp -R %s/release/bin/%s/locale %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/bin/%s/locale %s/%s.app/Contents/MacOS/%s/'%(bldroot,VERSION,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp %s/release/bin/%s/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
commands.getoutput(cmd)
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/python/'%(installdir,binary, VERSION)
commands.getoutput(cmd)
cmd = 'unzip -q %s/release/%s -d %s/%s.app/Contents/MacOS/%s/python/'%(libdir,python_zip,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/ui %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/io %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(installdir,binary, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(installdir, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name .DS_Store -exec rm -rf {} \;'%(installdir, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name __MACOSX -exec rm -rf {} \;'%(installdir, binary)
commands.getoutput(cmd)
import shutil
import commands
import os.path
a = '%s' % (target[0])
builddir, b = os.path.split(a)
libdir = env['LCGDIR'][1:]
osxarch = env['MACOSX_ARCHITECTURE']
installdir = env['BF_INSTALLDIR']
print("compiled architecture: %s"%(osxarch))
print("Installing to %s"%(installdir))
python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
print("unzipping to app-bundle: %s"%(python_zip))
bldroot = env.Dir('.').abspath
binary = env['BINARYKIND']
if b=='verse':
print bc.OKBLUE+"no bundle for verse"+bc.ENDC
return 0
sourcedir = bldroot + '/source/darwin/%s.app'%binary
sourceinfo = bldroot + "/source/darwin/%s.app/Contents/Info.plist"%binary
targetinfo = installdir +'/' + "%s.app/Contents/Info.plist"%binary
cmd = installdir + '/' +'%s.app'%binary
if os.path.isdir(cmd):
shutil.rmtree(cmd)
shutil.copytree(sourcedir, cmd)
cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
commands.getoutput(cmd)
cmd = 'cp %s/%s %s/%s.app/Contents/MacOS/%s'%(builddir, binary,installdir, binary, binary)
commands.getoutput(cmd)
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/'%(installdir, binary, VERSION)
# print cmd
commands.getoutput(cmd)
cmd = installdir + '/%s.app/Contents/MacOS/%s'%(binary,VERSION)
shutil.copy(bldroot + '/release/bin/.blender/.bfont.ttf', cmd)
shutil.copy(bldroot + '/release/bin/.blender/.Blanguages', cmd)
cmd = 'cp -R %s/release/bin/%s/locale %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/bin/%s/locale %s/%s.app/Contents/MacOS/%s/'%(bldroot,VERSION,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp %s/release/bin/%s/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
commands.getoutput(cmd)
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/python/'%(installdir,binary, VERSION)
commands.getoutput(cmd)
cmd = 'unzip -q %s/release/%s -d %s/%s.app/Contents/MacOS/%s/python/'%(libdir,python_zip,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/ui %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'cp -R %s/release/io %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
commands.getoutput(cmd)
cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(installdir,binary, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(installdir, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name .DS_Store -exec rm -rf {} \;'%(installdir, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name __MACOSX -exec rm -rf {} \;'%(installdir, binary)
commands.getoutput(cmd)
# extract copy system python, be sure to update other build systems
# when making changes to the files that are copied.
def my_unixpybundle_print(target, source, env):
pass
pass
def UnixPyBundle(target=None, source=None, env=None):
# Any Unix except osx
#-- VERSION/python/lib/python3.1
import commands
def run(cmd):
print 'Install command:', cmd
commands.getoutput(cmd)
# Any Unix except osx
#-- VERSION/python/lib/python3.1
import commands
def run(cmd):
print 'Install command:', cmd
commands.getoutput(cmd)
dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
py_src = env.subst( env['BF_PYTHON_LIBPATH'] + '/python'+env['BF_PYTHON_VERSION'] )
py_target = env.subst( dir + '/python/lib/python'+env['BF_PYTHON_VERSION'] )
# This is a bit weak, but dont install if its been installed before, makes rebuilds quite slow.
if os.path.exists(py_target):
print 'Using existing python from:'
print '\t"%s"' % py_target
print '\t(skipping copy)\n'
return
# Copied from source/creator/CMakeLists.txt, keep in sync.
print 'Install python from:'
print '\t"%s" into...' % py_src
print '\t"%s"\n' % py_target
run('rm -rf "%s"' % py_target)
try: os.makedirs(os.path.dirname(py_target)) # the final part is copied
except:pass
run('cp -R "%s" "%s"' % (py_src, os.path.dirname(py_target)))
run('rm -rf "%s/distutils"' % py_target)
run('rm -rf "%s/lib2to3"' % py_target)
run('rm -rf "%s/idlelib"' % py_target)
run('rm -rf "%s/tkinter"' % py_target)
run('rm -rf "%s/config"' % py_target)
py_src = env.subst( env['BF_PYTHON_LIBPATH'] + '/python'+env['BF_PYTHON_VERSION'] )
py_target = env.subst( dir + '/python/lib/python'+env['BF_PYTHON_VERSION'] )
# This is a bit weak, but dont install if its been installed before, makes rebuilds quite slow.
if os.path.exists(py_target):
print 'Using existing python from:'
print '\t"%s"' % py_target
print '\t(skipping copy)\n'
return
# Copied from source/creator/CMakeLists.txt, keep in sync.
print 'Install python from:'
print '\t"%s" into...' % py_src
print '\t"%s"\n' % py_target
run('rm -rf "%s"' % py_target)
try: os.makedirs(os.path.dirname(py_target)) # the final part is copied
except:pass
run('cp -R "%s" "%s"' % (py_src, os.path.dirname(py_target)))
run('rm -rf "%s/distutils"' % py_target)
run('rm -rf "%s/lib2to3"' % py_target)
run('rm -rf "%s/idlelib"' % py_target)
run('rm -rf "%s/tkinter"' % py_target)
run('rm -rf "%s/config"' % py_target)
run('rm -rf "%s/site-packages"' % py_target)
run('mkdir "%s/site-packages"' % py_target) # python needs it.'
run('rm -rf "%s/site-packages"' % py_target)
run('mkdir "%s/site-packages"' % py_target) # python needs it.'
run('rm -f "%s/lib-dynload/_tkinter.so"' % py_target)
run('find "%s" -name "test" -prune -exec rm -rf {} \;' % py_target)
run('find "%s" -name "*.py?" -exec rm -rf {} \;' % py_target)
run('find "%s" -name "*.so"-exec strip -s {} \;' % py_target)
run('rm -f "%s/lib-dynload/_tkinter.so"' % py_target)
run('find "%s" -name "test" -prune -exec rm -rf {} \;' % py_target)
run('find "%s" -name "*.py?" -exec rm -rf {} \;' % py_target)
run('find "%s" -name "*.so"-exec strip -s {} \;' % py_target)
#### END ACTION STUFF #########
def bsc(env, target, source):
bd = os.path.dirname(target[0].abspath)
bscfile = '\"'+target[0].abspath+'\"'
bscpathcollect = '\"'+bd + os.sep + '*.sbr\"'
bscpathtmp = '\"'+bd + os.sep + 'bscmake.tmp\"'
bd = os.path.dirname(target[0].abspath)
bscfile = '\"'+target[0].abspath+'\"'
bscpathcollect = '\"'+bd + os.sep + '*.sbr\"'
bscpathtmp = '\"'+bd + os.sep + 'bscmake.tmp\"'
os.system('dir /b/s '+bscpathcollect+' >'+bscpathtmp)
os.system('dir /b/s '+bscpathcollect+' >'+bscpathtmp)
myfile = open(bscpathtmp[1:-1], 'r')
lines = myfile.readlines()
myfile.close()
myfile = open(bscpathtmp[1:-1], 'r')
lines = myfile.readlines()
myfile.close()
newfile = open(bscpathtmp[1:-1], 'w')
for l in lines:
newfile.write('\"'+l[:-1]+'\"\n')
newfile.close()
os.system('bscmake /nologo /n /o'+bscfile+' @'+bscpathtmp)
os.system('del '+bscpathtmp)
newfile = open(bscpathtmp[1:-1], 'w')
for l in lines:
newfile.write('\"'+l[:-1]+'\"\n')
newfile.close()
os.system('bscmake /nologo /n /o'+bscfile+' @'+bscpathtmp)
os.system('del '+bscpathtmp)
class BlenderEnvironment(SConsEnvironment):
def BlenderRes(self=None, libname=None, source=None, libtype=['core'], priority=[100]):
global libs
if not self or not libname or not source:
print bc.FAIL+'Cannot continue. Missing argument for BlenderRes '+libname+bc.ENDC
self.Exit()
if self['OURPLATFORM'] not in ('win32-vc','win32-mingw','linuxcross', 'win64-vc'):
print bc.FAIL+'BlenderRes is for windows only!'+bc.END
self.Exit()
print bc.HEADER+'Configuring resource '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC
lenv = self.Clone()
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
res = lenv.RES('#'+root_build_dir+'lib/'+libname, source)
else:
res = lenv.RES(root_build_dir+'lib/'+libname, source)
def BlenderRes(self=None, libname=None, source=None, libtype=['core'], priority=[100]):
global libs
if not self or not libname or not source:
print bc.FAIL+'Cannot continue. Missing argument for BlenderRes '+libname+bc.ENDC
self.Exit()
if self['OURPLATFORM'] not in ('win32-vc','win32-mingw','linuxcross', 'win64-vc'):
print bc.FAIL+'BlenderRes is for windows only!'+bc.END
self.Exit()
print bc.HEADER+'Configuring resource '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC
lenv = self.Clone()
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
res = lenv.RES('#'+root_build_dir+'lib/'+libname, source)
else:
res = lenv.RES(root_build_dir+'lib/'+libname, source)
SConsEnvironment.Default(self, res)
resources.append(res)
SConsEnvironment.Default(self, res)
resources.append(res)
def BlenderLib(self=None, libname=None, sources=None, includes=[], defines=[], libtype='common', priority = 100, compileflags=None, cc_compileflags=None, cxx_compileflags=None):
global vcp
if not self or not libname or not sources:
print bc.FAIL+'Cannot continue. Missing argument for BuildBlenderLib '+libname+bc.ENDC
self.Exit()
def BlenderLib(self=None, libname=None, sources=None, includes=[], defines=[], libtype='common', priority = 100, compileflags=None, cc_compileflags=None, cxx_compileflags=None):
global vcp
if not self or not libname or not sources:
print bc.FAIL+'Cannot continue. Missing argument for BuildBlenderLib '+libname+bc.ENDC
self.Exit()
def list_substring(quickie, libname):
for q in quickie:
if libname.find(q) != -1:
return True
return False
def list_substring(quickie, libname):
for q in quickie:
if libname.find(q) != -1:
return True
return False
if list_substring(quickie, libname) or len(quickie)==0:
if list_substring(quickdebug, libname):
print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname +bc.ENDC+bc.OKBLUE+ " (debug mode)" + bc.ENDC
else:
print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname + bc.ENDC
lenv = self.Clone()
lenv.Append(CPPPATH=includes)
lenv.Append(CPPDEFINES=defines)
if lenv['BF_DEBUG'] or (libname in quickdebug):
lenv.Append(CFLAGS = lenv['BF_DEBUG_CFLAGS'])
lenv.Append(CCFLAGS = lenv['BF_DEBUG_CCFLAGS'])
lenv.Append(CXXFLAGS = lenv['BF_DEBUG_CXXFLAGS'])
else:
lenv.Append(CFLAGS = lenv['REL_CFLAGS'])
lenv.Append(CCFLAGS = lenv['REL_CCFLAGS'])
lenv.Append(CXXFLAGS = lenv['REL_CXXFLAGS'])
if lenv['BF_PROFILE']:
lenv.Append(CFLAGS = lenv['BF_PROFILE_CFLAGS'])
lenv.Append(CCFLAGS = lenv['BF_PROFILE_CCFLAGS'])
lenv.Append(CXXFLAGS = lenv['BF_PROFILE_CXXFLAGS'])
if compileflags:
lenv.Replace(CFLAGS = compileflags)
if cc_compileflags:
lenv.Replace(CCFLAGS = cc_compileflags)
if cxx_compileflags:
lenv.Replace(CXXFLAGS = cxx_compileflags)
lenv.Append(CFLAGS = lenv['C_WARN'])
lenv.Append(CCFLAGS = lenv['CC_WARN'])
lenv.Append(CXXFLAGS = lenv['CXX_WARN'])
if list_substring(quickie, libname) or len(quickie)==0:
if list_substring(quickdebug, libname):
print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname +bc.ENDC+bc.OKBLUE+ " (debug mode)" + bc.ENDC
else:
print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname + bc.ENDC
lenv = self.Clone()
lenv.Append(CPPPATH=includes)
lenv.Append(CPPDEFINES=defines)
if lenv['BF_DEBUG'] or (libname in quickdebug):
lenv.Append(CFLAGS = lenv['BF_DEBUG_CFLAGS'])
lenv.Append(CCFLAGS = lenv['BF_DEBUG_CCFLAGS'])
lenv.Append(CXXFLAGS = lenv['BF_DEBUG_CXXFLAGS'])
else:
lenv.Append(CFLAGS = lenv['REL_CFLAGS'])
lenv.Append(CCFLAGS = lenv['REL_CCFLAGS'])
lenv.Append(CXXFLAGS = lenv['REL_CXXFLAGS'])
if lenv['BF_PROFILE']:
lenv.Append(CFLAGS = lenv['BF_PROFILE_CFLAGS'])
lenv.Append(CCFLAGS = lenv['BF_PROFILE_CCFLAGS'])
lenv.Append(CXXFLAGS = lenv['BF_PROFILE_CXXFLAGS'])
if compileflags:
lenv.Replace(CFLAGS = compileflags)
if cc_compileflags:
lenv.Replace(CCFLAGS = cc_compileflags)
if cxx_compileflags:
lenv.Replace(CXXFLAGS = cxx_compileflags)
lenv.Append(CFLAGS = lenv['C_WARN'])
lenv.Append(CCFLAGS = lenv['CC_WARN'])
lenv.Append(CXXFLAGS = lenv['CXX_WARN'])
if lenv['OURPLATFORM'] == 'win64-vc':
lenv.Append(LINKFLAGS = ['/MACHINE:X64'])
if lenv['OURPLATFORM'] == 'win64-vc':
lenv.Append(LINKFLAGS = ['/MACHINE:X64'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
if lenv['BF_DEBUG']:
lenv.Append(CCFLAGS = ['/MTd'])
else:
lenv.Append(CCFLAGS = ['/MT'])
targetdir = root_build_dir+'lib/' + libname
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
targetdir = '#'+targetdir
lib = lenv.Library(target= targetdir, source=sources)
SConsEnvironment.Default(self, lib) # we add to default target, because this way we get some kind of progress info during build
if self['BF_MSVS'] and self['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
#if targetdir[0] == '#':
# targetdir = targetdir[1:-1]
print "! ",targetdir+ '.vcproj' # + self['MSVSPROJECTSUFFIX']
vcproject = self.MSVSProject(target = targetdir + '.vcproj', # + self['MSVSPROJECTSUFFIX'],
srcs = sources,
buildtarget = lib,
variant = 'Release',
auto_build_solution=0)
vcp.append(vcproject)
SConsEnvironment.Default(self, vcproject)
else:
print bc.WARNING+'Not building '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC+' for '+bc.OKBLUE+'BF_QUICK'+bc.ENDC
# note: libs is a global
add_lib_to_dict(self, libs, libtype, libname, priority)
if lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
if lenv['BF_DEBUG']:
lenv.Append(CCFLAGS = ['/MTd'])
else:
lenv.Append(CCFLAGS = ['/MT'])
targetdir = root_build_dir+'lib/' + libname
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
targetdir = '#'+targetdir
lib = lenv.Library(target= targetdir, source=sources)
SConsEnvironment.Default(self, lib) # we add to default target, because this way we get some kind of progress info during build
if self['BF_MSVS'] and self['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
#if targetdir[0] == '#':
# targetdir = targetdir[1:-1]
print "! ",targetdir+ '.vcproj' # + self['MSVSPROJECTSUFFIX']
vcproject = self.MSVSProject(target = targetdir + '.vcproj', # + self['MSVSPROJECTSUFFIX'],
srcs = sources,
buildtarget = lib,
variant = 'Release',
auto_build_solution=0)
vcp.append(vcproject)
SConsEnvironment.Default(self, vcproject)
else:
print bc.WARNING+'Not building '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC+' for '+bc.OKBLUE+'BF_QUICK'+bc.ENDC
# note: libs is a global
add_lib_to_dict(self, libs, libtype, libname, priority)
def BlenderProg(self=None, builddir=None, progname=None, sources=None, libs=None, libpath=None, binarykind=''):
global vcp
print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC
lenv = self.Clone()
if lenv['OURPLATFORM'] in ('win32-vc', 'cygwin', 'win64-vc'):
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
lenv.Append(LINKFLAGS = ['/FORCE:MULTIPLE'])
if lenv['BF_DEBUG']:
lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb'])
if lenv['OURPLATFORM']=='linux2':
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
if lenv['WITH_BF_PYTHON']:
lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
if lenv['OURPLATFORM']=='sunos5':
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
if lenv['WITH_BF_PYTHON']:
lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
if lenv['CXX'].endswith('CC'):
lenv.Replace(LINK = '$CXX')
if lenv['OURPLATFORM']=='darwin':
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
if lenv['WITH_BF_PYTHON']:
lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
lenv.Append(LINKFLAGS = lenv['BF_OPENGL_LINKFLAGS'])
if lenv['BF_PROFILE']:
lenv.Append(LINKFLAGS = lenv['BF_PROFILE_LINKFLAGS'])
if root_build_dir[0]==os.sep or root_build_dir[1]==':':
lenv.Append(LIBPATH=root_build_dir + '/lib')
lenv.Append(LIBPATH=libpath)
lenv.Append(LIBS=libs)
if lenv['WITH_BF_QUICKTIME']:
lenv.Append(LIBS = lenv['BF_QUICKTIME_LIB'])
lenv.Append(LIBPATH = lenv['BF_QUICKTIME_LIBPATH'])
prog = lenv.Program(target=builddir+'bin/'+progname, source=sources)
if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc') and lenv['BF_BSC']:
f = lenv.File(progname + '.bsc', builddir)
brs = lenv.Command(f, prog, [bsc])
SConsEnvironment.Default(self, brs)
SConsEnvironment.Default(self, prog)
if self['BF_MSVS'] and self['OURPLATFORM'] in ('win32-vc', 'win64-vc') and progname == 'blender':
print "! ",builddir + "/" + progname + '.sln'
sln = self.MSVSProject(target = builddir + "/" + progname + '.sln',
projects= vcp,
variant = 'Release')
SConsEnvironment.Default(self, sln)
program_list.append(prog)
if lenv['OURPLATFORM']=='darwin':
lenv['BINARYKIND'] = binarykind
lenv.AddPostAction(prog,Action(AppIt,strfunction=my_appit_print))
elif os.sep == '/' and lenv['OURPLATFORM'] != 'linuxcross': # any unix (except cross-compilation)
if lenv['WITH_BF_PYTHON']:
if not lenv['WITHOUT_BF_INSTALL'] and not lenv['WITHOUT_BF_PYTHON_INSTALL']:
lenv.AddPostAction(prog,Action(UnixPyBundle,strfunction=my_unixpybundle_print))
elif lenv['OURPLATFORM'].startswith('win') or lenv['OURPLATFORM'] == 'linuxcross': # windows or cross-compilation
if lenv['WITH_BF_PYTHON']:
if not lenv['WITHOUT_BF_PYTHON_INSTALL']:
lenv.AddPostAction(prog,Action(WinPyBundle,strfunction=my_winpybundle_print))
return prog
global vcp
print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC
lenv = self.Clone()
if lenv['OURPLATFORM'] in ('win32-vc', 'cygwin', 'win64-vc'):
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
lenv.Append(LINKFLAGS = ['/FORCE:MULTIPLE'])
if lenv['BF_DEBUG']:
lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb'])
if lenv['OURPLATFORM']=='linux2':
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
if lenv['WITH_BF_PYTHON']:
lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
if lenv['OURPLATFORM']=='sunos5':
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
if lenv['WITH_BF_PYTHON']:
lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
if lenv['CXX'].endswith('CC'):
lenv.Replace(LINK = '$CXX')
if lenv['OURPLATFORM']=='darwin':
lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
if lenv['WITH_BF_PYTHON']:
lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
lenv.Append(LINKFLAGS = lenv['BF_OPENGL_LINKFLAGS'])
if lenv['BF_PROFILE']:
lenv.Append(LINKFLAGS = lenv['BF_PROFILE_LINKFLAGS'])
if root_build_dir[0]==os.sep or root_build_dir[1]==':':
lenv.Append(LIBPATH=root_build_dir + '/lib')
lenv.Append(LIBPATH=libpath)
lenv.Append(LIBS=libs)
if lenv['WITH_BF_QUICKTIME']:
lenv.Append(LIBS = lenv['BF_QUICKTIME_LIB'])
lenv.Append(LIBPATH = lenv['BF_QUICKTIME_LIBPATH'])
prog = lenv.Program(target=builddir+'bin/'+progname, source=sources)
if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc') and lenv['BF_BSC']:
f = lenv.File(progname + '.bsc', builddir)
brs = lenv.Command(f, prog, [bsc])
SConsEnvironment.Default(self, brs)
SConsEnvironment.Default(self, prog)
if self['BF_MSVS'] and self['OURPLATFORM'] in ('win32-vc', 'win64-vc') and progname == 'blender':
print "! ",builddir + "/" + progname + '.sln'
sln = self.MSVSProject(target = builddir + "/" + progname + '.sln',
projects= vcp,
variant = 'Release')
SConsEnvironment.Default(self, sln)
program_list.append(prog)
if lenv['OURPLATFORM']=='darwin':
lenv['BINARYKIND'] = binarykind
lenv.AddPostAction(prog,Action(AppIt,strfunction=my_appit_print))
elif os.sep == '/' and lenv['OURPLATFORM'] != 'linuxcross': # any unix (except cross-compilation)
if lenv['WITH_BF_PYTHON']:
if not lenv['WITHOUT_BF_INSTALL'] and not lenv['WITHOUT_BF_PYTHON_INSTALL']:
lenv.AddPostAction(prog,Action(UnixPyBundle,strfunction=my_unixpybundle_print))
elif lenv['OURPLATFORM'].startswith('win') or lenv['OURPLATFORM'] == 'linuxcross': # windows or cross-compilation
if lenv['WITH_BF_PYTHON']:
if not lenv['WITHOUT_BF_PYTHON_INSTALL']:
lenv.AddPostAction(prog,Action(WinPyBundle,strfunction=my_winpybundle_print))
return prog
def Glob(lenv, pattern):
path = string.replace(GetBuildPath(lenv,'SConscript'),'SConscript', '')
files = []
for i in glob.glob(path + pattern):
files.append(string.replace(i, path, ''))
return files
def Glob(lenv, pattern):
path = string.replace(GetBuildPath(lenv,'SConscript'),'SConscript', '')
files = []
for i in glob.glob(path + pattern):
files.append(string.replace(i, path, ''))
return files