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