diff options
author | Nathan Letwory <nathan@letworyinteractive.com> | 2006-02-04 17:15:10 +0300 |
---|---|---|
committer | Nathan Letwory <nathan@letworyinteractive.com> | 2006-02-04 17:15:10 +0300 |
commit | 3bb82a27fc61b787ab83145f9a7962c14e7ca769 (patch) | |
tree | b1d432db0f2836f4117a71e341bc4fef34d62a5a /SConstruct | |
parent | 1db5c237165ac090af925d9cf8440fc953e4ee06 (diff) |
== SCons ==
* This commit is all of the rewrite work done on the SCons system. For
documentation see doc/blender-scons.txt and doc/blender-scons-dev.txt.
Also http://mediawiki.blender.org/index.php/BlenderDev/SconsRefactoring
contains valuable information, along with what still needs to be done.
- linux, os x and windows compile now.
- files are compiled to BF_INSTALLDIR (see config/(platform)-config.py)
- NOTE: Jean-Luc P will commit sometime during the weekend proper
appit() for OS X. For now, copy the resulting binary to an
existing .app bundle.
- features:
- cleaner structure for better maintenance
- cleaner output during compile
- better handling of build options
- general overall speed increase
- see the wiki for more info
Cygwin, FreeBSD and Solaris systems still need work. For these systems:
1) copy a config/(platform)-config.py to ie. config/cygwin-config.py
2) set the proper defaults for your platform
3) mail me at jesterking at letwory dot net with you configuration. if
you need any modifications to the system, do send a patch, too.
I'll be giving first-aid today and tomorrow, after that it'll be all
regular development work :)
/Nathan
Diffstat (limited to 'SConstruct')
-rw-r--r-- | SConstruct | 1615 |
1 files changed, 292 insertions, 1323 deletions
diff --git a/SConstruct b/SConstruct index 695fd29795b..4ed8d331d03 100644 --- a/SConstruct +++ b/SConstruct @@ -1,1337 +1,306 @@ #!/usr/bin/env python -import string -import os -import time -import sys -from distutils import sysconfig -from tools.scons.bs import * - -bs_globals.arguments = ARGUMENTS -bs_globals.targets = COMMAND_LINE_TARGETS - -print 'targets = ',bs_globals.targets -print 'arguments = ', bs_globals.arguments -print os.getcwd() +# $Id$ +# ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** +# +# 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 +# of the License, or (at your option) any later version. The Blender +# Foundation also sells licenses for use in proprietary software under +# the Blender License. See http://www.blender.org/BL/ for information +# about this. +# +# 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. +# +# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. +# All rights reserved. +# +# The Original Code is: none of this file. +# +# Contributor(s): Nathan Letwory. +# +# ***** END GPL/BL DUAL LICENSE BLOCK ***** +# +# Main entry-point for the SCons building system +# Set up some custom actions and target/argument handling +# Then read all SConscripts and build -appname = '' -playername = '' -config_guess = '' - -bs_config.checkPyVersion() - -if sys.platform != 'win32': - #~ 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] +import sys +import os +import os.path +import string +import shutil +import glob + +import tools.Blender +import tools.btools +import tools.bcolors + +BlenderEnvironment = tools.Blender.BlenderEnvironment +btools = tools.btools +B = tools.Blender + +### globals ### +platform = sys.platform +quickie = None + +##### BEGIN SETUP ##### + +B.possible_types = ['core', 'common', 'blender', 'intern', + 'international', 'game', 'game2', + 'player', 'player2', 'system'] + +################################## +# 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': + use_color = None + +if not use_color=='1': + B.bc.disable() + +# 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 + +# first check cmdline for toolset and we create env to work on +quickie = B.arguments.get('BF_QUICK', None) +if quickie: + B.quickie=string.split(quickie,',') else: - config_guess = "windows" - -#the above check is not enough for darwin. we way want to build for darwin/X11 -#more, now even for Os X, we need to check and take in account arch -#(PPC, x86, universal binaries) -if sys.platform == 'darwin': - appname = 'blender' - playername = 'blenderplayer' + B.quickie=[] + +toolset = B.arguments.get('BF_TOOLSET', None) +if toolset: + print "Using " + toolset + if toolset=='mstoolkit': + env = BlenderEnvironment(ENV = os.environ) + env.Tool('mstoolkit', ['tools']) + else: + env = BlenderEnvironment(tools=[toolset], ENV = os.environ) else: - appname = 'blender$PROGSUFFIX' - playername = 'blenderplayer$PROGSUFFIX' - -# Build directory. -# 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. -# we need to create the top level hierarchy too (at least on Os X) -if os.path.isdir (bs_globals.root_build_dir) == 0: - os.makedirs (bs_globals.root_build_dir) - os.makedirs (bs_globals.root_build_dir+os.sep+'extern') - os.makedirs (bs_globals.root_build_dir+os.sep+'intern') - os.makedirs (bs_globals.root_build_dir+os.sep+'source') - -# Blender version. -version='2.40-alpha1' -shortversion = '240alpha1' # for wininst target -> nsis installer creation - -sdl_env = Environment (ENV = os.environ) -freetype_env = Environment (ENV = os.environ) -env = Environment (ENV = os.environ) - -if sys.platform == 'linux2' or sys.platform == 'linux-i386': - use_international = 'true' - use_gameengine = 'true' - use_openal = 'false' - use_fmod = 'false' - use_quicktime = 'false' - use_openexr = 'true' - use_sumo = 'true' - use_ode = 'false' - use_bullet = 'true' - use_buildinfo = 'true' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'false' - build_blender_plugin = 'false' - release_flags = ['-O2'] - debug_flags = ['-O2', '-g'] - extra_flags = ['-pipe', '-funsigned-char'] - cxxflags = [] - defines = [] - warn_flags = ['-Wall', '-W'] - window_system = 'X11' - platform_libs = ['m', 'util', 'stdc++'] - platform_libpath = [] - platform_linkflags = ['-pthread'] - extra_includes = [] - # z library information - z_lib = ['z'] - z_libpath = ['/usr/lib'] - z_include = ['/usr/include'] - # png library information - png_lib = ['png'] - png_libpath = ['/usr/lib'] - png_include = ['/usr/include'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['jpeg'] - jpeg_libpath = ['/usr/lib'] - jpeg_include = ['/usr/include'] - #tiff library information - tiff_lib = ['tiff'] - tiff_libpath = ['/usr/lib'] - tiff_include = ['/usr/include'] - # OpenGL library information - opengl_lib = ['GL', 'GLU'] - opengl_static = ['/usr/lib/libGL.a', '/usr/lib/libGLU.a'] - opengl_libpath = ['/usr/lib', '/usr/X11R6/lib'] - opengl_include = ['/usr/include', '/usr/X11R6/include'] - # SDL library information - sdl_env.ParseConfig ('sdl-config --cflags --libs') - sdl_cflags = sdl_env.Dictionary()['CCFLAGS'] - sdl_include = sdl_env.Dictionary()['CPPPATH'] - sdl_libpath = sdl_env.Dictionary()['LIBPATH'] - sdl_lib = sdl_env.Dictionary()['LIBS'] - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = ['#extern/solid'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = ['ode'] - ode_libpath = ['#../lib/linux-glibc2.2.5-i386/ode/lib'] - ode_include = ['#../lib/linux-glibc2.2.5-i386/ode/include'] - # Python library information - python_lib = ['python%d.%d' % sys.version_info[0:2]] - python_libpath = [sysconfig.get_python_lib (0, 1) + '/config'] - python_include = [sysconfig.get_python_inc ()] - python_linkflags = Split (sysconfig.get_config_var('LINKFORSHARED')) - # International support information - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_env.ParseConfig ('pkg-config --cflags --libs freetype2 2>/dev/null || freetype-config --cflags --libs 2>/dev/null') - freetype_lib = freetype_env.Dictionary()['LIBS'] - freetype_libpath = freetype_env.Dictionary()['LIBPATH'] - freetype_include = freetype_env.Dictionary()['CPPPATH'] - gettext_lib = [] - gettext_libpath = [] - gettext_include = [] - # OpenAL library information - openal_lib = ['openal'] - openal_libpath = ['/usr/lib'] - openal_include = ['/usr/include'] - -elif sys.platform == 'darwin': - use_international = 'true' - use_gameengine = 'true' - use_openal = 'true' - use_fmod = 'false' - use_openal = 'true' - use_quicktime = 'true' - use_openexr = 'true' - use_precomp = 'true' - use_sumo = 'true' - use_ode = 'false' - use_bullet = 'true' - use_buildinfo = 'true' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'true' - build_blender_plugin = 'false' - # TODO: replace darwin-6.1-powerpc with the actual directiory on the - # build machine - # darwin-6.1 is the name of cvs precomp folder - # a symbolic link named darwin-X.Y-powerpc must be manually done - #for now. X-Y is darwin kernel rev number - darwin_precomp = '#../lib/darwin-6.1-powerpc/' - fink_path = '/sw/' - # TODO : try -mpowerpc -mpowerpc-gopt -mpowerpc-gfxopt optims - # doing actual profiling - extra_flags = ['-pipe', '-fPIC', '-funsigned-char', '-ffast-math', '-mpowerpc', '-mtune=G4'] - - # , '-malign-natural'] malign is causing problems with jpeg lib but worth a 1-2% speedup - #'-force_cpusubtype_ALL', '-mpowerpc-gpopt', - cxxflags = [] - defines = ['_THREAD_SAFE' ] - if use_quicktime == 'true': - defines += ['WITH_QUICKTIME'] - warn_flags = ['-Wall'] # , '-W' - release_flags = ['-O2'] - debug_flags = ['-g'] - window_system = 'CARBON' - # z library information - z_lib = ['z'] - z_libpath = [] - z_include = [] - # TODO : add a flag to allow each lib to be build from fink or precomp - # without having to have to specify the path manually in config.opts. - # png library information - png_lib = ['libpng'] - png_libpath = [darwin_precomp + 'png/lib'] - png_include = [darwin_precomp + 'png/include'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/local/lib'] - openexr_include = ['/usr/local/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['libjpeg'] - jpeg_libpath = [darwin_precomp + 'jpeg/lib'] - jpeg_include = [darwin_precomp + 'jpeg/include'] - # TIFF library information - tiff_lib = ['libtiff'] - tiff_libpath = [darwin_precomp + 'tiff/lib'] - tiff_include = [darwin_precomp + 'tiff/include'] - # OpenGL library information - opengl_lib = ['GL', 'GLU'] - opengl_static = [] - opengl_libpath = [] - opengl_include = [] - # SDL specific stuff. - #sdl_env.ParseConfig ('sdl-config --cflags --libs') - # Want to use precompiled libraries? - if use_precomp == 'true': - sdl_include = [darwin_precomp + 'sdl/include'] - sdl_libpath = [darwin_precomp + 'sdl/lib'] - sdl_lib = ['libSDL.a'] - sdl_cflags = [ '-I' + darwin_precomp + 'sdl/include' ] - sdl_env.Append (CCFLAGS = sdl_cflags ) - sdl_env.Append (CPPPATH = [darwin_precomp + 'sdl/include'] ) - - platform_libs = ['stdc++'] - extra_includes = ['/sw/include'] - platform_libpath = ['/System/Library/Frameworks/OpenGL.framework/Libraries'] - platform_linkflags = [] - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = ['#/extern/solid'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#/extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = ['libode'] - ode_libpath = [darwin_precomp + 'ode/lib'] - ode_include = [darwin_precomp + 'ode/include/ode'] - # Python variables. - # TODO : fill vars differently if we are on 10.2 or 10.3 - # python_lib = ['python%d.%d' % sys.version_info[0:2]] - # python_libpath = [sysconfig.get_python_lib (0, 1) + '/config'] - # python_include = [sysconfig.get_python_inc ()] - # python_linkflags = Split (sysconfig.get_config_var('LINKFORSHARED')) - python_lib = [] - python_libpath = ['/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config'] - python_include = ['/System/Library/Frameworks/Python.framework/Versions/2.3/include/python2.3'] - python_linkflags = ['-u', '__dummy', '-u', '_PyMac_Error', - '-framework', 'System', - '-framework', 'Python', - '-framework', 'CoreServices', - '-framework', 'Foundation', - '-framework', 'OpenGL', - '-framework', 'IOKit' , - '-framework', 'AppKit'] - # International stuff - ftgl_lib = ['libftgl'] - ftgl_libpath = [darwin_precomp + 'ftgl/lib'] - ftgl_include = ['#extern/bFTGL/include'] - freetype_lib = ['libfreetype'] - freetype_libpath = [darwin_precomp + 'freetype/lib'] - freetype_include = [darwin_precomp + 'freetype/include'] - gettext_lib = ['libintl'] - gettext_libpath = [darwin_precomp + 'gettext/lib'] - gettext_include = [darwin_precomp + 'gettext/include'] - # OpenAL library information - openal_lib = ['libopenal'] - openal_libpath = [darwin_precomp + 'openal/lib'] - openal_include = [darwin_precomp + 'openal/include'] + env = BlenderEnvironment(ENV = os.environ) -elif sys.platform == 'cygwin': - use_international = 'false' - use_gameengine = 'false' - use_openal = 'false' - use_fmod = 'false' - use_quicktime = 'false' - use_openexr = 'true' - use_sumo = 'false' - use_ode = 'false' - use_bullet = 'false' - use_buildinfo = 'false' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'false' - build_blender_plugin = 'false' - release_flags = ['-O2'] - debug_flags = ['-O2', '-g'] - extra_flags = ['-pipe', '-mno-cygwin', '-mwindows', '-funsigned-char'] - cxxflags = [] - defines = ['FREE_WINDOWS'] - warn_flags = ['-Wall', '-Wno-char-subscripts'] - platform_libs = ['png', 'jpeg', 'netapi32', - 'opengl32', 'glu32', 'winmm', - 'mingw32'] - platform_libpath = ['/usr/lib/w32api', '/lib/w32api'] - platform_linkflags = ['-mwindows', '-mno-cygwin', '-mconsole'] - window_system = 'WIN32' - extra_includes = [] - # z library information - z_lib = ['z'] - z_libpath = ['#../lib/windows/zlib/lib'] - z_include = ['#../lib/windows/zlib/include'] - # png library information - png_lib = ['png'] - png_libpath = ['#../lib/windows/png/lib'] - png_include = ['#../lib/windows/png/include'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['jpeg'] - jpeg_libpath = ['#../lib/windows/jpeg/lib'] - jpeg_include = ['#../lib/windows/jpeg/include'] - # Tiff Library information - tiff_lib = ['libtiff'] - tiff_libpath = ['#../lib/windows/tiff/lib'] - tiff_include = ['#../lib/windows/tiff/include'] - # OpenGL library information - opengl_lib = ['opengl32', 'glu32'] - opengl_static = [] - opengl_libpath = [] - opengl_include = [] - # SDL specific stuff. - sdl_include = ['#../lib/windows/sdl/include'] - sdl_libpath = ['#../lib/windows/sdl/lib'] - sdl_lib = ['SDL'] - sdl_cflags = [] - #sdl_cflags = '-DWIN32' - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = ['#extern/solid'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = ['ode'] - ode_libpath = ['#../lib/windows/gcc/ode/lib'] - ode_include = ['#../lib/windows/gcc/ode/include'] - # Python library information - python_include = ['#../lib/windows/python/include/python2.2'] - python_libpath = ['#../lib/windows/python/lib'] - python_lib = ['python22'] - python_linkflags = [] - # International stuff - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_lib = ['freetype'] - freetype_libpath = ['#../lib/windows/gcc/freetype/lib'] - freetype_include = ['#../lib/windows/gcc/freetype/include'] - gettext_lib = [] - gettext_libpath = [] - gettext_include = [] - # OpenAL library information - openal_lib = [] - openal_libpath = [] - openal_include = [] +if not env: + print "Could not create a build environment" + Exit() -elif sys.platform == 'win32': - use_international = 'true' - use_gameengine = 'true' - use_openal = 'true' - use_fmod = 'false' - use_quicktime = 'true' - use_openexr = 'true' - use_bullet = 'true' - use_sumo = 'true' - use_ode = 'false' - use_buildinfo = 'true' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'true' - build_blender_plugin = 'false' - release_flags = ['/Og', '/Ot', '/Ob1', '/Op', '/G6'] - debug_flags = ['/Zi', '/Fr${TARGET.base}.sbr'] - extra_flags = ['/EHsc', '/J', '/W3', '/Gd', '/MT'] - cxxflags = [] - defines = ['WIN32', '_CONSOLE'] - if use_quicktime == 'true': - defines += ['WITH_QUICKTIME'] - defines += ['_LIB', 'USE_OPENAL'] - defines += ['FTGL_LIBRARY_STATIC'] - warn_flags = [] - platform_libs = [ 'qtmlClient', 'soundsystem', - 'ws2_32', 'dxguid', 'vfw32', 'winmm', - 'iconv', 'kernel32', 'user32', 'gdi32', - 'comdlg32', 'advapi32', 'shell32', - 'ole32', 'oleaut32', 'uuid', - 'libcmt', 'libc'] - platform_libpath = ['#../lib/windows/iconv/lib', - '#../lib/windows/QTDevWin/Libraries'] - platform_linkflags = [ - '/SUBSYSTEM:CONSOLE', - '/MACHINE:IX86', - '/ENTRY:mainCRTStartup', - '/INCREMENTAL:NO', - '/NODEFAULTLIB:"msvcprt.lib"', - '/NODEFAULTLIB:"glut32.lib"', - '/NODEFAULTLIB:"libcd.lib"', - #'/NODEFAULTLIB:"libc.lib"', - '/NODEFAULTLIB:"libcpd.lib"', - '/NODEFAULTLIB:"libcp.lib"', - '/NODEFAULTLIB:"libcmtd.lib"', - ] - window_system = 'WIN32' - extra_includes = [] - if use_quicktime == 'true': - extra_includes += ['#../lib/windows/QTDevWin/CIncludes'] - # z library information - z_lib = ['zlib'] - z_libpath = ['#../lib/windows/zlib/lib'] - z_include = ['#../lib/windows/zlib/include'] - # png library information - png_lib = ['libpng_st'] - png_libpath = ['#../lib/windows/png/lib'] - png_include = ['#../lib/windows/png/include'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['libjpeg'] - jpeg_libpath = ['#../lib/windows/jpeg/lib'] - jpeg_include = ['#../lib/windows/jpeg/include'] - # Tiff Library information - tiff_lib = ['libtiff'] - tiff_libpath = ['#../lib/windows/tiff/lib'] - tiff_include = ['#../lib/windows/tiff/include'] - # OpenGL library information - opengl_lib = ['opengl32', 'glu32'] - opengl_static = [] - opengl_libpath = [] - opengl_include = ['/usr/include'] - # SDL library information - sdl_include = ['#../lib/windows/sdl/include'] - sdl_libpath = ['#../lib/windows/sdl/lib'] - sdl_lib = ['SDL'] - sdl_cflags = [] - window_system = 'WIN32' - # SOLID library information - solid_lib = ['extern/solid'] - solid_libpath = ['#../lib/windows/solid/lib'] - solid_include = ['#extern/solid'] - qhull_lib = ['qhull'] - qhull_libpath = ['#../lib/windows/qhull/lib'] - qhull_include = ['#extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = [] # TODO - ode_libpath = ['#../lib/windows/ode/lib'] - ode_include = ['#../lib/windows/ode/include'] - # Python lib name - python_include = ['#../lib/windows/python/include/python2.4'] - python_libpath = ['#../lib/windows/python/lib'] - python_lib = ['python24'] - python_linkflags = [] - # International stuff - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_lib = ['freetype2ST'] - freetype_libpath = ['#../lib/windows/freetype/lib'] - freetype_include = ['#../lib/windows/freetype/include'] - gettext_lib = ['gnu_gettext'] - gettext_libpath = ['#../lib/windows/gettext/lib'] - gettext_include = ['#../lib/windows/gettext/include'] - # OpenAL library information - openal_lib = ['openal_static'] - openal_libpath = ['#../lib/windows/openal/lib'] - openal_include = ['#../lib/windows/openal/include'] +if env['CC'] in ['cl', 'cl.exe'] and sys.platform=='win32': + platform = 'win32-vc' +elif env['CC'] in ['gcc'] and sys.platform=='win32': + platform = 'win32-mingw' -elif string.find (sys.platform, 'sunos') != -1: - use_international = 'true' - use_gameengine = 'false' - use_openal = 'false' - use_fmod = 'false' - use_quicktime = 'false' - use_openexr = 'false' - use_sumo = 'false' - use_ode = 'false' - use_bullet = 'false' - use_buildinfo = 'false' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'false' - build_blender_plugin = 'false' - release_flags = ['-O2'] - debug_flags = ['-O2', '-g'] - extra_flags = ['-pipe', '-fPIC', '-funsigned-char', '-DSUN_OGL_NO_VERTEX_MACROS'] - cxxflags = [] - defines = [] - warn_flags = ['-Wall', '-W'] - window_system = 'X11' - platform_libs = ['stdc++', 'dl', 'm'] - platform_libpath = [] - platform_linkflags = [] - extra_includes = [] - # z library information - z_lib = ['z'] - z_libpath = [] - z_include = [] - # png library information - png_lib = ['png'] - png_libpath = [] - png_include = [] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['jpeg'] - jpeg_libpath = [] - jpeg_include = [] - # OpenGL library information - opengl_lib = ['GL', 'GLU', 'X11'] - opengl_static = [] - opengl_libpath = ['/usr/openwin/include'] - opengl_include = ['/usr/openwin/lib'] - # SDL library information - sdl_env.ParseConfig ('sdl-config --cflags --libs') - sdl_cflags = sdl_env.Dictionary()['CCFLAGS'] - sdl_include = sdl_env.Dictionary()['CPPPATH'] - sdl_libpath = sdl_env.Dictionary()['LIBPATH'] - sdl_lib = sdl_env.Dictionary()['LIBS'] - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = ['#extern/solid'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#extern/qhull/include'] - # ODE library information - ode_lib = [] - ode_libpath = [] - ode_include = ['#extern/ode/dist/include/ode'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # Python variables. - python_lib = ['python%d.%d' % sys.version_info[0:2]] - python_libpath = [sysconfig.get_python_lib (0, 1) + '/config'] - python_include = [sysconfig.get_python_inc ()] - python_linkflags = [] - # International support information - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_lib = ['freetype'] - freetype_libpath = ['#../lib/solaris-2.8-sparc/freetype/lib'] - freetype_include = ['#../lib/solaris-2.8-sparc/freetype/include'] - gettext_lib = [] - gettext_libpath = [] - gettext_include = [] - # OpenAL library information - openal_lib = [] - openal_libpath = [] - openal_include = [] +crossbuild = B.arguments.get('BF_CROSS', None) +if crossbuild and platform!='win32': + platform = 'linuxcross' -elif string.find (sys.platform, 'irix') != -1: - use_international = 'false' - use_gameengine = 'false' - use_openal = 'false' - use_fmod = 'false' - use_quicktime = 'false' - use_openexr = 'false' - use_sumo = 'false' - use_ode = 'false' - use_bullet = 'false' - use_buildinfo = 'false' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'false' - build_blender_plugin = 'false' - irix_precomp = '#../lib/irix-6.5-mips' - extra_flags = ['-n32', '-mips3', '-Xcpluscomm'] - cxxflags = ['-n32', '-mips3', '-Xcpluscomm', '-LANG:std'] - cxxflags += ['-LANG:libc_in_namespace_std=off'] - - window_system = 'X11' - release_flags = ['-O2', '-OPT:Olimit=0'] - debug_flags = ['-O2', '-g'] - defines = [] - warn_flags = ['-fullwarn', '-woff', '1001,1110,1201,1209,1355,1424,1681,3201'] - platform_libs = ['movieGL', 'Xmu', 'Xext', 'X11', - 'c', 'm', 'dmedia', 'cl', 'audio', - 'Cio', 'pthread'] - platform_libpath = ['/usr/lib32/mips3', - '/lib/freeware/lib32', - '/usr/lib32'] - platform_linkflags = ['-mips3', '-n32'] - extra_includes = ['/usr/freeware/include', - '/usr/include'] - # z library information - z_lib = ['z'] - z_libpath = [] - z_include = [] - # png library information - png_lib = ['png'] - png_libpath = [irix_precomp + '/png/lib'] - png_include = [irix_precomp + '/png/include'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['jpeg'] - jpeg_libpath = [irix_precomp + '/jpeg/lib'] - jpeg_include = [irix_precomp + '/jpeg/include'] - # OpenGL library information - opengl_lib = ['GL', 'GLU'] - opengl_static = [] - opengl_libpath = [] - opengl_include = [] - # SDL library information - sdl_cflags = [] - sdl_include = [irix_precomp + '/sdl/include/SDL'] - sdl_libpath = [irix_precomp + '/sdl/lib'] - sdl_lib = ['SDL', 'libSDL.a'] - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = [irix_precomp + '/solid/include'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = [] - ode_libpath = [] - ode_include = [irix_precomp + '/ode/include'] - # Python library information - python_libpath = [irix_precomp + '/python/lib/python2.2/config'] - python_include = [irix_precomp + '/python/include/python2.2'] - python_lib = ['python2.2'] - python_linkflags = [] - # International support information - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_lib = ['freetype'] - freetype_libpath = [irix_precomp + '/freetype/lib'] - freetype_include = [irix_precomp + '/freetype/include'] - gettext_lib = [] - gettext_libpath = [] - gettext_include = [] - # OpenAL library information - openal_lib = [] - openal_libpath = [] - openal_include = [] +env['OURPLATFORM'] = platform -elif string.find (sys.platform, 'hp-ux') != -1: - window_system = 'X11' - defines = [] - -elif sys.platform=='openbsd3': - print "Building for OpenBSD 3.x" - use_international = 'false' - use_gameengine = 'false' - use_openal = 'false' - use_fmod = 'false' - use_quicktime = 'false' - use_openexr = 'false' - use_sumo = 'false' - use_ode = 'false' - use_bullet = 'false' - use_buildinfo = 'true' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'false' - build_blender_plugin = 'false' - release_flags = ['-O2'] - debug_flags = ['-O2', '-g'] - extra_flags = ['-pipe', '-fPIC', '-funsigned-char'] - cxxflags = [] - defines = [] - warn_flags = ['-Wall','-W'] - window_system = 'X11' - platform_libs = ['m', 'stdc++', 'pthread', 'util'] - platform_libpath = [] - platform_linkflags = [] - extra_includes = [] - z_lib = ['z'] - z_libpath = ['/usr/lib'] - z_include = ['/usr/include'] - # png library information - png_lib = ['png'] - png_libpath = ['/usr/local/lib'] - png_include = ['/usr/local/include/libpng'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['jpeg'] - jpeg_libpath = ['/usr/local/lib'] - jpeg_include = ['/usr/local/include'] - # OpenGL library information - opengl_lib = ['GL', 'GLU'] - opengl_static = ['/usr/lib/libGL.a', '/usr/lib/libGLU.a'] - opengl_libpath = ['/usr/lib', '/usr/X11R6/lib'] - opengl_include = ['/usr/X11R6/include/'] - # SDL library information - sdl_env.ParseConfig ('sdl-config --cflags --libs') - sdl_cflags = sdl_env.Dictionary()['CCFLAGS'] - sdl_include = sdl_env.Dictionary()['CPPPATH'] - sdl_libpath = sdl_env.Dictionary()['LIBPATH'] - sdl_lib = sdl_env.Dictionary()['LIBS'] - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = ['#extern/solid'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = ['ode'] - ode_libpath = ['#../lib/linux-glibc2.2.5-i386/ode/lib'] - ode_include = ['#../lib/linux-glibc2.2.5-i386/ode/include'] - # Python library information - python_lib = ['python%d.%d' % sys.version_info[0:2]] - python_libpath = [sysconfig.get_python_lib (0, 1) + '/config'] - python_include = [sysconfig.get_python_inc ()] - python_linkflags = [] - # International support information - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_env.ParseConfig('pkg-config --cflags --libs freetype2') - freetype_lib = freetype_env.Dictionary()['LIBS'] - freetype_libpath = freetype_env.Dictionary()['LIBPATH'] - freetype_include = freetype_env.Dictionary()['CPPPATH'] - gettext_lib = [] - gettext_libpath = [] - gettext_include = [] - # OpenAL library information - openal_lib = ['openal'] - openal_libpath = ['/usr/lib'] - openal_include = ['/usr/include'] - -elif sys.platform=='freebsd4' or sys.platform=='freebsd5': - print "Building for FreeBSD" - use_international = 'false' - use_gameengine = 'false' - use_openal = 'false' - use_fmod = 'false' - use_quicktime = 'false' - use_openexr = 'false' - use_sumo = 'false' - use_ode = 'false' - use_bullet = 'false' - use_buildinfo = 'true' - use_fluidsim = 'true' - build_blender_dynamic = 'true' - build_blender_static = 'false' - build_blender_player = 'false' - build_blender_plugin = 'false' - release_flags = ['-O2'] - debug_flags = ['-O2', '-g'] - extra_flags = ['-pipe', '-fPIC', '-funsigned-char'] - cxxflags = [] - defines = [] - warn_flags = ['-Wall','-W'] - window_system = 'X11' - platform_libs = ['m', 'stdc++', 'util'] - platform_libpath = [] - platform_linkflags = ['-pthread'] - extra_includes = [] - z_lib = ['z'] - z_libpath = ['/usr/lib'] - z_include = ['/usr/include'] - # png library information - png_lib = ['png'] - png_libpath = ['/usr/local/lib'] - png_include = ['/usr/local/include'] - # OpenEXR library information - if use_openexr == 'true': - defines += ['WITH_OPENEXR'] - openexr_lib = ['Iex', 'Half', 'IlmImf', 'Imath'] - openexr_libpath = ['/usr/lib'] - openexr_include = ['/usr/include/OpenEXR'] - # jpeg library information - jpeg_lib = ['jpeg'] - jpeg_libpath = ['/usr/local/lib'] - jpeg_include = ['/usr/local/include'] - # OpenGL library information - opengl_lib = ['GL', 'GLU'] - opengl_static = ['/usr/lib/libGL.a', '/usr/lib/libGLU.a'] - opengl_libpath = ['/usr/lib', '/usr/X11R6/lib'] - opengl_include = ['/usr/X11R6/include/'] - # SDL library information - sdl_env.ParseConfig ('sdl11-config --cflags --libs') - sdl_cflags = sdl_env.Dictionary()['CCFLAGS'] - sdl_include = sdl_env.Dictionary()['CPPPATH'] - sdl_libpath = ['/usr/local/include/SDL11'] - sdl_lib = sdl_env.Dictionary()['LIBS'] - # SOLID library information - solid_lib = [] - solid_libpath = [] - solid_include = ['#extern/solid'] - qhull_lib = [] - qhull_libpath = [] - qhull_include = ['#extern/qhull/include'] - # Bullet library information - bullet_lib = [] - bullet_libpath = [] - bullet_include = ['#extern/bullet','#extern/bullet/LinearMath','#extern/bullet/Bullet','#extern/bullet/BulletDynamics'] - # ODE library information - ode_lib = ['ode'] - ode_libpath = ['#../lib/linux-glibc2.2.5-i386/ode/lib'] - ode_include = ['#../lib/linux-glibc2.2.5-i386/ode/include'] - # Python library information - python_lib = ['python%d.%d' % sys.version_info[0:2]] - python_libpath = [sysconfig.get_python_lib (0, 1) + '/config'] - python_include = [sysconfig.get_python_inc ()] - python_linkflags = [] - # International support information - ftgl_lib = [] - ftgl_libpath = [] - ftgl_include = ['#extern/bFTGL/include'] - freetype_env.ParseConfig('pkg-config --cflags --libs freetype2') - freetype_lib = freetype_env.Dictionary()['LIBS'] - freetype_libpath = freetype_env.Dictionary()['LIBPATH'] - freetype_include = freetype_env.Dictionary()['CPPPATH'] - gettext_lib = [] - gettext_libpath = [] - gettext_include = [] - # OpenAL library information - openal_lib = ['openal'] - openal_libpath = ['/usr/lib'] - openal_include = ['/usr/include'] +configfile = B.arguments.get('BF_CONFIG', 'config'+os.sep+platform+'-config.py') +if os.path.exists(configfile): + print B.bc.OKGREEN + "Using config file: " + B.bc.ENDC + configfile else: - print "Unknown platform %s"%sys.platform - exit - -#----------------------------------------------------------------------------- -# End of platform specific section -#----------------------------------------------------------------------------- - -#----------------------------------------------------------------------------- -# User configurable options to be saved in a config file. -#----------------------------------------------------------------------------- -# Checking for an existing config file - use that one if it exists, -# otherwise create one. -my_defines = [] -my_ccflags = [] -my_cxxflags = [] -my_ldflags = [] -if os.path.exists (bs_globals.config_file): - print "Using config file: " + bs_globals.config_file -else: - print "Creating new config file: " + bs_globals.config_file - env_dict = env.Dictionary() - config=open (bs_globals.config_file, 'w') - config.write ("# Configuration file containing user definable options.\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"%(bs_globals.root_build_dir)) - - config.write ("\n# Extra compiler flags can be defined here.\n") - config.write ("DEFINES = %s\n"%(my_defines)) - config.write ("CCFLAGS = %s\n"%(my_ccflags)) - config.write ("CXXFLAGS = %s\n"%(my_cxxflags)) - config.write ("LDFLAGS = %s\n"%(my_ldflags)) - - config.write ("USE_INTERNATIONAL = %r\n"%(use_international)) - config.write ("BUILD_GAMEENGINE = %r\n"%(use_gameengine)) - if use_ode == 'true': - config.write ("USE_PHYSICS = 'ode'\n") - elif (use_bullet == 'true') and (use_sumo == 'false'): - config.write("USE_PHYSICS = 'bullet'\n") - else: - config.write ("USE_PHYSICS = 'solid'\n") - config.write ("USE_OPENAL = %r\n"%(use_openal)) - config.write ("USE_FMOD = %r\n"%(use_fmod)) - config.write ("USE_QUICKTIME = %r\n"%(use_quicktime)) - config.write ("USE_OPENEXR = %r\n"%(use_openexr)) - config.write ("USE_FLUIDSIM = %r\n"%(use_fluidsim)) - config.write ("\n# Compiler information.\n") - config.write ("HOST_CC = %r\n"%(env_dict['CC'])) - config.write ("HOST_CXX = %r\n"%(env_dict['CXX'])) - config.write ("TARGET_CC = %r\n"%(env_dict['CC'])) - config.write ("TARGET_CXX = %r\n"%(env_dict['CXX'])) - config.write ("TARGET_AR = %r\n"%(env_dict['AR'])) - config.write ("PATH = %r\n"%(os.environ['PATH'])) - config.write ("\n# External library information.\n") - config.write ("PLATFORM_LIBS = %r\n"%(platform_libs)) - config.write ("PLATFORM_LIBPATH = %r\n"%(platform_libpath)) - config.write ("PLATFORM_LINKFLAGS = %r\n"%(platform_linkflags)) - config.write ("PYTHON_INCLUDE = %r\n"%(python_include)) - config.write ("PYTHON_LIBPATH = %r\n"%(python_libpath)) - config.write ("PYTHON_LIBRARY = %r\n"%(python_lib)) - config.write ("PYTHON_LINKFLAGS = %r\n"%(python_linkflags)) - config.write ("SDL_CFLAGS = %r\n"%(sdl_cflags)) - config.write ("SDL_INCLUDE = %r\n"%(sdl_include)) - config.write ("SDL_LIBPATH = %r\n"%(sdl_libpath)) - config.write ("SDL_LIBRARY = %r\n"%(sdl_lib)) - config.write ("Z_INCLUDE = %r\n"%(z_include)) - config.write ("Z_LIBPATH = %r\n"%(z_libpath)) - config.write ("Z_LIBRARY = %r\n"%(z_lib)) - config.write ("PNG_INCLUDE = %r\n"%(png_include)) - config.write ("PNG_LIBPATH = %r\n"%(png_libpath)) - config.write ("PNG_LIBRARY = %r\n"%(png_lib)) - config.write ("OPENEXR_INCLUDE = %r\n"%(openexr_include)) - config.write ("OPENEXR_LIBPATH = %r\n"%(openexr_libpath)) - config.write ("OPENEXR_LIBRARY = %r\n"%(openexr_lib)) - config.write ("JPEG_INCLUDE = %r\n"%(jpeg_include)) - config.write ("JPEG_LIBPATH = %r\n"%(jpeg_libpath)) - config.write ("JPEG_LIBRARY = %r\n"%(jpeg_lib)) - config.write ("TIFF_INCLUDE = %r\n"%(tiff_include)) - config.write ("TIFF_LIBPATH = %r\n"%(tiff_libpath)) - config.write ("TIFF_LIBRARY = %r\n"%(tiff_lib)) - config.write ("OPENGL_INCLUDE = %r\n"%(opengl_include)) - config.write ("OPENGL_LIBPATH = %r\n"%(opengl_libpath)) - config.write ("OPENGL_LIBRARY = %r\n"%(opengl_lib)) - config.write ("OPENGL_STATIC = %r\n"%(opengl_static)) - config.write ("\n# The following information is only necessary when you've enabled support for\n") - config.write ("# the game engine.\n") - config.write ("SOLID_INCLUDE = %r\n"%(solid_include)) - config.write ("SOLID_LIBPATH = %r\n"%(solid_libpath)) - config.write ("SOLID_LIBRARY = %r\n"%(solid_lib)) - config.write ("QHULL_INCLUDE = %r\n"%(qhull_include)) - config.write ("QHULL_LIBPATH = %r\n"%(qhull_libpath)) - config.write ("QHULL_LIBRARY = %r\n"%(qhull_lib)) - config.write ("ODE_INCLUDE = %r\n"%(ode_include)) - config.write ("ODE_LIBPATH = %r\n"%(ode_libpath)) - config.write ("ODE_LIBRARY = %r\n"%(ode_lib)) - config.write ("BULLET_INCLUDE = %r\n"%(bullet_include)) - config.write ("BULLET_LIBPATH = %r\n"%(bullet_libpath)) - config.write ("BULLET_LIBRARY = %r\n"%(bullet_lib)) - config.write ("OPENAL_INCLUDE = %r\n"%(openal_include)) - config.write ("OPENAL_LIBPATH = %r\n"%(openal_libpath)) - config.write ("OPENAL_LIBRARY = %r\n"%(openal_lib)) - config.write ("\n# The following information is only necessary when building with\n") - config.write ("# internationalization support.\n"); - config.write ("FTGL_INCLUDE = %r\n"%(ftgl_include)) - config.write ("FTGL_LIBPATH = %r\n"%(ftgl_libpath)) - config.write ("FTGL_LIBRARY = %r\n"%(ftgl_lib)) - config.write ("FREETYPE_INCLUDE = %r\n"%(freetype_include)) - config.write ("FREETYPE_LIBPATH = %r\n"%(freetype_libpath)) - config.write ("FREETYPE_LIBRARY = %r\n"%(freetype_lib)) - config.write ("GETTEXT_INCLUDE = %r\n"%(gettext_include)) - config.write ("GETTEXT_LIBPATH = %r\n"%(gettext_libpath)) - config.write ("GETTEXT_LIBRARY = %r\n"%(gettext_lib)) - config.close () - -#----------------------------------------------------------------------------- -# Read the options from the config file and update the various necessary flags -#----------------------------------------------------------------------------- -list_opts = [] -user_options = Options (bs_globals.config_file) -user_options_env = Environment (ENV = os.environ, options = user_options) -user_options.AddOptions ( - ('VERSION', 'Blender version', version), - (EnumOption ('BUILD_BINARY', 'release', - 'Select a release or debug binary.', - allowed_values = ('release', 'debug'))), - (BoolOption ('USE_BUILDINFO', - 'Set to 1 if you want to add build information.', - 'false')), - (BoolOption ('BUILD_BLENDER_DYNAMIC', - 'Set to 1 if you want to build blender with hardware accellerated OpenGL support.', - 'true')), - (BoolOption ('BUILD_BLENDER_STATIC', - 'Set to 1 if you want to build blender with software OpenGL support.', - 'false')), - (BoolOption ('BUILD_BLENDER_PLAYER', - 'Set to 1 if you want to build the blender player.', - 'false')), - (BoolOption ('BUILD_BLENDER_PLUGIN', - 'Set to 1 if you want to build the blender plugin.', - 'false')), - ('BUILD_DIR', 'Target directory for intermediate files.', - bs_globals.root_build_dir), - (BoolOption ('USE_INTERNATIONAL', - 'Set to 1 to have international support.', - 'false')), - (EnumOption ('USE_PHYSICS', 'solid', - 'Select which physics engine to use.', - allowed_values = ('ode', 'solid', 'bullet'))), - (BoolOption ('BUILD_GAMEENGINE', - 'Set to 1 to build blender with game engine support.', - 'false')), - (BoolOption ('USE_OPENAL', - 'Set to 1 to build the game engine with OpenAL support.', - 'false')), - (BoolOption ('USE_FMOD', - 'Set to 1 to build the game engine with FMod support.', - 'false')), - (BoolOption ('USE_QUICKTIME', - 'Set to 1 to add support for QuickTime.', - 'false')), - (BoolOption ('USE_OPENEXR', - 'Set to 1 to add support for OpenEXR.', - 'false')), - (BoolOption ('USE_FLUIDSIM', # NT test new - 'Set to 0 to disable compilation of fluid simulation library El\'Beem.', - 'true')), - ('HOST_CC', 'C compiler for the host platfor. This is the same as target platform when not cross compiling.'), - ('HOST_CXX', 'C++ compiler for the host platform. This is the same as target platform when not cross compiling.'), - ('TARGET_CC', 'C compiler for the target platform.'), - ('TARGET_CXX', 'C++ compiler for the target platform.'), - ('TARGET_AR', 'Linker command for linking libraries.'), - ('PATH', 'Standard search path'), - ('PLATFORM_LIBS', 'Platform specific libraries.'), - ('PLATFORM_LIBPATH', 'Platform specific library link path.'), - ('PLATFORM_LINKFLAGS', 'Platform specific linkflags'), - ('PYTHON_INCLUDE', 'Include directory for Python header files.'), - ('PYTHON_LIBPATH', 'Library path where the Python lib is located.'), - ('PYTHON_LIBRARY', 'Python library name.'), - ('PYTHON_LINKFLAGS', 'Python specific linkflags.'), - ('SDL_CFLAGS', 'Necessary CFLAGS when using sdl functionality.'), - ('SDL_INCLUDE', 'Include directory for SDL header files.'), - ('SDL_LIBPATH', 'Library path where the SDL library is located.'), - ('SDL_LIBRARY', 'SDL library name.'), - ('Z_INCLUDE', 'Include directory for zlib header files.'), - ('Z_LIBPATH', 'Library path where the zlib library is located.'), - ('Z_LIBRARY', 'Z library name.'), - ('PNG_INCLUDE', 'Include directory for png header files.'), - ('PNG_LIBPATH', 'Library path where the png library is located.'), - ('PNG_LIBRARY', 'png library name.'), - ('OPENEXR_INCLUDE', 'Include directory for OpenEXR header files.'), - ('OPENEXR_LIBPATH', 'Library path where the OpenEXR libraries are located.'), - ('OPENEXR_LIBRARY', 'OpenEXR library names.'), - ('JPEG_INCLUDE', 'Include directory for jpeg header files.'), - ('JPEG_LIBPATH', 'Library path where the jpeg library is located.'), - ('JPEG_LIBRARY', 'jpeg library name.'), - ('TIFF_INCLUDE', 'Include directory for TIFF header files.'), - ('TIFF_LIBPATH', 'Library path where the TIFF library is located.'), - ('TIFF_LIBRARY', 'TIFF library name.'), - ('OPENGL_INCLUDE', 'Include directory for OpenGL header files.'), - ('OPENGL_LIBPATH', 'Library path where the OpenGL libraries are located.'), - ('OPENGL_LIBRARY', 'OpenGL library names.'), - ('OPENGL_STATIC', 'Linker flags for static linking of Open GL.'), - ('SOLID_INCLUDE', 'Include directory for SOLID header files.'), - ('SOLID_LIBPATH', 'Library path where the SOLID library is located.'), - ('SOLID_LIBRARY', 'SOLID library name.'), - ('QHULL_INCLUDE', 'Include directory for QHULL header files.'), - ('QHULL_LIBPATH', 'Library path where the QHULL library is located.'), - ('QHULL_LIBRARY', 'QHULL library name.'), - ('ODE_INCLUDE', 'Include directory for ODE header files.'), - ('ODE_LIBPATH', 'Library path where the ODE library is located.'), - ('ODE_LIBRARY', 'ODE library name.'), - ('BULLET_INCLUDE', 'Include directory for BULLET header files.'), - ('BULLET_LIBPATH', 'Library path where the BULLET library is located.'), - ('BULLET_LIBRARY', 'BULLET library name'), - ('OPENAL_INCLUDE', 'Include directory for OpenAL header files.'), - ('OPENAL_LIBPATH', 'Library path where the OpenAL library is located.'), - ('OPENAL_LIBRARY', 'OpenAL library name.'), - ('FTGL_INCLUDE', 'Include directory for ftgl header files.'), - ('FTGL_LIBPATH', 'Library path where the ftgl library is located.'), - ('FTGL_LIBRARY', 'ftgl library name.'), - ('FREETYPE_INCLUDE', 'Include directory for freetype2 header files.'), - ('FREETYPE_LIBPATH', 'Library path where the freetype2 library is located.'), - ('FREETYPE_LIBRARY', 'Freetype2 library name.'), - ('GETTEXT_INCLUDE', 'Include directory for gettext header files.'), - ('GETTEXT_LIBPATH', 'Library path where the gettext library is located.'), - ('GETTEXT_LIBRARY', 'gettext library name.'), - ('DEFINES', 'Extra Preprocessor defines.'), - ('CCFLAGS', 'Extra C Compiler flags.'), - ('CXXFLAGS','Extra C++ Compiler flags.'), - ('LDFLAGS', 'Extra Linker flags.') - ) -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(ENV = os.environ) - -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 # - -if user_options_dict['BUILD_GAMEENGINE'] == 1: - defines += ['GAMEBLENDER=1'] - defines += ['USE_BULLET'] - if user_options_dict['USE_PHYSICS'] == 'ode': - defines += ['USE_ODE'] - else: - defines += ['USE_SUMO_SOLID'] + print B.bc.FAIL + configfile + " doesn't exist" + B.bc.ENDC + +if crossbuild and env['PLATFORM'] != 'win32': + print B.bc.HEADER+"Preparing for crossbuild"+B.bc.ENDC + env.Tool('crossmingw', ['tools']) + # todo: determine proper libs/includes etc. + # Needed for gui programs, console programs should do without it + env.Append(LINKFLAGS=['-mwindows']) + +# first read platform config. B.arguments will override +optfiles = [configfile] +if os.path.exists('user-config.py'): + print B.bc.OKGREEN + "Using config file: " + B.bc.ENDC + 'user-config.py' + optfiles += ['user-config.py'] else: - defines += ['GAMEBLENDER=0'] - -if user_options_dict['BUILD_BINARY'] == 'release': - cflags = extra_flags + release_flags + warn_flags - defines += ['NDEBUG'] + print B.bc.WARNING + 'user-config.py' + " not found, no user overrides" + B.bc.ENDC + +opts = btools.read_opts(optfiles, B.arguments) +opts.Update(env) + +# check target for blenderplayer. Set WITH_BF_PLAYER if found on cmdline +if 'blenderplayer' in B.targets: + env['WITH_BF_PLAYER'] = True + +# lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir +#B.root_build_dir = B.arguments.get('BF_BUILDDIR', '..'+os.sep+'build'+os.sep+platform+os.sep) +B.root_build_dir = env['BF_BUILDDIR'] +env['BUILDDIR'] = B.root_build_dir +if not B.root_build_dir[-1]==os.sep: + B.root_build_dir += os.sep + +# 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: + do_clean = True + +if not quickie and do_clean: + print B.bc.HEADER+'Cleaning...'+B.bc.ENDC + dirs = os.listdir(B.root_build_dir) + for dir in dirs: + if os.path.isdir(B.root_build_dir + dir) == 1: + print "clean dir %s"%(B.root_build_dir+dir) + shutil.rmtree(B.root_build_dir+dir) + print B.bc.OKGREEN+'...done'+B.bc.ENDC + Exit() + +if not os.path.isdir ( B.root_build_dir): + 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' ) + +Help(opts.GenerateHelpText(env)) + +# default is new quieter output, but if you need to see the +# commands, do 'scons BF_QUIET=0' +bf_quietoutput = B.arguments.get('BF_QUIET', '1') +if bf_quietoutput=='1': + B.set_quiet_output(env) else: - cflags = extra_flags + debug_flags + warn_flags - if sys.platform == 'win32': - 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'] - -user_options_dict['PLATFORM_LINKFLAGS'] = platform_linkflags - -if user_options_dict['USE_FLUIDSIM'] == 0: # NT test new - use_fluidsim='false'; - -#----------------------------------------------------------------------------- -# Generic library generation environment. This one is the basis for each -# library. -#----------------------------------------------------------------------------- -library_env = env.Copy () -library_env.Replace (CC = user_options_dict['TARGET_CC']) -library_env.Replace (CXX = user_options_dict['TARGET_CXX']) -library_env.Replace (PATH = user_options_dict['PATH']) -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 (bs_globals.root_build_dir+'scons-signatures') - -#----------------------------------------------------------------------------- -# Settings to be exported to other SConscript files -#----------------------------------------------------------------------------- - -if bs_globals.enable_clean==0: # only read SConscripts when not cleaning, this to cut overhead - Export ('cflags') - Export ('defines') - Export ('window_system') - Export ('extra_includes') - Export ('user_options_dict') - Export ('library_env') - Export ('sdl_env') - Export ('use_fluidsim') # NT test - - 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 = (['#'+bs_globals.root_build_dir+'/lib']) - - link_env = library_env.Copy () - link_env.Append (LIBPATH=libpath) - -def buildinfo(env, build_type): - """ - Generate a buildinfo object - """ - build_date = time.strftime ("%Y-%m-%d") - build_time = time.strftime ("%H:%M:%S") - obj = [] - if user_options_dict['USE_BUILDINFO'] == 1: - if sys.platform=='win32': - build_info_file = open("source/creator/winbuildinfo.h", 'w') - build_info_file.write("char *build_date=\"%s\";\n"%build_date) - build_info_file.write("char *build_time=\"%s\";\n"%build_time) - build_info_file.write("char *build_platform=\"win32\";\n") - build_info_file.write("char *build_type=\"dynamic\";\n") - build_info_file.close() - env.Append (CPPDEFINES = ['NAN_BUILDINFO', 'BUILD_DATE']) - else: - env.Append (CPPDEFINES = ['BUILD_TIME=\'"%s"\''%(build_time), - 'BUILD_DATE=\'"%s"\''%(build_date), - 'BUILD_TYPE=\'"dynamic"\'', - 'NAN_BUILDINFO', - 'BUILD_PLATFORM=\'"%s"\''%(sys.platform)]) - 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 - -if bs_globals.enable_clean == 0: - if user_options_dict['BUILD_BLENDER_DYNAMIC'] == 1: - dy_blender = link_env.Copy () - if sys.platform=='win32': - 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']) - d_obj = buildinfo(dy_blender, "dynamic") - if sys.platform == 'win32': - dy_blender.Program (target='blender', - source=d_obj + ['source/icons/winblender.res']) - else: - if sys.platform == 'cygwin': - dy_blender.Replace (CC='g++') - dy_blender.Program (target='blender', source=d_obj) - - if user_options_dict['BUILD_BLENDER_STATIC'] == 1: - st_blender = link_env.Copy () - if sys.platform=='win32': - 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. - st_blender.Replace(LINKCOM="$LINK -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS") - s_obj = buildinfo(st_blender, "static") - st_blender.Append (LINKFLAGS=user_options_dict['OPENGL_STATIC']) - st_blender.Append (CPPPATH=user_options_dict['OPENGL_INCLUDE']) - st_blender.Prepend (LIBPATH=['/usr/lib/opengl/xfree/lib']) - st_blender.Program (target='blenderstatic', source=s_obj) - - if sys.platform=='win32': - if user_options_dict['BUILD_BINARY']=='debug': - browser = Environment(ENV = os.environ) - browser_tmp = bs_globals.root_build_dir+'bscmake.tmp' - browser.Command ('blender.bsc', 'blender$PROGSUFFIX', - ['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() - 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']) - d_obj = buildinfo(player_blender, "player") - if sys.platform == 'win32': - player_blender.Program (target='blenderplayer', - source=d_obj + ['source/icons/winblender.res']) - else: - if sys.platform == 'cygwin': - player_blender.Replace (CC='g++') - player_blender.Program (target='blenderplayer', source=d_obj) - if sys.platform=='win32': - if user_options_dict['BUILD_BINARY']=='debug': - browser = Environment(ENV = os.environ) - browser_tmp = bs_globals.root_build_dir+'bscmake.tmp' - browser.Command ('blenderplayer.bsc', 'blenderplayer$PROGSUFFIX', - ['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", 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", bs_clean.DoClean(bs_globals.root_build_dir)) - Default("clean") - -if bs_globals.enable_clean == 0: # only set up dependencies when not cleaning - if sys.platform == 'darwin': - Default("release") - else: - Default("default") + if toolset=='msvc': + B.msvc_hack(env) + +print B.bc.HEADER+'Building in '+B.bc.ENDC+B.root_build_dir +env.SConsignFile(B.root_build_dir+'scons-signatures') +B.init_lib_dict() + +##### END SETUP ########## + +Export('env') +#Export('root_build_dir') # this one is still needed for makesdna +##TODO: improve makesdna usage + +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') +BuildDir(B.root_build_dir+'/source', 'source', duplicate=0) +SConscript(B.root_build_dir+'/source/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: + if not tp == 'player' and not tp == 'player2': + mainlist += B.create_blender_liblist(env, tp) + +if B.arguments.get('BF_PRIORITYLIST', '0')=='1': + B.propose_priorities() + +dobj = B.buildinfo(env, "dynamic") +thestatlibs, thelibincs = B.setup_staticlibs(env) +thesyslibs = B.setup_syslibs(env) + +env.BlenderProg(B.root_build_dir, "blender", dobj + mainlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs) +if env['WITH_BF_PLAYER']: + playerlist = B.create_blender_liblist(env, 'player') + playerlist += B.create_blender_liblist(env, 'core') + playerlist += B.create_blender_liblist(env, 'common') + playerlist += B.create_blender_liblist(env, 'intern') + playerlist += B.create_blender_liblist(env, 'international') + playerlist += B.create_blender_liblist(env, 'game') + playerlist += B.create_blender_liblist(env, 'game2') + playerlist += B.create_blender_liblist(env, 'player2') + env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs) + +##### Now define some targets + + +#------------ INSTALL + +blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list) + +#-- .blender +dotblendlist = [] +dottargetlist = [] +for dp, dn, df in os.walk('bin/.blender'): + dn.remove('CVS') + for f in df: + dotblendlist.append(dp+os.sep+f) + dottargetlist.append(env['BF_INSTALLDIR']+dp[3:]+os.sep+f) + +dotblenderinstall = [] +for targetdir,srcfile in zip(dottargetlist, dotblendlist): + td, tf = os.path.split(targetdir) + dotblenderinstall.append(env.Install(dir=td, source=srcfile)) + +#-- .blender/scripts +scriptlist = glob.glob('release/scripts/*.py') +scriptinstall = env.Install(dir=env['BF_INSTALLDIR']+'/.blender/scripts', source=scriptlist) + +#-- plugins +pluglist = [] +plugtargetlist = [] +for tp, tn, tf in os.walk('release/plugins'): + tn.remove('CVS') + for f in tf: + pluglist.append(tp+os.sep+f) + plugtargetlist.append(env['BF_INSTALLDIR']+tp[7:]+os.sep+f) + +plugininstall = [] +for targetdir,srcfile in zip(plugtargetlist, pluglist): + td, tf = os.path.split(targetdir) + plugininstall.append(env.Install(dir=td, source=srcfile)) + +textlist = [] +texttargetlist = [] +for tp, tn, tf in os.walk('release/text'): + tn.remove('CVS') + for f in tf: + textlist.append(tp+os.sep+f) + +textinstall = env.Install(dir=env['BF_INSTALLDIR'], source=textlist) + +allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall] + +if sys.platform=='win32': + # TODO: gather all needed dlls from lib/windows for inclusion in install + windlls = [] + allinstall += windlls + +installtarget = env.Alias('install', [allinstall]) +bininstalltarget = env.Alias('install-bin', blenderinstall) + +if env['WITH_BF_PLAYER']: + blenderplayer = env.Alias('blenderplayer', B.program_list) +Default(B.program_list) +Default(installtarget) + +#------------ RELEASE +# TODO: zipup the installation + +#------------ BLENDERPLAYER +# TODO: build stubs and link into blenderplayer + +#------------ EPYDOC +# TODO: run epydoc - if sys.platform == 'win32': - if user_options_dict['BUILD_BLENDER_PLAYER'] == 1: - env.Depends(wininst_target, playername) - env.Depends(wininst_target, appname) - - if user_options_dict['BUILD_BLENDER_PLAYER'] == 1: - env.Depends(release_target, playername) - 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) |