Applying scons compiling fix for windows/mingw (to get compiler warnings to show...
[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                 # xxx commented out, as was supressing warnings under mingw..
119                 #if env:
120                 #       btools.SetupSpawn(env)
121 else:
122         env = BlenderEnvironment(ENV = os.environ)
123
124 if not env:
125         print "Could not create a build environment"
126         Exit()
127
128
129 cc = B.arguments.get('CC', None)
130 cxx = B.arguments.get('CXX', None)
131 if cc:
132         env['CC'] = cc
133 if cxx:
134         env['CXX'] = cxx
135
136 if env['CC'] in ['cl', 'cl.exe'] and sys.platform=='win32':
137         platform = 'win32-vc'
138 elif env['CC'] in ['gcc'] and sys.platform=='win32':
139         platform = 'win32-mingw'
140
141 env.SConscriptChdir(0)
142
143 crossbuild = B.arguments.get('BF_CROSS', None)
144 if crossbuild and platform!='win32':
145         platform = 'linuxcross'
146
147 env['OURPLATFORM'] = platform
148
149 configfile = 'config'+os.sep+platform+'-config.py'
150
151 if os.path.exists(configfile):
152         print B.bc.OKGREEN + "Using config file: " + B.bc.ENDC + configfile
153 else:
154         print B.bc.FAIL + configfile + " doesn't exist" + B.bc.ENDC
155
156 if crossbuild and env['PLATFORM'] != 'win32':
157         print B.bc.HEADER+"Preparing for crossbuild"+B.bc.ENDC
158         env.Tool('crossmingw', ['tools'])
159         # todo: determine proper libs/includes etc.
160         # Needed for gui programs, console programs should do without it
161         env.Append(LINKFLAGS=['-mwindows'])
162
163 userconfig = B.arguments.get('BF_CONFIG', 'user-config.py')
164 # first read platform config. B.arguments will override
165 optfiles = [configfile]
166 if os.path.exists(userconfig):
167         print B.bc.OKGREEN + "Using user-config file: " + B.bc.ENDC + userconfig
168         optfiles += [userconfig]
169 else:
170         print B.bc.WARNING + userconfig + " not found, no user overrides" + B.bc.ENDC
171
172 opts = btools.read_opts(optfiles, B.arguments)
173 opts.Update(env)
174
175 if not env['BF_FANCY']:
176         B.bc.disable()
177
178 SetOption('num_jobs', int(env['BF_NUMJOBS']))
179 print "Build with %d parallel jobs" % (GetOption('num_jobs'))
180
181 # disable elbeem (fluidsim) compilation?
182 if env['BF_NO_ELBEEM'] == 1:
183         env['CPPFLAGS'].append('-DDISABLE_ELBEEM')
184         env['CXXFLAGS'].append('-DDISABLE_ELBEEM')
185         env['CCFLAGS'].append('-DDISABLE_ELBEEM')
186
187 if env['WITH_BF_OPENMP'] == 1:
188                 if env['OURPLATFORM']=='win32-vc':
189                                 env['CCFLAGS'].append('/openmp')
190                                 env['CPPFLAGS'].append('/openmp')
191                                 env['CXXFLAGS'].append('/openmp')
192                 else:
193                         if env['CC'][-3:] == 'icc': # to be able to handle CC=/opt/bla/icc case
194                                 env.Append(LINKFLAGS=['-openmp', '-static-intel'])
195                                 env['CCFLAGS'].append('-openmp')
196                                 env['CPPFLAGS'].append('-openmp')
197                                 env['CXXFLAGS'].append('-openmp')
198                         else:
199                                 env.Append(CCFLAGS=['-fopenmp']) 
200                                 env.Append(CPPFLAGS=['-fopenmp'])
201                                 env.Append(CXXFLAGS=['-fopenmp'])
202                                 # env.Append(LINKFLAGS=['-fprofile-generate'])
203
204 #check for additional debug libnames
205
206 if env.has_key('BF_DEBUG_LIBS'):
207         B.quickdebug += env['BF_DEBUG_LIBS']
208
209 printdebug = B.arguments.get('BF_LISTDEBUG', 0)
210
211 # see if this linux distro has libalut
212
213 if env['OURPLATFORM'] == 'linux2' :
214         if env['WITH_BF_OPENAL']:
215                 mylib_test_source_file = """
216                 #include "AL/alut.h"
217                 int main(int argc, char **argv)
218                 {
219                         alutGetMajorVersion();
220                         return 0;
221                 }
222                 """
223
224                 def CheckFreeAlut(context,env):
225                         context.Message( B.bc.OKGREEN + "Linux platform detected:\n  checking for FreeAlut... " + B.bc.ENDC )
226                         env['LIBS'] = 'alut'
227                         result = context.TryLink(mylib_test_source_file, '.c')
228                         context.Result(result)
229                         return result
230
231                 env2 = env.Clone( LIBPATH = env['BF_OPENAL'] ) 
232                 sconf_temp = mkdtemp()
233                 conf = Configure( env2, {'CheckFreeAlut' : CheckFreeAlut}, sconf_temp, '/dev/null' )
234                 if conf.CheckFreeAlut( env2 ):
235                         env['BF_OPENAL_LIB'] += ' alut'
236                 del env2
237                 root = ''
238                 for root, dirs, files in os.walk(sconf_temp, topdown=False):
239                         for name in files:
240                                 os.remove(os.path.join(root, name))
241                         for name in dirs:
242                                 os.rmdir(os.path.join(root, name))
243                 if root: os.rmdir(root)
244
245 if len(B.quickdebug) > 0 and printdebug != 0:
246         print B.bc.OKGREEN + "Buildings these libs with debug symbols:" + B.bc.ENDC
247         for l in B.quickdebug:
248                 print "\t" + l
249
250 # remove stdc++ from LLIBS if we are building a statc linked CXXFLAGS
251 if env['WITH_BF_STATICCXX']:
252         if 'stdc++' in env['LLIBS']:
253                 env['LLIBS'].remove('stdc++')
254         else:
255                 print '\tcould not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform'
256
257 # check target for blenderplayer. Set WITH_BF_PLAYER if found on cmdline
258 if 'blenderplayer' in B.targets:
259         env['WITH_BF_PLAYER'] = True
260
261 if 'blendernogame' in B.targets:
262         env['WITH_BF_GAMEENGINE'] = False
263
264 if 'blenderlite' in B.targets:
265         env['WITH_BF_GAMEENGINE'] = False
266         env['WITH_BF_OPENAL'] = False
267         env['WITH_BF_OPENEXR'] = False
268         env['WITH_BF_ICONV'] = False
269         env['WITH_BF_INTERNATIONAL'] = False
270         env['WITH_BF_OPENJPEG'] = False
271         env['WITH_BF_FFMPEG'] = False
272         env['WITH_BF_QUICKTIME'] = False
273         env['WITH_BF_YAFRAY'] = False
274         env['WITH_BF_REDCODE'] = False
275         env['WITH_BF_FTGL'] = False
276         env['WITH_BF_DDS'] = False
277         env['WITH_BF_ZLIB'] = False
278         env['WITH_BF_SDL'] = False
279         env['WITH_BF_JPEG'] = False
280         env['WITH_BF_PNG'] = False
281         env['WITH_BF_ODE'] = False
282         env['WITH_BF_BULLET'] = False
283         env['WITH_BF_BINRELOC'] = False
284         env['BF_BUILDINFO'] = False
285         env['BF_NO_ELBEEM'] = True
286         env['WITH_BF_PYTHON'] = False
287
288 # lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
289 #B.root_build_dir = B.arguments.get('BF_BUILDDIR', '..'+os.sep+'build'+os.sep+platform+os.sep)
290 B.root_build_dir = env['BF_BUILDDIR']
291 B.doc_build_dir = env['BF_DOCDIR']
292 if not B.root_build_dir[-1]==os.sep:
293         B.root_build_dir += os.sep
294 if not B.doc_build_dir[-1]==os.sep:
295         B.doc_build_dir += os.sep
296         
297 # We do a shortcut for clean when no quicklist is given: just delete
298 # builddir without reading in SConscripts
299 do_clean = None
300 if 'clean' in B.targets:
301         do_clean = True
302
303 if not quickie and do_clean:
304         if os.path.exists(B.doc_build_dir):
305                 print B.bc.HEADER+'Cleaning doc dir...'+B.bc.ENDC
306                 dirs = os.listdir(B.doc_build_dir)
307                 for entry in dirs:
308                         if os.path.isdir(B.doc_build_dir + entry) == 1:
309                                 print "clean dir %s"%(B.doc_build_dir+entry)
310                                 shutil.rmtree(B.doc_build_dir+entry)
311                         else: # remove file
312                                 print "remove file %s"%(B.doc_build_dir+entry)
313                                 os.remove(B.root_build_dir+entry)
314         if os.path.exists(B.root_build_dir):
315                 print B.bc.HEADER+'Cleaning build dir...'+B.bc.ENDC
316                 dirs = os.listdir(B.root_build_dir)
317                 for entry in dirs:
318                         if os.path.isdir(B.root_build_dir + entry) == 1:
319                                 print "clean dir %s"%(B.root_build_dir+entry)
320                                 shutil.rmtree(B.root_build_dir+entry)
321                         else: # remove file
322                                 print "remove file %s"%(B.root_build_dir+entry)
323                                 os.remove(B.root_build_dir+entry)
324                 for confile in ['extern/ffmpeg/config.mak', 'extern/x264/config.mak',
325                                 'extern/xvidcore/build/generic/platform.inc']:
326                         if os.path.exists(confile):
327                                 print "clean file %s"%confile
328                                 os.remove(confile)
329                 print B.bc.OKGREEN+'...done'+B.bc.ENDC
330         else:
331                 print B.bc.HEADER+'Already Clean, nothing to do.'+B.bc.ENDC
332         Exit()
333
334 if not os.path.isdir ( B.root_build_dir):
335         os.makedirs ( B.root_build_dir )
336         os.makedirs ( B.root_build_dir + 'source' )
337         os.makedirs ( B.root_build_dir + 'intern' )
338         os.makedirs ( B.root_build_dir + 'extern' )
339         os.makedirs ( B.root_build_dir + 'lib' )
340         os.makedirs ( B.root_build_dir + 'bin' )
341 if not os.path.isdir(B.doc_build_dir):
342         os.makedirs ( B.doc_build_dir )
343
344 Help(opts.GenerateHelpText(env))
345
346 # default is new quieter output, but if you need to see the 
347 # commands, do 'scons BF_QUIET=0'
348 bf_quietoutput = B.arguments.get('BF_QUIET', '1')
349 if env['BF_QUIET']:
350         B.set_quiet_output(env)
351 else:
352         if toolset=='msvc':
353                 B.msvc_hack(env)
354
355 print B.bc.HEADER+'Building in '+B.bc.ENDC+B.root_build_dir
356 env.SConsignFile(B.root_build_dir+'scons-signatures')
357 B.init_lib_dict()
358
359 ##### END SETUP ##########
360
361 Export('env')
362
363 BuildDir(B.root_build_dir+'/intern', 'intern', duplicate=0)
364 SConscript(B.root_build_dir+'/intern/SConscript')
365 BuildDir(B.root_build_dir+'/extern', 'extern', duplicate=0)
366 SConscript(B.root_build_dir+'/extern/SConscript')
367 BuildDir(B.root_build_dir+'/source', 'source', duplicate=0)
368 SConscript(B.root_build_dir+'/source/SConscript')
369
370 # now that we have read all SConscripts, we know what
371 # libraries will be built. Create list of
372 # libraries to give as objects to linking phase
373 mainlist = []
374 for tp in B.possible_types:
375         if not tp == 'player' and not tp == 'player2':
376                 mainlist += B.create_blender_liblist(env, tp)
377
378 if B.arguments.get('BF_PRIORITYLIST', '0')=='1':
379         B.propose_priorities()
380
381 dobj = B.buildinfo(env, "dynamic") + B.resources
382 thestatlibs, thelibincs = B.setup_staticlibs(env)
383 thesyslibs = B.setup_syslibs(env)
384
385 if 'blender' in B.targets or not env['WITH_BF_NOBLENDER']:
386         env.BlenderProg(B.root_build_dir, "blender", dobj + mainlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender')
387 if env['WITH_BF_PLAYER']:
388         playerlist = B.create_blender_liblist(env, 'player')
389         env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer')
390
391 ##### Now define some targets
392
393
394 #------------ INSTALL
395
396 #-- binaries
397 blenderinstall = []
398 if  env['OURPLATFORM']=='darwin':
399         for prg in B.program_list:
400                 bundle = '%s.app' % prg[0]
401                 bundledir = os.path.dirname(bundle)
402                 for dp, dn, df in os.walk(bundle):
403                         if 'CVS' in dn:
404                                 dn.remove('CVS')
405                         if '.svn' in dn:
406                                 dn.remove('.svn')
407                         dir=env['BF_INSTALLDIR']+dp[len(bundledir):]
408                         source=[dp+os.sep+f for f in df]
409                         blenderinstall.append(env.Install(dir=dir,source=source))
410 else:
411         blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list)
412
413 #-- .blender
414 #- dont do .blender and scripts for darwin, it is already in the bundle
415 dotblendlist = []
416 dottargetlist = []
417 scriptinstall = []
418
419 if  env['OURPLATFORM']!='darwin':
420                 for dp, dn, df in os.walk('bin/.blender'):
421                         if 'CVS' in dn:
422                                 dn.remove('CVS')
423                         if '.svn' in dn:
424                                 dn.remove('.svn')
425                         
426                         for f in df:
427                                 if not env['WITH_BF_INTERNATIONAL']:
428                                         if 'locale' in dp:
429                                                 continue
430                                         if f == '.Blanguages':
431                                                 continue
432                                 if not env['WITH_BF_FREETYPE']:
433                                         if f.endswith('.ttf'):
434                                                 continue
435                                 
436                                 dotblendlist.append(os.path.join(dp, f))
437                                 dottargetlist.append(env['BF_INSTALLDIR']+dp[3:]+os.sep+f)
438
439                 dotblenderinstall = []
440                 for targetdir,srcfile in zip(dottargetlist, dotblendlist):
441                         td, tf = os.path.split(targetdir)
442                         dotblenderinstall.append(env.Install(dir=td, source=srcfile))
443                 
444                 if env['WITH_BF_PYTHON']:
445                         #-- .blender/scripts    
446                         scriptpath='release/scripts'
447                         for dp, dn, df in os.walk(scriptpath):
448                                 if 'CVS' in dn:
449                                         dn.remove('CVS')
450                                 if '.svn' in dn:
451                                         dn.remove('.svn')
452                                 dir=env['BF_INSTALLDIR']+'/.blender/scripts'+dp[len(scriptpath):]
453                                 source=[dp+os.sep+f for f in df]
454                                 scriptinstall.append(env.Install(dir=dir,source=source))
455
456 #-- icons
457 if env['OURPLATFORM']=='linux2':
458         iconlist = []
459         icontargetlist = []
460
461         for tp, tn, tf in os.walk('release/freedesktop/icons'):
462                 if 'CVS' in tn:
463                         tn.remove('CVS')
464                 if '.svn' in tn:
465                         tn.remove('.svn')
466                 for f in tf:
467                         print ">>>", env['BF_INSTALLDIR'], tp, f
468                         iconlist.append(tp+os.sep+f)
469                         icontargetlist.append(env['BF_INSTALLDIR']+tp[19:]+os.sep+f)
470
471         iconinstall = []
472         for targetdir,srcfile in zip(icontargetlist, iconlist):
473                 td, tf = os.path.split(targetdir)
474                 iconinstall.append(env.Install(dir=td, source=srcfile))
475
476 # dlls for linuxcross
477 # TODO - add more libs, for now this lets blenderlite run
478 if env['OURPLATFORM']=='linuxcross':
479         dir=env['BF_INSTALLDIR']
480         source = ['../lib/windows/pthreads/lib/pthreadGC2.dll']
481         scriptinstall.append(env.Install(dir=dir, source=source))
482
483 #-- plugins
484 pluglist = []
485 plugtargetlist = []
486 for tp, tn, tf in os.walk('release/plugins'):
487         if 'CVS' in tn:
488                 tn.remove('CVS')
489         if '.svn' in tn:
490                 tn.remove('.svn')
491         for f in tf:
492                 print ">>>", env['BF_INSTALLDIR'], tp, f
493                 pluglist.append(tp+os.sep+f)
494                 plugtargetlist.append(env['BF_INSTALLDIR']+tp[7:]+os.sep+f)
495
496 # header files for plugins
497 pluglist.append('source/blender/blenpluginapi/documentation.h')
498 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'documentation.h')
499 pluglist.append('source/blender/blenpluginapi/externdef.h')
500 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'externdef.h')
501 pluglist.append('source/blender/blenpluginapi/floatpatch.h')
502 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'floatpatch.h')
503 pluglist.append('source/blender/blenpluginapi/iff.h')
504 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'iff.h')
505 pluglist.append('source/blender/blenpluginapi/plugin.h')
506 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'plugin.h')
507 pluglist.append('source/blender/blenpluginapi/util.h')
508 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'util.h')
509 pluglist.append('source/blender/blenpluginapi/plugin.DEF')
510 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep + 'plugin.def')
511
512 plugininstall = []
513 for targetdir,srcfile in zip(plugtargetlist, pluglist):
514         td, tf = os.path.split(targetdir)
515         plugininstall.append(env.Install(dir=td, source=srcfile))
516
517 textlist = []
518 texttargetlist = []
519 for tp, tn, tf in os.walk('release/text'):
520         if 'CVS' in tn:
521                 tn.remove('CVS')
522         if '.svn' in tn:
523                 tn.remove('.svn')
524         for f in tf:
525                 textlist.append(tp+os.sep+f)
526
527 textinstall = env.Install(dir=env['BF_INSTALLDIR'], source=textlist)
528
529 if  env['OURPLATFORM']=='darwin':
530                 allinstall = [blenderinstall, plugininstall, textinstall]
531 elif env['OURPLATFORM']=='linux2':
532                 allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall, iconinstall]
533 else:
534                 allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall]
535
536 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
537         dllsources = ['${LCGDIR}/gettext/lib/gnu_gettext.dll',
538                                                 '${BF_PNG_LIBPATH}/libpng.dll',
539                                                 '${BF_ZLIB_LIBPATH}/zlib.dll',
540                                                 '${BF_TIFF_LIBPATH}/${BF_TIFF_LIB}.dll']
541         dllsources += ['${BF_PTHREADS_LIBPATH}/${BF_PTHREADS_LIB}.dll']
542         if env['WITH_BF_SDL']:
543                 dllsources.append('${BF_SDL_LIBPATH}/SDL.dll')
544         if env['WITH_BF_PYTHON']:
545                 dllsources.append('#release/windows/extra/python25.zip')
546                 dllsources.append('#release/windows/extra/zlib.pyd')
547                 if env['BF_DEBUG']:
548                         dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}_d.dll')
549                 else:
550                         dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}.dll')
551         if env['WITH_BF_ICONV']:
552                 dllsources += ['${BF_ICONV_LIBPATH}/iconv.dll']
553         if env['WITH_BF_FFMPEG']:
554                 dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
555                                                 '${LCGDIR}/ffmpeg/lib/avformat-52.dll',
556                                                 '${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
557                                                 '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
558                                                 '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
559                                                 '${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
560                                                 '${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
561                                                 '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
562                                                 '${LCGDIR}/ffmpeg/lib/xvidcore.dll',
563                                                 '${LCGDIR}/ffmpeg/lib/swscale-0.dll']
564         windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
565         allinstall += windlls
566
567 installtarget = env.Alias('install', allinstall)
568 bininstalltarget = env.Alias('install-bin', blenderinstall)
569
570 nsisaction = env.Action(btools.NSIS_Installer, btools.NSIS_print)
571 nsiscmd = env.Command('nsisinstaller', None, nsisaction)
572 nsisalias = env.Alias('nsis', nsiscmd)
573
574 if 'blender' in B.targets:
575         blenderexe= env.Alias('blender', B.program_list)
576         Depends(blenderexe,installtarget)
577
578 if env['WITH_BF_PLAYER']:
579         blenderplayer = env.Alias('blenderplayer', B.program_list)
580         Depends(blenderplayer,installtarget)
581
582 if not env['WITH_BF_GAMEENGINE']:
583         blendernogame = env.Alias('blendernogame', B.program_list)
584         Depends(blendernogame,installtarget)
585
586 if 'blenderlite' in B.targets:
587         blenderlite = env.Alias('blenderlite', B.program_list)
588         Depends(blenderlite,installtarget)
589
590 Depends(nsiscmd, allinstall)
591
592 Default(B.program_list)
593
594 if not env['WITHOUT_BF_INSTALL']:
595                 Default(installtarget)
596
597 #------------ RELEASE
598 # TODO: zipup the installation
599
600 #------------ BLENDERPLAYER
601 # TODO: build stubs and link into blenderplayer
602
603 #------------ EPYDOC
604 if env['WITH_BF_DOCS']:
605         SConscript('source/blender/python/api2_2x/doc/SConscript')
606         SConscript('source/gameengine/PyDoc/SConscript')
607