#!/usr/bin/python2.6
#
# Author:  Yee Hsu
# Date:    6/12/2011
#
# Copyright 2010, __ET__ Limited.
# All rights reserved.

import os
import sys
import SCons

# ===================================================================
# Setup Base Environment
# ===================================================================
base_env = Environment() 

# The 'component_setup' tool should be invoked on the base environment of
# all projects. It adds builders like ComponentProgram and ComponentLibrary.
# It also sets up global defaults.
base_env.Tool('component_setup')
base_env.AppendUnique(
    # __ET__SDK
    __ET___SDK = os.environ.get('__ET___SDK', ''),
    
    # APPDATA
    APPDATA = os.environ.get('APPDATA', ''),
    
    # scaleform
    GFXSDK = os.environ.get('GFXSDK','$__ET___SDK/3rdparty/GFx-4.0'),
    GFXSDK_CCFLAGS = [
        '-I$GFXSDK/Include',
        '-I$GFXSDK/Src', 
        '-I$GFXSDK/Src/GFx', 
        '-I$GFXSDK/Src/Kernel',        
        '-I$GFXSDK/Src/Render',    
        '-I$GFXSDK/3rdParty/glext',
    ],
    GFXSDK_CPPPATH = [
        '$GFXSDK/Include',
        '$GFXSDK/Src', 
        '$GFXSDK/Src/GFx', 
        '$GFXSDK/Src/Kernel', 
        '$GFXSDK/Src/Render',
        '$GFXSDK/3rdParty/glext',
    ],
    GFXSDK_LIBS = [
        'zlib', 
        'libjpeg', 
        'libpng',
        'libgfx', 
        'libgfxrender_gl', 
        'libgfxexpat',
        'libAS2',
#        'libAS3',
    ],
    GFXSDK_LIBPATH = [
        '$GFXSDK/3rdParty/jpeg-6b'
    ],

    # boost 1.44.0
    BOOST_HOME = os.environ.get('BOOST_HOME', '$__ET___SDK/3rdparty/Boost'),
    BOOST_CPPPATH = ['$BOOST_HOME/include/boost-1_44'],
    BOOST_LIBPATH = ['$BOOST_HOME/lib'],

    # botan
    BOTAN_HOME = os.environ.get('BOTAN_HOME', '$__ET___SDK/3rdparty/Botan'),
    BOTAN_CPPPATH = ['$BOTAN_HOME/include'],
    BOTAN_LIBPATH = ['$BOTAN_HOME/lib/$ConfigurationName'],
    BOTAN_LIBS = ['botan'],
    
    # devIL
    DEVIL_HOME =  os.environ.get('DEVIL_SDK', '$__ET___SDK/3rdparty/devil'),
    DEVIL_CPPPATH = ['$DEVIL_HOME/include'],
    DEVIL_LIBPATH = ['$DEVIL_HOME/lib'],
    DEVIL_LIBS = ['DevIL', 'ILU', 'ILUT'],

    # expat
    EXPAT_HOME = os.environ.get('EXPAT_HOME', '$__ET___SDK/3rdparty/expat-2.0.1'),
    EXPAT_CPPPATH = ['$EXPAT_HOME/include'],
    EXPAT_LIBPATH = ['$EXPAT_HOME/lib/$ConfigurationName'],
    EXPAT_LIBS = ['expat'],

    # taglib
    TAG_HOME = os.environ.get('TAG_HOME', '$__ET___SDK/3rdparty/taglib-1.7rc1'),
    TAG_CPPPATH = ['$TAG_HOME/include/taglib'],
    TAG_LIBPATH = ['$TAG_HOME/lib/$ConfigurationName'],
    TAG_LIBS = ['tag'],

    # ffmpeg
    FFMPEG_SDK = os.environ.get('FFMPEG_SDK', '$__ET___SDK/3rdparty/ffmpeg'),
    FFMPEG_CCFLAGS = ['-I$FFMPEG_SDK/include'],
    FFMPEG_CPPPATH = ['$FFMPEG_SDK/include'],
    FFMPEG_LIBPATH = ['$FFMPEG_SDK/lib'],
    FFMPEG_LIBS = ['avcodec-52', 'avformat-52', 'avutil-50', 'swscale-0'],
    
    # amplifind libofa
#    AMPLIFIND_ROOT = '$SOURCE_ROOT/libs/libofa',
#    AMPLIFIND_CPPPATH = ['$AMPLIFIND_ROOT/include'],        
#    AMPLIFIND_LIBS = ['ofa', 'fftw3'],    

    # gtest
    GTEST_HOME = os.environ.get('GTEST_HOME', '$__ET___SDK/3rdparty/gtest'),
    GTEST_ROOT = '$GTEST_HOME',
    GTEST_CCFLAGS = ['-I$GTEST_HOME/include'],
    GTEST_CPPPATH = ['$GTEST_HOME/include'],
    GTEST_LIBPATH = ['$GTEST_HOME/lib'],
    GTEST_LIBS = ['gtest'],

    # platinum
    PLATINUM_SDK = os.environ.get('PLATINUM_SDK', '$__ET___SDK/3rdparty/Platinum'),
    PLATINUM_CCFLAGS = [        
        '-I$PLATINUM_SDK/Neptune/Source/Core',
        '-I$PLATINUM_SDK/Platinum/Source/Core',
        '-I$PLATINUM_SDK/Platinum/Source/Devices',
        '-I$PLATINUM_SDK/Platinum/Source/Platinum',
        '-I$PLATINUM_SDK/Platinum/Source/Devices/MediaConnect',
        '-I$PLATINUM_SDK/Platinum/Source/Devices/MediaServer',
    ],
    PLATINUM_CPPPATH = [
        '$PLATINUM_SDK/Neptune/Source/Core',
        '$PLATINUM_SDK/Platinum/Source/Core',
        '$PLATINUM_SDK/Platinum/Source/Devices',
        '$PLATINUM_SDK/Platinum/Source/Platinum',
        '$PLATINUM_SDK/Platinum/Source/Devices/MediaConnect',
        '$PLATINUM_SDK/Platinum/Source/Devices/MediaServer',
    ],
    PLATINUM_LIBPATH = ['$PLATINUM_SDK/lib/$ConfigurationName'],
    PLATINUM_LIBS = ['QUPnP'],

    # sqlite3
    SQLITE3_HOME = os.environ.get('SQLITE3_HOME', '$__ET___SDK/3rdparty/sqlite3'),
    SQLITE3_CCFLAGS = [
        '-I$SQLITE3_HOME/include'
    ],
    SQLITE3_LIBPATH = [
        '$SQLITE3_HOME/lib'
    ],
    SQLITE3_LIBS = ['sqlite3'],
    
    # Magick++
    IMAGEMAGICK_SDK = os.environ.get('IMAGEMAGICK_SDK', '$__ET___SDK/3rdparty/ImageMagick-6.6.5'),
    IMAGEMAGICK_CCFLAGS = ['-I$IMAGEMAGICK_SDK', '-I$IMAGEMAGICK_SDK/Magick++/lib'],
    IMAGEMAGICK_CPPPATH = ['$IMAGEMAGICK_SDK/include/ImageMagick','$IMAGEMAGICK_SDK/include/ImageMagick/Magick++/lib'],
    IMAGEMAGICK_LIBPATH = ['$IMAGEMAGICK_SDK/lib'],
    IMAGEMAGICK_LIBS = ['Magick++'],

    # json-c
    JSONC_HOME = os.environ.get('JSONC_HOME', '$__ET___SDK/3rdparty/json-c-0.2'),
    JSONC_CPPPATH = ['$JSONC_HOME/include'],
    JSONC_LIBPATH = ['$JSONC_HOME/lib/$ConfigurationName'],
    JSONC_LIBS = ['json'],
    
    # mongoose
    MONGOOSE_HOME = os.environ.get('MONGOOSE_HOME', '$__ET___SDK/3rdparty/mongoose-2.11'),
    MONGOOSE_CPPPATH = ['$MONGOOSE_HOME/include'],
    MONGOOSE_LIBPATH = ['$MONGOOSE_HOME/lib/$ConfigurationName'],
    MONGOOSE_LIBS = ['mongoose'],
    
    # libcurl
    LIBCURL_HOME = os.environ.get('LIBCURL_HOME', '$__ET___SDK/3rdparty/libcurl-7.21.2'),
    LIBCURL_CPPPATH = [ '$LIBCURL_HOME/include' ],
    LIBCURL_LIBPATH = [ '$LIBCURL_HOME/lib/$ConfigurationName' ],
    LIBCURL_LIBS = [ 'curl' ],
    
    # curlpp
    CURLPP_HOME = os.environ.get('CURLPP_HOME', '$__ET___SDK/3rdparty/curlpp'),
    CURLPP_CPPPATH = [ '$CURLPP_HOME/include' ],
    CURLPP_LIBPATH = [ '$CURLPP_HOME/lib' ],
    CURLPP_LIBS = [ 'curlpp' ],    

    # libdvdid
    LIBDVDID_HOME = os.environ.get('LIBDVDID_HOME', '$__ET___SDK/3rdparty/libdvdid'),
    LIBDVDID_CPPPATH = ['$LIBDVDID_HOME/include'],
    LIBDVDID_LIBPATH = ['$LIBDVDID_HOME/lib/$ConfigurationName'],
    LIBDVDID_LIBS = ['dvdid'],
    
    # alut
    ALUT_SDK = os.environ.get('ALUT_SDK', '$__ET___SDK/3rdparty/freealut-1.1.0'),
    ALUT_CCFLAGS = ['-I$ALUT_SDK/include'],
    ALUT_CPPPATH = ['$ALUT_SDK/include'],
    ALUT_LIBPATH = ['$ALUT_SDK/lib'],
    ALUT_LIBS = ['alut'],

    # openal
    OPENAL_SDK = os.environ.get('OPENAL_SDK', '$__ET___SDK/3rdparty/OpenAL_1_1'),
    OPENAL_CCFLAGS = ['-I$OPENAL_SDK/include'],
    OPENAL_CPPPATH = ['$OPENAL_SDK/include'],
    OPENAL_LIBPATH = ['$OPENAL_SDK/lib'],
    OPENAL_LIBS = ['OpenAL32'],

    # The list of components common to all platforms (cross/build.scons).
    BUILD_SCONSCRIPTS = [ 
        'src/QPlayer',
        'src/QMediaPlayer',
        'src/SimpleHttpLogServer',
        'src/QCloudManager',
        'src/QLibraryManager',
        'src/QPatternManager',
        'src/QWatchFolder',
        'src/QSocialManager',        
        'src/QSync',
        'src/Common',
        'src/QMediaLibrary',
        'src/Tools'
    ]
)
base_env.Replace(
    __ET___OUTPUT = os.environ.get('__ET___OUTPUT', '$DESTINATION_ROOT'),
    DESTINATION_ROOT = '$__ET___OUTPUT/scons-out$HOST_PLATFORM_SUFFIX',
    SOURCE_ROOT = '$MAIN_DIR',
    STAGING_DIR =  '$__ET___OUTPUT/bin/$BUILD_TYPE'
)

