diff options
author | Nathan Letwory <nathan@letworyinteractive.com> | 2008-11-10 00:00:49 +0300 |
---|---|---|
committer | Nathan Letwory <nathan@letworyinteractive.com> | 2008-11-10 00:00:49 +0300 |
commit | 0a8e8c8c9ea6e5acf65c2a4ee0c392328f5f96b8 (patch) | |
tree | 82499e8345a122a78ce9f478726efea8a4338c81 | |
parent | d5ae032a60cbcdd4d1c51ae6a3a94b111f092b69 (diff) |
* add Brecht's small patch to make values to BF_QUICK and BF_QUICKDEBUG function as partial search entries.
- this means you can do BF_QUICK=bf_ and it would build all libs that contain bf_ in their name. This makes
it easier to use, since you don't have to remember the exact names
* Update documentation to mention scons-local.
-rw-r--r-- | doc/blender-scons.txt | 74 | ||||
-rw-r--r-- | tools/Blender.py | 789 |
2 files changed, 434 insertions, 429 deletions
diff --git a/doc/blender-scons.txt b/doc/blender-scons.txt index f7ea7767441..016ba39fd09 100644 --- a/doc/blender-scons.txt +++ b/doc/blender-scons.txt @@ -26,8 +26,9 @@ $Id$ ---------------- To build Blender with the SCons scripts you need a full Python - install, version 2.4 or later (http://www.python.org) and a SCons - installation, version v1.1.0 (http://www.scons.org). + install, version 2.4 or later (http://www.python.org). We already provide + a scons-local installation, which can be found in the scons/ subdirectory. + This document uses the scons-local installation for its examples. Check from the page http://www.blender.org/development/building-blender/getting-dependencies/ @@ -38,9 +39,14 @@ $Id$ In the base directory of the sources (from now on called $BLENDERHOME) you'll see a file named SConstruct. This is the entry point for the SCons build system. In a terminal, change to this directory. To just - build, issue the command 'scons': + build, start the SCons entry script on Windows (will be used for the remainder + of this document): - % scons + % python scons\scons.py + + On a Unix-compatible system it would be + + % python ./scons/scons.py This will start the build process with default values. Depending on your platform you may see colour in your output (non-Windows @@ -49,8 +55,9 @@ $Id$ build are configured. The build uses BF_BUILDDIR to build into and BF_INSTALLDIR to - finally copy all needed files to get a proper setup. These - variabbles have default values for every platform in + finally copy all needed files to get a proper setup. The BF_DOCDIR is + used to generate Blender Python documentation files to. These + variables have default values for every platform in $BLENDERHOME/config/(platform)-config.py. After the build successfully completes, you can find everything you need in BF_INSTALLDIR. @@ -59,7 +66,7 @@ $Id$ As an extra dependency, you need the MoreInfo plugin too. The creation of the installer is tied into the build process and can be triggered with: - % scons nsis + % python scons\scons.py nsis Configuring the build @@ -76,20 +83,21 @@ $Id$ (TBD: add cygwin, solaris and freebsd support) These files you will normally not change. If you need to override - a default value, make a copy of the proper configuration to - $BLENDERHOME/user-config.py. This file you can modify to your - likings. Any value set here will override the ones from the - (platform)-config.py. + a default value, make a file called $BLENDERHOME/user-config.py, and copy + settings from the config/(platform)-config.py that you want to change. Don't + copy the entire file (unless explicitely stated in the configuration file), + because you may not get updated options you don't change yourself, which may + result in build errors. You can use BF_CONFIG argument to override the default user-config.py check. This is just like the user-config.py, but just with another name: - % scons BF_CONFIG=myownsettings + % python scons\scons.py BF_CONFIG=myownsettings If you want to quickly test a new setting, you can give the option also on the command-line: - % scons BF_BUILDDIR=../mybuilddir WITH_BF_OPENEXR=0 + % python scons\scons.py BF_BUILDDIR=../mybuilddir WITH_BF_OPENEXR=0 This command sets the build directory to BF_BUILDDIR and disables OpenEXR support. @@ -97,7 +105,7 @@ $Id$ If you need to know what can be set through the command-line, run scons with -h: - % scons -h + % python scons\scons.py -h This command will print a long list with settable options and what every option means. Many of the default values will be empty, and @@ -118,11 +126,11 @@ $Id$ you need to see the full command-line for compiles, then you can change that behaviour. Also the use of colours can be changed: - % scons BF_FANCY=0 + % python scons\scons.py BF_FANCY=0 This will disable the use of colours. - % scons BF_QUIET=0 + % python scons\scons.py BF_QUIET=0 This will give the old, noisy output. Every command-line per compile is printed out in its full glory. This is very useful when @@ -133,11 +141,11 @@ $Id$ Compiling Only Some Libraries ----------------------------- - Scons now has support for specifying a list of libraries that are + Our implementation now has support for specifying a list of libraries that are exclusively compiled, ignoring all other libraries. This is invoked with the BF_QUICK arguments; for example: - % scons BF_QUICK=src,bf_blenkernel + % python scons\scons.py BF_QUICK=src,bf_blenkernel Note that this not the same as passing a list of folders as in the makefile's "quicky" command. In Scons, all of Blender's code modules @@ -157,7 +165,7 @@ $Id$ BF_QUICKDEBUG is similar to BF_QUICK: - % scons BF_QUICKDEBUG=src,bf_blenkernel,some-other-lib + % python scons\scons.py BF_QUICKDEBUG=src,bf_blenkernel,some-other-lib To use BF_DEBUG_LIBS, put something like the following in you user-config.py: @@ -184,14 +192,8 @@ $Id$ On Windows with all of the three toolset installed you need to specify what toolset to use - % scons BF_TOOLSET=msvc - % scons BF_TOOLSET=mingw - - If you have only the toolkit installed, you will also need to give - BF_TOOLSET=mstoolkit on the command-line, to make sure everything is - setup properly. Currently there is no good mechanism to automatically - determine wether the found 'cl.exe' is from the toolkit or from a - complete install. + % python scons\scons.py BF_TOOLSET=msvc + % python scons\scons.py BF_TOOLSET=mingw LINUX and OS X @@ -204,30 +206,26 @@ $Id$ Build Blender with the defaults: - % scons + % python scons\scons.py Build Blender, but disable OpenEXR support: - % scons WITH_BF_OPENEXR=0 + % python scons\scons.py WITH_BF_OPENEXR=0 Build Blender, enable debug symbols: - % scons BF_DEBUG=1 + % python scons\scons.py BF_DEBUG=1 Build Blender, install to different directory: - % scons BF_INSTALLDIR=/tmp/testbuild + % python scons\scons.py BF_INSTALLDIR=../myown/installdir - Build Blender in /tmp/obj and install to /usr/local: + Build Blender in ../myown/builddir and install to ../myown/installdir: - % scons BF_BUILDDIR=/tmp/obj BF_INSTALLDIR=/usr/local + % python scons\scons.py BF_BUILDDIR=../myown/builddir BF_INSTALLDIR=../myown/installdir Clean BF_BUILDDIR: - % scons clean - - Clean out the installed files: - - % scons -c + % python scons\scons.py clean /Nathan Letwory (jesterKing) diff --git a/tools/Blender.py b/tools/Blender.py index ef87bc270a1..603be815909 100644 --- a/tools/Blender.py +++ b/tools/Blender.py @@ -52,443 +52,450 @@ possible_types = ['core'] # can be set in ie. SConstruct libs = {} 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 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 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" + 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] - lst.append('#' + root_build_dir + 'lib/'+lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX']) + lst = [] + if libtype in possible_types: + curlib = libs[libtype] + sortlist = curlib.keys() + sortlist.sort() + for sk in sortlist: + v = curlib[sk] + lst.append('#' + root_build_dir + 'lib/'+lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX']) - return lst + return lst ## TODO: static linking def setup_staticlibs(lenv): - statlibs = [ - #here libs for static linking - ] - libincs = [ - '/usr/lib', - lenv['BF_OPENGL_LIBPATH'], - lenv['BF_JPEG_LIBPATH'], - lenv['BF_PNG_LIBPATH'], - lenv['BF_ZLIB_LIBPATH'], - lenv['BF_ICONV_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_FFMPEG']: - libincs += Split(lenv['BF_FFMPEG_LIBPATH']) - if lenv['WITH_BF_STATICCXX']: - statlibs += Split(lenv['BF_CXX_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_INTERNATIONAL']: - libincs += Split(lenv['BF_GETTEXT_LIBPATH']) - libincs += Split(lenv['BF_FREETYPE_LIBPATH']) - 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_PYTHON'] and lenv['WITH_BF_STATICPYTHON']: - statlibs += Split(lenv['BF_PYTHON_LIB_STATIC']) - - if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'): - libincs += Split(lenv['BF_PTHREADS_LIBPATH']) - - return statlibs, libincs + statlibs = [ + #here libs for static linking + ] + libincs = [ + '/usr/lib', + lenv['BF_OPENGL_LIBPATH'], + lenv['BF_JPEG_LIBPATH'], + lenv['BF_PNG_LIBPATH'], + lenv['BF_ZLIB_LIBPATH'], + lenv['BF_ICONV_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_FFMPEG']: + libincs += Split(lenv['BF_FFMPEG_LIBPATH']) + if lenv['WITH_BF_STATICCXX']: + statlibs += Split(lenv['BF_CXX_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_INTERNATIONAL']: + libincs += Split(lenv['BF_GETTEXT_LIBPATH']) + libincs += Split(lenv['BF_FREETYPE_LIBPATH']) + 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_PYTHON'] and lenv['WITH_BF_STATICPYTHON']: + statlibs += Split(lenv['BF_PYTHON_LIB_STATIC']) + + if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'): + libincs += Split(lenv['BF_PTHREADS_LIBPATH']) + + return statlibs, libincs def setup_syslibs(lenv): - syslibs = [ - - lenv['BF_JPEG_LIB'], - lenv['BF_PNG_LIB'], - lenv['BF_ZLIB_LIB'] - ] - - if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']: - if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc'): - syslibs.append(lenv['BF_PYTHON_LIB']+'_d') - else: - syslibs.append(lenv['BF_PYTHON_LIB']) - if lenv['WITH_BF_INTERNATIONAL']: - syslibs += Split(lenv['BF_FREETYPE_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_FFMPEG']: - syslibs += Split(lenv['BF_FFMPEG_LIB']) - if lenv['WITH_BF_OGG']: - syslibs += Split(lenv['BF_OGG_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'): - syslibs += Split(lenv['BF_PTHREADS_LIB']) - - syslibs += Split(lenv['LLIBS']) - - return syslibs + syslibs = [ + + lenv['BF_JPEG_LIB'], + lenv['BF_PNG_LIB'], + lenv['BF_ZLIB_LIB'] + ] + + if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']: + if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc'): + syslibs.append(lenv['BF_PYTHON_LIB']+'_d') + else: + syslibs.append(lenv['BF_PYTHON_LIB']) + if lenv['WITH_BF_INTERNATIONAL']: + syslibs += Split(lenv['BF_FREETYPE_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_FFMPEG']: + syslibs += Split(lenv['BF_FFMPEG_LIB']) + if lenv['WITH_BF_OGG']: + syslibs += Split(lenv['BF_OGG_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'): + syslibs += Split(lenv['BF_PTHREADS_LIB']) + + syslibs += Split(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 + 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 ## 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 - - obj = [] - if lenv['BF_BUILDINFO']: - if sys.platform=='win32': - build_info_file = open("source/creator/winbuildinfo.h", 'w') - build_info_file.write("char *build_date=\"%s\";\n"%build_date) - build_info_file.write("char *build_time=\"%s\";\n"%build_time) - build_info_file.write("char *build_rev=\"%s\";\n"%build_rev) - build_info_file.write("char *build_platform=\"win32\";\n") - build_info_file.write("char *build_type=\"dynamic\";\n") - build_info_file.close() - lenv.Append (CPPDEFINES = ['NAN_BUILDINFO', 'BUILD_DATE']) - else: - lenv.Append (CPPDEFINES = ['BUILD_TIME=\'"%s"\''%(build_time), - 'BUILD_DATE=\'"%s"\''%(build_date), - 'BUILD_TYPE=\'"dynamic"\'', - 'BUILD_REV=\'"%s"\''%(build_rev), - 'NAN_BUILDINFO', - 'BUILD_PLATFORM=\'"%s"\''%(sys.platform)]) - obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type, - [root_build_dir+'source/creator/buildinfo.c'])] - return obj + """ + 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 + + obj = [] + if lenv['BF_BUILDINFO']: + if sys.platform=='win32': + build_info_file = open("source/creator/winbuildinfo.h", 'w') + build_info_file.write("char *build_date=\"%s\";\n"%build_date) + build_info_file.write("char *build_time=\"%s\";\n"%build_time) + build_info_file.write("char *build_rev=\"%s\";\n"%build_rev) + build_info_file.write("char *build_platform=\"win32\";\n") + build_info_file.write("char *build_type=\"dynamic\";\n") + build_info_file.close() + lenv.Append (CPPDEFINES = ['NAN_BUILDINFO', 'BUILD_DATE']) + else: + lenv.Append (CPPDEFINES = ['BUILD_TIME=\'"%s"\''%(build_time), + 'BUILD_DATE=\'"%s"\''%(build_date), + 'BUILD_TYPE=\'"dynamic"\'', + 'BUILD_REV=\'"%s"\''%(build_rev), + 'NAN_BUILDINFO', + 'BUILD_PLATFORM=\'"%s"\''%(sys.platform)]) + 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_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) - - 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') - - 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 + 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_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 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) - - bldroot = env.Dir('.').abspath - binary = env['BINARYKIND'] - - if b=='verse': - print bc.OKBLUE+"no bundle for verse"+bc.ENDC - return 0 + import shutil + import commands + import os.path + + + a = '%s' % (target[0]) + builddir, b = os.path.split(a) + + 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 = builddir +'/' + "%s.app/Contents/Info.plist"%binary - cmd = builddir + '/' +'%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,builddir, binary, binary) - commands.getoutput(cmd) - cmd = 'mkdir %s/%s.app/Contents/MacOS/.blender/'%(builddir, binary) - print cmd - commands.getoutput(cmd) - cmd = builddir + '/%s.app/Contents/MacOS/.blender'%binary - shutil.copy(bldroot + '/bin/.blender/.bfont.ttf', cmd) - shutil.copy(bldroot + '/bin/.blender/.Blanguages', cmd) - cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary) - commands.getoutput(cmd) - cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) - commands.getoutput(cmd) - cmd = 'cp %s/bin/.blender/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary) - commands.getoutput(cmd) - cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) - commands.getoutput(cmd) - cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(builddir,binary, binary) - commands.getoutput(cmd) - cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(builddir, binary) - commands.getoutput(cmd) - cmd = 'find %s/%s.app -name .DS_Store -exec rm -rf {} \;'%(builddir, binary) - commands.getoutput(cmd) + + sourcedir = bldroot + '/source/darwin/%s.app'%binary + sourceinfo = bldroot + "/source/darwin/%s.app/Contents/Info.plist"%binary + targetinfo = builddir +'/' + "%s.app/Contents/Info.plist"%binary + cmd = builddir + '/' +'%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,builddir, binary, binary) + commands.getoutput(cmd) + cmd = 'mkdir %s/%s.app/Contents/MacOS/.blender/'%(builddir, binary) + print cmd + commands.getoutput(cmd) + cmd = builddir + '/%s.app/Contents/MacOS/.blender'%binary + shutil.copy(bldroot + '/bin/.blender/.bfont.ttf', cmd) + shutil.copy(bldroot + '/bin/.blender/.Blanguages', cmd) + cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary) + commands.getoutput(cmd) + cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) + commands.getoutput(cmd) + cmd = 'cp %s/bin/.blender/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary) + commands.getoutput(cmd) + cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) + commands.getoutput(cmd) + cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(builddir,binary, binary) + commands.getoutput(cmd) + cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(builddir, binary) + commands.getoutput(cmd) + cmd = 'find %s/%s.app -name .DS_Store -exec rm -rf {} \;'%(builddir, binary) + commands.getoutput(cmd) #### 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) + + 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): - 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'): - 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() - 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): - if not self or not libname or not sources: - print bc.FAIL+'Cannot continue. Missing argument for BuildBlenderLib '+libname+bc.ENDC - self.Exit() - if libname in quickie or len(quickie)==0: - if libname in quickdebug: - 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['WITH_BF_GAMEENGINE']: - lenv.Append(CPPDEFINES=['GAMEBLENDER=1']) - if lenv['WITH_BF_BULLET']: - lenv.Append(CPPDEFINES=['WITH_BULLET=1']) - 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.Append(CFLAGS = compileflags) - if cc_compileflags: - lenv.Append(CCFLAGS = cc_compileflags) - if cxx_compileflags: - lenv.Append(CXXFLAGS = cxx_compileflags) - lenv.Append(CFLAGS = lenv['C_WARN']) - lenv.Append(CCLAGS = lenv['CC_WARN']) - lenv.Append(CXXFLAGS = lenv['CXX_WARN']) - lib = lenv.Library(target= '#'+root_build_dir+'lib/'+libname, source=sources) - SConsEnvironment.Default(self, lib) # we add to default target, because this way we get some kind of progress info during build - 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, includes=None, libs=None, libpath=None, binarykind=''): - print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC - lenv = self.Clone() - if lenv['OURPLATFORM'] in ['win32-vc', 'cygwin']: - lenv.Append(LINKFLAGS = Split(lenv['PLATFORM_LINKFLAGS'])) - 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_FLAGS']) - lenv.Append(CPPPATH=includes) - 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']=='win32-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) - program_list.append(prog) - if lenv['OURPLATFORM']=='darwin': - lenv['BINARYKIND'] = binarykind - lenv.AddPostAction(prog,Action(AppIt,strfunction=my_appit_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 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'): + 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() + 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): + 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 + + 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['WITH_BF_GAMEENGINE']: + lenv.Append(CPPDEFINES=['GAMEBLENDER=1']) + if lenv['WITH_BF_BULLET']: + lenv.Append(CPPDEFINES=['WITH_BULLET=1']) + 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.Append(CFLAGS = compileflags) + if cc_compileflags: + lenv.Append(CCFLAGS = cc_compileflags) + if cxx_compileflags: + lenv.Append(CXXFLAGS = cxx_compileflags) + lenv.Append(CFLAGS = lenv['C_WARN']) + lenv.Append(CCLAGS = lenv['CC_WARN']) + lenv.Append(CXXFLAGS = lenv['CXX_WARN']) + lib = lenv.Library(target= '#'+root_build_dir+'lib/'+libname, source=sources) + SConsEnvironment.Default(self, lib) # we add to default target, because this way we get some kind of progress info during build + 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, includes=None, libs=None, libpath=None, binarykind=''): + print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC + lenv = self.Clone() + if lenv['OURPLATFORM'] in ['win32-vc', 'cygwin']: + lenv.Append(LINKFLAGS = Split(lenv['PLATFORM_LINKFLAGS'])) + 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_FLAGS']) + lenv.Append(CPPPATH=includes) + 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']=='win32-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) + program_list.append(prog) + if lenv['OURPLATFORM']=='darwin': + lenv['BINARYKIND'] = binarykind + lenv.AddPostAction(prog,Action(AppIt,strfunction=my_appit_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 |