import os

#version info of the library, we use 5 chars from the git hash
revision = os.popen('git describe --abbrev=5 --dirty --always').read()[:-1]

version_info =  {
    'version_major':  1 ,
    'version_minor':  0 ,
    'version_patch':  0 ,
    'version_revision': revision,
}

AddOption('--build_type', 
            dest = 'build_type',
            type = 'string',
            nargs = 1,
            action='store',
            default='debug',
            metavar='TYPE',
            help = 'debug|release - Build a Debug (default) or Release variant'
)
AddOption('--prefix',
            dest='prefix',
            type='string',
            nargs=1,
            action='store',
            metavar='DIR',
            default='/usr',
            help='installation prefix'
)

AddOption('--test_xml',
            dest='test_xml',
            action='store_true',
            help='Create a result.xml when running the testsuite'
)


build_type = GetOption('build_type')
test_xml = GetOption('test_xml')
prefix = GetOption('prefix')
if not (build_type in ['debug', 'release']):
    print "Error: expected 'debug' or 'release', found: " + build_type
    Exit(1)

def InstallPerm(env, dest, files, perm):
    obj = env.Install(dest, files)
    for i in obj:
        env.AddPostAction(i, Chmod(str(i), perm))
    return dest


env = Environment(tools = ['default', 'textfile'])
env.AddMethod(InstallPerm)
Export('env', 'build_type', 'prefix', 'version_info', 'test_xml')

env.Append(CFLAGS = ['-std=gnu99','-Wall', '-Wextra', '-Wundef', '-Wcast-qual','-Wshadow' ,'-Wcast-align','-pipe', '-ggdb', '-pthread'])
env.Append(LINKFLAGS = ['-O2', '-pthread'])
env.Append(CPPDEFINES = ['_FILE_OFFSET_BITS=64'])
env.Append(CPPPATH = ['#include'])

if build_type == 'release':
    env.Append(CFLAGS = ['-O2'])

    #this will turn off assert()
    env.Append(CPPDEFINES = ['NDEBUG'])

elif build_type == 'debug':
    env.Append(CPPDEFINES = ['DEBUG'])

#put all .sconsign files in one place
env.SConsignFile()

subdirs = [
'src',
'include',
'test',
]

for subdir in subdirs:
    SConscript(subdir + '/SConscript', variant_dir='#build/' + subdir, src_dir='#'+subdir, duplicate=0)

env.Default('src')
