View2D - Initial commit of Pan-View Operator
[blender.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 # lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
288 #B.root_build_dir = B.arguments.get('BF_BUILDDIR', '..'+os.sep+'build'+os.sep+platform+os.sep)
289 B.root_build_dir = env['BF_BUILDDIR']
290 B.doc_build_dir = env['BF_DOCDIR']
291 if not B.root_build_dir[-1]==os.sep:
292         B.root_build_dir += os.sep
293 if not B.doc_build_dir[-1]==os.sep:
294         B.doc_build_dir += os.sep
295         
296 # We do a shortcut for clean when no quicklist is given: just delete
297 # builddir without reading in SConscripts
298 do_clean = None
299 if 'clean' in B.targets:
300         do_clean = True
301
302 if not quickie and do_clean:
303         if os.path.exists(B.doc_build_dir):
304                 print B.bc.HEADER+'Cleaning doc dir...'+B.bc.ENDC
305                 dirs = os.listdir(B.doc_build_dir)
306                 for entry in dirs:
307                         if os.path.isdir(B.doc_build_dir + entry) == 1:
308                                 print "clean dir %s"%(B.doc_build_dir+entry)
309                                 shutil.rmtree(B.doc_build_dir+entry)
310                         else: # remove file
311                                 print "remove file %s"%(B.doc_build_dir+entry)
312                                 os.remove(B.root_build_dir+entry)
313         if os.path.exists(B.root_build_dir):
314                 print B.bc.HEADER+'Cleaning build dir...'+B.bc.ENDC
315                 dirs = os.listdir(B.root_build_dir)
316                 for entry in dirs:
317                         if os.path.isdir(B.root_build_dir + entry) == 1:
318                                 print "clean dir %s"%(B.root_build_dir+entry)
319                                 shutil.rmtree(B.root_build_dir+entry)
320                         else: # remove file
321                                 print "remove file %s"%(B.root_build_dir+entry)
322                                 os.remove(B.root_build_dir+entry)
323                 for confile in ['extern/ffmpeg/config.mak', 'extern/x264/config.mak',
324                                 'extern/xvidcore/build/generic/platform.inc']:
325                         if os.path.exists(confile):
326                                 print "clean file %s"%confile
327                                 os.remove(confile)
328                 print B.bc.OKGREEN+'...done'+B.bc.ENDC
329         else:
330                 print B.bc.HEADER+'Already Clean, nothing to do.'+B.bc.ENDC
331         Exit()
332
333 if not os.path.isdir ( B.root_build_dir):
334         os.makedirs ( B.root_build_dir )
335         os.makedirs ( B.root_build_dir + 'source' )
336         os.makedirs ( B.root_build_dir + 'intern' )
337         os.makedirs ( B.root_build_dir + 'extern' )
338         os.makedirs ( B.root_build_dir + 'lib' )
339         os.makedirs ( B.root_build_dir + 'bin' )
340 if not os.path.isdir(B.doc_build_dir):
341         os.makedirs ( B.doc_build_dir )
342
343 Help(opts.GenerateHelpText(env))
344
345 # default is new quieter output, but if you need to see the 
346 # commands, do 'scons BF_QUIET=0'
347 bf_quietoutput = B.arguments.get('BF_QUIET', '1')
348 if env['BF_QUIET']:
349         B.set_quiet_output(env)
350 else:
351         if toolset=='msvc':
352                 B.msvc_hack(env)
353
354 print B.bc.HEADER+'Building in '+B.bc.ENDC+B.root_build_dir
355 env.SConsignFile(B.root_build_dir+'scons-signatures')
356 B.init_lib_dict()
357
358 ##### END SETUP ##########
359
360 Export('env')
361
362 BuildDir(B.root_build_dir+'/intern', 'intern', duplicate=0)
363 SConscript(B.root_build_dir+'/intern/SConscript')
364 BuildDir(B.root_build_dir+'/extern', 'extern', duplicate=0)
365 SConscript(B.root_build_dir+'/extern/SConscript')
366 BuildDir(B.root_build_dir+'/source', 'source', duplicate=0)
367 SConscript(B.root_build_dir+'/source/SConscript')
368
369 # now that we have read all SConscripts, we know what
370 # libraries will be built. Create list of
371 # libraries to give as objects to linking phase
372 mainlist = []
373 for tp in B.possible_types:
374         if not tp == 'player' and not tp == 'player2':
375                 mainlist += B.create_blender_liblist(env, tp)
376
377 if B.arguments.get('BF_PRIORITYLIST', '0')=='1':
378         B.propose_priorities()
379
380 dobj = B.buildinfo(env, "dynamic") + B.resources
381 thestatlibs, thelibincs = B.setup_staticlibs(env)
382 thesyslibs = B.setup_syslibs(env)
383
384 if 'blender' in B.targets or not env['WITH_BF_NOBLENDER']:
385         env.BlenderProg(B.root_build_dir, "blender", dobj + mainlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender')
386 if env['WITH_BF_PLAYER']:
387         playerlist = B.create_blender_liblist(env, 'player')
388         env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer')
389
390 ##### Now define some targets
391
392
393 #------------ INSTALL
394
395 #-- binaries
396 blenderinstall = []
397 if  env['OURPLATFORM']=='darwin':
398         for prg in B.program_list:
399                 bundle = '%s.app' % prg[0]
400                 bundledir = os.path.dirname(bundle)
401                 for dp, dn, df in os.walk(bundle):
402                         if 'CVS' in dn:
403                                 dn.remove('CVS')
404                         if '.svn' in dn:
405                                 dn.remove('.svn')
406                         dir=env['BF_INSTALLDIR']+dp[len(bundledir):]
407                         source=[dp+os.sep+f for f in df]
408                         blenderinstall.append(env.Install(dir=dir,source=source))
409 else:
410         blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list)
411
412 #-- .blender
413 #- dont do .blender and scripts for darwin, it is already in the bundle
414 dotblendlist = []
415 dottargetlist = []
416 scriptinstall = []
417
418 if  env['OURPLATFORM']!='darwin':
419                 for dp, dn, df in os.walk('bin/.blender'):
420                         if 'CVS' in dn:
421                                 dn.remove('CVS')
422                         if '.svn' in dn:
423                                 dn.remove('.svn')
424                         for f in df:
425                                 dotblendlist.append(dp+os.sep+f)
426                                 dottargetlist.append(env['BF_INSTALLDIR']+dp[3:]+os.sep+f)
427
428                 dotblenderinstall = []
429                 for targetdir,srcfile in zip(dottargetlist, dotblendlist):
430                         td, tf = os.path.split(targetdir)
431                         dotblenderinstall.append(env.Install(dir=td, source=srcfile))
432                 
433                 #-- .blender/scripts    
434                 scriptpath='release/scripts'
435                 for dp, dn, df in os.walk(scriptpath):
436                         if 'CVS' in dn:
437                                 dn.remove('CVS')
438                         if '.svn' in dn:
439                                 dn.remove('.svn')
440                         dir=env['BF_INSTALLDIR']+'/.blender/scripts'+dp[len(scriptpath):]
441                         source=[dp+os.sep+f for f in df]
442                         scriptinstall.append(env.Install(dir=dir,source=source))
443
444 #-- icons
445 if env['OURPLATFORM']=='linux2':
446         iconlist = []
447         icontargetlist = []
448
449         for tp, tn, tf in os.walk('release/freedesktop/icons'):
450                 if 'CVS' in tn:
451                         tn.remove('CVS')
452                 if '.svn' in tn:
453                         tn.remove('.svn')
454                 for f in tf:
455                         print ">>>", env['BF_INSTALLDIR'], tp, f
456                         iconlist.append(tp+os.sep+f)
457                         icontargetlist.append(env['BF_INSTALLDIR']+tp[19:]+os.sep+f)
458
459         iconinstall = []
460         for targetdir,srcfile in zip(icontargetlist, iconlist):
461                 td, tf = os.path.split(targetdir)
462                 iconinstall.append(env.Install(dir=td, source=srcfile))
463
464 #-- plugins
465 pluglist = []
466 plugtargetlist = []
467 for tp, tn, tf in os.walk('release/plugins'):
468         if 'CVS' in tn:
469                 tn.remove('CVS')
470         if '.svn' in tn:
471                 tn.remove('.svn')
472         for f in tf:
473                 print ">>>", env['BF_INSTALLDIR'], tp, f
474                 pluglist.append(tp+os.sep+f)
475                 plugtargetlist.append(env['BF_INSTALLDIR']+tp[7:]+os.sep+f)
476
477 # header files for plugins
478 pluglist.append('source/blender/blenpluginapi/documentation.h')
479 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'documentation.h')
480 pluglist.append('source/blender/blenpluginapi/externdef.h')
481 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'externdef.h')
482 pluglist.append('source/blender/blenpluginapi/floatpatch.h')
483 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'floatpatch.h')
484 pluglist.append('source/blender/blenpluginapi/iff.h')
485 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'iff.h')
486 pluglist.append('source/blender/blenpluginapi/plugin.h')
487 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'plugin.h')
488 pluglist.append('source/blender/blenpluginapi/util.h')
489 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep +'util.h')
490 pluglist.append('source/blender/blenpluginapi/plugin.DEF')
491 plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'include' + os.sep + 'plugin.def')
492
493 plugininstall = []
494 for targetdir,srcfile in zip(plugtargetlist, pluglist):
495         td, tf = os.path.split(targetdir)
496         plugininstall.append(env.Install(dir=td, source=srcfile))
497
498 textlist = []
499 texttargetlist = []
500 for tp, tn, tf in os.walk('release/text'):
501         if 'CVS' in tn:
502                 tn.remove('CVS')
503         if '.svn' in tn:
504                 tn.remove('.svn')
505         for f in tf:
506                 textlist.append(tp+os.sep+f)
507
508 textinstall = env.Install(dir=env['BF_INSTALLDIR'], source=textlist)
509
510 if  env['OURPLATFORM']=='darwin':
511                 allinstall = [blenderinstall, plugininstall, textinstall]
512 elif env['OURPLATFORM']=='linux2':
513                 allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall, iconinstall]
514 else:
515                 allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall]
516
517 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
518         dllsources = ['${LCGDIR}/gettext/lib/gnu_gettext.dll',
519                                                 '${BF_PNG_LIBPATH}/libpng.dll',
520                                                 '${BF_ZLIB_LIBPATH}/zlib.dll',
521                                                 '${BF_TIFF_LIBPATH}/${BF_TIFF_LIB}.dll']
522         dllsources += ['${BF_PTHREADS_LIBPATH}/${BF_PTHREADS_LIB}.dll']
523         if env['WITH_BF_SDL']:
524                 dllsources.append('${BF_SDL_LIBPATH}/SDL.dll')
525         if env['WITH_BF_PYTHON']:
526                 dllsources.append('#release/windows/extra/python25.zip')
527                 dllsources.append('#release/windows/extra/zlib.pyd')
528                 if env['BF_DEBUG']:
529                         dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}_d.dll')
530                 else:
531                         dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}.dll')
532         if env['WITH_BF_ICONV']:
533                 dllsources += ['${BF_ICONV_LIBPATH}/iconv.dll']
534         if env['WITH_BF_FFMPEG']:
535                 dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
536                                                 '${LCGDIR}/ffmpeg/lib/avformat-52.dll',
537                                                 '${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
538                                                 '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
539                                                 '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
540                                                 '${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
541                                                 '${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
542                                                 '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
543                                                 '${LCGDIR}/ffmpeg/lib/xvidcore.dll',
544                                                 '${LCGDIR}/ffmpeg/lib/swscale-0.dll']
545         windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
546         allinstall += windlls
547
548 installtarget = env.Alias('install', allinstall)
549 bininstalltarget = env.Alias('install-bin', blenderinstall)
550
551 nsisaction = env.Action(btools.NSIS_Installer, btools.NSIS_print)
552 nsiscmd = env.Command('nsisinstaller', None, nsisaction)
553 nsisalias = env.Alias('nsis', nsiscmd)
554
555 if 'blender' in B.targets:
556         blenderexe= env.Alias('blender', B.program_list)
557         Depends(blenderexe,installtarget)
558
559 if env['WITH_BF_PLAYER']:
560         blenderplayer = env.Alias('blenderplayer', B.program_list)
561         Depends(blenderplayer,installtarget)
562
563 if not env['WITH_BF_GAMEENGINE']:
564         blendernogame = env.Alias('blendernogame', B.program_list)
565         Depends(blendernogame,installtarget)
566
567 if 'blenderlite' in B.targets:
568         blenderlite = env.Alias('blenderlite', B.program_list)
569         Depends(blenderlite,installtarget)
570
571 Depends(nsiscmd, allinstall)
572
573 Default(B.program_list)
574
575 if not env['WITHOUT_BF_INSTALL']:
576                 Default(installtarget)
577
578 #------------ RELEASE
579 # TODO: zipup the installation
580
581 #------------ BLENDERPLAYER
582 # TODO: build stubs and link into blenderplayer
583
584 #------------ EPYDOC
585 if env['WITH_BF_DOCS']:
586         SConscript('source/blender/python/api2_2x/doc/SConscript')
587         SConscript('source/gameengine/PyDoc/SConscript')
588