svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22717:22875
[blender.git] / tools / btools.py
index 66d5ecc6b9a1c7638fb0f30769f450a91da23108..1ae952adbc71d4cb242d47998a132eb1a8a9c12f 100755 (executable)
@@ -19,60 +19,71 @@ BoolVariable = SCons.Variables.BoolVariable
 def print_arguments(args, bc):
        if len(args):
                for k,v in args.iteritems():
+                       if type(v)==list:
+                               v = ' '.join(v)
                        print '\t'+bc.OKBLUE+k+bc.ENDC+' = '+bc.OKGREEN + v + bc.ENDC
        else:
                print '\t'+bc.WARNING+'No  command-line arguments given'+bc.ENDC
 
 def validate_arguments(args, bc):
        opts_list = [
-                       'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'BF_PYTHON_LINKFLAGS', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
+                       'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
                        'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
                        'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
+                       'BF_LIBSAMPLERATE', 'BF_LIBSAMPLERATE_INC', 'BF_LIBSAMPLERATE_LIB', 'BF_LIBSAMPLERATE_LIBPATH',
+                       'WITH_BF_JACK', 'BF_JACK', 'BF_JACK_INC', 'BF_JACK_LIB', 'BF_JACK_LIBPATH',
+                       'WITH_BF_SNDFILE', 'BF_SNDFILE', 'BF_SNDFILE_INC', 'BF_SNDFILE_LIB', 'BF_SNDFILE_LIBPATH',
                        'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
-                       'WITH_BF_FMOD',
                        'WITH_BF_OPENEXR', 'BF_OPENEXR', 'BF_OPENEXR_INC', 'BF_OPENEXR_LIB', 'BF_OPENEXR_LIBPATH', 'WITH_BF_STATICOPENEXR', 'BF_OPENEXR_LIB_STATIC',
                        'WITH_BF_DDS',
                        'WITH_BF_FFMPEG', 'BF_FFMPEG_LIB','BF_FFMPEG_EXTRA', 'BF_FFMPEG',  'BF_FFMPEG_INC',
                        'WITH_BF_OGG', 'BF_OGG', 'BF_OGG_LIB',
                        'WITH_BF_JPEG', 'BF_JPEG', 'BF_JPEG_INC', 'BF_JPEG_LIB', 'BF_JPEG_LIBPATH',
+                       'WITH_BF_OPENJPEG', 'BF_OPENJPEG', 'BF_OPENJPEG_INC', 'BF_OPENJPEG_LIB', 'BF_OPENJPEG_LIBPATH',
+                       'WITH_BF_REDCODE', 'BF_REDCODE', 'BF_REDCODE_INC', 'BF_REDCODE_LIB', 'BF_REDCODE_LIBPATH',
                        'WITH_BF_PNG', 'BF_PNG', 'BF_PNG_INC', 'BF_PNG_LIB', 'BF_PNG_LIBPATH',
                        'BF_TIFF', 'BF_TIFF_INC', 'BF_TIFF_LIB', 'BF_TIFF_LIBPATH',
                        'WITH_BF_ZLIB', 'BF_ZLIB', 'BF_ZLIB_INC', 'BF_ZLIB_LIB', 'BF_ZLIB_LIBPATH',
                        'WITH_BF_INTERNATIONAL',
                        'BF_GETTEXT', 'BF_GETTEXT_INC', 'BF_GETTEXT_LIB', 'BF_GETTEXT_LIBPATH',
                        'WITH_BF_ICONV', 'BF_ICONV', 'BF_ICONV_INC', 'BF_ICONV_LIB', 'BF_ICONV_LIBPATH',
-                       'WITH_BF_ODE', 'BF_ODE', 'BF_ODE_INC', 'BF_ODE_LIB',
                        'WITH_BF_GAMEENGINE', 'WITH_BF_BULLET', 'BF_BULLET', 'BF_BULLET_INC', 'BF_BULLET_LIB',
-                       'BF_SOLID', 'BF_SOLID_INC', 'BF_WINTAB', 'BF_WINTAB_INC',
-                       'WITH_BF_YAFRAY',
+                       'BF_WINTAB', 'BF_WINTAB_INC',
                        'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH',
                        'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH',
-                       'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC', 'BF_OPENGL_LINKFLAGS',
-                       'WITH_BF_FTGL', 'BF_FTGL', 'BF_FTGL_INC', 'BF_FTGL_LIB',
+                       'WITH_BF_FFTW3', 'BF_FFTW3', 'BF_FFTW3_INC', 'BF_FFTW3_LIB', 'BF_FFTW3_LIBPATH',
+                       'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC',
                        'WITH_BF_PLAYER',
                        'WITH_BF_NOBLENDER',
                        'WITH_BF_BINRELOC',
-                       'CFLAGS', 'CCFLAGS', 'CXXFLAGS', 'CPPFLAGS',
-                       'REL_CFLAGS', 'REL_CCFLAGS', 'REL_CXXFLAGS',
-                       'BF_PROFILE_FLAGS', 'BF_PROFILE_FLAGS', 'BF_PROFILE_CXXFLAGS',
-                       'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
-                       'C_WARN', 'CC_WARN', 'CXX_WARN',
-                       'LLIBS', 'PLATFORM_LINKFLAGS',
                        'LCGDIR',
                        'BF_CXX', 'WITH_BF_STATICCXX', 'BF_CXX_LIB_STATIC',
-                       'WITH_BF_VERSE', 'BF_VERSE_INCLUDE',
-                       'VERSE_BUILD_BINARY', 'VERSE_BUILD_DIR', 'VERSE_REGEN_PROTO',
                        'BF_TWEAK_MODE', 'BF_SPLIT_SRC',
                        'WITHOUT_BF_INSTALL',
+                       'WITHOUT_BF_PYTHON_INSTALL',
                        'WITH_BF_OPENMP',
-                       'WITHOUT_BF_INSTALL',
                        'BF_FANCY', 'BF_QUIET',
                        'BF_X264_CONFIG',
                        'BF_XVIDCORE_CONFIG',
+                       'WITH_BF_LCMS', 'BF_LCMS_LIB',
                        'WITH_BF_DOCS',
                        'BF_NUMJOBS',
+                       'BF_MSVS',
                        ]
