Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Letwory <nathan@letworyinteractive.com>2004-09-26 00:44:57 +0400
committerNathan Letwory <nathan@letworyinteractive.com>2004-09-26 00:44:57 +0400
commitf9542b45bc5c8a040bbb1d1dd68dcaa1341ed119 (patch)
tree8790c86e3803f94f72948041e985d13bd7069dac /SConstruct
parenta509b8adc9b8952cdb395c69406e821f57a9a6c7 (diff)
This commit makes a structural change to SConstruct. Many of the functionality for it has been split of in a new package bs. This structural change is in preperation for changes Michel has planned against the option jungle.
More information on the wiki: http://wiki.blender.org/bin/view.pl/Blenderdev/SconsRefactoring
Diffstat (limited to 'SConstruct')
-rw-r--r--SConstruct806
1 files changed, 83 insertions, 723 deletions
diff --git a/SConstruct b/SConstruct
index 64383cb0fcc..8c680bf5cfd 100644
--- a/SConstruct
+++ b/SConstruct
@@ -5,22 +5,19 @@ import time
import sys
from distutils import sysconfig
import SCons.Script
+from bs import *
+
+bs_globals.arguments = ARGUMENTS
appname = ''
playername = ''
config_guess = ''
-if hex(sys.hexversion) < 0x2030000:
- print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
- print
- print "You need at least Python 2.3 to build Blender with SCons"
- print
- print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
- sys.exit()
+bs_config.checkPyVersion()
if sys.platform != 'win32':
- sys.stdout = os.popen("tee build.log", "w")
- sys.stderr = sys.stdout
+ #~ sys.stdout = os.popen("tee build.log", "w")
+ #~ sys.stderr = sys.stdout
# guess at the platform, used to maintain the tarball naming scheme
config_guess = os.popen("SRCHOME=source/ source/tools/guess/guessconfig").read()[:-1]
else:
@@ -33,33 +30,18 @@ else:
appname = 'blender$PROGSUFFIX'
playername = 'blenderplayer$PROGSUFFIX'
-# This is a flag to determine whether to read all sconscripts and
-# set up the build environments or not
-# when issuing 'scons clean' this is set to 1
-# and all reading is skipped and a 'clean' target
-# will clean the root_build_dir from all
-# object files
-enable_clean = 0
-
-all_args = sys.argv[1:]
-parser = SCons.Script.OptParser()
-options, targets = parser.parse_args(all_args)
-if ('clean' in targets):
- enable_clean = 1
-
# Build directory.
-root_build_dir = '..' + os.sep + 'build' + os.sep + sys.platform + os.sep
+# root_build_dir = '..' + os.sep + 'build' + os.sep + sys.platform + os.sep
+
+bs_config.parseOpts()
# Create the build directory. SCons does this automatically, but since we
# don't want to put scons-generated .sconsign files in the source tree, but in
# the root_build_dir, we have to create that dir ourselves before SCons tries
# to access/create the file containing .sconsign data.
-if os.path.isdir (root_build_dir) == 0:
- os.makedirs (root_build_dir)
+if os.path.isdir (bs_globals.root_build_dir) == 0:
+ os.makedirs (bs_globals.root_build_dir)
-# User configurable options file. This can be controlled by the user by running
-# scons with the following argument: CONFIG=user_config_options_file
-config_file = ARGUMENTS.get('CONFIG', 'config.opts')
# Blender version.
version='2.34'
@@ -778,21 +760,21 @@ my_defines = []
my_ccflags = []
my_cxxflags = []
my_ldflags = []
-if os.path.exists (config_file):
- print "Using config file: " + config_file
+if os.path.exists (bs_globals.config_file):
+ print "Using config file: " + bs_globals.config_file
else:
- print "Creating new config file: " + config_file
+ print "Creating new config file: " + bs_globals.config_file
env_dict = env.Dictionary()
- config=open (config_file, 'w')
+ config=open (bs_globals.config_file, 'w')
config.write ("# Configuration file containing user definable options.\n")
- config.write ("VERSION = '2.33-cvs'\n")
+ config.write ("VERSION = %r\n"%(version))
config.write ("BUILD_BINARY = 'release'\n")
config.write ("USE_BUILDINFO = %r\n"%(use_buildinfo))
config.write ("BUILD_BLENDER_DYNAMIC = %r\n"%(build_blender_dynamic))
config.write ("BUILD_BLENDER_STATIC = %r\n"%(build_blender_static))
config.write ("BUILD_BLENDER_PLAYER = %r\n"%(build_blender_player))
config.write ("BUILD_BLENDER_PLUGIN = %r\n"%(build_blender_plugin))
- config.write ("BUILD_DIR = %r\n"%(root_build_dir))
+ config.write ("BUILD_DIR = %r\n"%(bs_globals.root_build_dir))
config.write ("\n# Extra compiler flags can be defined here.\n")
config.write ("DEFINES = %s\n"%(my_defines))
@@ -872,8 +854,8 @@ else:
# Read the options from the config file and update the various necessary flags
#-----------------------------------------------------------------------------
list_opts = []
-user_options_env = Environment ()
-user_options = Options (config_file)
+user_options = Options (bs_globals.config_file)
+user_options_env = Environment (options = user_options)
user_options.AddOptions (
('VERSION', 'Blender version', version),
(EnumOption ('BUILD_BINARY', 'release',
@@ -895,7 +877,7 @@ user_options.AddOptions (
'Set to 1 if you want to build the blender plugin.',
'false')),
('BUILD_DIR', 'Target directory for intermediate files.',
- root_build_dir),
+ bs_globals.root_build_dir),
(BoolOption ('USE_INTERNATIONAL',
'Set to 1 to have international support.',
'false')),
@@ -973,9 +955,20 @@ user_options.AddOptions (
)
user_options.Update (user_options_env)
user_options_dict = user_options_env.Dictionary()
+Help(user_options.GenerateHelpText(user_options_env))
+bs_globals.root_build_dir = user_options_dict['BUILD_DIR']
+# SET MODULE VARS #
+init_env = Environment()
+
+bs_globals.user_options_dict = user_options_dict
+bs_globals.init_env = init_env
+bs_globals.version = version
+bs_globals.shortversion = shortversion
+bs_globals.appname = appname
+bs_globals.playername = playername
+bs_globals.config_guess = config_guess
+# END SET MODULE VARS #
-root_build_dir = user_options_dict['BUILD_DIR']
-
if user_options_dict['BUILD_GAMEENGINE'] == 1:
defines += ['GAMEBLENDER=1']
if user_options_dict['USE_PHYSICS'] == 'ode':
@@ -991,13 +984,14 @@ if user_options_dict['BUILD_BINARY'] == 'release':
else:
cflags = extra_flags + debug_flags + warn_flags
if sys.platform == 'win32':
- #defines += ['_DEBUG'] specifying this makes msvc want to link to python22_d.lib??
- platform_linkflags += ['/DEBUG','/PDB:blender.pdb']
+ platform_linkflags = ['/DEBUG','/PDB:blender.pdb'] + platform_linkflags
defines += user_options_dict['DEFINES']
cflags += user_options_dict['CCFLAGS']
cxxflags += user_options_dict['CXXFLAGS']
-platform_linkflags += user_options_dict['LDFLAGS']
+platform_linkflags += user_options_dict['LDFLAGS']
+
+user_options_dict['PLATFORM_LINKFLAGS'] = platform_linkflags
#-----------------------------------------------------------------------------
# Generic library generation environment. This one is the basis for each
@@ -1011,13 +1005,13 @@ library_env.Replace (AR = user_options_dict['TARGET_AR'])
library_env.Append (CCFLAGS = cflags)
library_env.Append (CXXFLAGS = cxxflags)
library_env.Append (CPPDEFINES = defines)
-library_env.SConsignFile (root_build_dir+'scons-signatures')
+library_env.SConsignFile (bs_globals.root_build_dir+'scons-signatures')
#-----------------------------------------------------------------------------
# Settings to be exported to other SConscript files
#-----------------------------------------------------------------------------
-if enable_clean==0: # only read SConscripts when not cleaning, this to cut overhead
+if bs_globals.enable_clean==0: # only read SConscripts when not cleaning, this to cut overhead
Export ('cflags')
Export ('defines')
Export ('window_system')
@@ -1025,165 +1019,18 @@ if enable_clean==0: # only read SConscripts when not cleaning, this to cut overh
Export ('user_options_dict')
Export ('library_env')
- BuildDir (root_build_dir+'/extern', 'extern', duplicate=0)
- SConscript (root_build_dir+'extern/SConscript')
- BuildDir (root_build_dir+'/intern', 'intern', duplicate=0)
- SConscript (root_build_dir+'intern/SConscript')
- BuildDir (root_build_dir+'/source', 'source', duplicate=0)
- SConscript (root_build_dir+'source/SConscript')
+ BuildDir (bs_globals.root_build_dir+'/extern', 'extern', duplicate=0)
+ SConscript (bs_globals.root_build_dir+'extern/SConscript')
+ BuildDir (bs_globals.root_build_dir+'/intern', 'intern', duplicate=0)
+ SConscript (bs_globals.root_build_dir+'intern/SConscript')
+ BuildDir (bs_globals.root_build_dir+'/source', 'source', duplicate=0)
+ SConscript (bs_globals.root_build_dir+'source/SConscript')
- libpath = (['#'+root_build_dir+'/lib'])
+ libpath = (['#'+bs_globals.root_build_dir+'/lib'])
link_env = library_env.Copy ()
link_env.Append (LIBPATH=libpath)
-
-def common_libs(env):
- """
- Append to env all libraries that are common to Blender and Blenderplayer
- """
- env.Append (LIBS=[
- 'blender_readblenfile',
- 'blender_img',
- 'blender_blenkernel',
- 'blender_blenloader',
- 'blender_blenpluginapi',
- 'blender_imbuf',
- 'blender_avi',
- 'blender_blenlib',
- 'blender_makesdna',
- 'blender_kernel',
- 'blender_GHOST',
- 'blender_STR',
- 'blender_guardedalloc',
- 'blender_CTR',
- 'blender_MEM',
- 'blender_MT',
- 'blender_BMF',
- 'soundsystem'])
- if user_options_dict['USE_QUICKTIME'] == 1:
- env.Append (LIBS=['blender_quicktime'])
-
-
-def international_libs(env):
- """
- Append international font support libraries
- """
- if user_options_dict['USE_INTERNATIONAL'] == 1:
- env.Append (LIBS=user_options_dict['FREETYPE_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['FREETYPE_LIBPATH'])
- env.Append (LIBS=['blender_FTF'])
- env.Append (LIBS=user_options_dict['FTGL_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['FTGL_LIBPATH'])
- env.Append (LIBS=user_options_dict['FREETYPE_LIBRARY'])
-
-def blender_libs(env):
- """
- Blender only libs (not in player)
- """
- env.Append( LIBS=['blender_creator',
- 'blender_blendersrc',
- 'blender_render',
- 'blender_yafray',
- 'blender_renderconverter',
- 'blender_radiosity',
- 'blender_LOD',
- 'blender_BSP',
- 'blender_blenkernel',
- 'blender_IK',
- 'blender_ONL'])
-
-def ketsji_libs(env):
- """
- Game Engine libs
- """
- if user_options_dict['BUILD_GAMEENGINE'] == 1:
- env.Append (LIBS=['KX_blenderhook',
- 'KX_converter',
- 'PHY_Dummy',
- 'PHY_Physics',
- 'KX_ketsji',
- 'SCA_GameLogic',
- 'RAS_rasterizer',
- 'RAS_OpenGLRasterizer',
- 'blender_expressions',
- 'SG_SceneGraph',
- 'blender_MT',
- 'KX_blenderhook',
- 'KX_network',
- 'blender_kernel',
- 'NG_network',
- 'NG_loopbacknetwork'])
- if user_options_dict['USE_PHYSICS'] == 'solid':
- env.Append (LIBS=['PHY_Sumo', 'PHY_Physics', 'blender_MT', 'extern_solid', 'extern_qhull'])
- else:
- env.Append (LIBS=['PHY_Ode',
- 'PHY_Physics'])
- env.Append (LIBS=user_options_dict['ODE_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['ODE_LIBPATH'])
-
-def player_libs(env):
- """
- Player libraries
- """
- env.Append (LIBS=['GPG_ghost',
- 'GPC_common'])
-
-def player_libs2(env):
- """
- Link order shenannigans: these libs are added after common_libs
- """
- env.Append (LIBS=['blender_blenkernel_blc',
- 'soundsystem'])
-
-def winblenderres(env):
- """
- build the windows icon resource file
- """
- if sys.platform == 'win32':
- env.RES(['source/icons/winblender.rc'])
-
-def system_libs(env):
- """
- System libraries: Python, SDL, PNG, JPEG, Gettext, OpenAL, Carbon
- """
- env.Append (LIBS=['blender_python'])
- env.Append (LIBS=user_options_dict['PYTHON_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['PYTHON_LIBPATH'])
- env.Append (LINKFLAGS=user_options_dict['PYTHON_LINKFLAGS'])
- env.Append (LIBS=user_options_dict['SDL_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['SDL_LIBPATH'])
- env.Append (LIBS=user_options_dict['PNG_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['PNG_LIBPATH'])
- env.Append (LIBS=user_options_dict['JPEG_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['JPEG_LIBPATH'])
- env.Append (LIBS=user_options_dict['GETTEXT_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['GETTEXT_LIBPATH'])
- env.Append (LIBS=user_options_dict['Z_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['Z_LIBPATH'])
- if user_options_dict['USE_OPENAL'] == 1:
- env.Append (LIBS=user_options_dict['OPENAL_LIBRARY'])
- env.Append (LIBPATH=user_options_dict['OPENAL_LIBPATH'])
- env.Append (LIBS=user_options_dict['PLATFORM_LIBS'])
- env.Append (LIBPATH=user_options_dict['PLATFORM_LIBPATH'])
- if sys.platform == 'darwin':
- env.Append (LINKFLAGS='-framework')
- env.Append (LINKFLAGS='Carbon')
- env.Append (LINKFLAGS='-framework')
- env.Append (LINKFLAGS='AGL')
- env.Append (LINKFLAGS='-framework')
- env.Append (LINKFLAGS='AudioUnit')
- env.Append (LINKFLAGS='-framework')
- env.Append (LINKFLAGS='AudioToolbox')
- env.Append (LINKFLAGS='-framework')
- env.Append (LINKFLAGS='CoreAudio')
- if user_options_dict['USE_QUICKTIME'] == 1:
- env.Append (LINKFLAGS='-framework')
- env.Append (LINKFLAGS='QuickTime')
- else:
- env.Append (LINKFLAGS=user_options_dict['PLATFORM_LINKFLAGS'])
- env.BuildDir (root_build_dir, '.', duplicate=0)
-
def buildinfo(env, build_type):
"""
Generate a buildinfo object
@@ -1206,511 +1053,20 @@ def buildinfo(env, build_type):
'BUILD_TYPE=\'"dynamic"\'',
'NAN_BUILDINFO',
'BUILD_PLATFORM=\'"%s"\''%(sys.platform)])
- obj = [env.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type,
- [root_build_dir+'source/creator/buildinfo.c'])]
+ obj = [env.Object (bs_globals.root_build_dir+'source/creator/%s_buildinfo'%build_type,
+ [bs_globals.root_build_dir+'source/creator/buildinfo.c'])]
return obj
-
-def cleanCVS():
- """
- walks the dist dir and removes all CVS dirs
- """
-
- try:
- import shutil
- except:
- print "no shutil available"
- print "make sure you use python 2.3"
- print
- return 0
-
- startdir = os.getcwd()
-
- for root, dirs, files in os.walk("dist", topdown=False):
- for name in dirs:
- if name in ['CVS']:
- if os.path.isdir(root + "/" + name):
- shutil.rmtree(root + "/" + name)
-
- os.chdir(startdir)
-
- return 1
-def preparedist():
- """
- Prepare a directory for creating either archives or the installer
- """
-
- try:
- import shutil
- import time
- import stat
- except:
- print "no shutil available"
- print "make sure you use python 2.3"
- print
- return 0
-
- startdir = os.getcwd()
-
- if os.path.isdir("dist") == 0:
- os.makedirs("dist")
- else:
- shutil.rmtree("dist") # make sure we don't get old cruft
- os.makedirs("dist")
-
- # first copy binaries
-
- if sys.platform == 'win32':
- shutil.copy("blender.exe", "dist/blender.exe")
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- shutil.copy("blenderplayer.exe", "dist/blenderplayer.exe")
- shutil.copy("../lib/windows/python/lib/python23.dll", "dist/python23.dll")
- shutil.copy("../lib/windows/sdl/lib/SDL.dll", "dist/SDL.dll")
- shutil.copy("../lib/windows/gettext/lib/gnu_gettext.dll", "dist/gnu_gettext.dll")
- elif sys.platform in ['linux2', 'linux-i386', 'freebsd4', 'freebsd5']:
- shutil.copy("blender", "dist/blender")
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- shutil.copy("blenderplayer", "dist/blenderplayer")
- else:
- print "update preparedist() for your platform!"
- return 0
-
- # now copy .blender and necessary extras for it
- if os.path.isdir("dist/.blender"):
- shutil.rmtree("dist/.blender")
- os.chdir("bin")
- shutil.copytree(".blender/", "../dist/.blender")
- os.chdir(startdir)
- if os.path.isdir("dist/.blender/scripts"):
- shutil.rmtree("dist/.blender/scripts")
- if os.path.isdir("dist/.blender/bpydata"):
- shutil.rmtree("dist/.blender/bpydata")
-
- os.makedirs("dist/.blender/bpydata")
- shutil.copy("release/bpydata/readme.txt", "dist/.blender/bpydata/readme.txt")
- shutil.copy("release/bpydata/KUlang.txt", "dist/.blender/bpydata/KUlang.txt")
-
- os.chdir("release")
- shutil.copytree("scripts/", "../dist/.blender/scripts")
-
- # finally copy auxiliaries (readme, license, etc.)
- if sys.platform == 'win32':
- shutil.copy("windows/extra/Help.url", "../dist/Help.url")
- shutil.copy("windows/extra/Python23.zip", "../dist/Python23.zip")
- shutil.copy("windows/extra/zlib.pyd", "../dist/zlib.pyd")
- shutil.copy("text/copyright.txt", "../dist/copyright.txt")
- shutil.copy("text/blender.html", "../dist/blender.html")
- shutil.copy("text/GPL-license.txt", "../dist/GPL-license.txt")
- shutil.copy("text/Python-license.txt", "../dist/Python-license.txt")
-
- reltext = "release_" + string.join(version.split("."), '') + ".txt"
- shutil.copy("text/" + reltext, "../dist/" + reltext)
-
- os.chdir(startdir)
-
- if cleanCVS()==0:
- return 0
- return 1
-
-def finalisedist(zipname):
- """
- Fetch the package created and remove temp dir
- """
-
- try:
- import shutil
- except:
- print "no shutil available"
- print "make sure you use python 2.3"
- print
- return 0
-
- #shutil.copy("dist/" + zipname, zipname)
- #shutil.rmtree("dist")
-
- return 1
-
-def add2arc(arc, file):
- if sys.platform == 'win32':
- arc.write(file)
- else:
- arc.add(file)
-
-
-def appit(target, source, env):
- if sys.platform == 'darwin':
- import shutil
- import commands
- import os.path
-
- target = 'blender'
- sourceinfo = "source/darwin/%s.app/Contents/Info.plist"%target
- targetinfo = "%s.app/Contents/Info.plist"%target
-
- cmd = '%s.app'%target
- if os.path.isdir(cmd):
- shutil.rmtree('%s.app'%target)
- shutil.copytree("source/darwin/%s.app"%target, '%s.app'%target)
- cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
- commands.getoutput(cmd)
- cmd = 'cp %s %s.app/Contents/MacOS/%s'%(target, target, target)
- commands.getoutput(cmd)
- if user_options_dict['BUILD_BINARY'] == 'debug':
- print "building debug"
- else :
- cmd = 'strip -u -r %s.app/Contents/MacOS/%s'%(target, target)
- commands.getoutput(cmd)
- cmd = '%s.app/Contents/Resources/'%target
- shutil.copy('bin/.blender/.bfont.ttf', cmd)
- shutil.copy('bin/.blender/.Blanguages', cmd)
- cmd = 'cp -R bin/.blender/locale %s.app/Contents/Resources/'%target
- commands.getoutput(cmd)
- cmd = 'mkdir %s.app/Contents/MacOS/.blender'%target
- commands.getoutput(cmd)
- cmd = 'cp -R release/bpydata %s.app/Contents/MacOS/.blender'%target
- commands.getoutput(cmd)
- cmd = 'cp -R release/scripts %s.app/Contents/MacOS/.blender/'%target
- commands.getoutput(cmd)
- cmd = 'cp -R release/plugins %s.app/Contents/Resources/'%target
- commands.getoutput(cmd)
- cmd = 'chmod +x %s.app/Contents/MacOS/%s'%(target, target)
- commands.getoutput(cmd)
- cmd = 'find %s.app -name CVS -prune -exec rm -rf {} \;'%target
- commands.getoutput(cmd)
- cmd = 'find %s.app -name .DS_Store -exec rm -rf {} \;'%target
- commands.getoutput(cmd)
-
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- target = 'blenderplayer'
- sourceinfo = "source/darwin/%s.app/Contents/Info.plist"%target
- targetinfo = "%s.app/Contents/Info.plist"%target
-
- cmd = '%s.app'%target
- if os.path.isdir(cmd):
- shutil.rmtree('%s.app'%target)
- shutil.copytree("source/darwin/%s.app"%target, '%s.app'%target)
- cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
- commands.getoutput(cmd)
- cmd = 'cp %s %s.app/Contents/MacOS/%s'%(target, target, target)
- commands.getoutput(cmd)
- if user_options_dict['BUILD_BINARY'] == 'debug':
- print "building debug player"
- else :
- cmd = 'strip -u -r %s.app/Contents/MacOS/%s'%(target, target)
- commands.getoutput(cmd)
- cmd = '%s.app/Contents/Resources/'%target
- shutil.copy('bin/.blender/.bfont.ttf', cmd)
- shutil.copy('bin/.blender/.Blanguages', cmd)
- cmd = 'cp -R bin/.blender/locale %s.app/Contents/Resources/'%target
- commands.getoutput(cmd)
- cmd = 'cp -R release/bpydata %s.app/Contents/MacOS/.blender'%target
- commands.getoutput(cmd)
- cmd = 'cp -R release/scripts %s.app/Contents/MacOS/.blender/'%target
- commands.getoutput(cmd)
- cmd = 'cp -R release/plugins %s.app/Contents/Resources/'%target
- commands.getoutput(cmd)
- cmd = 'chmod +x %s.app/Contents/MacOS/%s'%(target, target)
- commands.getoutput(cmd)
- cmd = 'find %s.app -name CVS -prune -exec rm -rf {} \;'%target
- commands.getoutput(cmd)
- cmd = 'find %s.app -name .DS_Store -exec rm -rf {} \;'%target
- commands.getoutput(cmd)
-
- else:
- print "This target is for the Os X platform only"
-
-def zipit(env, target, source):
- try:
- if sys.platform == 'win32':
- import zipfile
- else:
- import tarfile
- except:
- if sys.platform == 'win32':
- print "no zipfile module found"
- else:
- print "no tarfile module found"
- print "make sure you use python 2.3"
- print
- return
-
- import shutil
- import glob
- import time
-
- startdir = os.getcwd()
- pf=""
- zipext = ""
- zipname = ""
-
- today = time.strftime("%Y%m%d", time.gmtime()) # get time in the form 20040714
-
- if preparedist()==0:
- print "check output for error"
- return
-
- if sys.platform == 'win32':
- zipext += ".zip"
- pf = "windows"
- elif sys.platform == 'linux2' or sys.platform == 'linux-i386':
- zipext += ".tar.gz"
- pf = "linux"
- elif sys.platform == 'freebsd4':
- zipext += ".tar.gz"
- pf = "freebsd4"
- elif sys.platform == 'freebsd5':
- zipext += ".tar.gz"
- pf = "freebsd5"
-
- if user_options_dict['BUILD_BINARY'] == 'release':
- blendname = "blender-" + version + "-" + config_guess
- else:
- blendname = "bf_blender_" + pf + "_" + today
-
- zipname = blendname + zipext
-
- if os.path.isdir(blendname):
- shutil.rmtree(blendname)
- shutil.move(startdir + os.sep + "dist", blendname)
-
- print
- if sys.platform == 'win32':
- print "Create the zip!"
- else:
- print "Create the tarball!"
- print
-
- if sys.platform == 'win32':
- thezip = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
- else:
- thezip = tarfile.open(zipname, 'w:gz')
-
- for root, dirs, files in os.walk(blendname, topdown=False):
- for name in files:
- if name in [zipname]:
- print "skipping self"
- else:
- file = root + "/" + name
- print "adding: " + file
- add2arc(thezip, file)
-
- thezip.close()
-
- os.chdir(startdir)
- shutil.move(blendname, startdir + os.sep + "dist")
-
- if finalisedist(zipname)==0:
- print "encountered an error in finalisedist"
- print
- return
-
- print
- print "Blender has been successfully packaged"
- print "You can find the file %s in the root source directory"%zipname
- print
-
-
-def printadd(env, target, source):
- """
- Print warning message if platform hasn't been added to zipit() yet
- """
-
- print
- print "############"
- print
- print "Make sure zipit() works for your platform:"
- print " - binaries to copy (naming?)"
- print " - possible libraries?"
- print " - archive format?"
- print
- print "After you've corrected zipit() for your"
- print "platform, be sure to add a proper elif"
- print "at the end of BlenderRelease"
- print
- print "Blender is now ready and can be found in"
- print "root of the source distribution, but it"
- print "hasn't been packaged neatly. Make sure you"
- print "get the right files"
- print
- print "/jesterKing"
- print
-
-
-def noaction(env, target, source):
- print "Empty action"
-
-def DoClean(dir2clean):
- """
- Do a removal of the root_build_dir the fast way
- """
-
- import shutil
- print
- print "start the clean"
- dirs = os.listdir(dir2clean)
- for dir in dirs:
- if os.path.isdir(dir2clean + "/" + dir) == 1:
- print "clean dir %s"%(dir2clean+"/" + dir)
- shutil.rmtree(dir2clean+"/" + dir)
- print "done"
-
-def BlenderDefault(target):
- """
- The default Blender build.
- """
- def_env = Environment()
- default = def_env.Command('nozip', 'blender$PROGSUFFIX', noaction)
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- def_env.Depends(default, 'blenderplayer$PROGSUFFIX')
- def_env.Alias(".", default)
-
-def donsis(env, target, source):
- """
- Create a Windows installer with NSIS
- """
- print
- print "Creating the Windows installer"
- print
-
- startdir = os.getcwd()
-
- if preparedist()==0:
- print "check output for error"
- return
-
- os.chdir("release/windows/installer")
-
- nsis = open("00.sconsblender.nsi", 'r')
- nsis_cnt = str(nsis.read())
- nsis.close()
-
- # do root
- rootlist = []
- rootdir = os.listdir(startdir + "\\dist")
- for rootitem in rootdir:
- if os.path.isdir(startdir + "\\dist\\" + rootitem) == 0:
- rootlist.append("File " + startdir + "\\dist\\" + rootitem)
- rootstring = string.join(rootlist, "\n ")
- rootstring += "\n\n"
- nsis_cnt = string.replace(nsis_cnt, "[ROOTDIRCONTS]", rootstring)
-
- # do delete items
- delrootlist = []
- for rootitem in rootdir:
- if os.path.isdir(startdir + "\\dist\\" + rootitem) == 0:
- delrootlist.append("Delete $INSTDIR\\" + rootitem)
- delrootstring = string.join(delrootlist, "\n ")
- delrootstring += "\n"
- nsis_cnt = string.replace(nsis_cnt, "[DELROOTDIRCONTS]", delrootstring)
-
- # do scripts
- scriptlist = []
- scriptdir = os.listdir(startdir + "\\dist\\.blender\\scripts")
- for scriptitem in scriptdir:
- if os.path.isdir(startdir + "\\dist\\.blender\\scripts\\" + scriptitem) == 0:
- scriptlist.append("File " + startdir + "\\dist\\.blender\\scripts\\" + scriptitem)
- scriptstring = string.join(scriptlist, "\n ")
- scriptstring += "\n\n"
- nsis_cnt = string.replace(nsis_cnt, "[SCRIPTCONTS]", scriptstring)
-
- # do bpycontents
- bpydatalist = []
- bpydatadir = os.listdir(startdir + "\\dist\\.blender\\bpydata")
- for bpydataitem in bpydatadir:
- if os.path.isdir(startdir + "\\dist\\.blender\\bpydata\\" + bpydataitem) == 0:
- bpydatalist.append("File " + startdir + "\\dist\\.blender\\bpydata\\" + bpydataitem)
- bpydatastring = string.join(bpydatalist, "\n ")
- bpydatastring += "\n\n"
- nsis_cnt = string.replace(nsis_cnt, "[BPYCONTS]", bpydatastring)
-
- # do dotblender
- dotblendlist = []
- dotblenddir = os.listdir(startdir+"\\dist\\.blender")
- for dotblenditem in dotblenddir:
- if os.path.isdir(startdir + "\\dist\\.blender\\" + dotblenditem) == 0:
- dotblendlist.append("File " + startdir + "\\dist\\.blender\\" + dotblenditem)
- dotblendstring = string.join(dotblendlist, "\n ")
- dotblendstring += "\n\n"
- nsis_cnt = string.replace(nsis_cnt, "[DOTBLENDERCONTS]", dotblendstring)
-
- # do language files
- langlist = []
- langfiles = []
- langdir = os.listdir(startdir + "\\dist\\.blender\\locale")
- for langitem in langdir:
- if os.path.isdir(startdir + "\\dist\\.blender\\locale\\" + langitem) == 1:
- langfiles.append("SetOutPath $BLENDERHOME\\.blender\\locale\\" + langitem + "\\LC_MESSAGES")
- langfiles.append("File " + startdir + "\\dist\\.blender\\locale\\" + langitem + "\\LC_MESSAGES\\blender.mo")
- langstring = string.join(langfiles, "\n ")
- langstring += "\n\n"
- nsis_cnt = string.replace(nsis_cnt, "[LANGUAGECONTS]", langstring)
-
- # var replacements
- nsis_cnt = string.replace(nsis_cnt, "DISTDIR", startdir + "\\dist")
- nsis_cnt = string.replace(nsis_cnt, "SHORTVER", shortversion)
- nsis_cnt = string.replace(nsis_cnt, "VERSION", version)
-
- new_nsis = open("00.blender_tmp.nsi", 'w')
- new_nsis.write(nsis_cnt)
- new_nsis.close()
-
- sys.stdout = os.popen("makensis 00.blender_tmp.nsi", 'w')
-
- os.chdir(startdir)
-
-
-def BlenderNSIS(target):
- """
- Entry for creating Windows installer
- """
- if sys.platform == 'win32':
- inst_env = Environment()
- nsis_inst = inst_env.Command('nsisinstaller', 'blender$PROGSUFFIX', donsis)
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- inst_env.Depends(nsis_inst, 'blenderplayer$PROGSUFFIX')
- inst_env.Alias("wininst", nsis_inst)
- else:
- print "This target is for the win32 platform only "
-
-def BlenderRelease(target):
- """
- Make a Release package (tarball, zip, bundle).
-
- target = Name of package to make (string)
- eg: BlenderRelease('blender')
- """
-
- if sys.platform == 'darwin':
- app_env = Environment()
- Mappit = app_env.Command('appit', appname, appit)
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- app_env.Depends(Mappit, playername)
- app_env.Alias("release", Mappit)
- elif sys.platform in ['win32', 'linux2', 'linux-i386', 'freebsd4', 'freebsd5']:
- release_env = Environment()
- releaseit = release_env.Command('blenderrelease', appname, zipit)
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- release_env.Depends(releaseit, playername)
- release_env.Alias("release", releaseit)
- else:
- release_env = Environment()
- releaseit = release_env.Command('blender.tar.gz', appname, printadd)
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
- release_env.Depends(releaseit, playername)
- release_env.Alias("release", releaseit)
-
-if enable_clean == 0:
-
-
+if bs_globals.enable_clean == 0:
if user_options_dict['BUILD_BLENDER_DYNAMIC'] == 1:
dy_blender = link_env.Copy ()
if sys.platform=='win32':
- winblenderres(dy_blender)
- blender_libs(dy_blender)
- common_libs(dy_blender)
- international_libs(dy_blender)
- ketsji_libs(dy_blender)
- system_libs(dy_blender)
+ bs_libs.winblenderres(dy_blender)
+ bs_libs.blender_libs(dy_blender)
+ bs_libs.common_libs(dy_blender)
+ bs_libs.international_libs(dy_blender)
+ bs_libs.ketsji_libs(dy_blender)
+ bs_libs.system_libs(dy_blender)
dy_blender.Append (LIBS=user_options_dict['OPENGL_LIBRARY'])
dy_blender.Append (LIBPATH=user_options_dict['OPENGL_LIBPATH'])
dy_blender.Append (CPPPATH=user_options_dict['OPENGL_INCLUDE'])
@@ -1726,12 +1082,12 @@ if enable_clean == 0:
if user_options_dict['BUILD_BLENDER_STATIC'] == 1:
st_blender = link_env.Copy ()
if sys.platform=='win32':
- winblenderres(st_blender)
- blender_libs(st_blender)
- common_libs(st_blender)
- international_libs(st_blender)
- ketsji_libs(st_blender)
- system_libs(st_blender)
+ bs_libs.winblenderres(st_blender)
+ bs_libs.blender_libs(st_blender)
+ bs_libs.common_libs(st_blender)
+ bs_libs.international_libs(st_blender)
+ bs_libs.ketsji_libs(st_blender)
+ bs_libs.system_libs(st_blender)
# The next line is to make sure that the LINKFLAGS are appended at the end
# of the link command. This 'trick' is needed because the GL and GLU static
# libraries need to be at the end of the command.
@@ -1745,20 +1101,20 @@ if enable_clean == 0:
if sys.platform=='win32':
if user_options_dict['BUILD_BINARY']=='debug':
browser = Environment()
- browser_tmp = root_build_dir+'bscmake.tmp'
+ browser_tmp = bs_globals.root_build_dir+'bscmake.tmp'
browser.Command ('blender.bsc', 'blender$PROGSUFFIX',
- ['dir /b/s '+root_build_dir+'*.sbr >'+browser_tmp,
+ ['dir /b/s '+bs_globals.root_build_dir+'*.sbr >'+browser_tmp,
'bscmake /nologo /n /oblender.bsc @'+browser_tmp,
'del '+browser_tmp])
if user_options_dict['BUILD_BLENDER_PLAYER'] == 1 and user_options_dict['BUILD_GAMEENGINE'] == 1:
player_blender = link_env.Copy()
- player_libs(player_blender)
- common_libs(player_blender)
- international_libs(player_blender)
- ketsji_libs(player_blender)
- player_libs2(player_blender)
- system_libs(player_blender)
+ bs_libs.player_libs(player_blender)
+ bs_libs.common_libs(player_blender)
+ bs_libs.international_libs(player_blender)
+ bs_libs.ketsji_libs(player_blender)
+ bs_libs.player_libs2(player_blender)
+ bs_libs.system_libs(player_blender)
player_blender.Append (LIBS=user_options_dict['OPENGL_LIBRARY'])
player_blender.Append (LIBPATH=user_options_dict['OPENGL_LIBPATH'])
player_blender.Append (CPPPATH=user_options_dict['OPENGL_INCLUDE'])
@@ -1773,21 +1129,23 @@ if enable_clean == 0:
if sys.platform=='win32':
if user_options_dict['BUILD_BINARY']=='debug':
browser = Environment()
- browser_tmp = root_build_dir+'bscmake.tmp'
+ browser_tmp = bs_globals.root_build_dir+'bscmake.tmp'
browser.Command ('blenderplayer.bsc', 'blenderplayer$PROGSUFFIX',
- ['dir /b/s '+root_build_dir+'*.sbr >'+browser_tmp,
+ ['dir /b/s '+bs_globals.root_build_dir+'*.sbr >'+browser_tmp,
'bscmake /nologo /n /oblenderplayer.bsc @'+browser_tmp,
'del '+browser_tmp])
- release_target = env.Alias("release", BlenderRelease(appname))
- default_target = env.Alias("default", BlenderDefault(appname))
- wininst_target = env.Alias("winist", BlenderNSIS(appname))
+ release_target = env.Alias("release", bs_arc.BlenderRelease(appname))
+ default_target = env.Alias("default", bs_default.BlenderDefault(appname))
+ wininst_target = env.Alias("winist", bs_nsis.BlenderNSIS(appname))
+ if bs_globals.docopy == 1:
+ bincopy_target = env.Alias("bincopy", bs_bincopy.BlenderCopy(appname))
else: # only clean target to prevent any building
- clean_target = env.Alias("clean", DoClean(root_build_dir))
+ clean_target = env.Alias("clean", bs_clean.DoClean(bs_globals.root_build_dir))
Default("clean")
-if enable_clean == 0: # only set up dependencies when not cleaning
+if bs_globals.enable_clean == 0: # only set up dependencies when not cleaning
if sys.platform == 'darwin':
Default("release")
else:
@@ -1800,9 +1158,11 @@ if enable_clean == 0: # only set up dependencies when not cleaning
if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
env.Depends(release_target, playername)
- env.Depends(release_target, appname)
-
- if user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
env.Depends(default_target, playername)
+ if bs_globals.docopy == 1:
+ env.Depends(bincopy_target, playername)
+ env.Depends(release_target, appname)
env.Depends(default_target, appname)
+ if bs_globals.docopy == 1:
+ env.Depends(bincopy_target, appname)