2.5
[blender-staging.git] / SConstruct
1 #!/usr/bin/env python
2 # $Id$
3 # ***** BEGIN GPL LICENSE BLOCK *****
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software Foundation,
17 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18 #
19 # The Original Code is Copyright (C) 2006, Blender Foundation
20 # All rights reserved.
21 #
22 # The Original Code is: all of this file.
23 #
24 # Contributor(s): Nathan Letwory.
25 #
26 # ***** END GPL LICENSE BLOCK *****
27 #
28 # Main entry-point for the SCons building system
29 # Set up some custom actions and target/argument handling
30 # Then read all SConscripts and build
31
32 import sys
33 import os
34 import os.path
35 import string
36 import shutil
37 import glob
38 import re
39 from tempfile import mkdtemp
40
41 import tools.Blender
42 import tools.btools
43 import tools.bcolors
44
45 EnsureSConsVersion(1,0,0)
46
47 BlenderEnvironment = tools.Blender.BlenderEnvironment
48 btools = tools.btools
49 B = tools.Blender
50
51 ### globals ###
52 platform = sys.platform
53 quickie = None
54 quickdebug = None
55 nsis_build = None
56
57 ##### BEGIN SETUP #####
58
59 B.possible_types = ['core', 'common', 'blender', 'intern',
60                                         'international', 'game', 'game2',
61                                         'player', 'player2', 'system']
62
63 B.binarykind = ['blender' , 'blenderplayer']
64 ##################################
65 # target and argument validation #
66 ##################################
67 # XX cheating for BF_FANCY, we check for BF_FANCY before args are validated
68 use_color = ARGUMENTS.get('BF_FANCY', '1')
69 if platform=='win32':
70         use_color = None
71
72 if not use_color=='1':
73         B.bc.disable()
74         
75  #on defaut white Os X terminal, some colors are totally unlegible
76 if platform=='darwin':
77         B.bc.OKGREEN = '\033[34m'
78         B.bc.WARNING = '\033[36m'
79
80 # arguments
81 print B.bc.HEADER+'Command-line arguments'+B.bc.ENDC
82 B.arguments = btools.validate_arguments(ARGUMENTS, B.bc)
83 btools.print_arguments(B.arguments, B.bc)
84
85 # targets
86 print B.bc.HEADER+'Command-line targets'+B.bc.ENDC
87 B.targets = btools.validate_targets(COMMAND_LINE_TARGETS, B.bc)
88 btools.print_targets(B.targets, B.bc)
89
90 ##########################
91 # setting up environment #
92 ##########################
93
94 # handling cmd line arguments & config file
95
96 # first check cmdline for toolset and we create env to work on
97 quickie = B.arguments.get('BF_QUICK', None)
98 quickdebug = B.arguments.get('BF_QUICKDEBUG', None)
99
100 if quickdebug:
101         B.quickdebug=string.split(quickdebug, ',')
102 else:
103         B.quickdebug=[]
104
105 if quickie:
106         B.quickie=string.split(quickie,',')
107 else:
108         B.quickie=[]
109         
110 toolset = B.arguments.get('BF_TOOLSET', None)
111 if toolset:
112         print "Using " + toolset
113         if toolset=='mstoolkit':
114                 env = BlenderEnvironment(ENV = os.environ)
115                 env.Tool('mstoolkit', ['tools'])
116         else:
117                 env = BlenderEnvironment(tools=[toolset], ENV = os.environ)
118                 #if env:
119                 #       btools.SetupSpawn(env)
120 else:
121         env = BlenderEnvironment(ENV = os.environ)
122
123 if not env:
124         print "Could not create a build environment"
125         Exit()
126
127
128 cc = B.arguments.get('CC', None)
129 cxx = B.arguments.get('CXX', None)
130 if cc:
131         env['CC'] = cc
132 if cxx:
133         env['CXX'] = cxx
134
135 if env['CC'] in ['cl', 'cl.exe'] and sys.platform=='win32':
136         platform = 'win32-vc'
137 elif env['CC'] in ['gcc'] and sys.platform=='win32':
138         platform = 'win32-mingw'
139
140 env.SConscriptChdir(0)
141
142 crossbuild = B.arguments.get('BF_CROSS', None)
143 if crossbuild and platform!='win32':
144         platform = 'linuxcross'
145
146 env['OURPLATFORM'] = platform
147
148 configfile = 'config'+os.sep+platform+'-config.py'
149
150 if os.path.exists(configfile):
151         print B.bc.OKGREEN + "Using config file: " + B.bc.ENDC + configfile
152 else:
153         print B.bc.FAIL + configfile + " doesn't exist" + B.bc.ENDC
154
155 if crossbuild and env['PLATFORM'] != 'win32':
156         print B.bc.HEADER+"Preparing for crossbuild"+B.bc.ENDC
157         env.Tool('crossmingw', ['tools'])
158         # todo: determine proper libs/includes etc.
159         # Needed for gui programs, console programs should do without it
160         env.Append(LINKFLAGS=['-mwindows'])
161
162 userconfig = B.arguments.get('BF_CONFIG', 'user-config.py')
163 # first read platform config. B.arguments will override
164 optfiles = [configfile]
165 if os.path.exists(userconfig):
166         print B.bc.OKGREEN + "Using user-config file: " + B.bc.ENDC + userconfig
167         optfiles += [userconfig]
168 else:
169         print B.bc.WARNING + userconfig + " not found, no user overrides" + B.bc.ENDC
170
171 opts = btools.read_opts(optfiles, B.arguments)
172 opts.Update(env)
173
174 if not env['BF_FANCY']:
175         B.bc.disable()
176
177 SetOption('num_jobs', int(env['BF_NUMJOBS']))
178 print "Build with %d parallel jobs" % (GetOption('num_jobs'))
179
180 # disable elbeem (fluidsim) compilation?
181 if env['BF_NO_ELBEEM'] == 1:
182         env['CPPFLAGS'].append('-DDISABLE_ELBEEM')
183         env['CXXFLAGS'].append('-DDISABLE_ELBEEM')
184         env['CCFLAGS'].append('-DDISABLE_ELBEEM')
185
186 if env['WITH_BF_OPENMP'] == 1:
187                 if env['OURPLATFORM']=='win32-vc':
188                                 env['CCFLAGS'].append('/openmp')
189                                 env['CPPFLAGS'].append('/openmp')
190                                 env['CXXFLAGS'].append('/openmp')
191                 else:
192                         if env['CC'][-3:] == 'icc': # to be able to handle CC=/opt/bla/icc case
193                                 env.Append(LINKFLAGS=['-openmp', '-static-intel'])
194                                 env['CCFLAGS'].append('-openmp')
195                                 env['CPPFLAGS'].append('-openmp')
196                                 env['CXXFLAGS'].append('-openmp')
197                         else:
198                                 env.Append(CCFLAGS=['-fopenmp']) 
199                                 env.Append(CPPFLAGS=['-fopenmp'])
200                                 env.Append(CXXFLAGS=['-fopenmp'])
201                                 # env.Append(LINKFLAGS=['-fprofile-generate'])
202
203 #check for additional debug libnames
204
205 if env.has_key('BF_DEBUG_LIBS'):
206         B.quickdebug += env['BF_DEBUG_LIBS']
207
208 printdebug = B.arguments.get('BF_LISTDEBUG', 0)
209
210 # see if this linux distro has libalut
211
212 if env['OURPLATFORM'] == 'linux2' :
213         if env['WITH_BF_OPENAL']:
214                 mylib_test_source_file = """
215                 #include "AL/alut.h"
216                 int main(int argc, char **argv)
217                 {
218                         alutGetMajorVersion();
219                         return 0;
220                 }
221                 """
222
223                 def CheckFreeAlut(context,env):
224                         context.Message( B.bc.OKGREEN + "Linux platform detected:\n  checking for FreeAlut... " + B.bc.ENDC )
225                         env['LIBS'] = 'alut'
226                         result = context.TryLink(mylib_test_source_file, '.c')
227                         context.Result(result)
228                         return result
229
230                 env2 = env.Clone( LIBPATH = env['BF_OPENAL'] ) 
231                 sconf_temp = mkdtemp()
232                 conf = Configure( env2, {'CheckFreeAlut' : CheckFreeAlut}, sconf_temp, '/dev/null' )
233                 if conf.CheckFreeAlut( env2 ):
234                         env['BF_OPENAL_LIB'] += ' alut'
235                 del env2
236                 root = ''
237                 for root, dirs, files in os.walk(sconf_temp, topdown=False):
238                         for name in files:
239                                 os.remove(os.path.join(root, name))
240                         for name in dirs:
241                                 os.rmdir(os.path.join(root, name))
242                 if root: os.rmdir(root)
243
244 if len(B.quickdebug) > 0 and printdebug != 0:
245         print B.bc.OKGREEN + "Buildings these libs with debug symbols:" + B.bc.ENDC
246         for l in B.quickdebug:
247                 print "\t" + l
248
249 # remove stdc++ from LLIBS if we are building a statc linked CXXFLAGS
250 if env['WITH_BF_STATICCXX']:
251         if 'stdc++' in env['LLIBS']:
252                 env['LLIBS'] = env['LLIBS'].replace('stdc++', ' ')
253         else:
254                 print '\tcould not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform'
255
256 # check target for blenderplayer. Set WITH_BF_PLAYER if found on cmdline
257 if 'blenderplayer' in B.targets:
258         env['WITH_BF_PLAYER'] = True
259
260 if 'blendernogame' in B.targets:
261         env['WITH_BF_GAMEENGINE'] = False
262
263 if 'blenderlite' in B.targets:
264         env['WITH_BF_GAMEENGINE'] = False
265         env['WITH_BF_OPENAL'] = False
266         env['WITH_BF_OPENEXR'] = False
267         env['WITH_BF_ICONV'] = False
268         env['WITH_BF_INTERNATIONAL'] = False
269         env['WITH_BF_OPENJPEG'] = False
270         env['WITH_BF_FFMPEG'] = False
271         env['WITH_BF_QUICKTIME'] = False
272         env['WITH_BF_YAFRAY'] = False
273         env['WITH_BF_REDCODE'] = False
274         env['WITH_BF_FTGL'] = False
275         env['WITH_BF_DDS'] = False
276         env['WITH_BF_ZLIB'] = False
277         env['WITH_BF_SDL'] = False
278         env['WITH_BF_JPEG'] = False
279         env['WITH_BF_PNG'] = False
280         env['WITH_BF_ODE'] = False
281         env['WITH_BF_BULLET'] = False
282         env['WITH_BF_BINRELOC'] = False
283         env['BF_BUILDINFO'] = False
284         env['BF_NO_ELBEEM'] = True
285         env['WITH_BF_PYTHON'] = False
286
287 if env['WITH_BF_SDL'] == False and env['OURPLATFORM'] in ('win32-vc', 'win32-ming'):
288         env['PLATFORM_LINKFLAGS'].remove('/ENTRY:mainCRTStartup')
289         env['PLATFORM_LINKFLAGS'].append('/ENTRY:main')
290
291 # lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
292 #B.root_build_dir = B.arguments.get('BF_BUILDDIR', '..'+os.sep+'build'+os.sep+platform+os.sep)
293 B.root_build_dir = env['BF_BUILDDIR']
294 B.doc_build_dir = env['BF_DOCDIR']
295 if not B.root_build_dir[-1]==os.sep:
296         B.root_build_dir += os.sep
297 if not B.doc_build_dir[-1]==os.sep:
298         B.doc_build_dir += os.sep
299         
300 # We do a shortcut for clean when no quicklist is given: just delete
301 # builddir without reading in SConscripts
302 do_clean = None
303 if 'clean' in B.targets:
304         do_clean = True
305
306 if not quickie and do_clean:
307         if os.path.exists(B.doc_build_dir):
308                 print B.bc.HEADER+'Cleaning doc dir...'+B.bc.ENDC
309                 dirs = os.listdir(B.doc_build_dir)
310                 for entry in dirs:
311                         if os.path.isdir(B.doc_build_dir + entry) == 1:
312                                 print "clean dir %s"%(B.doc_build_dir+entry)
313                                 shutil.rmtree(B.doc_build_dir+entry)
314                         else: # remove file
315                                 print "remove file %s"%(B.doc_build_dir+entry)
316                                 os.remove(B.root_build_dir+entry)
317         if os.path.exists(B.root_build_dir):
318                 print B.bc.HEADER+'Cleaning build dir...'+B.bc.ENDC
319                 dirs = os.listdir(B.root_build_dir)
320                 for entry in dirs:
321                         if os.path.isdir(B.root_build_dir + entry) == 1:
322                                 print "clean dir %s"%(B.root_build_dir+entry)
323                                 shutil.rmtree(B.root_build_dir+entry)
324                         else: # remove file
325                                 print "remove file %s"%(B.root_build_dir+entry)
326                                 os.remove(B.root_build_dir+entry)
327                 for confile in ['extern/ffmpeg/config.mak', 'extern/x264/config.mak',
328                                 'extern/xvidcore/build/generic/platform.inc']:
329                         if os.path.exists(confile):
330                                 print "clean file %s"%confile
331                                 os.remove(confile)
332                 print B.bc.OKGREEN+'...done'+B.bc.ENDC
333         else:
334                 print B.bc.HEADER+'Already Clean, nothing to do.'+B.bc.ENDC
335         Exit()
336
337 if not os.path.isdir ( B.root_build_dir):
338         os.makedirs ( B.root_build_dir )
339         os.makedirs ( B.root_build_dir + 'source' )
340         os.makedirs ( B.root_build_dir + 'intern' )
341         os.makedirs ( B.root_build_dir + 'extern' )
342         os.makedirs ( B.root_build_dir + 'lib' )
343         os.makedirs ( B.root_build_dir + 'bin' )
344 if not os.path.isdir(B.doc_build_dir):
345         os.makedirs ( B.doc_build_dir )
346
347 Help(opts.GenerateHelpText(env))
348
349 # default is new quieter output, but if you need to see the 
350 # commands, do 'scons BF_QUIET=0'
351 bf_quietoutput = B.arguments.get('BF_QUIET', '1')
352 if env['BF_QUIET']:
353         B.set_quiet_output(env)
354 else:
355         if toolset=='msvc':
356                 B.msvc_hack(env)
357
358 print B.bc.HEADER+'Building in '+B.bc.ENDC+B.root_build_dir
359 env.SConsignFile(B.root_build_dir+'scons-signatures')
360 B.init_lib_dict()
361
362 ##### END SETUP ##########
363
364 Export('env')
365
366 BuildDir(B.root_build_dir+'/intern', 'intern', duplicate=0)
367 SConscript(B.root_build_dir+'/intern/SConscript')
368 BuildDir(B.root_build_dir+'/extern', 'extern', duplicate=0)
369 SConscript(B.root_build_dir+'/extern/SConscript')
370 BuildDir(B.root_build_dir+'/source', 'source', duplicate=0)
371 SConscript(B.root_build_dir+'/source/SConscript')
372
373 # now that we have read all SConscripts, we know what
374 # libraries will be built. Create list of
375 # libraries to give as objects to linking phase
376 mainlist = []
377 for tp in B.possible_types:
378         if not tp == 'player' and not tp == 'player2':
379                 mainlist += B.create_blender_liblist(env, tp)
380
381 if B.arguments.get('BF_PRIORITYLIST', '0')=='1':
382         B.propose_priorities()
383
384 dobj = B.buildinfo(env, "dynamic") + B.resources
385 thestatlibs, thelibincs = B.setup_staticlibs(env)
386 thesyslibs = B.setup_syslibs(env)
387
388 if 'blender' in B.targets or not env['WITH_BF_NOBLENDER']:
389         env.BlenderProg(B.root_build_dir, "blender", dobj + mainlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender')
390 if env['WITH_BF_PLAYER']:
391         playerlist = B.create_blender_liblist(env, 'player')
392         env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer')
393
394 ##### Now define some targets
395
396
397 #------------ INSTALL
398
399 #-- binaries
400 blenderinstall = []
401 if  env['OURPLATFORM']=='darwin':
402         for prg in B.program_list:
403                 bundle = '%s.app' % prg[0]
404                 bundledir = os.path.dirname(bundle)
405                 for dp, dn, df in os.walk(bundle):
406                         if 'CVS' in dn:
407                                 dn.remove('CVS')
408                         if '.svn' in dn:
409                                 dn.remove('.svn')
410                         dir=env['BF_INSTALLDIR']+dp[len(bundledir):]
411                         source=[dp+os.sep+f for f in df]
412                         blenderinstall.append(env.Install(dir=dir,source=source))
413 else:
414         blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list)
415
416 #-- .blender
417 #- dont do .blender and scripts for darwin, it is already in the bundle
418 dotblendlist = []
419 dottargetlist = []
420 scriptinstall = []
421
422 if  env['OURPLATFORM']!='darwin':
423                 for dp, dn, df in os.walk('bin/.blender'):
424                         if 'CVS' in dn:
425                                 dn.remove('CVS')
426                         if '.svn' in dn:
427                                 dn.remove('.svn')
428                         for f in df:
429                                 dotblendlist.append(dp+os.sep+f)
430                                 dottargetlist.append(env['BF_INSTALLDIR']+dp[3:]+os.sep+f)
431
432                 dotblenderinstall = []
433                 for targetdir,srcfile in zip(dottargetlist, dotblendlist):
434                         td, tf = os.path.split(targetdir)
435                         dotblenderinstall.append(env.Install(dir=td, source=srcfile))
436                 
437                 #-- .blender/scripts    
438                 scriptpath='release/scripts'
439                 for dp, dn, df in os.walk(scriptpath):
440                         if 'CVS' in dn:
441                                 dn.remove('CVS')
442                         if '.svn' in dn:
443                                 dn.remove('.svn')
444                         dir=env['BF_INSTALLDIR']+'/.blender/scripts'+dp[len(scriptpath):]
445                         source=[dp+os.sep+f for f in df]
446                         scriptinstall.append(env.Install(dir=dir,source=source))
447
448 #-- icons
449 if env['OURPLATFORM']=='linux2':
450         iconlist = []
451         icontargetlist = []
452
453         for tp, tn, tf in os.walk('release/freedesktop/icons'):
454                 if 'CVS' in tn:
455                         tn.remove('CVS')
456                 if '.svn' in tn:
457                         tn.remove('.svn')
458                 for f in tf:
459                         print ">>>", env['BF_INSTALLDIR'], tp, f
460                         iconlist.append(tp+os.sep+f)
461                         icontargetlist.append(env['BF_INSTALLDIR']+tp[19:]+os.sep+f)
462
463         iconinstall = []
464         for targetdir,srcfile in zip(icontargetlist, iconlist):
465                 td, tf = os.path.split(targetdir)
466                 iconinstall.append(env.Install(dir=td, source=srcfile))
467
468 #-- plugins
469 pluglist = []
470 plugtargetlist = []
471 for tp, tn, tf in os.walk('release/plugins'):
472         if 'CVS' in tn:
473                 tn.remove('CVS')
474         if '.svn' in tn:
475                 tn.remove('.svn')
476         for f in tf:
477                 print ">>>", env['BF_INSTALLDIR'], tp, f
478                 pluglist.append(tp+os.sep+f)
479                 plugtargetlist.append(env['BF_INSTALLDIR']+tp[7:]+os.sep+f)
480
481 # header files for plugins
482 pluglist.append('source/blender/blenpluginapi/documentation.h')
483 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'documentation.h')
484 pluglist.append('source/blender/blenpluginapi/externdef.h')
485 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'externdef.h')
486 pluglist.append('source/blender/blenpluginapi/floatpatch.h')
487 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'floatpatch.h')
488 pluglist.append('source/blender/blenpluginapi/iff.h')
489 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'iff.h')
490 pluglist.append('source/blender/blenpluginapi/plugin.h')
491 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'plugin.h')
492 pluglist.append('source/blender/blenpluginapi/util.h')
493 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'util.h')
494 pluglist.append('source/blender/blenpluginapi/plugin.DEF')
495 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep + 'plugin.def')
496
497 plugininstall = []
498 for targetdir,srcfile in zip(plugtargetlist, pluglist):
499         td, tf = os.path.split(targetdir)
500         plugininstall.append(env.Install(dir=td, source=srcfile))
501
502 textlist = []
503 texttargetlist = []
504 for tp, tn, tf in os.walk('release/text'):
505         if 'CVS' in tn:
506                 tn.remove('CVS')
507         if '.svn' in tn:
508                 tn.remove('.svn')
509         for f in tf:
510                 textlist.append(tp+os.sep+f)
511
512 textinstall = env.Install(dir=env['BF_INSTALLDIR'], source=textlist)
513
514 if  env['OURPLATFORM']=='darwin':
515                 allinstall = [blenderinstall, plugininstall, textinstall]
516 elif env['OURPLATFORM']=='linux2':
517                 allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall, iconinstall]
518 else:
519                 allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall]
520
521 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
522         dllsources = ['${LCGDIR}/gettext/lib/gnu_gettext.dll',
523                                                 '${BF_PNG_LIBPATH}/libpng.dll',
524                                                 '${BF_ZLIB_LIBPATH}/zlib.dll',
525                                                 '${BF_TIFF_LIBPATH}/${BF_TIFF_LIB}.dll']
526         dllsources += ['${BF_PTHREADS_LIBPATH}/${BF_PTHREADS_LIB}.dll']
527         if env['WITH_BF_SDL']:
528                 dllsources.append('${BF_SDL_LIBPATH}/SDL.dll')
529         if env['WITH_BF_PYTHON']:
530                 dllsources.append('#release/windows/extra/python25.zip')
531                 dllsources.append('#release/windows/extra/zlib.pyd')
532                 if env['BF_DEBUG']:
533                         dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}_d.dll')
534                 else:
535                         dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}.dll')
536         if env['WITH_BF_ICONV']:
537                 dllsources += ['${BF_ICONV_LIBPATH}/iconv.dll']
538         if env['WITH_BF_FFMPEG']:
539                 dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
540                                                 '${LCGDIR}/ffmpeg/lib/avformat-52.dll',
541                                                 '${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
542                                                 '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
543                                                 '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
544                                                 '${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
545                                                 '${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
546                                                 '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
547                                                 '${LCGDIR}/ffmpeg/lib/xvidcore.dll',
548                                                 '${LCGDIR}/ffmpeg/lib/swscale-0.dll']
549         windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
550         allinstall += windlls
551
552 installtarget = env.Alias('install', allinstall)
553 bininstalltarget = env.Alias('install-bin', blenderinstall)
554
555 nsisaction = env.Action(btools.NSIS_Installer, btools.NSIS_print)
556 nsiscmd = env.Command('nsisinstaller', None, nsisaction)
557 nsisalias = env.Alias('nsis', nsiscmd)
558
559 if 'blender' in B.targets:
560         blenderexe= env.Alias('blender', B.program_list)
561         Depends(blenderexe,installtarget)
562
563 if env['WITH_BF_PLAYER']:
564         blenderplayer = env.Alias('blenderplayer', B.program_list)
565         Depends(blenderplayer,installtarget)
566
567 if not env['WITH_BF_GAMEENGINE']:
568         blendernogame = env.Alias('blendernogame', B.program_list)
569         Depends(blendernogame,installtarget)
570
571 if 'blenderlite' in B.targets:
572         blenderlite = env.Alias('blenderlite', B.program_list)
573         Depends(blenderlite,installtarget)
574
575 Depends(nsiscmd, allinstall)
576
577 Default(B.program_list)
578
579 if not env['WITHOUT_BF_INSTALL']:
580                 Default(installtarget)
581
582 #------------ RELEASE
583 # TODO: zipup the installation
584
585 #------------ BLENDERPLAYER
586 # TODO: build stubs and link into blenderplayer
587
588 #------------ EPYDOC
589 if env['WITH_BF_DOCS']:
590         SConscript('source/blender/python/api2_2x/doc/SConscript')
591         SConscript('source/gameengine/PyDoc/SConscript')
592