-
+       
+       # Have options here that scons expects to be lists
+       opts_list_split = [
+                       'BF_PYTHON_LINKFLAGS',
+                       'BF_OPENGL_LINKFLAGS',
+                       'CFLAGS', 'CCFLAGS', 'CXXFLAGS', 'CPPFLAGS',
+                       'REL_CFLAGS', 'REL_CCFLAGS', 'REL_CXXFLAGS',
+                       'BF_PROFILE_CFLAGS', 'BF_PROFILE_CCFLAGS', 'BF_PROFILE_CXXFLAGS', 'BF_PROFILE_LINKFLAGS',
+                       'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
+                       'C_WARN', 'CC_WARN', 'CXX_WARN',
+                       'LLIBS', 'PLATFORM_LINKFLAGS',
+       ]
+       
+       
        arg_list = ['BF_DEBUG', 'BF_QUIET', 'BF_CROSS', 'BF_UPDATE',
                        'BF_INSTALLDIR', 'BF_TOOLSET', 'BF_BINNAME',
                        'BF_BUILDDIR', 'BF_FANCY', 'BF_QUICK', 'BF_PROFILE',
@@ -81,12 +92,13 @@ def validate_arguments(args, bc):
                        'BF_LISTDEBUG', 'LCGDIR', 'BF_X264_CONFIG', 'BF_XVIDCORE_CONFIG',
                        'BF_DOCDIR']
 
-       all_list = opts_list + arg_list
        okdict = {}
 
        for k,v in args.iteritems():
-               if k in all_list:
+               if (k in opts_list) or (k in arg_list):
                        okdict[k] = v
