import platform
import sys

pyver = sys.version_info
if platform.system() == "Windows":
    pyver = '%d%d' % (pyver[0], pyver[1])
else:
    pyver = '%d.%d' % (pyver[0], pyver[1])

env = Environment(CPPPATH=[
        'include',
        '/usr/include/python' + pyver,
        '/usr/include/GL',
        '/usr/include/SDL'],
    LIBPATH=[],
    LIBS = [], CCFLAGS = '-O2')
conf = Configure(env)

if not env.GetOption('clean'):
    
    # Append to CPPPATH and LIBPATH if on windows
    if platform.system() == "Windows":
        if 'msvc' in env['TOOLS']:
            env.Append(CPPPATH = ['c:/python' + pyver + '/include', 'c:/sdl/include', 'c:/glew/include/GL'])
            env.Append(LIBPATH = ['c:/python' + pyver + '/libs', 'c:/sdl/lib', 'c:/glew/lib'])
        else:
            mingwinc = 'c:/mingw/include'
            mingwlib = 'c:/mingw/lib'
            env.Append(CPPPATH = ['c:/python' + pyver + '/include', mingwinc, mingwinc + '/SDL'])
            env.Append(LIBPATH = ['c:/python' + pyver + '/libs', mingwlib, mingwlib + '/SDL'])
            
    # Check for libs and headers
    if conf.CheckLib('m'):
        env.Append(LIBS = ['m']);
    if not (conf.CheckLib('python' + pyver, 'Py_Initialize') and conf.CheckHeader('Python.h')):
        print "The Python " + pyver + " development libraries must be installed"
        exit(1)
    if platform.system() != "Windows":
        if not (conf.CheckLib('X11')):
            print "The X11 development libraries must be installed"
            exit(1)
    if not (conf.CheckLib('SDL', 'SDL_Init') and conf.CheckHeader('SDL.h')):
        print "The SDL development libraries must be installed"
        exit(1)
    else:
        if platform.system() == "Windows":
            env.Append(LIBS = ['SDLmain'])
    if not (conf.CheckLib('GLEW') or conf.CheckLib('glew32', 'glewInit')):
        print "The GLEW must be installed"
        exit(1)
        
    # Add additional libs and set flags
    if platform.system() == "Windows":
        env.Append(LIBS = ['opengl32','glu32','shell32','kernel32','user32'])
        if 'msvc' in env['TOOLS']:
            env.Append(CFLAGS='/O2 /GL /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD')
            env.Append(LINKFLAGS='/OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /NODEFAULTLIB:libcmt.lib /SUBSYSTEM:CONSOLE')
        else:
            env.Append(LINKFLAGS='-mconsole')
    else:
        env.Append(LIBS = ['GL','GLU'])
env=conf.Finish()

# Build application
VariantDir('program_build', 'src', duplicate=0)
env.Program("makehuman", ["program_build/core.c", "program_build/glmodule.c", "program_build/arraybuffer.c", "program_build/main.c"])

# Build module
VariantDir('module_build', 'src', duplicate=0)
moduleEnv = env.Clone(CPPDEFINES = "MAKEHUMAN_AS_MODULE", SHLIBPREFIX = "")
if platform.system() == "Windows":
    moduleEnv["SHLIBSUFFIX"] = ".pyd"
moduleEnv.LoadableModule("mh", ["module_build/core.c", "module_build/glmodule.c", "module_build/arraybuffer.c", "module_build/main.c"])

