# 
# Native File Dialog
#
# Scons build script -- GCC, Clang, Visual Studio
# Does not build test


import os
        

# target arch is build arch -- extend here for OS cross compiling
target_os=str(Platform())

# Corresponds to TARGET_ARCH set to environ.
target_arch = ARGUMENTS.get('target_arch', None)

# visual studio does not import from environment
if target_os != 'win32':
    IMPORT_FROM_ENV =['CC', 'CXX', 'CFLAGS', 'CXXFLAGS', 'ARFLAGS']
else:
    IMPORT_FROM_ENV =[]


debug = int(ARGUMENTS.get( 'debug', 0 ))

nfd_files = ['nfd_common.c']

# Due to a Scons limitation, TARGET_ARCH cannot be appended to an existing environment.
if target_arch != None:
    nfd_env = Environment( TARGET_ARCH=target_arch )
else:
    nfd_env = Environment()

# import specific environment variables from the command line, overriding
# Scons environment defaults
for env_key in IMPORT_FROM_ENV:
    if env_key in os.environ:
        print "Making %s => %s" % ( env_key, os.environ[env_key] )
        nfd_env[env_key] = os.environ[env_key]

# Windows runtime library types
win_rtl = {'debug': '/MDd',     
           'release': '/MD'}   

def set_debug(env):
    if target_os == 'win32':
        env.Append( CCFLAGS=['/Z7',       # obj contains full symbols
                            win_rtl['debug']
                        ])
    else:
        env.Append( CFLAGS=['-g'] )


def set_release(env):
    if target_os == 'win32':
        env.Append( CCFLAGS=[win_rtl['release'],  
                            '/O2'] )
    else:
        env.Append( CFLAGS=['-O3'] )
                    

def set_warnings(env):
    if target_os == 'win32':
        env.Append( CCFLAGS=['/W3'],
                    CPPDEFINES=['_CRT_SECURE_NO_WARNINGS'] )
    else:
        env.Append( CFLAGS=['-Wall', '-pedantic'] )


def get_lib_name(base, is_debug):
    if is_debug:
        return base + '_d'
    else:
        return base


# Cocoa OS X builds - clang
if target_os == 'darwin':
    nfd_files.append('nfd_cocoa.m')
    nfd_env.CC='clang -fcolor-diagnostics'

# Linux GTK+ 3 builds - GCC
elif target_os == 'posix':
    nfd_files.append('nfd_gtk.c')
    nfd_env.ParseConfig( 'pkg-config --cflags gtk+-3.0' )

# Windows builds - Visual Studio
elif target_os == 'win32':
    nfd_files.append('nfd_win.cpp')

if debug:
    set_debug(nfd_env)
else:
    set_release(nfd_env)

set_warnings(nfd_env)

nfd_env.Append( CPPPATH=['.','./include'] )
nfd_env.StaticLibrary( get_lib_name('nfd', debug), nfd_files )