# Note that we use sys.platform here rather than HOST_PLATFORM, since we need
 # different sconsign databases for cygwin vs. win32.
sconsign_dir = base_env.Dir('$DESTINATION_ROOT').abspath
sconsign_filename = '$DESTINATION_ROOT/.sconsign_%s' % sys.platform
sconsign_file = base_env.File(sconsign_filename).abspath
# SConsignFile() doesn't seem to like it if the destination directory
# doesn't already exist, so make sure it exists.
# TODO: Remove once SCons has fixed this bug.
if not os.path.isdir(sconsign_dir):
    os.makedirs(sconsign_dir)
SCons.Script.SConsignFile(sconsign_file)

base_env.AppendUnique(
    # All includes are relative to the main project directory.
    CCFLAGS = [ 
        '-I$__ET___SDK/include',
        '-I$SOURCE_ROOT/sdk/src/QCore',
        '-I$SOURCE_ROOT/sdk/src/QService',
        '-I$SOURCE_ROOT/sdk/src/QNetwork',
        '-I$SOURCE_ROOT/sdk/src/QDownloadManager',
        '-I$SOURCE_ROOT/sdk/src/QFtpManager',        
        '-I$SOURCE_ROOT/sdk/src/QS3Manager',            

        # QCore
        '-I$BOOST_CPPPATH',
        '-I$EXPAT_CPPPATH',
        '-I$JSONC_CPPPATH',

        # QNetwork
        '-I$LIBCURL_CPPPATH',
        '-I$CURLPP_CPPPATH',        

        '-DBOOST_SYSTEM_STATIC_LINK=1',
        '-DBOOST_THREAD_USE_LIB=1',
    ],
    QCORE_LIBPATH = [
        '$BOOST_LIBPATH',
        '$EXPAT_LIBPATH',
        '$JSONC_LIBPATH',
    ],
    QCORE_LIBS =[
        '$BOOST_LIBS',
        '$EXPAT_LIBS',
        '$JSONC_LIBS',
        'QCore',
    ],

    # QNetwork
    QNETWORK_CCFLAGS = [
    ],
    QNETWORK_LIBPATH =[
        '$LIBCURL_LIBPATH',
        '$MONGOOSE_LIBPATH',
    ],
    QNETWORK_LIBS = [
        '$LIBCURL_LIBS',
        '$MONGOOSE_LIBS',
        'QNetwork'
    ],

    # QDownloadManager    
    QDOWNLOADMANAGER_LIBS = [
        'QDownloadManager'
    ],
    
    # QFtpManager    
    QFTPMANAGER_LIBS = [
        'QFtpManager'
    ],    
    
    # QS3Manager
    QS3MANAGER_LIBPATH =[
        '$CURLPP_LIBPATH',    
    ],
    QS3MANAGER_LIBS = [
        '$CURLPP_LIBS',    
        'QS3Manager'
    ],    
    
    # QMediaManager
    QMEDIAMANAGER_CCFLAGS = [
    ],
    QMEDIAMANAGER_LIBPATH = [
        '$FFMPEG_LIBPATH',
        '$TAG_LIBPATH',
        '$LIBDVDID_LIBPATH',
        '$IMAGEMAGICK_LIBPATH',
    ],
    QMEDIAMANAGER_LIBS = [
        '$FFMPEG_LIBS',
        '$TAG_LIBS',
        '$LIBDVDID_LIBS',
        '$IMAGEMAGICK_LIBS',
    ]
)


