Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build_files/scons/tools/Blender.py')
-rw-r--r--build_files/scons/tools/Blender.py1146
1 files changed, 0 insertions, 1146 deletions
diff --git a/build_files/scons/tools/Blender.py b/build_files/scons/tools/Blender.py
deleted file mode 100644
index d44c5caaec8..00000000000
--- a/build_files/scons/tools/Blender.py
+++ /dev/null
@@ -1,1146 +0,0 @@
-#!/usr/bin/env python
-
-"""
-tools.BlenderEnvironment
-
-This environment builds on SCons.Script.SConscript.SConsEnvironment
-
-* library repository
-* custom printout
-* wrapper functions
-
-TODO: clean up and sanitise code - crosscheck with btools and SConstruct
-to kill any code duplication
-
-"""
-
-import os
-import string
-import ctypes as ct
-import glob
-import time
-import sys
-import tarfile
-import shutil
-import cStringIO
-import platform
-
-from SCons.Script.SConscript import SConsEnvironment
-import SCons.Action
-import SCons.Util
-import SCons.Builder
-import SCons.Subst
-import SCons.Tool
-import bcolors
-bc = bcolors.bcolors()
-import btools
-VERSION = btools.VERSION
-VERSION_RELEASE_CYCLE = btools.VERSION_RELEASE_CYCLE
-
-Split = SCons.Util.Split
-Action = SCons.Action.Action
-Builder = SCons.Builder.Builder
-GetBuildPath = SConsEnvironment.GetBuildPath
-
-# a few globals
-root_build_dir = ''
-doc_build_dir = ''
-quickie = None # Anything else than None if BF_QUICK has been passed
-quicklist = [] # The list of libraries/programs to compile during a quickie
-program_list = [] # A list holding Nodes to final binaries, used to create installs
-arguments = None
-targets = None
-resources = []
-allowed_bitnesses = {4 : 32, 8 : 64} # only expecting 32-bit or 64-bit
-bitness = allowed_bitnesses[ct.sizeof(ct.c_void_p)]
-
-##### LIB STUFF ##########
-
-possible_types = ['core'] # can be set in ie. SConstruct
-libs = {}
-vcp = []
-
-def getresources():
- return resources
-
-def init_lib_dict():
- 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
-
-# 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 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"
-
- 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
-
-## TODO: static linking
-def setup_staticlibs(lenv):
- statlibs = [
- #here libs for static linking
- ]
-
- libincs = []
-
- if lenv['WITH_BF_FFMPEG']:
- libincs += Split(lenv['BF_FFMPEG_LIBPATH'])
-
- libincs.extend([
- lenv['BF_OPENGL_LIBPATH'],
- lenv['BF_JPEG_LIBPATH'],
- lenv['BF_ZLIB_LIBPATH'],
- lenv['BF_PNG_LIBPATH'],
- lenv['BF_ICONV_LIBPATH']
- ])
-
- if lenv['WITH_BF_STATICJPEG']:
- statlibs += Split(lenv['BF_JPEG_LIB_STATIC'])
- if lenv['WITH_BF_STATICPNG']:
- statlibs += Split(lenv['BF_PNG_LIB_STATIC'])
-
- libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
- if lenv['WITH_BF_PYTHON']:
- libincs += Split(lenv['BF_PYTHON_LIBPATH'])
- if lenv['WITH_BF_SDL'] and not lenv['WITH_BF_SDL_DYNLOAD']:
- libincs += Split(lenv['BF_SDL_LIBPATH'])
- if lenv['WITH_BF_JACK'] and not lenv['WITH_BF_JACK_DYNLOAD']:
- libincs += Split(lenv['BF_JACK_LIBPATH'])
- if lenv['WITH_BF_SNDFILE']:
- libincs += Split(lenv['BF_SNDFILE_LIBPATH'])
- if lenv['WITH_BF_TIFF']:
- libincs += Split(lenv['BF_TIFF_LIBPATH'])
- if lenv['WITH_BF_STATICTIFF']:
- statlibs += Split(lenv['BF_TIFF_LIB_STATIC'])
- if lenv['WITH_BF_FFTW3']:
- libincs += Split(lenv['BF_FFTW3_LIBPATH'])
- if lenv['WITH_BF_STATICFFTW3']:
- statlibs += Split(lenv['BF_FFTW3_LIB_STATIC'])
- '''
- if lenv['WITH_BF_ELTOPO']:
- libincs += Split(lenv['BF_LAPACK_LIBPATH'])
- if lenv['WITH_BF_STATICLAPACK']:
- statlibs += Split(lenv['BF_LAPACK_LIB_STATIC'])
- '''
- if lenv['WITH_BF_FFMPEG'] and lenv['WITH_BF_STATICFFMPEG']:
- statlibs += Split(lenv['BF_FFMPEG_LIB_STATIC'])
- if lenv['WITH_BF_INTERNATIONAL']:
- 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_PYTHON'] and lenv['WITH_BF_STATICPYTHON']:
- statlibs += Split(lenv['BF_PYTHON_LIB_STATIC'])
-
- if lenv['WITH_BF_SNDFILE'] and lenv['WITH_BF_STATICSNDFILE']:
- statlibs += Split(lenv['BF_SNDFILE_LIB_STATIC'])
-
- if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'):
- 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', 'win64-mingw'):
- libincs += Split(lenv['BF_PCRE_LIBPATH'])
- libincs += Split(lenv['BF_EXPAT_LIBPATH'])
- if lenv['WITH_BF_STATICOPENCOLLADA']:
- statlibs += Split(lenv['BF_OPENCOLLADA_LIB_STATIC'])
-
- if lenv['WITH_BF_OPENMP']:
- if lenv['OURPLATFORM'] == 'linuxcross':
- libincs += Split(lenv['BF_OPENMP_LIBPATH'])
- if lenv['WITH_BF_STATICOPENMP']:
- statlibs += Split(lenv['BF_OPENMP_LIB_STATIC'])
-
- if lenv['WITH_BF_OIIO']:
- libincs += Split(lenv['BF_OIIO_LIBPATH'])
- if lenv['WITH_BF_STATICOIIO']:
- statlibs += Split(lenv['BF_OIIO_LIB_STATIC'])
- 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_ZLIB'] and lenv['WITH_BF_STATICZLIB']:
- statlibs += Split(lenv['BF_ZLIB_LIB_STATIC'])
-
- if lenv['WITH_BF_OCIO']:
- libincs += Split(lenv['BF_OCIO_LIBPATH'])
- if lenv['WITH_BF_STATICOCIO']:
- statlibs += Split(lenv['BF_OCIO_LIB_STATIC'])
-
- if lenv['WITH_BF_CYCLES_OSL']:
- libincs += Split(lenv['BF_OSL_LIBPATH'])
- if lenv['WITH_BF_STATICOSL']:
- statlibs += Split(lenv['BF_OSL_LIB_STATIC'])
-
- if lenv['WITH_BF_BOOST']:
- libincs += Split(lenv['BF_BOOST_LIBPATH'])
- if lenv['WITH_BF_STATICBOOST']:
- statlibs += Split(lenv['BF_BOOST_LIB_STATIC'])
-
- if lenv['WITH_BF_LLVM']:
- libincs += Split(lenv['BF_LLVM_LIBPATH'])
- if lenv['WITH_BF_STATICLLVM']:
- statlibs += Split(lenv['BF_LLVM_LIB_STATIC'])
-
- if lenv['WITH_BF_JEMALLOC']:
- libincs += Split(lenv['BF_JEMALLOC_LIBPATH'])
- if lenv['WITH_BF_STATICJEMALLOC']:
- statlibs += Split(lenv['BF_JEMALLOC_LIB_STATIC'])
-
- if lenv['OURPLATFORM']=='linux':
- if lenv['WITH_BF_3DMOUSE']:
- libincs += Split(lenv['BF_3DMOUSE_LIBPATH'])
- if lenv['WITH_BF_STATIC3DMOUSE']:
- statlibs += Split(lenv['BF_3DMOUSE_LIB_STATIC'])
-
- if lenv['WITH_BF_OPENSUBDIV']:
- libincs += Split(lenv['BF_OPENSUBDIV_LIBPATH'])
- if lenv['WITH_BF_STATICOPENSUBDIV']:
- statlibs += Split(lenv['BF_OPENSUBDIV_LIB_STATIC'])
-
- # setting this last so any overriding of manually libs could be handled
- if lenv['OURPLATFORM'] not in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross', 'win64-mingw'):
- # We must remove any previous items defining this path, for same reason stated above!
- libincs = [e for e in libincs if SCons.Subst.scons_subst(e, lenv, gvars=lenv.Dictionary()) != "/usr/lib"]
- libincs.append('/usr/lib')
-
- # Hack to pass OSD libraries to linker before extern_{clew,cuew}
- # Here we only store library path, actual library name will be added in setup_syslibs()
- for syslib in create_blender_liblist(lenv, 'system'):
- libincs.append(os.path.dirname(syslib))
-
- return statlibs, libincs
-
-def setup_syslibs(lenv):
- syslibs = []
-
- 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', 'win64-mingw'):
- syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
- else:
- syslibs.append(lenv['BF_PYTHON_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' and lenv['C_COMPILER_ID'] != 'clang' and not lenv['WITH_BF_STATICOPENMP']:
- 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_OIIO']:
- if not lenv['WITH_BF_STATICOIIO']:
- syslibs += Split(lenv['BF_OIIO_LIB'])
-
- if lenv['WITH_BF_OCIO']:
- if not lenv['WITH_BF_STATICOCIO']:
- syslibs += Split(lenv['BF_OCIO_LIB'])
-
- if lenv['WITH_BF_OPENEXR'] and not lenv['WITH_BF_STATICOPENEXR']:
- syslibs += Split(lenv['BF_OPENEXR_LIB'])
- if lenv['WITH_BF_ZLIB'] and not lenv['WITH_BF_STATICZLIB']:
- syslibs += Split(lenv['BF_ZLIB_LIB'])
- if lenv['WITH_BF_TIFF'] and not lenv['WITH_BF_STATICTIFF']:
- 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'] and not lenv['WITH_BF_JACK_DYNLOAD']:
- syslibs += Split(lenv['BF_JACK_LIB'])
- if lenv['WITH_BF_SNDFILE'] and not lenv['WITH_BF_STATICSNDFILE']:
- syslibs += Split(lenv['BF_SNDFILE_LIB'])
- if lenv['WITH_BF_FFTW3'] and not lenv['WITH_BF_STATICFFTW3']:
- syslibs += Split(lenv['BF_FFTW3_LIB'])
- '''
- if lenv['WITH_BF_ELTOPO']:
- syslibs += Split(lenv['BF_LAPACK_LIB'])
- '''
- if lenv['WITH_BF_SDL'] and not lenv['WITH_BF_SDL_DYNLOAD']:
- 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', 'win64-mingw'):
- syslibs += Split(lenv['BF_PTHREADS_LIB'])
- if lenv['WITH_BF_COLLADA'] and not lenv['WITH_BF_STATICOPENCOLLADA']:
- syslibs.append(lenv['BF_PCRE_LIB'])
- if lenv['BF_DEBUG'] and (lenv['OURPLATFORM'] != 'linux'):
- syslibs += [colladalib+'_d' for colladalib in Split(lenv['BF_OPENCOLLADA_LIB'])]
- else:
- syslibs += Split(lenv['BF_OPENCOLLADA_LIB'])
- syslibs.append(lenv['BF_EXPAT_LIB'])
-
- if lenv['WITH_BF_JEMALLOC']:
- if not lenv['WITH_BF_STATICJEMALLOC']:
- syslibs += Split(lenv['BF_JEMALLOC_LIB'])
-
- if lenv['OURPLATFORM']=='linux':
- if lenv['WITH_BF_3DMOUSE']:
- if not lenv['WITH_BF_STATIC3DMOUSE']:
- syslibs += Split(lenv['BF_3DMOUSE_LIB'])
-
- if lenv['WITH_BF_CYCLES_OSL'] and not lenv['WITH_BF_STATICOSL']:
- syslibs += Split(lenv['BF_OSL_LIB'])
-
- if lenv['WITH_BF_BOOST'] and not lenv['WITH_BF_STATICBOOST']:
- syslibs += Split(lenv['BF_BOOST_LIB'])
-
- if lenv['WITH_BF_INTERNATIONAL']:
- syslibs += Split(lenv['BF_BOOST_LIB_INTERNATIONAL'])
-
- if lenv['WITH_BF_LLVM'] and not lenv['WITH_BF_STATICLLVM']:
- syslibs += Split(lenv['BF_LLVM_LIB'])
-
- if not lenv['WITH_BF_STATICJPEG']:
- syslibs += Split(lenv['BF_JPEG_LIB'])
-
- if not lenv['WITH_BF_STATICPNG']:
- syslibs += Split(lenv['BF_PNG_LIB'])
-
- if lenv['WITH_BF_OPENSUBDIV']:
- if not lenv['WITH_BF_STATICOPENSUBDIV']:
- if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw', 'win64-mingw'):
- syslibs += [osdlib+'_d' for osdlib in Split(lenv['BF_OPENSUBDIV_LIB'])]
- else:
- syslibs += Split(lenv['BF_OPENSUBDIV_LIB'])
-
- # Hack to pass OSD libraries to linker before extern_{clew,cuew}
- for syslib in create_blender_liblist(lenv, 'system'):
- syslibs.append(os.path.basename(syslib))
-
- syslibs += lenv['LLIBS']
-
- 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()
-
- for sk in sortlist:
- v = curlib[sk]
- #for p,v in sorted(libs[t].iteritems()):
- print "\t\t",new_priority, v
- new_priority += 5
-
-# emits the necessary file objects for creator.c, to be used in creating
-# the final blender executable
-def creator(env):
- sources = ['creator.c']# + Blender.buildinfo(env, "dynamic") + Blender.resources
-
- incs = ['#/intern/guardedalloc', '#/source/blender/blenlib', '#/source/blender/blenkernel', '#/source/blender/depsgraph', '#/source/blender/editors/include', '#/source/blender/blenloader', '#/source/blender/imbuf', '#/source/blender/renderconverter', '#/source/blender/render/extern/include', '#/source/blender/windowmanager', '#/source/blender/makesdna', '#/source/blender/makesrna', '#/source/gameengine/BlenderRoutines', '#/extern/glew/include', '#/source/blender/gpu', env['BF_OPENGL_INC']]
-
- defs = []
-
- if env['WITH_BF_BINRELOC']:
- incs.append('#/extern/binreloc/include')
- defs.append('WITH_BINRELOC')
-
- if env['WITH_BF_SDL']:
- if env['WITH_BF_SDL_DYNLOAD']:
- defs.append('WITH_SDL_DYNLOAD')
- incs.append('#/extern/sdlew/include')
- defs.append('WITH_SDL')
-
- if env['WITH_BF_LIBMV']:
- incs.append('#/extern/libmv')
- defs.append('WITH_LIBMV')
-
- if env['WITH_BF_CYCLES'] and env['WITH_BF_CYCLES_LOGGING']:
- incs.append('#/intern/cycles/blender')
- defs.append('WITH_CYCLES_LOGGING')
-
- if env['WITH_BF_FFMPEG']:
- defs.append('WITH_FFMPEG')
-
- if env['WITH_BF_PYTHON']:
- incs.append('#/source/blender/python')
- defs.append('WITH_PYTHON')
- if env['BF_DEBUG']:
- defs.append('_DEBUG')
-
- if env['WITH_BF_FREESTYLE']:
- incs.append('#/source/blender/freestyle')
- defs.append('WITH_FREESTYLE')
-
- if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'):
- incs.append(env['BF_PTHREADS_INC'])
- incs.append('#/intern/utfconv')
-
- env.Append(CPPDEFINES=defs)
- env.Append(CPPPATH=incs)
- obj = [env.Object(root_build_dir+'source/creator/creator/creator', ['#source/creator/creator.c'])]
-
- return obj
-
-## TODO: see if this can be made in an emitter
-def buildinfo(lenv, build_type):
- """
- Generate a buildinfo object
- """
- import subprocess
-
- build_date = time.strftime ("%Y-%m-%d")
- build_time = time.strftime ("%H:%M:%S")
-
- if os.path.isdir(os.path.abspath('.git')):
- try:
- build_commit_timestamp = btools.get_command_output(args=['git', 'log', '-1', '--format=%ct']).strip()
- except OSError:
- build_commit_timestamp = None
- if not build_commit_timestamp:
- # Git command not found
- build_hash = 'unknown'
- build_commit_timestamp = '0'
- build_branch = 'unknown'
- else:
- no_upstream = False
-
- try :
- build_hash = btools.get_command_output(['git', 'rev-parse', '--short', '@{u}'], stderr=subprocess.STDOUT).strip()
- except subprocess.CalledProcessError:
- # assume branch has no upstream configured
- build_hash = btools.get_command_output(['git', 'rev-parse', '--short', 'HEAD']).strip()
- no_upstream = True
-
- build_branch = btools.get_command_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).strip()
-
- if build_branch == 'HEAD':
- master_check = btools.get_command_output(['git', 'branch', '--list', 'master', '--contains', build_hash]).strip()
- if master_check == 'master':
- build_branch = 'master'
- else:
- head_hash = btools.get_command_output(['git', 'rev-parse', 'HEAD']).strip()
- tag_hashes = btools.get_command_output(['git', 'show-ref', '--tags', '-d'])
- if tag_hashes.find(head_hash) != -1:
- build_branch = 'master'
-
- if not no_upstream:
- older_commits = btools.get_command_output(['git', 'log', '--oneline', 'HEAD..@{u}']).strip()
- if older_commits:
- build_hash = btools.get_command_output(['git', 'rev-parse', '--short', 'HEAD']).strip()
-
- # ## Check for local modifications
- has_local_changes = False
-
- # Update GIT index before getting dirty files
- os.system('git update-index -q --refresh')
- changed_files = btools.get_command_output(['git', 'diff-index', '--name-only', 'HEAD', '--']).strip()
-
- if changed_files:
- has_local_changes = True
- elif no_upstream == False:
- unpushed_log = btools.get_command_output(['git', 'log', '--oneline', '@{u}..']).strip()
- has_local_changes = unpushed_log != ''
-
- if build_branch.startswith('blender-v'):
- build_branch = 'master'
-
- if has_local_changes:
- build_branch += ' (modified)'
- else:
- build_hash = 'unknown'
- build_commit_timestamp = '0'
- build_branch = 'unknown'
-
- if lenv['BF_DEBUG']:
- build_type = "Debug"
- build_cflags = ' '.join(lenv['CFLAGS'] + lenv['CCFLAGS'] + lenv['BF_DEBUG_CCFLAGS'] + lenv['CPPFLAGS'])
- build_cxxflags = ' '.join(lenv['CCFLAGS'] + lenv['CXXFLAGS'] + lenv['CPPFLAGS'])
- else:
- build_type = "Release"
- build_cflags = ' '.join(lenv['CFLAGS'] + lenv['CCFLAGS'] + lenv['REL_CFLAGS'] + lenv['REL_CCFLAGS'] + lenv['CPPFLAGS'])
- build_cxxflags = ' '.join(lenv['CCFLAGS'] + lenv['CXXFLAGS'] + lenv['REL_CXXFLAGS'] + lenv['REL_CCFLAGS'] + lenv['CPPFLAGS'])
-
- build_linkflags = ' '.join(lenv['PLATFORM_LINKFLAGS'])
-
- obj = []
- if lenv['BF_BUILDINFO']:
- lenv.Append (CPPDEFINES = ['BUILD_TIME=\\"%s\\"'%(build_time),
- 'BUILD_DATE=\\"%s\\"'%(build_date),
- 'BUILD_TYPE=\\"%s\\"'%(build_type),
- 'BUILD_HASH=\\"%s\\"'%(build_hash),
- 'BUILD_COMMIT_TIMESTAMP=%s'%(build_commit_timestamp),
- 'BUILD_BRANCH=\\"%s\\"'%(build_branch),
- 'WITH_BUILDINFO',
- 'BUILD_PLATFORM=\\"%s:%s\\"'%(platform.system(), platform.architecture()[0]),
- 'BUILD_CFLAGS=\\"%s\\"'%(build_cflags),
- 'BUILD_CXXFLAGS=\\"%s\\"'%(build_cxxflags),
- 'BUILD_LINKFLAGS=\\"%s\\"'%(build_linkflags),
- 'BUILD_SYSTEM=\\"SCons\\"'
- ])
-
- lenv.Append (CPPPATH = [root_build_dir+'source/blender/blenkernel'])
-
- obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type, ['#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()
-
-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 + "'"
-
-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 + "'"
-
-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 + "'"
-
-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 + "'"
-
-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
-
-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)
-
- static_ob, shared_ob = SCons.Tool.createObjBuilders(env)
- static_ob.add_action('.c', mycaction)
- static_ob.add_action('.cpp', mycppaction)
- static_ob.add_action('.cc', mycppaction)
- shared_ob.add_action('.c', myshcaction)
- shared_ob.add_action('.cc', myshcppaction)
-
- 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)
-
- 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
-
-def untar_pybundle(from_tar,to_dir,exclude_re):
- tar= tarfile.open(from_tar, 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 tar.getnames():
- 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(tar.getmember(name))
- if debug:
- print '\nFiles being unpacked:\n'
- for g in good:
- print g
- else:
- tar.extractall(to_dir, good)
-
-def my_winpybundle_print(target, source, env):
- pass
-
-def WinPyBundle(target=None, source=None, env=None):
- import re
- py_tar = env.subst(env['LCGDIR']).lstrip("#")
- if env['BF_DEBUG']:
- py_tar+= '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '_d.tar.gz'
- else:
- py_tar+= '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '.tar.gz'
-
- py_target = env.subst(env['BF_INSTALLDIR']).lstrip("#")
- py_target = os.path.join(py_target, VERSION, 'python')
- 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('^test'),
- re.compile('^distutils'),
- re.compile('^idlelib'),
- re.compile('^lib2to3'),
- re.compile('^tkinter'),
- re.compile('^_tkinter_d.pyd'),
- re.compile('^turtledemo'),
- re.compile('^turtle.py'),
- ]
-
- print "Unpacking '" + py_tar + "' to '" + py_target + "'"
- untar_pybundle(py_tar,py_target,exclude_re)
-
- # -------------
- # Extract Numpy
- if env['WITH_BF_PYTHON_INSTALL_NUMPY']:
- py_tar = env.subst(env['LCGDIR']).lstrip("#")
- py_tar += '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '_numpy_1.9.tar.gz'
-
- py_target = env.subst(env['BF_INSTALLDIR']).lstrip("#")
- py_target = os.path.join(py_target, VERSION, 'python', 'lib', 'site-packages')
- # rmtree handled above
- # files are cleaned up in their archive
- exclude_re = []
- print("Unpacking '" + py_tar + "' to '" + py_target + "'")
- untar_pybundle(py_tar, py_target, exclude_re)
-
- # --------------------
- # Copy 'site-packages'
- py_dir = env.subst(env['LCGDIR']).lstrip("#")
- py_dir += '/release/site-packages'
- # grr, we have to do one by one because the dir exists
- for f in os.listdir(py_dir):
- if f == '.svn':
- continue
- fn_src = os.path.join(py_dir, f)
- fn_dst = os.path.join(py_target, f)
-
- shutil.rmtree(fn_dst, False, printexception)
- shutil.copytree(fn_src, fn_dst)
-
-
-
-def my_appit_print(target, source, env):
- 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))
- # TODO, use tar.
- python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
- if env['WITH_OSX_STATICPYTHON']:
- print("unzipping to app-bundle: %s"%(python_zip))
- else:
- print("dynamic build - make sure to have python3.x-framework installed")
- bldroot = env.Dir('.').abspath
- binary = env['BINARYKIND']
-
- sourcedir = bldroot + '/release/darwin/%s.app' % binary
- sourceinfo = bldroot + "/release/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/\$\{MACOSX_BUNDLE_SHORT_VERSION_STRING\}/%s/ | "%(sourceinfo,VERSION)
- cmd += "sed s/\$\{MACOSX_BUNDLE_LONG_VERSION_STRING\}/%s,\ %s/g > %s"%(VERSION,time.strftime("%Y-%b-%d"),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/Resources/%s/'%(installdir, binary, VERSION)
- commands.getoutput(cmd)
- cmd = installdir + '/%s.app/Contents/MacOS/%s'%(binary,VERSION)
-
- # blenderplayer doesn't need all the files
- if binary == 'blender':
- cmd = 'mkdir %s/%s.app/Contents/Resources/%s/datafiles'%(installdir, binary, VERSION)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/release/datafiles/fonts %s/%s.app/Contents/Resources/%s/datafiles/'%(bldroot,installdir,binary,VERSION)
- commands.getoutput(cmd)
- mo_dir = os.path.join(builddir[:-4], "locale")
- for f in os.listdir(mo_dir):
- cmd = 'ditto %s/%s %s/%s.app/Contents/Resources/%s/datafiles/locale/%s/LC_MESSAGES/blender.mo'%(mo_dir, f, installdir, binary, VERSION, f[:-3])
- commands.getoutput(cmd)
- cmd = 'cp %s/release/datafiles/locale/languages %s/%s.app/Contents/Resources/%s/datafiles/locale/'%(bldroot, installdir, binary, VERSION)
- commands.getoutput(cmd)
-
- if env['WITH_BF_OCIO']:
- cmd = 'cp -R %s/release/datafiles/colormanagement %s/%s.app/Contents/Resources/%s/datafiles/'%(bldroot,installdir,binary,VERSION)
- commands.getoutput(cmd)
-
- cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/Resources/%s/'%(bldroot,installdir,binary,VERSION)
- commands.getoutput(cmd)
-
- if VERSION_RELEASE_CYCLE == "release":
- cmd = 'rm -rf %s/%s.app/Contents/Resources/%s/scripts/addons_contrib'%(installdir,binary,VERSION)
- commands.getoutput(cmd)
-
- if env['WITH_BF_CYCLES']:
- croot = '%s/intern/cycles' % (bldroot)
- cinstalldir = '%s/%s.app/Contents/Resources/%s/scripts/addons/cycles' % (installdir,binary,VERSION)
-
- cmd = 'mkdir %s' % (cinstalldir)
- commands.getoutput(cmd)
- cmd = 'mkdir %s/kernel' % (cinstalldir)
- commands.getoutput(cmd)
- cmd = 'mkdir %s/lib' % (cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/blender/addon/*.py %s/' % (croot, cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/doc/license %s/license' % (croot, cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/kernel/*.h %s/kernel/*.cl %s/kernel/*.cu %s/kernel/' % (croot, croot, croot, cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/kernel/svm %s/kernel/closure %s/kernel/geom %s/kernel/split %s/kernel/kernels %s/util/util_color.h %s/util/util_half.h %s/util/util_math.h %s/util/util_math_fast.h %s/util/util_transform.h %s/util/util_types.h %s/util/util_atomic.h %s/kernel/' % (croot, croot, croot, croot, croot, croot, croot, croot, croot, croot, croot, croot, cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/../intern/cycles/kernel/*.cubin %s/lib/' % (builddir, cinstalldir)
- commands.getoutput(cmd)
-
- if env['WITH_BF_CYCLES_OSL']:
- cmd = 'mkdir %s/shader' % (cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/kernel/shaders/*.h %s/shader' % (croot, cinstalldir)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/../intern/cycles/kernel/shaders/*.oso %s/shader' % (builddir, cinstalldir)
- commands.getoutput(cmd)
-
- if env['WITH_OSX_STATICPYTHON']:
- cmd = 'mkdir %s/%s.app/Contents/Resources/%s/python/'%(installdir,binary, VERSION)
- commands.getoutput(cmd)
- cmd = 'unzip -q %s/release/%s -d %s/%s.app/Contents/Resources/%s/python/'%(libdir,python_zip,installdir,binary,VERSION)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/release/site-packages/ %s/%s.app/Contents/Resources/%s/python/lib/python%s/site-packages/'%(libdir,installdir,binary,VERSION,env['BF_PYTHON_VERSION'])
- commands.getoutput(cmd)
- cmd = 'cp -r %s/python/bin -d %s/%s.app/Contents/Resources/%s/python/'%(libdir,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)
- cmd = 'SetFile -d "%s)" -m "%s)" %s/%s.app'%(time.strftime("%m/%d/%Y %H:%M"),time.strftime("%m/%d/%Y %H:%M"),installdir,binary) # give the bundles actual creation/modification date
- commands.getoutput(cmd)
- if env['WITH_BF_OPENMP']:
- if env['C_COMPILER_ID'] == 'gcc' and env['CCVERSION'] >= '4.6.1': # for correct errorhandling with gcc >= 4.6.1 we need the gcc.dylib and gomp.dylib to link, thus distribute in app-bundle
- print "Bundling libgcc and libgomp"
- instname = env['BF_CXX']
- cmd = 'ditto --arch %s %s/lib/libgcc_s.1.dylib %s/%s.app/Contents/Resources/lib/'%(osxarch, instname, installdir, binary) # copy libgcc
- commands.getoutput(cmd)
- cmd = 'install_name_tool -id @executable_path/../Resources/lib/libgcc_s.1.dylib %s/%s.app/Contents/Resources/lib/libgcc_s.1.dylib'%(installdir, binary) # change id of libgcc
- commands.getoutput(cmd)
- cmd = 'ditto --arch %s %s/lib/libgomp.1.dylib %s/%s.app/Contents/Resources/lib/'%(osxarch, instname, installdir, binary) # copy libgomp
- commands.getoutput(cmd)
- cmd = 'install_name_tool -id @executable_path/../Resources/lib/libgomp.1.dylib %s/%s.app/Contents/Resources/lib/libgomp.1.dylib'%(installdir, binary) # change id of libgomp
- commands.getoutput(cmd)
- cmd = 'install_name_tool -change %s/lib/libgcc_s.1.dylib @executable_path/../Resources/lib/libgcc_s.1.dylib %s/%s.app/Contents/Resources/lib/libgomp.1.dylib'%(instname, installdir, binary) # change ref to libgcc
- commands.getoutput(cmd)
- cmd = 'install_name_tool -change %s/lib/libgcc_s.1.dylib @executable_path/../Resources/lib/libgcc_s.1.dylib %s/%s.app/Contents/MacOS/%s'%(instname, installdir, binary, binary) # change ref to libgcc ( blender )
- commands.getoutput(cmd)
- cmd = 'install_name_tool -change %s/lib/libgomp.1.dylib @executable_path/../Resources/lib/libgomp.1.dylib %s/%s.app/Contents/MacOS/%s'%(instname, installdir, binary, binary) # change ref to libgomp ( blender )
- commands.getoutput(cmd)
- if env['C_COMPILER_ID'] == 'clang' and env['CCVERSION'] >= '3.4':
- print "Bundling libiomp5"
- instname = env['LCGDIR'][1:] # made libiomp5 part of blender libs
- cmd = 'ditto --arch %s %s/openmp/lib/libiomp5.dylib %s/%s.app/Contents/Resources/lib/'%(osxarch, instname, installdir, binary) # copy libiomp5
- commands.getoutput(cmd)
- cmd = 'cp %s/openmp/LICENSE.txt %s/LICENSE-libiomp5.txt'%(instname, installdir) # copy libiomp5 license
- 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
-
-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)
-
- dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
-
- lib = env['BF_PYTHON_LIBPATH'].split(os.sep)[-1]
- target_lib = "lib64" if lib == "lib64" else "lib"
-
- py_src = env.subst( env['BF_PYTHON_LIBPATH'] + '/python'+env['BF_PYTHON_VERSION'] )
- py_target = env.subst( dir + '/python/' + target_lib + '/python'+env['BF_PYTHON_VERSION'] )
- py_target_bin = env.subst(dir + '/python/bin')
-
- # 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
-
- # install the executable
- run("rm -rf '%s'" % py_target_bin)
- os.makedirs(py_target_bin)
- run("cp '%s' '%s'" % (env.subst(env['BF_PYTHON_BINARY']), py_target_bin))
-
- 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/config'" % py_target)
-
- for f in os.listdir(py_target):
- if f.startswith("config-"):
- run("rm -rf '%s/%s'" % (py_target, f))
-
- run("rm -rf '%s/site-packages'" % py_target)
- run("mkdir '%s/site-packages'" % py_target) # python needs it.'
- run("rm -rf '%s/idlelib'" % py_target)
- run("rm -rf '%s/tkinter'" % py_target)
- run("rm -rf '%s/turtledemo'" % py_target)
- run("rm -r '%s/turtle.py'" % py_target)
- run("rm -f '%s/lib-dynload/_tkinter.so'" % py_target)
-
- if env['WITH_BF_PYTHON_INSTALL_NUMPY']:
- numpy_src = py_src + "/site-packages/numpy"
- numpy_target = py_target + "/site-packages/numpy"
-
- if os.path.exists(numpy_src):
- print 'Install numpy from:'
- print '\t"%s" into...' % numpy_src
- print '\t"%s"\n' % numpy_target
-
- run("cp -R '%s' '%s'" % (numpy_src, os.path.dirname(numpy_target)))
- run("rm -rf '%s/distutils'" % numpy_target)
- run("rm -rf '%s/oldnumeric'" % numpy_target)
- run("rm -rf '%s/doc'" % numpy_target)
- run("rm -rf '%s/tests'" % numpy_target)
- run("rm -rf '%s/f2py'" % numpy_target)
- run("find '%s' -type d -name 'include' -prune -exec rm -rf {} ';'" % numpy_target)
- run("find '%s' -type d -name '*.h' -prune -exec rm -rf {} ';'" % numpy_target)
- run("find '%s' -type d -name '*.a' -prune -exec rm -rf {} ';'" % numpy_target)
- else:
- print 'Failed to find numpy at %s, skipping copying' % numpy_src
- del numpy_src, numpy_target
-
- if env['WITH_BF_PYTHON_INSTALL_REQUESTS']:
- requests_src = py_src + "/site-packages/requests"
- requests_target = py_target + "/site-packages/requests"
- if os.path.exists(requests_src):
- run("cp -R '%s' '%s'" % (requests_src, os.path.dirname(requests_target)))
- run("find '%s' -type d -name '*.pem -prune -exec rm -rf {} ';'" % requests_target)
- else:
- print('Failed to find requests at %s, skipping copying' % requests_src)
- del requests_src, requests_target
-
- run("find '%s' -type d -name 'test' -prune -exec rm -rf {} ';'" % py_target)
- run("find '%s' -type d -name '__pycache__' -exec rm -rf {} ';'" % py_target)
- run("find '%s' -name '*.py[co]' -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\"'
-
- os.system('dir /b/s '+bscpathcollect+' >'+bscpathtmp)
-
- 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)
-
-class BlenderEnvironment(SConsEnvironment):
-
- PyBundleActionAdded = False
-
- 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', 'win64-mingw'):
- 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)
-
- def BlenderLib(self=None, libname=None, sources=None, includes=[], defines=[], libtype='common', priority = 100, compileflags=None, cc_compileflags=None, cxx_compileflags=None, cc_compilerchange=None, cxx_compilerchange=None):
- global vcp
-
- # sanity check
- # run once in a while to check we dont have duplicates
- if 0:
- for name, dirs in (("source", sources), ("include", includes)):
- files_clean = [os.path.normpath(f) for f in dirs]
- files_clean_set = set(files_clean)
- if len(files_clean) != len(files_clean_set):
- for f in sorted(files_clean_set):
- if f != '.' and files_clean.count(f) > 1:
- raise Exception("Found duplicate %s %r" % (name, f))
- del name, dirs, files_clean, files_clean_set, f
- # end sanity check
-
- 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 q in libname:
- 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)
- if cc_compilerchange:
- lenv.Replace(CC = cc_compilerchange)
- if cxx_compilerchange:
- lenv.Replace(CXX = cxx_compilerchange)
- 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'] 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()
- lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
- lenv.Append(LINKFLAGS = lenv['BF_PROGRAM_LINKFLAGS'])
- if lenv['OURPLATFORM'] in ('win32-mingw', 'win64-mingw', 'linuxcross', 'cygwin', 'linux'):
- lenv.Replace(LINK = '$CXX')
- if lenv['OURPLATFORM'] in ('win32-vc', 'cygwin', 'win64-vc'):
- if lenv['BF_DEBUG']:
- lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb','/NODEFAULTLIB:libcmt'])
- if lenv['OURPLATFORM']=='linux':
- if lenv['WITH_BF_PYTHON']:
- lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
- if lenv['OURPLATFORM']=='sunos5':
- 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':
- 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'] and
- not lenv['WITHOUT_BF_PYTHON_UNPACK'] and
- not BlenderEnvironment.PyBundleActionAdded):
- lenv.AddPostAction(prog,Action(UnixPyBundle,strfunction=my_unixpybundle_print))
- BlenderEnvironment.PyBundleActionAdded = True
- 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'] and
- not lenv['WITHOUT_BF_PYTHON_UNPACK'] and
- not BlenderEnvironment.PyBundleActionAdded):
- lenv.AddPostAction(prog,Action(WinPyBundle,strfunction=my_winpybundle_print))
- BlenderEnvironment.PyBundleActionAdded = True
- 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