transstring_src=['TransString.cpp']
LIBS=['']
LIBPATH=['']

import sys

def main():
    std = Environment()
    std.Append(CPPPATH=['.'])

    opts = Options('build_custom.py')
    opts.Add('debug', 'Set to 1 for debug', 0)
    opts.Add('PLATFORM', 'Build platform: cygwin, win32, posix...')
    opts.Update(std)

    '''
    #Should automatically prefer GNU tool under cygwin platform.
    if std['PLATFORM'] == 'cygwin':
	Tool('mingw')(std)
    elif std['PLATFORM'] == 'win32':
	Tool('msvc')(std)
    '''

    cc = std.Dictionary('CXX')
    if cc in ['g++']:
	myenv = do_gcc(std, opts)
    elif cc in ['cl.exe']:
	myenv = do_msvc(std, opts)
    else:
	myenv = std

    TransString = myenv.SharedLibrary(target='transstring', source=transstring_src)
    Default(TransString)

    idl = do_xpidl(myenv)

    localtarget = [TransString] + idl
    src = Alias('src', localtarget)

    Help(opts.GenerateHelpText(myenv))
    return src

def do_gcc(env, opts):
    '''Setup GCC specific environment.'''
    gcc = env
    GCCFLAGS = Split('-fno-rtti -fno-exceptions') 
    debug = ARGUMENTS.get('debug', 0)

    gcc.ParseConfig('pkg-config --cflags --libs mozilla-xpcom')
    gcc.Append(CCFLAGS=GCCFLAGS)
    if debug:
	gcc.Append(CCFLAGS='-g')

    return gcc

def do_msvc(env, opts):
    '''Setup MS Visual C++ environment.'''
    # FIXME: Not tested

    msvc = env

    # We don't want exception and rtti.
    MSVCFLAGS = Split('GR- GX-')
    msvc.Append(CCFLAGS=MSVCFLAGS)

    return msvc

def do_xpidl(env):
    import xpidl
    xpidl.generate(env)
    idl = env.XPCOMInterface(source='iTransString.idl', 
	    XPIDLMODE=['header', 'doc', 'typelib'])
    Default(idl)
    return idl
    
src = main()
Return('src')
