2 # $Id: SConstruct 12962 2007-12-20 17:52:57Z jesterking $
3 # ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
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. The Blender
9 # Foundation also sells licenses for use in proprietary software under
10 # the Blender License. See http://www.blender.org/BL/ for information
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software Foundation,
20 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 # The Original Code is Copyright (C) 2006, Blender Foundation
23 # All rights reserved.
25 # The Original Code is: all of this file.
27 # Contributor(s): Nathan Letwory.
29 # ***** END GPL/BL DUAL LICENSE BLOCK *****
31 # Main entry-point for the SCons building system
32 # Set up some custom actions and target/argument handling
33 # Then read all SConscripts and build
47 BlenderEnvironment
= tools
.Blender
.BlenderEnvironment
52 platform
= sys
.platform
57 ##### BEGIN SETUP #####
59 B
.possible_types
= ['core', 'common', 'blender', 'intern',
60 'international', 'game', 'game2',
61 'player', 'player2', 'system']
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')
72 if not use_color
=='1':
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'
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
)
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
)
90 ##########################
91 # setting up environment #
92 ##########################
94 # handling cmd line arguments & config file
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)
101 B
.quickdebug
=string
.split(quickdebug
, ',')
106 B
.quickie
=string
.split(quickie
,',')
110 toolset
= B
.arguments
.get('BF_TOOLSET', None)
112 print "Using " + toolset
113 if toolset
=='mstoolkit':
114 env
= BlenderEnvironment(ENV
= os
.environ
)
115 env
.Tool('mstoolkit', ['tools'])
117 env
= BlenderEnvironment(tools
=[toolset
], ENV
= os
.environ
)
119 env
= BlenderEnvironment(ENV
= os
.environ
)
122 print "Could not create a build environment"
125 env
.SConscriptChdir(0)
126 cc
= B
.arguments
.get('CC', None)
127 cxx
= B
.arguments
.get('CXX', None)
133 if env
['CC'] in ['cl', 'cl.exe'] and sys
.platform
=='win32':
134 platform
= 'win32-vc'
135 elif env
['CC'] in ['gcc'] and sys
.platform
=='win32':
136 platform
= 'win32-mingw'
139 #if platform == 'win32-mingw':
148 slash
= re
.compile(r
"\\")
152 b
= slash
.sub(r
"\\\\", b
[1:-1])
153 return "\"" + b
+ "\""
157 def my_spawn(sh
, escape
, cmd
, args
, spawnenv
):
159 spawnenv
[var
] = spawnenv
[var
].encode('ascii', 'replace')
161 sAttrs
= win32security
.SECURITY_ATTRIBUTES()
162 StartupInfo
= win32process
.STARTUPINFO()
163 if cmd
=='ar' and args
[1]=='r':
165 newargs
= string
.join(map(myesc
, args
[1:]), ' ')
166 cmdline
= cmd
+ " " + newargs
168 # check for any special operating system commands
171 win32file
.DeleteFile(arg
)
174 # otherwise execute the command.
175 hProcess
, hThread
, dwPid
, dwTid
= win32process
.CreateProcess(None, cmdline
, None, None, 1, 0, spawnenv
, None, StartupInfo
)
176 win32event
.WaitForSingleObject(hProcess
, win32event
.INFINITE
)
177 exit_code
= win32process
.GetExitCodeProcess(hProcess
)
178 win32file
.CloseHandle(hProcess
);
179 win32file
.CloseHandle(hThread
);
182 env
['SPAWN'] = my_spawn
184 print "install win32all from http://sourceforge.net/project/showfiles.php?group_id=78018"
186 crossbuild
= B
.arguments
.get('BF_CROSS', None)
187 if crossbuild
and platform
!='win32':
188 platform
= 'linuxcross'
190 env
['OURPLATFORM'] = platform
192 configfile
= B
.arguments
.get('BF_CONFIG', 'config'+os
.sep
+platform
+'-config.py')
194 if os
.path
.exists(configfile
):
195 print B
.bc
.OKGREEN
+ "Using config file: " + B
.bc
.ENDC
+ configfile
197 print B
.bc
.FAIL
+ configfile
+ " doesn't exist" + B
.bc
.ENDC
199 if crossbuild
and env
['PLATFORM'] != 'win32':
200 print B
.bc
.HEADER
+"Preparing for crossbuild"+B
.bc
.ENDC
201 env
.Tool('crossmingw', ['tools'])
202 # todo: determine proper libs/includes etc.
203 # Needed for gui programs, console programs should do without it
204 env
.Append(LINKFLAGS
=['-mwindows'])
206 # first read platform config. B.arguments will override
207 optfiles
= [configfile
]
208 if os
.path
.exists('user-config.py'):
209 print B
.bc
.OKGREEN
+ "Using config file: " + B
.bc
.ENDC
+ 'user-config.py'
210 optfiles
+= ['user-config.py']
212 print B
.bc
.WARNING
+ 'user-config.py' + " not found, no user overrides" + B
.bc
.ENDC
214 opts
= btools
.read_opts(optfiles
, B
.arguments
)
217 if not env
['BF_FANCY']:
220 # disable elbeem (fluidsim) compilation?
221 if env
['BF_NO_ELBEEM'] == 1:
222 env
['CPPFLAGS'].append('-DDISABLE_ELBEEM')
223 env
['CXXFLAGS'].append('-DDISABLE_ELBEEM')
224 env
['CCFLAGS'].append('-DDISABLE_ELBEEM')
226 #check for additional debug libnames
228 if env
.has_key('BF_DEBUG_LIBS'):
229 B
.quickdebug
+= env
['BF_DEBUG_LIBS']
231 printdebug
= B
.arguments
.get('BF_LISTDEBUG', 0)
233 # see if this linux distro has libalut
235 if env
['OURPLATFORM'] == 'linux2' :
236 if env
['WITH_BF_OPENAL']:
237 mylib_test_source_file
= """
239 int main(int argc, char **argv)
241 alutGetMajorVersion();
246 def CheckFreeAlut(context
,env
):
247 context
.Message( B
.bc
.OKGREEN
+ "Linux platform detected:\n checking for FreeAlut... " + B
.bc
.ENDC
)
249 result
= context
.TryLink(mylib_test_source_file
, '.c')
250 context
.Result(result
)
253 env2
= env
.Copy( LIBPATH
= env
['BF_OPENAL'] )
254 conf
= Configure( env2
, {'CheckFreeAlut' : CheckFreeAlut
}, '.sconf_temp', '/dev/null' )
255 if conf
.CheckFreeAlut( env2
):
256 env
['BF_OPENAL_LIB'] += ' alut'
258 for root
, dirs
, files
in os
.walk('.sconf_temp', topdown
=False):
260 os
.remove(os
.path
.join(root
, name
))
262 os
.rmdir(os
.path
.join(root
, name
))
265 if len(B
.quickdebug
) > 0 and printdebug
!= 0:
266 print B
.bc
.OKGREEN
+ "Buildings these libs with debug symbols:" + B
.bc
.ENDC
267 for l
in B
.quickdebug
:
270 # check target for blenderplayer. Set WITH_BF_PLAYER if found on cmdline
271 if 'blenderplayer' in B
.targets
:
272 env
['WITH_BF_PLAYER'] = True
274 if 'blendernogame' in B
.targets
:
275 env
['WITH_BF_GAMEENGINE'] = False
277 # lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
278 #B.root_build_dir = B.arguments.get('BF_BUILDDIR', '..'+os.sep+'build'+os.sep+platform+os.sep)
279 B
.root_build_dir
= env
['BF_BUILDDIR']
280 env
['BUILDDIR'] = B
.root_build_dir
281 if not B
.root_build_dir
[-1]==os
.sep
:
282 B
.root_build_dir
+= os
.sep
284 def NSIS_Installer():
286 if env
['OURPLATFORM'] != 'win32-vc' and env
['OURPLATFORM'] != 'win32-mingw':
287 print "NSIS installer is only available on Windows."
290 install_base_dir
= os
.getcwd() + "\\"
292 if not os
.path
.exists(install_base_dir
+env
['BF_INSTALLDIR']+'/plugins/include'):
293 os
.mkdir(install_base_dir
+env
['BF_INSTALLDIR']+'/plugins/include')
295 for f
in glob
.glob('source/blender/blenpluginapi/*.h'):
296 shutil
.copy(f
,install_base_dir
+env
['BF_INSTALLDIR']+'/plugins/include')
298 shutil
.copy('source/blender/blenpluginapi/plugin.def',install_base_dir
+env
['BF_INSTALLDIR']+'/plugins/include/')
302 version
= v
.read()[:-1]
303 shortver
= version
.split('.')[0] + version
.split('.')[1]
306 #### change to suit install dir ####
307 inst_dir
= install_base_dir
+ env
['BF_INSTALLDIR']
309 os
.chdir("windows/installer")
311 ns
= open("00.sconsblender.nsi","r")
313 ns_cnt
= str(ns
.read())
318 rootdir
= os
.listdir(inst_dir
+"\\")
319 for rootitem
in rootdir
:
320 if os
.path
.isdir(inst_dir
+"\\"+ rootitem
) == 0:
321 rootlist
.append("File " + inst_dir
+ "\\" + rootitem
)
322 rootstring
= string
.join(rootlist
, "\n ")
324 ns_cnt
= string
.replace(ns_cnt
, "[ROOTDIRCONTS]", rootstring
)
328 for rootitem
in rootdir
:
329 if os
.path
.isdir(inst_dir
+ rootitem
) == 0:
330 delrootlist
.append("Delete $INSTDIR\\" + rootitem
)
331 delrootstring
= string
.join(delrootlist
, "\n ")
332 delrootstring
+= "\n"
333 ns_cnt
= string
.replace(ns_cnt
, "[DELROOTDIRCONTS]", delrootstring
)
337 scriptpath
= "%s%s" % (inst_dir
, "\\.blender\\scripts")
338 scriptdir
= os
.listdir(scriptpath
)
339 for scriptitem
in scriptdir
:
340 scriptfile
= "%s\\%s" % (scriptpath
, scriptitem
)
341 if os
.path
.isdir(scriptfile
) == 0:
342 scriptlist
.append("File %s" % scriptfile
)
343 scriptstring
= string
.join(scriptlist
, "\n ")
344 scriptstring
+= "\n\n"
345 ns_cnt
= string
.replace(ns_cnt
, "[SCRIPTCONTS]", scriptstring
)
347 # do scripts\bpymodules
349 bpymodpath
= "%s%s" % (inst_dir
, "\\.blender\\scripts\\bpymodules")
350 bpymoddir
= os
.listdir(bpymodpath
)
352 for bpymoditem
in bpymoddir
:
353 bpymodfile
= "%s\\%s" % (bpymodpath
, bpymoditem
)
354 if os
.path
.isdir(bpymodfile
) == 0:
355 bpymodlist
.append("File %s" % bpymodfile
)
356 bpymodstring
= string
.join(bpymodlist
, "\n ")
357 bpymodstring
+= "\n\n"
358 ns_cnt
= string
.replace(ns_cnt
, "[SCRIPTMODCONTS]", bpymodstring
)
360 # do scripts\bpymodules\colladaimex
362 bpymodpath
= "%s%s" % (inst_dir
, "\\.blender\\scripts\\bpymodules\\ColladaImEx")
363 bpymoddir
= os
.listdir(bpymodpath
)
365 for bpymoditem
in bpymoddir
:
366 bpymodfile
= "%s\\%s" % (bpymodpath
, bpymoditem
)
367 if os
.path
.isdir(bpymodfile
) == 0:
368 colladalist
.append("File %s" % bpymodfile
)
369 bpymodstring
= string
.join(colladalist
, "\n ")
370 bpymodstring
+= "\n\n"
371 ns_cnt
= string
.replace(ns_cnt
, "[SCRIPTMODCOLLADACONT]", bpymodstring
)
375 bpydatapath
= "%s%s" % (inst_dir
, "\\.blender\\scripts\\bpydata")
376 bpydatadir
= os
.listdir(bpydatapath
)
377 for bpydataitem
in bpydatadir
:
378 bpydatafile
= "%s\\%s" % (bpydatapath
, bpydataitem
)
379 if os
.path
.isdir(bpydatafile
) == 0:
380 bpydatalist
.append("File %s" % bpydatafile
)
381 bpydatastring
= string
.join(bpydatalist
, "\n ")
382 bpydatastring
+= "\n\n"
383 ns_cnt
= string
.replace(ns_cnt
, "[SCRIPTDATACONTS]", bpydatastring
)
387 plugincludepath
= "%s%s" % (inst_dir
, "\\plugins\\include")
388 plugincludedir
= os
.listdir(plugincludepath
)
389 for plugincludeitem
in plugincludedir
:
390 plugincludefile
= "%s\\%s" % (plugincludepath
, plugincludeitem
)
391 if os
.path
.isdir(plugincludefile
) == 0:
392 if plugincludefile
.find('.h') or plugincludefile
.find('.DEF'):
393 plugincludelist
.append("File %s" % plugincludefile
)
394 plugincludestring
= string
.join(plugincludelist
, "\n ")
395 plugincludestring
+= "\n\n"
396 ns_cnt
= string
.replace(ns_cnt
, "[PLUGINCONTS]", plugincludestring
)
398 # do scripts\bpydata\config
400 cfgpath
= "%s%s" % (inst_dir
, "\\.blender\\scripts\\bpydata\\config")
401 cfgdir
= os
.listdir(cfgpath
)
402 for cfgitem
in cfgdir
:
403 cfgfile
= "%s\\%s" % (cfgpath
, cfgitem
)
404 if os
.path
.isdir(cfgfile
) == 0:
405 cfglist
.append("File %s" % cfgfile
)
406 cfgstring
= string
.join(cfglist
, "\n ")
408 ns_cnt
= string
.replace(ns_cnt
, "[SCRIPTDATACFGCONTS]", cfgstring
)
412 dotblenddir
= os
.listdir(inst_dir
+"\\.blender")
413 for dotblenditem
in dotblenddir
:
414 if os
.path
.isdir(inst_dir
+ "\\.blender\\" + dotblenditem
) == 0:
415 dotblendlist
.append("File " + inst_dir
+ "\\.blender\\" + dotblenditem
)
416 dotblendstring
= string
.join(dotblendlist
, "\n ")
417 dotblendstring
+= "\n\n"
418 ns_cnt
= string
.replace(ns_cnt
, "[DOTBLENDERCONTS]", dotblendstring
)
423 langdir
= os
.listdir(inst_dir
+ "\\.blender\\locale")
424 for langitem
in langdir
:
425 if os
.path
.isdir(inst_dir
+ "\\.blender\\locale\\" + langitem
) == 1:
426 langfiles
.append("SetOutPath $BLENDERHOME\\.blender\\locale\\" + langitem
+ "\\LC_MESSAGES")
427 langfiles
.append("File " + inst_dir
+ "\\.blender\\locale\\" + langitem
+ "\\LC_MESSAGES\\blender.mo")
428 langstring
= string
.join(langfiles
, "\n ")
430 ns_cnt
= string
.replace(ns_cnt
, "[LANGUAGECONTS]", langstring
)
433 ns_cnt
= string
.replace(ns_cnt
, "DISTDIR", inst_dir
+"\\")
434 ns_cnt
= string
.replace(ns_cnt
, "SHORTVER", shortver
)
435 ns_cnt
= string
.replace(ns_cnt
, "VERSION", version
)
437 new_nsis
= open("00.blender_tmp.nsi", 'w')
438 new_nsis
.write(ns_cnt
)
441 sys
.stdout
= os
.popen("makensis 00.blender_tmp.nsi", 'w')
444 if 'nsis' in B
.targets
:
448 # We do a shortcut for clean when no quicklist is given: just delete
449 # builddir without reading in SConscripts
451 if 'clean' in B
.targets
:
454 if not quickie
and do_clean
:
455 print B
.bc
.HEADER
+'Cleaning...'+B
.bc
.ENDC
456 dirs
= os
.listdir(B
.root_build_dir
)
458 if os
.path
.isdir(B
.root_build_dir
+ dir) == 1:
459 print "clean dir %s"%(B
.root_build_dir
+dir)
460 shutil
.rmtree(B
.root_build_dir
+dir)
461 print B
.bc
.OKGREEN
+'...done'+B
.bc
.ENDC
464 if not os
.path
.isdir ( B
.root_build_dir
):
465 os
.makedirs ( B
.root_build_dir
)
466 os
.makedirs ( B
.root_build_dir
+ 'source' )
467 os
.makedirs ( B
.root_build_dir
+ 'intern' )
468 os
.makedirs ( B
.root_build_dir
+ 'extern' )
469 os
.makedirs ( B
.root_build_dir
+ 'lib' )
470 os
.makedirs ( B
.root_build_dir
+ 'bin' )
472 Help(opts
.GenerateHelpText(env
))
474 # default is new quieter output, but if you need to see the
475 # commands, do 'scons BF_QUIET=0'
476 bf_quietoutput
= B
.arguments
.get('BF_QUIET', '1')
477 if bf_quietoutput
=='1':
478 B
.set_quiet_output(env
)
483 print B
.bc
.HEADER
+'Building in '+B
.bc
.ENDC
+B
.root_build_dir
484 env
.SConsignFile(B
.root_build_dir
+'scons-signatures')
487 ##### END SETUP ##########
490 #Export('root_build_dir') # this one is still needed for makesdna
491 ##TODO: improve makesdna usage
493 BuildDir(B
.root_build_dir
+'/intern', 'intern', duplicate
=0)
494 SConscript(B
.root_build_dir
+'/intern/SConscript')
495 BuildDir(B
.root_build_dir
+'/extern', 'extern', duplicate
=0)
496 SConscript(B
.root_build_dir
+'/extern/SConscript')
497 BuildDir(B
.root_build_dir
+'/source', 'source', duplicate
=0)
498 SConscript(B
.root_build_dir
+'/source/SConscript')
500 # now that we have read all SConscripts, we know what
501 # libraries will be built. Create list of
502 # libraries to give as objects to linking phase
504 for tp
in B
.possible_types
:
505 if not tp
== 'player' and not tp
== 'player2':
506 mainlist
+= B
.create_blender_liblist(env
, tp
)
508 if B
.arguments
.get('BF_PRIORITYLIST', '0')=='1':
509 B
.propose_priorities()
511 dobj
= B
.buildinfo(env
, "dynamic") + B
.resources
512 thestatlibs
, thelibincs
= B
.setup_staticlibs(env
)
513 thesyslibs
= B
.setup_syslibs(env
)
515 env
.BlenderProg(B
.root_build_dir
, "blender", dobj
+ mainlist
+ thestatlibs
, [], thesyslibs
, [B
.root_build_dir
+'/lib'] + thelibincs
, 'blender')
516 if env
['WITH_BF_PLAYER']:
517 playerlist
= B
.create_blender_liblist(env
, 'player')
518 env
.BlenderProg(B
.root_build_dir
, "blenderplayer", dobj
+ playerlist
+ thestatlibs
, [], thesyslibs
, [B
.root_build_dir
+'/lib'] + thelibincs
, 'blenderplayer')
520 ##### Now define some targets
523 #------------ INSTALL
527 if env
['OURPLATFORM']=='darwin':
528 for prg
in B
.program_list
:
529 bundle
= '%s.app' % prg
[0]
530 bundledir
= os
.path
.dirname(bundle
)
531 for dp
, dn
, df
in os
.walk(bundle
):
536 dir=env
['BF_INSTALLDIR']+dp
[len(bundledir
):]
537 source
=[dp
+os
.sep
+f
for f
in df
]
538 blenderinstall
.append(env
.Install(dir=dir,source
=source
))
540 blenderinstall
= env
.Install(dir=env
['BF_INSTALLDIR'], source
=B
.program_list
)
545 for dp
, dn
, df
in os
.walk('bin/.blender'):
551 dotblendlist
.append(dp
+os
.sep
+f
)
552 dottargetlist
.append(env
['BF_INSTALLDIR']+dp
[3:]+os
.sep
+f
)
554 dotblenderinstall
= []
555 for targetdir
,srcfile
in zip(dottargetlist
, dotblendlist
):
556 td
, tf
= os
.path
.split(targetdir
)
557 dotblenderinstall
.append(env
.Install(dir=td
, source
=srcfile
))
561 scriptpath
='release/scripts'
562 for dp
, dn
, df
in os
.walk(scriptpath
):
567 dir=env
['BF_INSTALLDIR']+'/.blender/scripts'+dp
[len(scriptpath
):]
568 source
=[dp
+os
.sep
+f
for f
in df
]
569 scriptinstall
.append(env
.Install(dir=dir,source
=source
))
574 for tp
, tn
, tf
in os
.walk('release/plugins'):
580 pluglist
.append(tp
+os
.sep
+f
)
581 plugtargetlist
.append(env
['BF_INSTALLDIR']+tp
[7:]+os
.sep
+f
)
584 for targetdir
,srcfile
in zip(plugtargetlist
, pluglist
):
585 td
, tf
= os
.path
.split(targetdir
)
586 plugininstall
.append(env
.Install(dir=td
, source
=srcfile
))
590 for tp
, tn
, tf
in os
.walk('release/text'):
596 textlist
.append(tp
+os
.sep
+f
)
598 textinstall
= env
.Install(dir=env
['BF_INSTALLDIR'], source
=textlist
)
600 allinstall
= [blenderinstall
, dotblenderinstall
, scriptinstall
, plugininstall
, textinstall
]
602 if env
['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
603 dllsources
= ['${LCGDIR}/gettext/lib/gnu_gettext.dll',
604 '${LCGDIR}/png/lib/libpng.dll',
605 '#release/windows/extra/python25.zip',
606 # '#release/windows/extra/zlib.pyd',
607 '${LCGDIR}/sdl/lib/SDL.dll',
608 '${LCGDIR}/zlib/lib/zlib.dll',
609 '${LCGDIR}/tiff/lib/libtiff.dll']
611 dllsources
.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}.dll')
613 dllsources
.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}.dll')
614 if env
['OURPLATFORM'] == 'win32-mingw':
615 dllsources
+= ['${LCGDIR}/pthreads/lib/pthreadGC2.dll']
617 dllsources
+= ['${LCGDIR}/pthreads/lib/pthreadVC2.dll']
618 if env
['WITH_BF_ICONV']:
619 dllsources
+= ['${LCGDIR}/iconv/lib/iconv.dll']
620 if env
['WITH_BF_FFMPEG']:
621 dllsources
+= ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
622 '${LCGDIR}/ffmpeg/lib/avformat-51.dll',
623 '${LCGDIR}/ffmpeg/lib/avutil-49.dll']
624 windlls
= env
.Install(dir=env
['BF_INSTALLDIR'], source
= dllsources
)
625 allinstall
+= windlls
627 installtarget
= env
.Alias('install', allinstall
)
628 bininstalltarget
= env
.Alias('install-bin', blenderinstall
)
630 if env
['WITH_BF_PLAYER']:
631 blenderplayer
= env
.Alias('blenderplayer', B
.program_list
)
632 Depends(blenderplayer
,installtarget
)
634 if not env
['WITH_BF_GAMEENGINE']:
635 blendernogame
= env
.Alias('blendernogame', B
.program_list
)
636 Depends(blendernogame
,installtarget
)
638 Default(B
.program_list
)
640 if not env
['WITHOUT_BF_INSTALL']:
641 Default(installtarget
)
643 #------------ RELEASE
644 # TODO: zipup the installation
646 #------------ BLENDERPLAYER
647 # TODO: build stubs and link into blenderplayer