# -------------------------------------------------------------------
# base_env.Tool('sdl')
# -------------------------------------------------------------------

# ===================================================================
# Setup Windows Environment
# ===================================================================
win_env = base_env.Clone(
    # implicit linking boost libs
    BOOST_LIBS = [],

    # gtest
    GTEST_LIBPATH = ['$GTEST_HOME/msvc/gtest-md/$ConfigurationName'],
    
    # libcurl
    #LIBCURL_HOME = os.environ.get('LIBCURL_HOME', '$__ET___SDK/3rdparty/libcurl-7.19.3-win32-ssl-msvc'),
    #LIBCURL_CPPPATH = [ '$LIBCURL_HOME/include' ],
    #LIBCURL_LIBPATH = [ '$LIBCURL_HOME/lib/$ConfigurationName' ],
    LIBCURL_LIBS = [
        'libcurl',
        '4758cca',
        'gmp',
        'aep',
        'atalla',
        'capi',
        'chil',
        'gdi32',
        'cswift',
        'nuron',
        'libeay32',
        'padlock',        
        'ssleay32',
        'sureware',    
        'ubsec',    
    ],    

    # taglib
    #TAG_LIBS = ['tag'],

    # alut
    #ALUT_SDK = os.environ.get('ALUT_SDK', ''),
    #ALUT_CPPPATH = ['$ALUT_SDK/include'],
    #ALUT_LIBPATH = ['$ALUT_SDK/lib'],
    #ALUT_LIBS = ['alut'],

    # openal
    #OPENAL_SDK = os.environ.get('OPENAL_SDK', '$__ET___SDK/3rdparty/OpenAL_1_1'),
    #OPENAL_CPPPATH = ['$OPENAL_SDK/include'],
    OPENAL_LIBPATH = ['$OPENAL_SDK/libs/Win32'],

    # scaleform
    GFXSDK_LIBPATH = [
        '$GFXSDK/Lib/Win32/Msvc90/$ConfigurationName',
        '$GFXSDK/3rdParty/zlib-1.2.5/Lib/Win32/Msvc90/$ConfigurationName',
        '$GFXSDK/3rdParty/jpeg-6b/lib/Win32/Msvc90/$ConfigurationName',
        '$GFXSDK/3rdParty/libpng/Lib/Win32/Msvc90/$ConfigurationName'
    ],

    # ImageMagick
    IMAGEMAGICK_LIBPATH = [
        '$IMAGEMAGICK_SDK/VisualMagick/lib'
    ],
    IMAGEMAGICK_LIBS = [
        'CORE_RL_Magick++_',
        'CORE_RL_magick_',
        'CORE_RL_bzlib_',
        'CORE_RL_coders_',
        'CORE_RL_filters_',
        'CORE_RL_jbig_',
        'CORE_RL_jp2_',
        'CORE_RL_jpeg_',
        'CORE_RL_lcms_',
        'CORE_RL_libxml_',
        'CORE_RL_png_',
        'CORE_RL_tiff_',
        'CORE_RL_ttf_',
        'CORE_RL_wmf_',
        'CORE_RL_wand_',
        'CORE_RL_xlib_',
        'CORE_RL_zlib_',
        'ole32',
        'oleaut32',
    ],
    
    # AmpliFind
#    AMPLIFIND_LIBPATH = ['$AMPLIFIND_ROOT/win32/lib'],    
#    AMPLIFIND_LIBS = ['libofa', 'libfftw3-3'],    

    QSOCIAL_LIBS = [
        'QSocial'
    ],
    
    QSOCIALMANAGER_LIBS = [
        'QSocialManager'
    ],    

    QWATCHFOLDER_LIBS = [
        'QWatchFolder',
        'JNotify'
    ]
);

