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