#!/usr/bin/env python
from waflib.extras import autowaf as autowaf
from waflib import Options
import os
import re
import sys

HIDAPI_VERSION = '0.8.0'

# Variables for 'waf dist'
APPNAME = 'hidapi'
VERSION = HIDAPI_VERSION

# Mandatory variables
top = '.'
out = 'build'

def options(opt):
    autowaf.set_options(opt)

def configure(conf):
    if conf.is_defined('USE_EXTERNAL_LIBS'):
        autowaf.check_pkg(conf, 'hidapi-hidraw', uselib_store='HIDAPI', mandatory=False)
    else:
        if conf.env['build_target'] == 'mingw':
            conf.check (compiler='cxx', lib='setupapi', mandatory=True, uselib_store='SETUPAPI')
            conf.define ('HAVE_HIDAPI', 1)
        elif sys.platform == 'darwin':
            conf.define ('HAVE_HIDAPI', 1)
        elif re.search ("linux", sys.platform) != None:
            autowaf.check_pkg(conf, 'libudev', uselib_store='UDEV', mandatory=False)
            if conf.is_defined('HAVE_UDEV'):
                conf.define ('HAVE_HIDAPI', 1)
        else:
            print ("hidapi is not yet available for the given system")

def build(bld):
    if bld.is_defined('USE_EXTERNAL_LIBS'):
        return
    if not bld.is_defined('HAVE_HIDAPI'):
        return

    # Host Library
    obj = bld(features = 'c cstlib')
    autowaf.ensure_visible_symbols (obj, False)
    obj.export_includes    = ['hidapi']
    obj.includes           = ['hidapi']
    obj.name               = 'hidapi'
    obj.target             = 'hidapi'
    obj.vnum               = HIDAPI_VERSION
    obj.install_path       = bld.env['LIBDIR']

    if bld.env['build_target'] == 'mingw':
        obj.source         = 'windows/hid.c'
        obj.linkflags      = [ '-lsetupapi', '-mwindows' ]
        obj.uselib         = 'SETUPAPI'
    else:
        obj.cflags        += [ bld.env['compiler_flags_dict']['pic'] ]
        if sys.platform == 'darwin':
            obj.source     = 'mac/hid.c'
            obj.framework  = [ 'IOKit', 'CoreFoundation' ]
        else:
            obj.source     = 'linux/hid.c'
            if re.search ("linux", sys.platform) != None:
                obj.uselib = 'UDEV'

def shutdown():
    autowaf.shutdown()