win_env.Tool("target_platform_windows")
win_env.AppendUnique(
    # extra windows specifice components
    BUILD_SCONSCRIPTS = [
        'src/QDebugger',
        'src/QWatchFolder/Windows',            
    ],
    
    CPPDEFINES = [    
        'NOMINMAX',
        'WIN32', 
#        'WIN32_LEAN_AND_MEAN',
        '_WINDOWS', 
#        '_CRT_SECURE_NO_WARNINGS',                # disable warning C4996
#        '_SCL_SECURE_NO_WARNINGS',
        'CURL_STATICLIB',
        'ENABLE_PROFILING',
    ],

    # extra flags
    CCFLAGS = [
        '/EHsc',                                # enable c++ exception
        '/wd4251',
        '/wd4996',
        '/wd4068',
    ],
    LINKFLAGS = [
    ],
    #CPPPATH = [],
    #LIBPATH = [],
    
    # extra link libraries
    LIBS = [
        'user32',
        'gdi32',
        'ws2_32',
        'wldap32',
    ],
    QCORE_LIBPATH = [
        '$BOTAN_LIBPATH',
    ],
    QCORE_LIBS = [
        '$BOTAN_LIBS',
    ]
)

# -------------------------------------------------------------------
# Windows Debug Environment
# -------------------------------------------------------------------
win_debug_env = win_env.Clone(
    BUILD_TYPE = 'debug-win',
    BUILD_TYPE_DESCRIPTION = 'Windows Debug Build',
    ConfigurationName = 'Debug',
    STAGING_DIR = '$__ET___OUTPUT/bin/$ConfigurationName',

    # gtest
    GTEST_LIBS = ['gtestd'],

    # soci
    SOCI_LIBS = [
        'libsoci_core-vc100-d-3_0', 
        'libsoci_sqlite3-vc100-d-3_0'
    ],

    # imagemagick
    IMAGEMAGICK_LIBS = [
        'CORE_DB_Magick++_',
        'CORE_DB_magick_',
        'CORE_DB_bzlib_',
        'CORE_DB_coders_',
        'CORE_DB_filters_',
        'CORE_DB_jbig_',
        'CORE_DB_jp2_',
        'CORE_DB_jpeg_',
        'CORE_DB_lcms_',
        'CORE_DB_libxml_',
        'CORE_DB_png_',
        'CORE_DB_tiff_',
        'CORE_DB_ttf_',
        'CORE_DB_wmf_',
        'CORE_DB_wand_',
        'CORE_DB_xlib_',
        'CORE_DB_zlib_',
        'ole32',
        'oleaut32',
    ],
    
    LIBCURL_LIBS = [
        'libcurld',
        '4758cca',
        'gmp',
        'aep',
        'atalla',
        'capi',
        'chil',
        'gdi32',
        'cswift',
        'nuron',
        'libeay32',
        'padlock',        
        'ssleay32',
        'sureware',    
        'ubsec',    
    ],    

    TAG_LIBS = ['tagd']
)
win_debug_env.Tool('target_debug')
win_debug_env.Append(
    BUILD_GROUPS = ['default'],
    CPPDEFINES = ['_DEBUG'],
    CCFLAGS = [
        '/MDd',                            # Multi-threaded Debug DLL
        '/RTC1',                        # Performs basic runtime check
        '/GS',                            # Buffer Security Check
        '/Gd',                            # Calling Convention (_cdecl)
        '/nologo',
        '/W3',
        '/WX-',
        '/Od',                            # Optimization (Disabled)
        '/Oy-',                            # Omit Frame Pointers (No)
    ]
)

