merging trunk 17221:17300
[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.Copy( 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                         '${LCGDIR}/png/lib/libpng.dll',
520                         '#release/windows/extra/python25.zip',
521                         '#release/windows/extra/zlib.pyd',
522                         '${LCGDIR}/sdl/lib/SDL.dll',
523                         '${LCGDIR}/zlib/lib/zlib.dll',
524                         '${LCGDIR}/tiff/lib/libtiff.dll']
525     if env['BF_DEBUG']:
526         dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}_d.dll')
527     else:
528         dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}.dll')
529     if env['OURPLATFORM'] == 'win32-mingw':
530         dllsources += ['${LCGDIR}/pthreads/lib/pthreadGC2.dll']
531     else:
532         dllsources += ['${LCGDIR}/pthreads/lib/pthreadVC2.dll']
533     if env['WITH_BF_ICONV']:
534         dllsources += ['${LCGDIR}/iconv/lib/iconv.dll']
535     if env['WITH_BF_FFMPEG']:
536         dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
537                         '${LCGDIR}/ffmpeg/lib/avformat-52.dll',
538                         '${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
539                         '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
540                         '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
541                         '${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
542                         '${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
543                         '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
544                         '${LCGDIR}/ffmpeg/lib/xvidcore.dll',
545                         '${LCGDIR}/ffmpeg/lib/swscale-0.dll']
546     windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
547     allinstall += windlls
548
549 installtarget = env.Alias('install', allinstall)
550 bininstalltarget = env.Alias('install-bin', blenderinstall)
551
552 nsisaction = env.Action(btools.NSIS_Installer, btools.NSIS_print)
553 nsiscmd = env.Command('nsisinstaller', None, nsisaction)
554 nsisalias = env.Alias('nsis', nsiscmd)
555
556 if 'blender' in B.targets:
557         blenderexe= env.Alias('blender', B.program_list)
558         Depends(blenderexe,installtarget)
559
560 if env['WITH_BF_PLAYER']:
561     blenderplayer = env.Alias('blenderplayer', B.program_list)
562     Depends(blenderplayer,installtarget)
563
564 if not env['WITH_BF_GAMEENGINE']:
565     blendernogame = env.Alias('blendernogame', B.program_list)
566     Depends(blendernogame,installtarget)
567
568 if 'blenderlite' in B.targets:
569         blenderlite = env.Alias('blenderlite', B.program_list)
570         Depends(blenderlite,installtarget)
571
572 Depends(nsiscmd, allinstall)
573
574 Default(B.program_list)
575
576 if not env['WITHOUT_BF_INSTALL']:
577         Default(installtarget)
578
579 #------------ RELEASE
580 # TODO: zipup the installation
581
582 #------------ BLENDERPLAYER
583 # TODO: build stubs and link into blenderplayer
584
585 #------------ EPYDOC
586 if env['WITH_BF_DOCS']:
587     SConscript('source/blender/python/api2_2x/doc/SConscript')
588     SConscript('source/gameengine/PyDoc/SConscript')
589