+               elif k in opts_list_split:
+                       okdict[k] = v.split() # "" have already been stripped
                else:
                        print '\t'+bc.WARNING+'Invalid argument: '+bc.ENDC+k+'='+v
 
@@ -136,17 +148,7 @@ def SetupSpawn( env ):
 def read_opts(cfg, args):
        localopts = Variables.Variables(cfg, args)
        localopts.AddVariables(
-               ('VERSE_BUILD_BINARY', 'Build a release or debug binary.', 'release'),
-               ('VERSE_BUILD_DIR', 'Target directory for intermediate files.', "${BF_BUILDDIR}/extern/verse"),
-               ('VERSE_REGEN_PROTO', 'Whether to regenerate the protocol files', 'yes'),
-               (BoolVariable('WITH_BF_VERSE', 'Use VERSE if true', False)),
-               ('BF_VERSE_INCLUDE', 'verse include dir', '/usr/include'),
                ('LCGDIR', 'location of cvs lib dir'),
-               ('VERSE_BUILD_BINARY', 'Build a release or debug binary.', 'release'),
-               ('VERSE_BUILD_DIR', 'Target directory for intermediate files.', "${BF_BUILDDIR}/extern/verse"),
-               ('VERSE_REGEN_PROTO', 'Whether to regenerate the protocol files', 'yes'),
-               ('BF_DEBUG_LIBS', 'list of libraries to build with debug symbols'),
-
                (BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
                ('BF_PYTHON', 'base path for python', ''),
                ('BF_PYTHON_VERSION', 'Python version to use', ''),
@@ -159,8 +161,7 @@ def read_opts(cfg, args):
                (BoolVariable('WITH_BF_STATICPYTHON', 'Staticly link to python', False)),
 
                (BoolVariable('BF_NO_ELBEEM', 'Disable Fluid Sim', False)),
-               (BoolVariable('WITH_BF_YAFRAY', 'Enable Yafray', True)),
-
+               ('BF_PROFILE_FLAGS', 'Profiling compiler flags', ''),
                (BoolVariable('WITH_BF_OPENAL', 'Use OpenAL if true', False)),
                ('BF_OPENAL', 'base path for OpenAL', ''),
                ('BF_OPENAL_INC', 'include path for python headers', ''),
@@ -171,18 +172,32 @@ def read_opts(cfg, args):
 
                (BoolVariable('WITH_BF_SDL', 'Use SDL if true', False)),
                ('BF_SDL', 'SDL base path', ''),
-               ('BF_SDL_INC', 'SDL include path', ''),  #$(shell $(BF_SDL)/bin/sdl-config --cflags)
-               ('BF_SDL_LIB', 'SDL library', ''),        #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
+               ('BF_SDL_INC', 'SDL include path', ''),
+               ('BF_SDL_LIB', 'SDL library', ''),
                ('BF_SDL_LIBPATH', 'SDL library path', ''),
 
+               ('BF_LIBSAMPLERATE', 'libsamplerate aka SRC base path', ''),
+               ('BF_LIBSAMPLERATE_INC', 'libsamplerate aka SRC include path', ''),
+               ('BF_LIBSAMPLERATE_LIB', 'libsamplerate aka SRC library', ''),
+               ('BF_LIBSAMPLERATE_LIBPATH', 'libsamplerate aka SRC library path', ''),
+
+               (BoolVariable('WITH_BF_JACK', 'Enable jack support if true', True)),
+               ('BF_JACK', 'jack base path', ''),
+               ('BF_JACK_INC', 'jack include path', ''),
+               ('BF_JACK_LIB', 'jack library', ''),
+               ('BF_JACK_LIBPATH', 'jack library path', ''),
+
+               (BoolVariable('WITH_BF_SNDFILE', 'Enable sndfile support if true', True)),
+               ('BF_SNDFILE', 'sndfile base path', ''),
+               ('BF_SNDFILE_INC', 'sndfile include path', ''),
+               ('BF_SNDFILE_LIB', 'sndfile library', ''),
+               ('BF_SNDFILE_LIBPATH', 'sndfile library path', ''),
+
                ('BF_PTHREADS', 'Pthreads base path', ''),
                ('BF_PTHREADS_INC', 'Pthreads include path', ''),
                ('BF_PTHREADS_LIB', 'Pthreads library', ''),
                ('BF_PTHREADS_LIBPATH', 'Pthreads library path', ''),
 
-               (BoolVariable('WITH_BF_FMOD', 'Use FMOD if true', False)),
-               #  BF_FMOD = $(LCGDIR)/fmod
-
                (BoolVariable('WITH_BF_OPENEXR', 'Use OPENEXR if true', True)),
                (BoolVariable('WITH_BF_STATICOPENEXR', 'Staticly link to OpenEXR', False)),
                ('BF_OPENEXR', 'OPENEXR base path', ''),
@@ -241,7 +256,7 @@ def read_opts(cfg, args):
                ('BF_ZLIB_LIB', 'ZLib library', ''),
                ('BF_ZLIB_LIBPATH', 'ZLib library path', ''),
 
-               (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext and Freetype if true', True)),
+               (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext if true', True)),
 
                ('BF_GETTEXT', 'gettext base path', ''),
                ('BF_GETTEXT_INC', 'gettext include path', ''),
@@ -254,20 +269,13 @@ def read_opts(cfg, args):
                ('BF_ICONV_LIB', 'iconv library', ''),
                ('BF_ICONV_LIBPATH', 'iconv library path', ''),
                
-               (BoolVariable('WITH_BF_GAMEENGINE', 'Build with gameengine' , True)),
-
-               (BoolVariable('WITH_BF_ODE', 'Use ODE if true', True)),
-               ('BF_ODE', 'ODE base path', ''),
-               ('BF_ODE_INC', 'ODE include path' , ''),
-               ('BF_ODE_LIB', 'ODE library', ''),
+               (BoolVariable('WITH_BF_GAMEENGINE', 'Build with gameengine' , False)),
 
                (BoolVariable('WITH_BF_BULLET', 'Use Bullet if true', True)),
                ('BF_BULLET', 'Bullet base dir', ''),
                ('BF_BULLET_INC', 'Bullet include path', ''),
                ('BF_BULLET_LIB', 'Bullet library', ''),
                
-               ('BF_SOLID', 'Solid base dir', '#/extern/solid'),
-               ('BF_SOLID_INC', 'Solid include path', ''),
                ('BF_WINTAB', 'WinTab base dir', ''),
                ('BF_WINTAB_INC', 'WinTab include dir', ''),
                ('BF_CXX', 'c++ base path for libstdc++, only used when static linking', ''),
@@ -291,7 +299,7 @@ def read_opts(cfg, args):
 ##BF_PARANOID = True
 ##
 ### enable freetype2 support for text objects
-               (BoolVariable('WITH_BF_FREETYPE', 'Use FreeType2 if true', False)),
+               (BoolVariable('WITH_BF_FREETYPE', 'Use FreeType2 if true', True)),
                ('BF_FREETYPE', 'Freetype base path', ''),
                ('BF_FREETYPE_INC', 'Freetype include path', ''),
                ('BF_FREETYPE_LIB', 'Freetype library', ''),
@@ -304,6 +312,12 @@ def read_opts(cfg, args):
                ('BF_QUICKTIME_INC', 'QuickTime include path', ''),
                ('BF_QUICKTIME_LIB', 'QuickTime library', ''),
                ('BF_QUICKTIME_LIBPATH', 'QuickTime library path', ''),
+               
+               (BoolVariable('WITH_BF_FFTW3', 'Use FFTW3 if true', False)),
+               ('BF_FFTW3', 'FFTW3 base path', ''),
+               ('BF_FFTW3_INC', 'FFTW3 include path', ''),
+               ('BF_FFTW3_LIB', 'FFTW3 library', ''),
+               ('BF_FFTW3_LIBPATH', 'FFTW3 library path', ''),
 
                (BoolVariable('WITH_BF_STATICOPENGL', 'Use MESA if true', True)),
                ('BF_OPENGL', 'OpenGL base path', ''),
@@ -313,11 +327,6 @@ def read_opts(cfg, args):
                ('BF_OPENGL_LIB_STATIC', 'OpenGL static libraries', ''),
                ('BF_OPENGL_LINKFLAGS', 'OpenGL link flags', ''),
                
-               (BoolVariable('WITH_BF_FTGL', 'Use FTGL if true', True)),
-               ('BF_FTGL', 'FTGL base path', ''),
-               ('BF_FTGL_INC', 'FTGL include path', ''),
-               ('BF_FTGL_LIB', 'FTGL libraries', ''),
-
                (BoolVariable('WITH_BF_PLAYER', 'Build blenderplayer if true', False)),
                (BoolVariable('WITH_BF_NOBLENDER', 'Do not build blender if true', False)),
 
@@ -340,6 +349,7 @@ def read_opts(cfg, args):
                ('BF_PROFILE_CFLAGS', 'C only profiling flags', ''),
                ('BF_PROFILE_CCFLAGS', 'C and C++ profiling flags', ''),
                ('BF_PROFILE_CXXFLAGS', 'C++ only profiling flags', ''),
+               ('BF_PROFILE_LINKFLAGS', 'Profile linkflags', ''),
 
                (BoolVariable('BF_DEBUG', 'Add debug flags if true', False)),
                ('BF_DEBUG_CFLAGS', 'C only debug flags', ''),
@@ -360,16 +370,21 @@ def read_opts(cfg, args):
                (BoolVariable('BF_TWEAK_MODE', 'Enable tweak mode if true', False)),
                (BoolVariable('BF_SPLIT_SRC', 'Split src lib into several chunks if true', False)),
                (BoolVariable('WITHOUT_BF_INSTALL', 'dont install if true', False)),
+               (BoolVariable('WITHOUT_BF_PYTHON_INSTALL', 'dont install Python modules if true', False)),
                (BoolVariable('BF_FANCY', 'Enable fancy output if true', True)),
                (BoolVariable('BF_QUIET', 'Enable silent output if true', True)),
                (BoolVariable('WITH_BF_BINRELOC', 'Enable relocatable binary (linux only)', False)),
+               
+               (BoolVariable('WITH_BF_LCMS', 'Enable color correction with lcms', False)),
+               ('BF_LCMS_LIB', 'LCMSlibrary', 'lcms'),
 
                ('BF_X264_CONFIG', 'configuration flags for x264', ''),
                ('BF_XVIDCORE_CONFIG', 'configuration flags for xvidcore', ''),
                (BoolVariable('WITH_BF_DOCS', 'Generate API documentation', False)),
                
                ('BF_CONFIG', 'SCons python config file used to set default options', 'user_config.py'),
-               ('BF_NUMJOBS', 'Number of build processes to spawn', '1')
+               ('BF_NUMJOBS', 'Number of build processes to spawn', '1'),
+               ('BF_MSVS', 'Generate MSVS project files and solution', False)
 
        ) # end of opts.AddOptions()
 
@@ -409,9 +424,13 @@ def NSIS_Installer(target=None, source=None, env=None):
 
        ns = open("00.sconsblender.nsi","r")
 
+
        ns_cnt = str(ns.read())
        ns.close()
 
+       # set Python version we compile against
+       ns_cnt = string.replace(ns_cnt, "[PYTHON_VERSION]", env['BF_PYTHON_VERSION'])
+
        # do root
        rootlist = []
        rootdir = os.listdir(inst_dir+"\\")
@@ -544,8 +563,10 @@ def NSIS_Installer(target=None, source=None, env=None):
        new_nsis = open(tmpnsi, 'w')
        new_nsis.write(ns_cnt)
        new_nsis.close()
+       print "Preparing nsis file looks ok\n"
 
        os.chdir(start_dir)
+       print "try to launch 'makensis' ...make sure it is on the path \n"
 
        cmdline = "makensis " + "\""+tmpnsi+"\""