# -------------------------------------------------------------------
# Windows Release Environment
# -------------------------------------------------------------------
win_release_env = win_env.Clone(
    BUILD_TYPE = 'release-win',
    BUILD_TYPE_DESCRIPTION = 'Windows Release Build',
    ConfigurationName = 'Release',
    STAGING_DIR = '$__ET___OUTPUT/bin/Release',

    # soci
    SOCI_LIBS = [
        'libsoci_core-vc100-3_0', 
        'libsoci_sqlite3-vc100-3_0'
    ],
)
#win_release_env.Replace(
#    LINKFLAGS_OPTIMIZED = []
#)
win_release_env.Tool('target_optimized')
win_release_env.AppendUnique(
    CCFLAGS = [
        '/MD'                            # Multi-threaded DLL
    ]
)

# ===================================================================
# Setup Mac OS X Environment
# ===================================================================
mac_env = base_env.Clone(
    PLATFORM = 'MacOS',

    # APPDATA
    HOME = os.environ.get('HOME', ''),
    APPDATA = '$HOME/Library',

    #
    ALUT_LIBS = [],
    
    # boost
    BOOST_HOME = '$__ET___SDK',
#    BOOST_CCFLAGS = [ '-DBOOST_THREAD_USE_LIB' ],
    BOOST_CPPPATH = [ '$BOOST_HOME/include' ],
    BOOST_LIBPATH = [ '$BOOST_HOME/lib' ],
    BOOST_LIBS = [  
#        File('/Users/tom/Projects/__ET___sdk/lib/libboost_system.a'), 
#        File('/Users/tom/Projects/__ET___sdk/lib/libboost_filesystem.a'), 
#        File('/Users/tom/Projects/__ET___sdk/lib/libboost_thread.a'),
#        File('/Users/tom/Projects/__ET___sdk/lib/libboost_regex.a'),
        'boost_system-mt',
        'boost_filesystem-mt',
        'boost_thread-mt',
        'boost_regex-mt'
    ],

    # botan
    BOTAN_HOME = '$__ET___SDK',
    BOTAN_LIBPATH = ['$BOTAN_HOME/lib'],

    # libcurl
    LIBCURL_HOME = '/usr',
    LIBCURL_CPPPATH = ['$LIBCURL_HOME/include'],
    LIBCURL_LIBPATH = ['$LIBCURL_HOME/lib'],
    LIBCURL_LIBS = ['curl'],

    # scaleform
    GFXSDK_LIBPATH = [
        '$GFXSDK/Lib/$PLATFORM-$ARCH',
        '$GFXSDK/Lib/$PLATFORM-$ARCH/$ConfigurationName',
        '$GFXSDK/3rdParty/jpeg-6b'
    ],

    # taglib
    TAG_HOME = '$__ET___SDK/3rdparty/taglib-1.7',
    TAG_CPPPATH = [
        '$TAG_HOME',
        '$TAG_HOME/include/'
    ],
    TAG_LIBPATH = ['$TAG_HOME/taglib/$ConfigurationName'],
    
    # expat
    EXPAT_LIBPATH = [],
    
    # mongoose
    MONGOOSE_LIBPATH = [],
    
    # dvdid
    LIBDVDID_HOME = '$__ET___SDK',
    
    # json-c
    JSONC_CPPPATH = [ '$__ET___SDK/include' ],
    JSONC_LIBPATH = [ '$__ET___SDK/lib' ],
    
    # sqlite3
    SQLITE3_HOME = [ '$__ET___SDK' ],

    # ImageMagick
    IMAGEMAGICK_SDK = '$__ET___SDK',  #'/opt/local',
    IMAGEMAGICK_CCFLAGS = ['-I$IMAGEMAGICK_SDK/include/ImageMagick'],
    IMAGEMAGICK_CPPPATH = ['$IMAGEMAGICK_SDK/include/ImageMagick'],
    IMAGEMAGICK_LIBPATH = ['$IMAGEMAGICK_SDK/lib'],
    #IMAGEMAGICK_LIBS = ['$IMAGEMAGICK_SDK/lib/libMagick++.a', '$IMAGEMAGICK_SDK/lib/libMagickCore.a', '$IMAGEMAGICK_SDK/lib/libMagickWand.a'],
    IMAGEMAGICK_LIBS = ['MagickWand', 'MagickCore', 'Magick++'],
    
    # UPnP
    PLATINUM_SDK = '$__ET___SDK/3rdparty/Platinum-SRC-0-6-4_690',
    PLATINUM_LIBPATH = [
        '$PLATINUM_SDK/Neptune/Build/Targets/universal-apple-macosx/build/$ConfigurationName',
        '$PLATINUM_SDK/Platinum/Build/Targets/universal-apple-macosx/build/$ConfigurationName'
    ],
    PLATINUM_LIBS = ['Neptune', 'axTLS', 'Platinum'],
    
    # ffmpeg
    FFMPEG_SDK = '$__ET___SDK',
    FFMPEG_LIBS = ['avcodec', 'avformat', 'avutil', 'swscale', 'mp3lame', 'z', 'bz2', 'theora'],
    
    # openal
    OPENAL_LIBS = [],
    
    # gtest
    GTEST_HOME = '$__ET___SDK',
)

