#!/usr/bin/env python
# encoding: utf-8

APPNAME = 'util'
VERSION = '1.2.0'

def options(ctx):
    gr = ctx.add_option_group('util options')
    gr.add_option('--util-disable-shared', action='store_true', help='Disable build of shared library')
    gr.add_option('--util-enable-objects', action='store_true', help='Enable build of object files')
    gr.add_option('--util-enable-linux', action='store_true', help='Enable Linux specifics')
    gr.add_option('--util-enable-slash', action='store_true', help='Enable slash commands')
    gr.add_option('--util-enable-slash-csp', action='store_true', help='Enable CSP slash commands')

def configure(ctx):
    endianness = ctx.check_endianness()
    ctx.define_cond('SL_UTIL_LITTLE_ENDIAN', endianness == 'little')
    ctx.define_cond('SL_UTIL_BIG_ENDIAN', endianness == 'big')

    ctx.check(header_name='endian.h', mandatory=False, define_name='UTIL_HAVE_ENDIAN_H')

    ctx.env.UTIL_DISABLE_SHARED = ctx.options.util_disable_shared
    ctx.env.UTIL_ENABLE_OBJECTS = ctx.options.util_enable_objects
    ctx.env.UTIL_ENABLE_LINUX = ctx.options.util_enable_linux
    ctx.env.UTIL_ENABLE_SLASH = ctx.options.util_enable_slash

    ctx.env.UTIL_SOURCES = [
        'src/colorprint.c',
        'src/crc32c.c',
        'src/crc16ccitt.c',
        'src/hexdump.c',
        'src/list.c',
        'src/string.c',
        'src/util.c',
    ]

    ctx.env.UTIL_LINUX_SOURCES = [
        'src/linux/timer.c',
    ]

    ctx.env.UTIL_SLASH_SOURCES = [
        'src/cmd/cmd_time.c',
        'src/cmd/cmd_watch.c'
    ]

    ctx.env.UTIL_SLASH_USE = ['slash']
    if ctx.options.util_enable_slash_csp:
        ctx.env.UTIL_SLASH_SOURCES.append('src/cmd/cmd_csp.c')
        ctx.env.UTIL_SLASH_USE.append('csp')

def build(ctx):
    if ctx.env.UTIL_ENABLE_OBJECTS:
        ctx.objects(
            target   = APPNAME,
            source   = ctx.env.UTIL_SOURCES,
            includes = 'include',
            export_includes = 'include')

    if ctx.env.UTIL_ENABLE_LINUX:
        ctx.objects(
            target   = APPNAME + '-linux',
            source   = ctx.env.UTIL_LINUX_SOURCES,
            includes = 'include',
            export_includes = 'include')

    if ctx.env.UTIL_ENABLE_SLASH:
        ctx.objects(
            target   = APPNAME + '-slash',
            source   = ctx.env.UTIL_SLASH_SOURCES,
            includes = 'include',
            export_includes = 'include',
            use      = ctx.env.UTIL_SLASH_USE)

    if not ctx.env.UTIL_DISABLE_SHARED:
        if ctx.env.UTIL_ENABLE_LINUX:
            sources = ctx.env.UTIL_SOURCES + ctx.env.UTIL_LINUX_SOURCES
        else:
            sources = ctx.env.UTIL_SOURCES
        ctx.shlib(
            name         = APPNAME + '-shlib',
            target       = APPNAME,
            source       = sources,
            includes = 'include',
            export_includes = 'include',
            install_path = '${LIBDIR}/satlab/')
