env = Environment()

opts = Options('options.cache')
opts.AddOptions(
    BoolOption('dbg',    'Build with debugging enabled', 0),
    BoolOption('opt',    'Build with optimizations', 0),
    BoolOption('distcc', 'Enable compiling with distcc', 0),
    BoolOption('nowarn', 'Disable all warnings', 0),
    BoolOption('warningsAsErrors', 'Treat warnings as errors', 0))

opts.Update(env)
Help(opts.GenerateHelpText(env))
opts.Save('options.cache', env)

if env.get('dbg'):
    env.Append(CCFLAGS=['-g'], CPPDEFINES=['DEBUG', '_DEBUG'])
if env.get('opt'):
    env.Append(CCFLAGS=['-O2'], LINKFLAGS=['-s'], CPPDEFINES=['NDEBUG'])
if env.get('distcc'):
    env['CC']  = ['$(', 'distcc', '$)', env['CC']]
    env['CXX'] = ['$(', 'distcc', '$)', env['CXX']]
if env.get('nowarn'):
    env.Append(CCFLAGS=['-w'])
else:
    if env['CC'] == 'gcc':
        env.Append(CCFLAGS=['-Wall'])
    elif env['CXX'] == 'g++':
        env.Append(CXXFLAGS=['-Wall'])
    if env['CXX'] == 'g++':
        env.Append(CXXFLAGS=['-Wno-non-virtual-dtor'])
if env.get('warningsAsErrors'):
    if env['CC'] == 'gcc':
        env.Append(CCFLAGS=['-Werror'])
    elif env['CXX'] == 'g++':
        env.Append(CXXFLAGS=['-Werror'])

Export('env')
SConscript(dirs=['src/cal3d', 'tools/converter'])