mac_env.Tool("target_platform_mac")
mac_env.Tool("__ET__")

mac_env.Append(
  CPPDEFINES = [
    '__MACOSX__',
    'OSX',
    'ENABLE_PROFILING',
    '_FILE_OFFSET_BITS=64',
    '_LARGEFILE64_SOURCE',
  ],
  CCFLAGS = [
    '-fasm-blocks',
    '-Wno-system-headers',
    '-Wall',
    '-fexceptions',
    '-W',
    #'-Wshadow',
    '-Wno-unused',                # to surpress warnings from boost
    '-pthreads',
    '-fvisibility=default',
    '-fpermissive'
  ],
  LINKFLAGS = [
    #'-Wl,-search_paths_first',
    # This flag makes all members of a static library be included in the
    # final exe - that increases the size of the exe, but without it
    # Obj-C categories aren't properly included in the exe.
    # TODO: consider only defining for libs that actually have objc.
    #'-ObjC',
    '-L$__ET___SDK/lib/$ConfigurationName', 
    '-L$__ET___SDK/lib/$ARCHS',
    '-L$__ET___SDK/lib'
  ],
  FRAMEWORKS = [
    'OpenGL',
    'Cocoa',
    'SystemConfiguration',
    'IOKit',
  ],
    
    # extra mac specifice components
    BUILD_SCONSCRIPTS = [
    ],

    # 
    #QCORE_LIBS = [
    #    'charsetdetect',
    #]
)

# Mac Debug Environment
mac_debug_env = mac_env.Clone(
    BUILD_TYPE = 'debug-mac',
    BUILD_TYPE_DESCRIPTION = 'MacOS Debug Build',
    ConfigurationName = 'Debug',
    STAGING_DIR = '$__ET___OUTPUT/bin/$ConfigurationName',
)
mac_debug_env.Tool('target_debug')
mac_debug_env.Append(BUILD_GROUPS = ['default'])

# Mac Release Environment
mac_release_env = mac_env.Clone(
    BUILD_TYPE = 'release-mac',
    BUILD_TYPE_DESCRIPTION = 'MacOS Release Build',
    ConfigurationName = 'Release',
    STAGING_DIR = '$__ET___OUTPUT/bin/$ConfigurationName',
)
mac_release_env.Tool('target_optimized')

# ----------------------------------------------------------
# Build the variants listed above.
# This step will call each of the SConscripts (build.scons) listed,
# once for each variant currently being built.
BuildComponents([
    mac_debug_env,
    mac_release_env,
    win_debug_env,
    win_release_env,
])