2004-08-04 22:00:41 +00:00
#!/usr/bin/env python
2011-10-23 19:54:06 +00:00
#
2008-04-16 22:40:48 +00:00
# ***** BEGIN GPL LICENSE BLOCK *****
2006-02-04 14:15:10 +00:00
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
2008-04-16 22:40:48 +00:00
# of the License, or (at your option) any later version.
2006-02-04 14:15:10 +00:00
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
2006-02-25 14:53:27 +00:00
# The Original Code is Copyright (C) 2006, Blender Foundation
2006-02-04 14:15:10 +00:00
# All rights reserved.
#
2006-02-25 14:53:27 +00:00
# The Original Code is: all of this file.
2006-02-04 14:15:10 +00:00
#
# Contributor(s): Nathan Letwory.
#
2008-04-16 22:40:48 +00:00
# ***** END GPL LICENSE BLOCK *****
2006-02-04 14:15:10 +00:00
#
# Main entry-point for the SCons building system
# Set up some custom actions and target/argument handling
# Then read all SConscripts and build
2011-01-17 10:43:51 +00:00
#
2011-01-17 10:47:31 +00:00
# TODO: fix /FORCE:MULTIPLE on windows to get proper debug builds.
2011-10-23 19:54:06 +00:00
# TODO: directory copy functions are far too complicated, see:
# http://wiki.blender.org/index.php/User:Ideasman42/SConsNotSimpleInstallingFiles
2004-01-04 21:11:59 +00:00
2009-02-20 22:08:02 +00:00
import platform as pltfrm
2009-08-03 14:48:39 +00:00
# Need a better way to do this. Automagical maybe is not the best thing, maybe it is.
2009-02-20 22:08:02 +00:00
if pltfrm . architecture ( ) [ 0 ] == ' 64bit ' :
2010-08-29 20:52:05 +00:00
bitness = 64
2009-02-20 22:08:02 +00:00
else :
2010-08-29 20:52:05 +00:00
bitness = 32
2009-02-20 22:08:02 +00:00
2006-02-04 14:15:10 +00:00
import sys
import os
import os . path
import string
import shutil
import glob
2006-02-07 21:24:36 +00:00
import re
2008-04-08 17:01:11 +00:00
from tempfile import mkdtemp
2006-02-04 14:15:10 +00:00
2010-07-19 09:02:27 +00:00
# store path to tools
toolpath = os . path . join ( " . " , " build_files " , " scons " , " tools " )
2010-07-12 18:26:35 +00:00
# needed for importing tools
2010-07-19 09:02:27 +00:00
sys . path . append ( toolpath )
2010-07-12 18:26:35 +00:00
2010-07-14 16:38:09 +00:00
import Blender
import btools
import bcolors
2006-02-04 14:15:10 +00:00
2008-10-30 23:55:07 +00:00
EnsureSConsVersion ( 1 , 0 , 0 )
2011-02-18 09:39:15 +00:00
# Before we do anything, let's check if we have a sane os.environ
if not btools . check_environ ( ) :
Exit ( )
2010-07-14 16:38:09 +00:00
BlenderEnvironment = Blender . BlenderEnvironment
B = Blender
2006-02-04 14:15:10 +00:00
2010-07-14 16:38:09 +00:00
VERSION = btools . VERSION # This is used in creating the local config directories
2011-11-17 19:43:59 +00:00
VERSION_RELEASE_CYCLE = btools . VERSION_RELEASE_CYCLE
2010-07-05 07:06:19 +00:00
2006-02-04 14:15:10 +00:00
### globals ###
platform = sys . platform
quickie = None
2006-03-17 16:38:39 +00:00
quickdebug = None
2006-02-04 14:15:10 +00:00
##### BEGIN SETUP #####
2010-12-21 00:21:42 +00:00
B . possible_types = [ ' core ' , ' player ' , ' player2 ' , ' intern ' , ' extern ' ]
2006-02-04 14:15:10 +00:00
2006-02-05 11:28:28 +00:00
B . binarykind = [ ' blender ' , ' blenderplayer ' ]
2006-02-04 14:15:10 +00:00
##################################
# target and argument validation #
##################################
# XX cheating for BF_FANCY, we check for BF_FANCY before args are validated
use_color = ARGUMENTS . get ( ' BF_FANCY ' , ' 1 ' )
if platform == ' win32 ' :
2010-08-29 20:52:05 +00:00
use_color = None
2006-02-04 14:15:10 +00:00
if not use_color == ' 1 ' :
2010-08-29 20:52:05 +00:00
B . bc . disable ( )
2012-08-10 08:19:45 +00:00
2007-05-19 22:57:28 +00:00
#on defaut white Os X terminal, some colors are totally unlegible
if platform == ' darwin ' :
2010-08-29 20:52:05 +00:00
B . bc . OKGREEN = ' \033 [34m '
B . bc . WARNING = ' \033 [36m '
2006-02-04 14:15:10 +00:00
# arguments
print B . bc . HEADER + ' Command-line arguments ' + B . bc . ENDC
B . arguments = btools . validate_arguments ( ARGUMENTS , B . bc )
btools . print_arguments ( B . arguments , B . bc )
# targets
print B . bc . HEADER + ' Command-line targets ' + B . bc . ENDC
B . targets = btools . validate_targets ( COMMAND_LINE_TARGETS , B . bc )
btools . print_targets ( B . targets , B . bc )
##########################
# setting up environment #
##########################
# handling cmd line arguments & config file
2011-08-02 18:33:39 +00:00
# bitness stuff
tempbitness = int ( B . arguments . get ( ' BF_BITNESS ' , bitness ) ) # default to bitness found as per starting python
if tempbitness in ( 32 , 64 ) : # only set if 32 or 64 has been given
bitness = int ( tempbitness )
2011-12-08 19:16:43 +00:00
if bitness :
B . bitness = bitness
else :
B . bitness = tempbitness
2012-08-10 08:19:45 +00:00
2011-12-08 19:16:43 +00:00
2006-02-04 14:15:10 +00:00
# first check cmdline for toolset and we create env to work on
quickie = B . arguments . get ( ' BF_QUICK ' , None )
2006-03-17 16:38:39 +00:00
quickdebug = B . arguments . get ( ' BF_QUICKDEBUG ' , None )
if quickdebug :
2010-08-29 20:52:05 +00:00
B . quickdebug = string . split ( quickdebug , ' , ' )
2006-03-17 16:38:39 +00:00
else :
2010-08-29 20:52:05 +00:00
B . quickdebug = [ ]
2006-10-18 05:45:47 +00:00
2006-02-04 14:15:10 +00:00
if quickie :
2010-08-29 20:52:05 +00:00
B . quickie = string . split ( quickie , ' , ' )
2004-08-04 22:00:41 +00:00
else :
2010-08-29 20:52:05 +00:00
B . quickie = [ ]
2012-08-10 08:19:45 +00:00
2006-02-04 14:15:10 +00:00
toolset = B . arguments . get ( ' BF_TOOLSET ' , None )
if toolset :
2010-08-29 20:52:05 +00:00
print " Using " + toolset
if toolset == ' mstoolkit ' :
env = BlenderEnvironment ( ENV = os . environ )
env . Tool ( ' mstoolkit ' , [ toolpath ] )
else :
env = BlenderEnvironment ( tools = [ toolset ] , ENV = os . environ )
2012-01-17 10:32:17 +00:00
if env :
btools . SetupSpawn ( env )
2004-07-18 19:02:56 +00:00
else :
2010-08-29 20:52:05 +00:00
if bitness == 64 and platform == ' win32 ' :
env = BlenderEnvironment ( ENV = os . environ , MSVS_ARCH = ' amd64 ' )
else :
env = BlenderEnvironment ( ENV = os . environ )
2004-01-04 21:11:59 +00:00
2006-02-04 14:15:10 +00:00
if not env :
2010-08-29 20:52:05 +00:00
print " Could not create a build environment "
Exit ( )
2004-01-04 21:11:59 +00:00
2006-02-23 21:08:40 +00:00
cc = B . arguments . get ( ' CC ' , None )
cxx = B . arguments . get ( ' CXX ' , None )
if cc :
2010-08-29 20:52:05 +00:00
env [ ' CC ' ] = cc
2006-02-23 21:08:40 +00:00
if cxx :
2010-08-29 20:52:05 +00:00
env [ ' CXX ' ] = cxx
2006-02-23 21:08:40 +00:00
2011-03-29 13:00:03 +00:00
if sys . platform == ' win32 ' :
if env [ ' CC ' ] in [ ' cl ' , ' cl.exe ' ] :
2011-11-10 10:34:26 +00:00
platform = ' win64-vc ' if bitness == 64 else ' win32-vc '
2011-03-29 13:00:03 +00:00
elif env [ ' CC ' ] in [ ' gcc ' ] :
2012-04-24 12:57:58 +00:00
platform = ' win64-mingw ' if bitness == 64 else ' win32-mingw '
2004-01-04 21:11:59 +00:00
2007-05-31 07:42:54 +00:00
env . SConscriptChdir ( 0 )
2006-11-30 12:39:09 +00:00
2011-08-21 13:31:46 +00:00
# Remove major kernel version from linux platform.
# After Linus switched kernel to new version model this major version
# shouldn't take much sense for building rules.
if re . match ( ' linux[0-9]+ ' , platform ) :
platform = ' linux '
2006-02-04 14:15:10 +00:00
crossbuild = B . arguments . get ( ' BF_CROSS ' , None )
2009-02-20 22:08:02 +00:00
if crossbuild and platform not in ( ' win32-vc ' , ' win64-vc ' ) :
2010-08-29 20:52:05 +00:00
platform = ' linuxcross '
2004-01-04 21:11:59 +00:00
2006-02-04 14:15:10 +00:00
env [ ' OURPLATFORM ' ] = platform
2004-01-04 21:11:59 +00:00
2010-07-12 18:26:35 +00:00
configfile = os . path . join ( " build_files " , " scons " , " config " , platform + " -config.py " )
2004-03-02 08:40:19 +00:00
2006-02-04 14:15:10 +00:00
if os . path . exists ( configfile ) :
2010-08-29 20:52:05 +00:00
print B . bc . OKGREEN + " Using config file: " + B . bc . ENDC + configfile
2004-01-04 21:11:59 +00:00
else :
2010-08-29 20:52:05 +00:00
print B . bc . FAIL + configfile + " doesn ' t exist " + B . bc . ENDC
2006-02-04 14:15:10 +00:00
if crossbuild and env [ ' PLATFORM ' ] != ' win32 ' :
2010-08-29 20:52:05 +00:00
print B . bc . HEADER + " Preparing for crossbuild " + B . bc . ENDC
env . Tool ( ' crossmingw ' , [ toolpath ] )
# todo: determine proper libs/includes etc.
# Needed for gui programs, console programs should do without it
2010-02-01 18:39:41 +00:00
2010-08-29 20:52:05 +00:00
# Now we don't need this option to have console window
# env.Append(LINKFLAGS=['-mwindows'])
2006-02-04 14:15:10 +00:00
2008-04-27 20:17:14 +00:00
userconfig = B . arguments . get ( ' BF_CONFIG ' , ' user-config.py ' )
2006-02-04 14:15:10 +00:00
# first read platform config. B.arguments will override
optfiles = [ configfile ]
2008-04-27 20:17:14 +00:00
if os . path . exists ( userconfig ) :
2010-08-29 20:52:05 +00:00
print B . bc . OKGREEN + " Using user-config file: " + B . bc . ENDC + userconfig
optfiles + = [ userconfig ]
2004-02-07 20:44:43 +00:00
else :
2010-08-29 20:52:05 +00:00
print B . bc . WARNING + userconfig + " not found, no user overrides " + B . bc . ENDC
2006-02-04 14:15:10 +00:00
2010-05-23 21:20:13 +00:00
opts = btools . read_opts ( env , optfiles , B . arguments )
2006-02-04 14:15:10 +00:00
opts . Update ( env )
2011-03-29 13:00:03 +00:00
if sys . platform == ' win32 ' :
if bitness == 64 :
2011-10-21 04:23:26 +00:00
env . Append ( CPPFLAGS = [ ' -DWIN64 ' ] ) # -DWIN32 needed too, as it's used all over to target Windows generally
2011-03-29 13:00:03 +00:00
2007-12-20 17:52:57 +00:00
if not env [ ' BF_FANCY ' ] :
2010-08-29 20:52:05 +00:00
B . bc . disable ( )
2007-12-20 17:52:57 +00:00
2010-02-11 22:02:27 +00:00
# remove install dir so old and new files are not mixed.
2010-02-12 09:18:10 +00:00
# NOTE: only do the scripts directory for now, otherwise is too disruptive for developers
# TODO: perhaps we need an option (off by default) to not do this altogether...
2010-02-12 12:29:39 +00:00
if not env [ ' WITHOUT_BF_INSTALL ' ] and not env [ ' WITHOUT_BF_OVERWRITE_INSTALL ' ] :
2010-08-29 20:52:05 +00:00
scriptsDir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' )
if os . path . isdir ( scriptsDir ) :
print B . bc . OKGREEN + " Clearing installation directory %s : %s " % ( B . bc . ENDC , os . path . abspath ( scriptsDir ) )
shutil . rmtree ( scriptsDir )
2010-02-11 22:02:27 +00:00
2008-10-30 23:55:07 +00:00
SetOption ( ' num_jobs ' , int ( env [ ' BF_NUMJOBS ' ] ) )
2010-02-11 22:02:27 +00:00
print B . bc . OKGREEN + " Build with parallel jobs %s : %s " % ( B . bc . ENDC , GetOption ( ' num_jobs ' ) )
2010-06-05 11:56:55 +00:00
print B . bc . OKGREEN + " Build with debug symbols %s : %s " % ( B . bc . ENDC , env [ ' BF_DEBUG ' ] )
2008-10-30 23:55:07 +00:00
2010-08-02 16:27:41 +00:00
if ' blenderlite ' in B . targets :
2010-08-29 20:52:05 +00:00
target_env_defs = { }
target_env_defs [ ' WITH_BF_GAMEENGINE ' ] = False
2012-06-21 12:27:57 +00:00
target_env_defs [ ' WITH_BF_CYCLES ' ] = False
2010-08-29 20:52:05 +00:00
target_env_defs [ ' WITH_BF_OPENAL ' ] = False
target_env_defs [ ' WITH_BF_OPENEXR ' ] = False
target_env_defs [ ' WITH_BF_OPENMP ' ] = False
target_env_defs [ ' WITH_BF_ICONV ' ] = False
target_env_defs [ ' WITH_BF_INTERNATIONAL ' ] = False
target_env_defs [ ' WITH_BF_OPENJPEG ' ] = False
target_env_defs [ ' WITH_BF_FFMPEG ' ] = False
target_env_defs [ ' WITH_BF_QUICKTIME ' ] = False
target_env_defs [ ' WITH_BF_REDCODE ' ] = False
target_env_defs [ ' WITH_BF_DDS ' ] = False
target_env_defs [ ' WITH_BF_CINEON ' ] = False
2012-04-14 22:33:48 +00:00
target_env_defs [ ' WITH_BF_FRAMESERVER ' ] = False
2010-08-29 20:52:05 +00:00
target_env_defs [ ' WITH_BF_HDR ' ] = False
target_env_defs [ ' WITH_BF_ZLIB ' ] = False
target_env_defs [ ' WITH_BF_SDL ' ] = False
target_env_defs [ ' WITH_BF_JPEG ' ] = False
target_env_defs [ ' WITH_BF_PNG ' ] = False
target_env_defs [ ' WITH_BF_BULLET ' ] = False
target_env_defs [ ' WITH_BF_BINRELOC ' ] = False
target_env_defs [ ' BF_BUILDINFO ' ] = False
2011-10-29 23:56:07 +00:00
target_env_defs [ ' WITH_BF_FLUID ' ] = False
2011-11-13 12:17:27 +00:00
target_env_defs [ ' WITH_BF_OCEANSIM ' ] = False
2012-04-14 22:33:48 +00:00
target_env_defs [ ' WITH_BF_SMOKE ' ] = False
2011-10-29 23:56:07 +00:00
target_env_defs [ ' WITH_BF_BOOLEAN ' ] = False
2011-12-31 03:34:44 +00:00
target_env_defs [ ' WITH_BF_REMESH ' ] = False
2010-08-29 20:52:05 +00:00
target_env_defs [ ' WITH_BF_PYTHON ' ] = False
2011-08-02 07:02:40 +00:00
target_env_defs [ ' WITH_BF_3DMOUSE ' ] = False
2012-03-08 03:25:53 +00:00
target_env_defs [ ' WITH_BF_LIBMV ' ] = False
2012-08-10 08:19:45 +00:00
2010-08-29 20:52:05 +00:00
# Merge blenderlite, let command line to override
for k , v in target_env_defs . iteritems ( ) :
if k not in B . arguments :
env [ k ] = v
2009-09-21 03:16:26 +00:00
2011-12-12 22:17:02 +00:00
# Extended OSX_SDK and 3D_CONNEXION_CLIENT_LIBRARY and JAckOSX detection for OSX
2011-08-04 08:46:17 +00:00
if env [ ' OURPLATFORM ' ] == ' darwin ' :
2012-02-25 11:21:20 +00:00
print B . bc . OKGREEN + " Detected Xcode version: -- " + B . bc . ENDC + env [ ' XCODE_CUR_VER ' ] + " -- "
2011-08-07 16:54:40 +00:00
print " Available " + env [ ' MACOSX_SDK_CHECK ' ]
2012-07-26 11:08:56 +00:00
if not ' Mac OS X 10.6 ' in env [ ' MACOSX_SDK_CHECK ' ] :
print B . bc . OKGREEN + " Auto-setting available MacOSX SDK -> " + B . bc . ENDC + " MacOSX10.7.sdk "
elif not ' Mac OS X 10.5 ' in env [ ' MACOSX_SDK_CHECK ' ] :
print B . bc . OKGREEN + " Auto-setting available MacOSX SDK -> " + B . bc . ENDC + " MacOSX10.6.sdk "
2011-08-07 16:54:40 +00:00
else :
print B . bc . OKGREEN + " Found recommended sdk : " + B . bc . ENDC + " using MacOSX10.5.sdk "
2011-08-21 21:11:26 +00:00
# for now, Mac builders must download and install the 3DxWare 10 Beta 4 driver framework from 3Dconnexion
2011-08-07 16:29:05 +00:00
# necessary header file lives here when installed:
# /Library/Frameworks/3DconnexionClient.framework/Versions/Current/Headers/ConnexionClientAPI.h
2011-08-25 15:18:54 +00:00
if env [ ' WITH_BF_3DMOUSE ' ] == 1 :
2011-08-25 15:12:57 +00:00
if not os . path . exists ( ' /Library/Frameworks/3DconnexionClient.framework ' ) :
print " 3D_CONNEXION_CLIENT_LIBRARY not found, disabling WITH_BF_3DMOUSE " # avoid build errors !
env [ ' WITH_BF_3DMOUSE ' ] = 0
else :
2011-09-28 11:56:50 +00:00
env . Append ( LINKFLAGS = [ ' -Xlinker ' , ' -weak_framework ' , ' -Xlinker ' , ' 3DconnexionClient ' ] )
2009-09-21 03:16:26 +00:00
2011-12-12 22:17:02 +00:00
# for now, Mac builders must download and install the JackOSX framework
# necessary header file lives here when installed:
# /Library/Frameworks/Jackmp.framework/Versions/A/Headers/jack.h
if env [ ' WITH_BF_JACK ' ] == 1 :
if not os . path . exists ( ' /Library/Frameworks/Jackmp.framework ' ) :
print " JackOSX install not found, disabling WITH_BF_JACK " # avoid build errors !
env [ ' WITH_BF_JACK ' ] = 0
else :
env . Append ( LINKFLAGS = [ ' -Xlinker ' , ' -weak_framework ' , ' -Xlinker ' , ' Jackmp ' ] )
2012-11-15 21:35:25 +00:00
if env [ ' WITH_BF_CYCLES_OSL ' ] == 1 :
2012-11-16 14:42:04 +00:00
# this is kinda hardcoded atm due not understood path issues, also look that we need 2 variants of passing the oslexec with the force_load option, why ?
env . Append ( LINKFLAGS = [ ' -L../lib/darwin-9.x.universal/osl/lib ' , ' -loslcomp ' , ' -force_load ../lib/darwin-9.x.universal/osl/lib/liboslexec.a ' , ' -loslquery ' ] )
2012-11-16 15:18:14 +00:00
env . Append ( BF_PROGRAM_LINKFLAGS = [ ' -loslcomp ' , ' -Xlinker ' , ' -force_load ' , ' -Xlinker ' , ' ../lib/darwin-9.x.universal/osl/lib/liboslexec.a ' ] )
2012-11-16 14:42:04 +00:00
2008-01-29 21:01:12 +00:00
if env [ ' WITH_BF_OPENMP ' ] == 1 :
2010-08-29 20:52:05 +00:00
if env [ ' OURPLATFORM ' ] in ( ' win32-vc ' , ' win64-vc ' ) :
env [ ' CCFLAGS ' ] . append ( ' /openmp ' )
else :
if env [ ' CC ' ] . endswith ( ' icc ' ) : # to be able to handle CC=/opt/bla/icc case
env . Append ( LINKFLAGS = [ ' -openmp ' , ' -static-intel ' ] )
env [ ' CCFLAGS ' ] . append ( ' -openmp ' )
else :
env . Append ( CCFLAGS = [ ' -fopenmp ' ] )
2008-01-29 21:01:12 +00:00
2009-10-29 18:06:49 +00:00
if env [ ' WITH_GHOST_COCOA ' ] == True :
2011-10-21 04:23:26 +00:00
env . Append ( CPPFLAGS = [ ' -DGHOST_COCOA ' ] )
2012-08-10 08:19:45 +00:00
2009-11-18 15:54:25 +00:00
if env [ ' USE_QTKIT ' ] == True :
2010-08-29 20:52:05 +00:00
env . Append ( CPPFLAGS = [ ' -DUSE_QTKIT ' ] )
2009-10-29 18:06:49 +00:00
2006-03-17 16:38:39 +00:00
#check for additional debug libnames
if env . has_key ( ' BF_DEBUG_LIBS ' ) :
2010-08-29 20:52:05 +00:00
B . quickdebug + = env [ ' BF_DEBUG_LIBS ' ]
2006-03-17 16:38:39 +00:00
printdebug = B . arguments . get ( ' BF_LISTDEBUG ' , 0 )
if len ( B . quickdebug ) > 0 and printdebug != 0 :
2010-08-29 20:52:05 +00:00
print B . bc . OKGREEN + " Buildings these libs with debug symbols: " + B . bc . ENDC
for l in B . quickdebug :
print " \t " + l
2006-03-17 16:38:39 +00:00
2008-09-18 03:05:02 +00:00
# remove stdc++ from LLIBS if we are building a statc linked CXXFLAGS
if env [ ' WITH_BF_STATICCXX ' ] :
2010-08-29 20:52:05 +00:00
if ' stdc++ ' in env [ ' LLIBS ' ] :
env [ ' LLIBS ' ] . remove ( ' stdc++ ' )
else :
print ' \t could not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform '
2008-09-18 03:05:02 +00:00
2006-02-04 14:15:10 +00:00
# check target for blenderplayer. Set WITH_BF_PLAYER if found on cmdline
if ' blenderplayer ' in B . targets :
2010-08-29 20:52:05 +00:00
env [ ' WITH_BF_PLAYER ' ] = True
2006-02-04 14:15:10 +00:00
2006-02-04 15:10:59 +00:00
if ' blendernogame ' in B . targets :
2010-08-29 20:52:05 +00:00
env [ ' WITH_BF_GAMEENGINE ' ] = False
2006-02-04 15:10:59 +00:00
2011-10-29 23:56:07 +00:00
# build without elbeem (fluidsim)?
if env [ ' WITH_BF_FLUID ' ] == 1 :
env [ ' CPPFLAGS ' ] . append ( ' -DWITH_MOD_FLUID ' )
2010-02-11 22:02:27 +00:00
2011-11-13 12:17:27 +00:00
# build with ocean sim?
if env [ ' WITH_BF_OCEANSIM ' ] == 1 :
2011-11-14 12:55:46 +00:00
env [ ' WITH_BF_FFTW3 ' ] = 1 # ocean needs fftw3 so enable it
2011-11-13 12:17:27 +00:00
env [ ' CPPFLAGS ' ] . append ( ' -DWITH_MOD_OCEANSIM ' )
2011-09-19 08:02:17 +00:00
2011-10-05 23:17:40 +00:00
if btools . ENDIAN == " big " :
2011-09-19 08:02:17 +00:00
env [ ' CPPFLAGS ' ] . append ( ' -D__BIG_ENDIAN__ ' )
else :
env [ ' CPPFLAGS ' ] . append ( ' -D__LITTLE_ENDIAN__ ' )
2011-06-23 09:27:56 +00:00
# TODO, make optional
env [ ' CPPFLAGS ' ] . append ( ' -DWITH_AUDASPACE ' )
2012-10-08 02:51:42 +00:00
env [ ' CPPFLAGS ' ] . append ( ' -DWITH_AVI ' )
2011-06-23 09:27:56 +00:00
2006-02-04 14:15:10 +00:00
# lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
B . root_build_dir = env [ ' BF_BUILDDIR ' ]
2010-08-02 16:27:41 +00:00
B . doc_build_dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , ' doc ' )
2006-02-04 14:15:10 +00:00
if not B . root_build_dir [ - 1 ] == os . sep :
2010-08-29 20:52:05 +00:00
B . root_build_dir + = os . sep
2008-10-19 22:01:46 +00:00
if not B . doc_build_dir [ - 1 ] == os . sep :
2010-08-29 20:52:05 +00:00
B . doc_build_dir + = os . sep
2012-08-10 08:19:45 +00:00
2006-02-04 14:15:10 +00:00
# We do a shortcut for clean when no quicklist is given: just delete
# builddir without reading in SConscripts
do_clean = None
if ' clean ' in B . targets :
2010-08-29 20:52:05 +00:00
do_clean = True
2006-02-04 14:15:10 +00:00
if not quickie and do_clean :
2010-08-29 20:52:05 +00:00
if os . path . exists ( B . doc_build_dir ) :
print B . bc . HEADER + ' Cleaning doc dir... ' + B . bc . ENDC
dirs = os . listdir ( B . doc_build_dir )
for entry in dirs :
if os . path . isdir ( B . doc_build_dir + entry ) == 1 :
print " clean dir %s " % ( B . doc_build_dir + entry )
shutil . rmtree ( B . doc_build_dir + entry )
else : # remove file
print " remove file %s " % ( B . doc_build_dir + entry )
os . remove ( B . root_build_dir + entry )
if os . path . exists ( B . root_build_dir ) :
print B . bc . HEADER + ' Cleaning build dir... ' + B . bc . ENDC
dirs = os . listdir ( B . root_build_dir )
for entry in dirs :
if os . path . isdir ( B . root_build_dir + entry ) == 1 :
print " clean dir %s " % ( B . root_build_dir + entry )
shutil . rmtree ( B . root_build_dir + entry )
else : # remove file
print " remove file %s " % ( B . root_build_dir + entry )
os . remove ( B . root_build_dir + entry )
for confile in [ ' extern/ffmpeg/config.mak ' , ' extern/x264/config.mak ' ,
' extern/xvidcore/build/generic/platform.inc ' , ' extern/ffmpeg/include ' ] :
if os . path . exists ( confile ) :
print " clean file %s " % confile
if os . path . isdir ( confile ) :
for root , dirs , files in os . walk ( confile ) :
for name in files :
os . remove ( os . path . join ( root , name ) )
else :
os . remove ( confile )
print B . bc . OKGREEN + ' ...done ' + B . bc . ENDC
else :
print B . bc . HEADER + ' Already Clean, nothing to do. ' + B . bc . ENDC
Exit ( )
2006-02-04 14:15:10 +00:00
2011-07-16 06:55:45 +00:00
# ensure python header is found since detection can fail, this could happen
# with _any_ library but since we used a fixed python version this tends to
# be most problematic.
if env [ ' WITH_BF_PYTHON ' ] :
2012-11-12 18:31:15 +00:00
found_python_h = found_pyconfig_h = False
for bf_python_inc in env . subst ( ' $ {BF_PYTHON_INC} ' ) . split ( ) :
py_h = os . path . join ( Dir ( bf_python_inc ) . abspath , " Python.h " )
if os . path . exists ( py_h ) :
found_python_h = True
py_h = os . path . join ( Dir ( bf_python_inc ) . abspath , " pyconfig.h " )
if os . path . exists ( py_h ) :
found_pyconfig_h = True
if not ( found_python_h and found_pyconfig_h ) :
print ( " \n Missing: Python.h and/or pyconfig.h in \" " + env . subst ( ' $ {BF_PYTHON_INC} ' ) + " \" , \n "
2012-08-10 08:19:45 +00:00
" Set ' BF_PYTHON_INC ' to point "
2012-11-12 18:31:15 +00:00
" to valid python include path(s). \n Containing "
" Python.h and pyconfig.h for python version \" " + env . subst ( ' $ {BF_PYTHON_VERSION} ' ) + " \" " )
2011-07-16 06:55:45 +00:00
2012-08-10 08:19:45 +00:00
Exit ( )
2011-07-16 06:55:45 +00:00
2006-02-04 14:15:10 +00:00
if not os . path . isdir ( B . root_build_dir ) :
2010-08-29 20:52:05 +00:00
os . makedirs ( B . root_build_dir )
os . makedirs ( B . root_build_dir + ' source ' )
os . makedirs ( B . root_build_dir + ' intern ' )
os . makedirs ( B . root_build_dir + ' extern ' )
os . makedirs ( B . root_build_dir + ' lib ' )
os . makedirs ( B . root_build_dir + ' bin ' )
2010-08-02 16:27:41 +00:00
# # Docs not working with epy anymore
# if not os.path.isdir(B.doc_build_dir) and env['WITH_BF_DOCS']:
2010-08-29 20:52:05 +00:00
# os.makedirs ( B.doc_build_dir )
2006-02-04 14:15:10 +00:00
2012-08-09 19:59:36 +00:00
###################################
# Ensure all data files are valid #
###################################
if not os . path . isdir ( B . root_build_dir + ' data_headers ' ) :
2012-08-10 08:19:45 +00:00
os . makedirs ( B . root_build_dir + ' data_headers ' )
2012-08-11 12:26:43 +00:00
if not os . path . isdir ( B . root_build_dir + ' data_sources ' ) :
os . makedirs ( B . root_build_dir + ' data_sources ' )
2012-08-09 19:59:36 +00:00
# use for includes
2012-08-10 15:25:54 +00:00
env [ ' DATA_HEADERS ' ] = os . path . join ( os . path . abspath ( env [ ' BF_BUILDDIR ' ] ) , " data_headers " )
2012-08-11 12:26:43 +00:00
env [ ' DATA_SOURCES ' ] = os . path . join ( os . path . abspath ( env [ ' BF_BUILDDIR ' ] ) , " data_sources " )
2012-08-11 14:40:09 +00:00
def data_to_c ( FILE_FROM , FILE_TO , VAR_NAME ) :
2012-08-10 08:19:45 +00:00
if os . sep == " \\ " :
FILE_FROM = FILE_FROM . replace ( " / " , " \\ " )
FILE_TO = FILE_TO . replace ( " / " , " \\ " )
2012-08-09 19:59:36 +00:00
2012-08-10 08:19:45 +00:00
# first check if we need to bother.
if os . path . exists ( FILE_TO ) :
if os . path . getmtime ( FILE_FROM ) < os . path . getmtime ( FILE_TO ) :
return
2012-08-09 19:59:36 +00:00
2012-08-10 08:19:45 +00:00
print ( B . bc . HEADER + " Generating: " + B . bc . ENDC + " %r " % os . path . basename ( FILE_TO ) )
fpin = open ( FILE_FROM , " rb " )
fpin . seek ( 0 , os . SEEK_END )
size = fpin . tell ( )
fpin . seek ( 0 )
2012-08-09 19:59:36 +00:00
2012-08-10 08:19:45 +00:00
fpout = open ( FILE_TO , " w " )
fpout . write ( " int %s _size = %d ; \n " % ( VAR_NAME , size ) )
fpout . write ( " char %s [] = { \n " % VAR_NAME )
2012-08-09 19:59:36 +00:00
2012-08-10 08:19:45 +00:00
while size > 0 :
size - = 1
if size % 32 == 31 :
fpout . write ( " \n " )
2012-08-09 19:59:36 +00:00
2012-08-10 08:19:45 +00:00
fpout . write ( " %3d , " % ord ( fpin . read ( 1 ) ) )
fpout . write ( " \n 0}; \n \n " )
2012-08-09 19:59:36 +00:00
2012-08-10 08:19:45 +00:00
fpin . close ( )
fpout . close ( )
2012-08-09 19:59:36 +00:00
2012-08-11 14:40:09 +00:00
def data_to_c_simple ( FILE_FROM ) :
filename_only = os . path . basename ( FILE_FROM )
FILE_TO = os . path . join ( env [ ' DATA_SOURCES ' ] , filename_only + " .c " )
VAR_NAME = " datatoc_ " + filename_only . replace ( " . " , " _ " )
data_to_c ( FILE_FROM , FILE_TO , VAR_NAME )
2012-08-09 19:59:36 +00:00
2012-08-11 14:40:09 +00:00
data_to_c ( " source/blender/compositor/operations/COM_OpenCLKernels.cl " ,
B . root_build_dir + " data_headers/COM_OpenCLKernels.cl.h " ,
2012-08-11 16:25:31 +00:00
" datatoc_COM_OpenCLKernels_cl " )
2012-08-11 12:26:43 +00:00
2012-08-11 14:40:09 +00:00
data_to_c_simple ( " release/datafiles/startup.blend " )
data_to_c_simple ( " release/datafiles/preview.blend " )
2012-08-11 12:26:43 +00:00
2012-08-11 13:01:44 +00:00
# --- glsl ---
2012-08-11 14:40:09 +00:00
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_material.glsl " )
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_vertex.glsl " )
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl " )
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl " )
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_material.glsl " )
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl " )
data_to_c_simple ( " source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl " )
2012-08-11 15:24:31 +00:00
# --- blender ---
data_to_c_simple ( " release/datafiles/bfont.pfb " )
data_to_c_simple ( " release/datafiles/bfont.ttf " )
data_to_c_simple ( " release/datafiles/bmonofont.ttf " )
data_to_c_simple ( " release/datafiles/splash.png " )
data_to_c_simple ( " release/datafiles/blender_icons.png " )
data_to_c_simple ( " release/datafiles/prvicons.png " )
2012-08-11 14:40:09 +00:00
data_to_c_simple ( " release/datafiles/brushicons/add.png " )
data_to_c_simple ( " release/datafiles/brushicons/blob.png " )
data_to_c_simple ( " release/datafiles/brushicons/blur.png " )
data_to_c_simple ( " release/datafiles/brushicons/clay.png " )
data_to_c_simple ( " release/datafiles/brushicons/claystrips.png " )
data_to_c_simple ( " release/datafiles/brushicons/clone.png " )
data_to_c_simple ( " release/datafiles/brushicons/crease.png " )
data_to_c_simple ( " release/datafiles/brushicons/darken.png " )
data_to_c_simple ( " release/datafiles/brushicons/draw.png " )
data_to_c_simple ( " release/datafiles/brushicons/fill.png " )
data_to_c_simple ( " release/datafiles/brushicons/flatten.png " )
data_to_c_simple ( " release/datafiles/brushicons/grab.png " )
data_to_c_simple ( " release/datafiles/brushicons/inflate.png " )
data_to_c_simple ( " release/datafiles/brushicons/layer.png " )
data_to_c_simple ( " release/datafiles/brushicons/lighten.png " )
data_to_c_simple ( " release/datafiles/brushicons/mask.png " )
data_to_c_simple ( " release/datafiles/brushicons/mix.png " )
data_to_c_simple ( " release/datafiles/brushicons/multiply.png " )
data_to_c_simple ( " release/datafiles/brushicons/nudge.png " )
data_to_c_simple ( " release/datafiles/brushicons/pinch.png " )
data_to_c_simple ( " release/datafiles/brushicons/scrape.png " )
data_to_c_simple ( " release/datafiles/brushicons/smear.png " )
data_to_c_simple ( " release/datafiles/brushicons/smooth.png " )
data_to_c_simple ( " release/datafiles/brushicons/snake_hook.png " )
data_to_c_simple ( " release/datafiles/brushicons/soften.png " )
data_to_c_simple ( " release/datafiles/brushicons/subtract.png " )
data_to_c_simple ( " release/datafiles/brushicons/texdraw.png " )
data_to_c_simple ( " release/datafiles/brushicons/thumb.png " )
data_to_c_simple ( " release/datafiles/brushicons/twist.png " )
data_to_c_simple ( " release/datafiles/brushicons/vertexdraw.png " )
2012-08-09 19:59:36 +00:00
##### END DATAFILES ##########
2006-02-04 14:15:10 +00:00
Help ( opts . GenerateHelpText ( env ) )
2012-08-10 08:19:45 +00:00
# default is new quieter output, but if you need to see the
2006-02-04 14:15:10 +00:00
# commands, do 'scons BF_QUIET=0'
bf_quietoutput = B . arguments . get ( ' BF_QUIET ' , ' 1 ' )
2008-03-19 17:23:14 +00:00
if env [ ' BF_QUIET ' ] :
2010-08-29 20:52:05 +00:00
B . set_quiet_output ( env )
2004-02-07 20:44:43 +00:00
else :
2010-08-29 20:52:05 +00:00
if toolset == ' msvc ' :
B . msvc_hack ( env )
2006-02-04 14:15:10 +00:00
2010-02-11 22:02:27 +00:00
print B . bc . HEADER + ' Building in: ' + B . bc . ENDC + os . path . abspath ( B . root_build_dir )
2006-02-04 14:15:10 +00:00
env . SConsignFile ( B . root_build_dir + ' scons-signatures ' )
B . init_lib_dict ( )
##### END SETUP ##########
Export ( ' env ' )
2011-11-08 20:40:02 +00:00
BuildDir ( B . root_build_dir + ' /source ' , ' source ' , duplicate = 0 )
SConscript ( B . root_build_dir + ' /source/SConscript ' )
2006-02-04 14:15:10 +00:00
BuildDir ( B . root_build_dir + ' /intern ' , ' intern ' , duplicate = 0 )
SConscript ( B . root_build_dir + ' /intern/SConscript ' )
BuildDir ( B . root_build_dir + ' /extern ' , ' extern ' , duplicate = 0 )
SConscript ( B . root_build_dir + ' /extern/SConscript ' )
# now that we have read all SConscripts, we know what
# libraries will be built. Create list of
# libraries to give as objects to linking phase
mainlist = [ ]
for tp in B . possible_types :
2010-12-21 00:21:42 +00:00
if ( not tp == ' player ' ) and ( not tp == ' player2 ' ) :
2010-08-29 20:52:05 +00:00
mainlist + = B . create_blender_liblist ( env , tp )
2006-02-04 14:15:10 +00:00
if B . arguments . get ( ' BF_PRIORITYLIST ' , ' 0 ' ) == ' 1 ' :
2010-08-29 20:52:05 +00:00
B . propose_priorities ( )
2006-02-04 14:15:10 +00:00
2006-03-10 20:47:34 +00:00
dobj = B . buildinfo ( env , " dynamic " ) + B . resources
2011-06-08 11:53:07 +00:00
creob = B . creator ( env )
2006-02-04 14:15:10 +00:00
thestatlibs , thelibincs = B . setup_staticlibs ( env )
thesyslibs = B . setup_syslibs ( env )
2008-10-19 21:25:17 +00:00
if ' blender ' in B . targets or not env [ ' WITH_BF_NOBLENDER ' ] :
2011-06-08 11:53:07 +00:00
env . BlenderProg ( B . root_build_dir , " blender " , creob + mainlist + thestatlibs + dobj , thesyslibs , [ B . root_build_dir + ' /lib ' ] + thelibincs , ' blender ' )
2006-02-04 14:15:10 +00:00
if env [ ' WITH_BF_PLAYER ' ] :
2010-08-29 20:52:05 +00:00
playerlist = B . create_blender_liblist ( env , ' player ' )
2010-12-21 00:21:42 +00:00
playerlist + = B . create_blender_liblist ( env , ' player2 ' )
2010-08-29 20:52:05 +00:00
playerlist + = B . create_blender_liblist ( env , ' intern ' )
playerlist + = B . create_blender_liblist ( env , ' extern ' )
2011-06-08 11:53:07 +00:00
env . BlenderProg ( B . root_build_dir , " blenderplayer " , dobj + playerlist + thestatlibs , thesyslibs , [ B . root_build_dir + ' /lib ' ] + thelibincs , ' blenderplayer ' )
2006-02-04 14:15:10 +00:00
##### Now define some targets
#------------ INSTALL
2007-03-29 04:28:29 +00:00
#-- binaries
blenderinstall = [ ]
if env [ ' OURPLATFORM ' ] == ' darwin ' :
2010-08-29 20:52:05 +00:00
for prg in B . program_list :
bundle = ' %s .app ' % prg [ 0 ]
bundledir = os . path . dirname ( bundle )
for dp , dn , df in os . walk ( bundle ) :
if ' .svn ' in dn :
dn . remove ( ' .svn ' )
if ' _svn ' in dn :
dn . remove ( ' _svn ' )
dir = env [ ' BF_INSTALLDIR ' ] + dp [ len ( bundledir ) : ]
source = [ dp + os . sep + f for f in df ]
blenderinstall . append ( env . Install ( dir = dir , source = source ) )
2007-03-29 04:28:29 +00:00
else :
2010-08-29 20:52:05 +00:00
blenderinstall = env . Install ( dir = env [ ' BF_INSTALLDIR ' ] , source = B . program_list )
2006-02-04 14:15:10 +00:00
2010-07-05 07:06:19 +00:00
#-- local path = config files in install dir: installdir\VERSION
#- dont do config and scripts for darwin, it is already in the bundle
2006-02-04 14:15:10 +00:00
dotblendlist = [ ]
2010-07-04 15:35:23 +00:00
datafileslist = [ ]
datafilestargetlist = [ ]
2006-02-04 14:15:10 +00:00
dottargetlist = [ ]
2006-05-15 16:56:32 +00:00
scriptinstall = [ ]
2008-03-22 01:39:11 +00:00
2011-08-29 06:28:09 +00:00
if env [ ' OURPLATFORM ' ] != ' darwin ' :
2011-10-21 03:16:01 +00:00
dotblenderinstall = [ ]
for targetdir , srcfile in zip ( dottargetlist , dotblendlist ) :
td , tf = os . path . split ( targetdir )
dotblenderinstall . append ( env . Install ( dir = td , source = srcfile ) )
for targetdir , srcfile in zip ( datafilestargetlist , datafileslist ) :
td , tf = os . path . split ( targetdir )
dotblenderinstall . append ( env . Install ( dir = td , source = srcfile ) )
2012-08-10 08:19:45 +00:00
2011-10-21 03:16:01 +00:00
if env [ ' WITH_BF_PYTHON ' ] :
#-- local/VERSION/scripts
scriptpaths = [ ' release/scripts ' ]
for scriptpath in scriptpaths :
for dp , dn , df in os . walk ( scriptpath ) :
if ' .svn ' in dn :
dn . remove ( ' .svn ' )
if ' _svn ' in dn :
dn . remove ( ' _svn ' )
if ' __pycache__ ' in dn : # py3.2 cache dir
dn . remove ( ' __pycache__ ' )
2011-11-17 19:43:59 +00:00
# only for testing builds
if VERSION_RELEASE_CYCLE == " release " and " addons_contrib " in dn :
dn . remove ( ' addons_contrib ' )
2011-10-21 03:16:01 +00:00
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION )
dir + = os . sep + os . path . basename ( scriptpath ) + dp [ len ( scriptpath ) : ]
source = [ os . path . join ( dp , f ) for f in df if not f . endswith ( " .pyc " ) ]
# To ensure empty dirs are created too
2012-05-23 04:15:50 +00:00
if len ( source ) == 0 and not os . path . exists ( dir ) :
2011-10-21 03:16:01 +00:00
env . Execute ( Mkdir ( dir ) )
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
2011-11-08 20:40:02 +00:00
if env [ ' WITH_BF_CYCLES ' ] :
# cycles python code
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' , ' addons ' , ' cycles ' )
source = os . listdir ( ' intern/cycles/blender/addon ' )
if ' .svn ' in source : source . remove ( ' .svn ' )
if ' _svn ' in source : source . remove ( ' _svn ' )
if ' __pycache__ ' in source : source . remove ( ' __pycache__ ' )
source = [ ' intern/cycles/blender/addon/ ' + s for s in source ]
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
# cycles kernel code
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' , ' addons ' , ' cycles ' , ' kernel ' )
source = os . listdir ( ' intern/cycles/kernel ' )
if ' .svn ' in source : source . remove ( ' .svn ' )
if ' _svn ' in source : source . remove ( ' _svn ' )
if ' __pycache__ ' in source : source . remove ( ' __pycache__ ' )
source . remove ( ' kernel.cpp ' )
source . remove ( ' CMakeLists.txt ' )
source . remove ( ' svm ' )
source . remove ( ' osl ' )
source = [ ' intern/cycles/kernel/ ' + s for s in source ]
source . append ( ' intern/cycles/util/util_color.h ' )
source . append ( ' intern/cycles/util/util_math.h ' )
source . append ( ' intern/cycles/util/util_transform.h ' )
source . append ( ' intern/cycles/util/util_types.h ' )
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
# svm
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' , ' addons ' , ' cycles ' , ' kernel ' , ' svm ' )
source = os . listdir ( ' intern/cycles/kernel/svm ' )
if ' .svn ' in source : source . remove ( ' .svn ' )
if ' _svn ' in source : source . remove ( ' _svn ' )
if ' __pycache__ ' in source : source . remove ( ' __pycache__ ' )
source = [ ' intern/cycles/kernel/svm/ ' + s for s in source ]
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
# licenses
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' , ' addons ' , ' cycles ' , ' license ' )
source = os . listdir ( ' intern/cycles/doc/license ' )
if ' .svn ' in source : source . remove ( ' .svn ' )
if ' _svn ' in source : source . remove ( ' _svn ' )
if ' __pycache__ ' in source : source . remove ( ' __pycache__ ' )
source . remove ( ' CMakeLists.txt ' )
source = [ ' intern/cycles/doc/license/ ' + s for s in source ]
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
2011-12-01 16:33:21 +00:00
# cuda binaries
if env [ ' WITH_BF_CYCLES_CUDA_BINARIES ' ] :
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' , ' addons ' , ' cycles ' , ' lib ' )
for arch in env [ ' BF_CYCLES_CUDA_BINARIES_ARCH ' ] :
kernel_build_dir = os . path . join ( B . root_build_dir , ' intern/cycles/kernel ' )
cubin_file = os . path . join ( kernel_build_dir , " kernel_ %s .cubin " % arch )
scriptinstall . append ( env . Install ( dir = dir , source = cubin_file ) )
2012-08-10 08:19:45 +00:00
2012-11-15 13:11:12 +00:00
# osl shaders
if env [ ' WITH_BF_CYCLES_OSL ' ] :
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' scripts ' , ' addons ' , ' cycles ' , ' shader ' )
osl_source_dir = Dir ( ' ./intern/cycles/kernel/shaders ' ) . srcnode ( ) . path
oso_build_dir = os . path . join ( B . root_build_dir , ' intern/cycles/kernel/shaders ' )
headers = ' node_color.h node_fresnel.h node_texture.h oslutil.h stdosl.h ' . split ( )
source = [ ' intern/cycles/kernel/shaders/ ' + s for s in headers ]
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
for f in os . listdir ( osl_source_dir ) :
if f . endswith ( ' .osl ' ) :
oso_file = os . path . join ( oso_build_dir , f . replace ( ' .osl ' , ' .oso ' ) )
scriptinstall . append ( env . Install ( dir = dir , source = oso_file ) )
2012-09-15 10:03:17 +00:00
if env [ ' WITH_BF_OCIO ' ] :
colormanagement = os . path . join ( ' release ' , ' datafiles ' , ' colormanagement ' )
for dp , dn , df in os . walk ( colormanagement ) :
if ' .svn ' in dn :
dn . remove ( ' .svn ' )
if ' _svn ' in dn :
dn . remove ( ' _svn ' )
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION , ' datafiles ' )
dir + = os . sep + os . path . basename ( colormanagement ) + dp [ len ( colormanagement ) : ]
source = [ os . path . join ( dp , f ) for f in df if not f . endswith ( " .pyc " ) ]
# To ensure empty dirs are created too
if len ( source ) == 0 :
env . Execute ( Mkdir ( dir ) )
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
2011-10-21 03:16:01 +00:00
if env [ ' WITH_BF_INTERNATIONAL ' ] :
internationalpaths = [ ' release ' + os . sep + ' datafiles ' ]
2012-08-10 08:19:45 +00:00
2011-10-21 03:16:01 +00:00
def check_path ( path , member ) :
return ( member in path . split ( os . sep ) )
2012-08-10 08:19:45 +00:00
2011-10-21 03:16:01 +00:00
for intpath in internationalpaths :
for dp , dn , df in os . walk ( intpath ) :
if ' .svn ' in dn :
dn . remove ( ' .svn ' )
if ' _svn ' in dn :
dn . remove ( ' _svn ' )
# we only care about release/datafiles/fonts, release/datafiles/locales
if check_path ( dp , " fonts " ) or check_path ( dp , " locale " ) :
pass
else :
continue
2012-08-10 08:19:45 +00:00
2011-10-21 03:16:01 +00:00
dir = os . path . join ( env [ ' BF_INSTALLDIR ' ] , VERSION )
dir + = os . sep + os . path . basename ( intpath ) + dp [ len ( intpath ) : ]
source = [ os . path . join ( dp , f ) for f in df if not f . endswith ( " .pyc " ) ]
# To ensure empty dirs are created too
if len ( source ) == 0 :
env . Execute ( Mkdir ( dir ) )
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
2009-04-11 02:18:24 +00:00
2008-09-19 21:00:45 +00:00
#-- icons
2011-08-21 13:31:46 +00:00
if env [ ' OURPLATFORM ' ] == ' linux ' :
2010-08-29 20:52:05 +00:00
iconlist = [ ]
icontargetlist = [ ]
for tp , tn , tf in os . walk ( ' release/freedesktop/icons ' ) :
if ' .svn ' in tn :
tn . remove ( ' .svn ' )
if ' _svn ' in tn :
tn . remove ( ' _svn ' )
for f in tf :
iconlist . append ( os . path . join ( tp , f ) )
icontargetlist . append ( os . path . join ( * ( [ env [ ' BF_INSTALLDIR ' ] ] + tp . split ( os . sep ) [ 2 : ] + [ f ] ) ) )
iconinstall = [ ]
for targetdir , srcfile in zip ( icontargetlist , iconlist ) :
td , tf = os . path . split ( targetdir )
iconinstall . append ( env . Install ( dir = td , source = srcfile ) )
2008-09-19 21:00:45 +00:00
2008-12-14 17:32:24 +00:00
# dlls for linuxcross
# TODO - add more libs, for now this lets blenderlite run
if env [ ' OURPLATFORM ' ] == ' linuxcross ' :
2010-08-29 20:52:05 +00:00
dir = env [ ' BF_INSTALLDIR ' ]
source = [ ]
2010-02-01 18:39:41 +00:00
2010-08-29 20:52:05 +00:00
if env [ ' WITH_BF_OPENMP ' ] :
source + = [ ' ../lib/windows/pthreads/lib/pthreadGC2.dll ' ]
2010-02-01 18:39:41 +00:00
2010-08-29 20:52:05 +00:00
scriptinstall . append ( env . Install ( dir = dir , source = source ) )
2008-12-14 17:32:24 +00:00
2006-02-04 14:15:10 +00:00
textlist = [ ]
texttargetlist = [ ]
for tp , tn , tf in os . walk ( ' release/text ' ) :
2010-08-29 20:52:05 +00:00
if ' .svn ' in tn :
tn . remove ( ' .svn ' )
if ' _svn ' in tn :
tn . remove ( ' _svn ' )
for f in tf :
textlist . append ( tp + os . sep + f )
2006-02-04 14:15:10 +00:00
2010-08-02 16:27:41 +00:00
textinstall = env . Install ( dir = env [ ' BF_INSTALLDIR ' ] , source = textlist )
2006-02-04 14:15:10 +00:00
2008-03-22 01:39:11 +00:00
if env [ ' OURPLATFORM ' ] == ' darwin ' :
2012-05-29 12:13:45 +00:00
allinstall = [ blenderinstall , textinstall ]
2011-08-21 13:31:46 +00:00
elif env [ ' OURPLATFORM ' ] == ' linux ' :
2012-05-29 12:13:45 +00:00
allinstall = [ blenderinstall , dotblenderinstall , scriptinstall , textinstall , iconinstall ]
2008-03-22 01:39:11 +00:00
else :
2012-05-29 12:13:45 +00:00
allinstall = [ blenderinstall , dotblenderinstall , scriptinstall , textinstall ]
2006-02-04 14:15:10 +00:00
2010-02-01 18:39:41 +00:00
if env [ ' OURPLATFORM ' ] in ( ' win32-vc ' , ' win32-mingw ' , ' win64-vc ' , ' linuxcross ' ) :
2010-08-29 20:52:05 +00:00
dllsources = [ ]
dllsources + = [ ' $ {BF_ZLIB_LIBPATH} /zlib.dll ' ]
# Used when linking to libtiff was dynamic
# keep it here until compilation on all platform would be ok
# dllsources += ['${BF_TIFF_LIBPATH}/${BF_TIFF_LIB}.dll']
if env [ ' OURPLATFORM ' ] != ' linuxcross ' :
# pthreads library is already added
dllsources + = [ ' $ {BF_PTHREADS_LIBPATH} /$ {BF_PTHREADS_LIB} .dll ' ]
if env [ ' WITH_BF_SDL ' ] :
if env [ ' OURPLATFORM ' ] == ' win64-vc ' :
pass # we link statically already to SDL on win64
else :
dllsources . append ( ' $ {BF_SDL_LIBPATH} /SDL.dll ' )
if env [ ' WITH_BF_PYTHON ' ] :
if env [ ' BF_DEBUG ' ] :
dllsources . append ( ' $ {BF_PYTHON_LIBPATH} /$ {BF_PYTHON_DLL} _d.dll ' )
else :
dllsources . append ( ' $ {BF_PYTHON_LIBPATH} /$ {BF_PYTHON_DLL} .dll ' )
if env [ ' WITH_BF_ICONV ' ] :
if env [ ' OURPLATFORM ' ] == ' win64-vc ' :
pass # we link statically to iconv on win64
elif not env [ ' OURPLATFORM ' ] in ( ' win32-mingw ' , ' linuxcross ' ) :
#gettext for MinGW and cross-compilation is compiled staticly
dllsources + = [ ' $ {BF_ICONV_LIBPATH} /iconv.dll ' ]
if env [ ' WITH_BF_OPENAL ' ] :
dllsources . append ( ' $ {LCGDIR} /openal/lib/OpenAL32.dll ' )
2012-02-17 16:58:34 +00:00
dllsources . append ( ' $ {LCGDIR} /openal/lib/wrap_oal.dll ' )
2010-08-29 20:52:05 +00:00
if env [ ' WITH_BF_SNDFILE ' ] :
dllsources . append ( ' $ {LCGDIR} /sndfile/lib/libsndfile-1.dll ' )
if env [ ' WITH_BF_FFMPEG ' ] :
2011-08-03 10:50:21 +00:00
dllsources + = env [ ' BF_FFMPEG_DLL ' ] . split ( )
2011-03-29 13:00:03 +00:00
# Since the thumb handler is loaded by Explorer, architecture is
# strict: the x86 build fails on x64 Windows. We need to ship
# both builds in x86 packages.
if bitness == 32 :
2012-08-10 08:19:45 +00:00
dllsources . append ( ' $ {LCGDIR} /thumbhandler/lib/BlendThumb.dll ' )
2011-03-29 13:00:03 +00:00
dllsources . append ( ' $ {LCGDIR} /thumbhandler/lib/BlendThumb64.dll ' )
2012-09-16 18:05:32 +00:00
if env [ ' WITH_BF_OCIO ' ] :
if not env [ ' OURPLATFORM ' ] in ( ' win32-mingw ' , ' linuxcross ' ) :
dllsources . append ( ' $ {LCGDIR} /opencolorio/bin/OpenColorIO.dll ' )
2012-09-15 10:03:17 +00:00
2012-09-16 18:05:32 +00:00
else :
dllsources . append ( ' $ {LCGDIR} /opencolorio/bin/libOpenColorIO.dll ' )
2011-03-29 13:00:03 +00:00
dllsources . append ( ' #source/icons/blender.exe.manifest ' )
2010-08-29 20:52:05 +00:00
windlls = env . Install ( dir = env [ ' BF_INSTALLDIR ' ] , source = dllsources )
allinstall + = windlls
2006-02-04 14:15:10 +00:00
2012-04-24 12:57:58 +00:00
if env [ ' OURPLATFORM ' ] == ' win64-mingw ' :
dllsources = [ ]
2012-08-10 08:19:45 +00:00
2012-04-24 12:57:58 +00:00
if env [ ' WITH_BF_PYTHON ' ] :
if env [ ' BF_DEBUG ' ] :
dllsources . append ( ' $ {BF_PYTHON_LIBPATH} /$ {BF_PYTHON_DLL} _d.dll ' )
else :
dllsources . append ( ' $ {BF_PYTHON_LIBPATH} /$ {BF_PYTHON_DLL} .dll ' )
if env [ ' WITH_BF_FFMPEG ' ] :
dllsources + = env [ ' BF_FFMPEG_DLL ' ] . split ( )
if env [ ' WITH_BF_OPENAL ' ] :
dllsources . append ( ' $ {LCGDIR} /openal/lib/OpenAL32.dll ' )
dllsources . append ( ' $ {LCGDIR} /openal/lib/wrap_oal.dll ' )
if env [ ' WITH_BF_SNDFILE ' ] :
dllsources . append ( ' $ {LCGDIR} /sndfile/lib/libsndfile-1.dll ' )
if env [ ' WITH_BF_SDL ' ] :
dllsources . append ( ' $ {LCGDIR} /sdl/lib/SDL.dll ' )
2012-08-10 08:19:45 +00:00
if ( env [ ' WITH_BF_OPENMP ' ] ) :
dllsources . append ( ' $ {LCGDIR} /binaries/libgomp-1.dll ' )
2012-09-16 18:05:32 +00:00
if env [ ' WITH_BF_OCIO ' ] :
dllsources . append ( ' $ {LCGDIR} /opencolorio/bin/libOpenColorIO.dll ' )
2012-08-10 08:19:45 +00:00
2012-04-24 12:57:58 +00:00
dllsources . append ( ' $ {LCGDIR} /thumbhandler/lib/BlendThumb64.dll ' )
2012-07-05 11:39:11 +00:00
dllsources . append ( ' $ {LCGDIR} /binaries/libgcc_s_sjlj-1.dll ' )
2012-07-05 11:45:28 +00:00
dllsources . append ( ' $ {LCGDIR} /binaries/libwinpthread-1.dll ' )
2012-07-06 13:36:54 +00:00
dllsources . append ( ' $ {LCGDIR} /binaries/libstdc++-6.dll ' )
2012-04-24 12:57:58 +00:00
dllsources . append ( ' #source/icons/blender.exe.manifest ' )
windlls = env . Install ( dir = env [ ' BF_INSTALLDIR ' ] , source = dllsources )
allinstall + = windlls
2006-02-05 17:50:19 +00:00
installtarget = env . Alias ( ' install ' , allinstall )
2006-02-04 14:15:10 +00:00
bininstalltarget = env . Alias ( ' install-bin ' , blenderinstall )
2007-05-31 11:15:47 +00:00
nsisaction = env . Action ( btools . NSIS_Installer , btools . NSIS_print )
nsiscmd = env . Command ( ' nsisinstaller ' , None , nsisaction )
nsisalias = env . Alias ( ' nsis ' , nsiscmd )
2008-10-19 21:25:17 +00:00
if ' blender ' in B . targets :
2010-08-29 20:52:05 +00:00
blenderexe = env . Alias ( ' blender ' , B . program_list )
Depends ( blenderexe , installtarget )
2008-10-19 21:25:17 +00:00
2006-02-04 14:15:10 +00:00
if env [ ' WITH_BF_PLAYER ' ] :
2010-08-29 20:52:05 +00:00
blenderplayer = env . Alias ( ' blenderplayer ' , B . program_list )
Depends ( blenderplayer , installtarget )
2006-02-04 15:10:59 +00:00
if not env [ ' WITH_BF_GAMEENGINE ' ] :
2010-08-29 20:52:05 +00:00
blendernogame = env . Alias ( ' blendernogame ' , B . program_list )
Depends ( blendernogame , installtarget )
2006-02-07 22:41:17 +00:00
2008-09-16 06:31:55 +00:00
if ' blenderlite ' in B . targets :
2010-08-29 20:52:05 +00:00
blenderlite = env . Alias ( ' blenderlite ' , B . program_list )
Depends ( blenderlite , installtarget )
2008-09-16 06:31:55 +00:00
2007-05-31 11:15:47 +00:00
Depends ( nsiscmd , allinstall )
2011-03-22 10:26:53 +00:00
buildslave_action = env . Action ( btools . buildslave , btools . buildslave_print )
buildslave_cmd = env . Command ( ' buildslave_exec ' , None , buildslave_action )
buildslave_alias = env . Alias ( ' buildslave ' , buildslave_cmd )
Depends ( buildslave_cmd , allinstall )
2006-02-04 14:15:10 +00:00
Default ( B . program_list )
2007-08-14 20:55:59 +00:00
if not env [ ' WITHOUT_BF_INSTALL ' ] :
2010-08-29 20:52:05 +00:00
Default ( installtarget )
2011-03-22 10:26:53 +00:00