# component2/SConscript
Import('env')
import os
with open(env['PROJECT_TOOL_S']) as f:
    exec(f.read())

if 'CONFIG_LNNG_ENABLED' in os.environ:
    check_component('nng')
    SRCS=[]
    INCLUDE=[]
    PRIVATE_INCLUDE=[]
    REQUIREMENTS=[]
    STATIC_LIB=[]
    DYNAMIC_LIB=[]
    DEFINITIONS=[]
    DEFINITIONS_PRIVATE=['-w']
    LDFLAGS=[]
    LINK_SEARCH_PATH=[]

    COMPONENT_PATH = os.path.join(os.environ['GIT_REPO_PATH'], 'nng')
    INCLUDE.append(os.path.join(COMPONENT_PATH, 'include'))
    PRIVATE_INCLUDE.append(os.path.join(COMPONENT_PATH, 'src'))
    DEFINITIONS_PRIVATE += ['-DNNG_LITTLE_ENDIAN=1', '-DNNG_HIDDEN_VISIBILITY']
    DEFINITIONS_PRIVATE += ['-D_GNU_SOURCE', '-D_POSIX_PTHREAD_SEMANTICS', '-DNNG_USE_EVENTFD', '-D_THREAD_SAFE']
    DEFINITIONS_PRIVATE += ['-DNNG_STATIC_LIB', '-DNNG_ENABLE_STATS']
    DEFINITIONS_PRIVATE += ['-DNNG_HAVE_CLOCK_GETTIME', '-DNNG_HAVE_EPOLL=1', '-DNNG_HAVE_EPOLL_CREATE1=1',
                            '-DNNG_HAVE_FLOCK', '-DNNG_HAVE_GETENTROPY=1', '-DNNG_HAVE_GETRANDOM=1',
                            '-DNNG_HAVE_LANGINFO=1', '-DNNG_HAVE_LIBATOMIC=1',
                            '-DNNG_HAVE_LIBNSL=1', '-DNNG_HAVE_LOCALTIME_R=1', '-DNNG_HAVE_LOCKF=1',
                            '-DNNG_HAVE_MSG_CONTROL=1', '-DNNG_RESOLV_CONCURRENCY=4', '-DNNG_HAVE_PTHREAD_SETNAME_NP=1']

    _SRCS = []
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/*.c'))
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/core/*.c'))
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/*.c'))

    DEFINITIONS_PRIVATE.append('-DNNG_MAX_EXPIRE_THREADS={}'.format(os.environ['CONFIG_NNG_MAX_EXPIRE_THREADS']))
    DEFINITIONS_PRIVATE.append('-DNNG_MAX_POLLER_THREADS={}'.format(os.environ['CONFIG_NNG_MAX_POLLER_THREADS']))
    DEFINITIONS_PRIVATE.append('-DNNG_MAX_TASKQ_THREADS={}'.format(os.environ['CONFIG_NNG_MAX_TASKQ_THREADS']))

    if 'CONFIG_TOOLCHAIN_SYSTEM_UNIX' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_PLATFORM_LINUX', '-DNNG_PLATFORM_POSIX', '-DNNG_USE_EVENTFD', '-DNNG_HAVE_ABSTRACT_SOCKETS']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/platform/posix/*.c'))
    elif 'CONFIG_TOOLCHAIN_SYSTEM_WIN' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_PLATFORM_WINDOWS', '-D_CRT_SECURE_NO_WARNINGS', '-D_CRT_RAND_S', '-D_WIN32_WINNT=0x0600']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/platform/windows/*.c'))

    if 'CONFIG_NNG_HAVE_BUS0' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/bus0/*.c'))
    if 'CONFIG_NNG_HAVE_PAIR0' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/pair0/*.c'))
    if 'CONFIG_NNG_HAVE_PAIR1' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/pair1/*.c'))
    if 'CONFIG_NNG_HAVE_SURVEYOR0' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/survey0/*.c'))
    if 'CONFIG_NNG_HAVE_PUBSUB0' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/pubsub0/*.c'))
    if 'CONFIG_NNG_HAVE_PULLPUSH0' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/pipeline0/*.c'))
    if 'CONFIG_NNG_HAVE_REPREQ0' in os.environ:
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/protocol/reqrep0/*.c'))
    if 'CONFIG_NNG_TRANSPORT_FDC' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_FDC']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/socket/*.c'))
        DEFINITIONS_PRIVATE += ['-DNNG_HAVE_SOCKETPAIR=1']
    if 'CONFIG_NNG_TRANSPORT_INPROC' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_INPROC']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/inproc/*.c'))
    if 'CONFIG_NNG_TRANSPORT_IPC' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_IPC']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/ipc/*.c'))
    if 'CONFIG_NNG_TRANSPORT_TCP' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_TCP']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/tcp/*.c'))
    if 'CONFIG_NNG_TRANSPORT_TLS' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_TLS']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/tls/*.c'))
        if 'CONFIG_TLS_MBEDTLS_ENABLED' in os.environ:
            _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/tls/mbedtls/*.c'))
        if 'CONFIG_TLS_WOLFSSL_ENABLED' in os.environ:
            _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/tls/wolfssl/*.c'))

    if 'CONFIG_NNG_TRANSPORT_UDP' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_UDP']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/udp/*.c'))
    if 'CONFIG_NNG_TRANSPORT_WS' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_TRANSPORT_WS']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/sp/transport/ws/*.c'))
    if 'CONFIG_NNG_SUPP_HTTP' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_SUPP_HTTP']
        _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/http/*.c'))
    if 'CONFIG_NNG_ENABLE_IPV6' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_ENABLE_IPV6', '-DNNG_HAVE_INET6=1']
    if 'CONFIG_NNG_HAVE_BACKTRACE' in os.environ:
        DEFINITIONS_PRIVATE += ['-DNNG_HAVE_BACKTRACE=1']

    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/websocket/*.c'))
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/tls/*.c'))
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/base64/*.c'))
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/sha1/*.c'))
    _SRCS += AGlob(os.path.join(COMPONENT_PATH,'src/supplemental/util/*.c'))

    for src in _SRCS:
        if not str(src).endswith('test.c'):
            SRCS.append(src)

    env['COMPONENTS'].append({'target':os.path.basename(env['component_dir']),
                            'SRCS':SRCS,
                            'INCLUDE':INCLUDE,
                            'PRIVATE_INCLUDE':PRIVATE_INCLUDE,
                            'REQUIREMENTS':REQUIREMENTS,
                            'STATIC_LIB':STATIC_LIB,
                            'DYNAMIC_LIB':DYNAMIC_LIB,
                            'DEFINITIONS':DEFINITIONS,
                            'DEFINITIONS_PRIVATE':DEFINITIONS_PRIVATE,
                            'LDFLAGS':LDFLAGS,
                            'LINK_SEARCH_PATH':LINK_SEARCH_PATH,
                            'REGISTER':'shared' if 'CONFIG_LNNG_DYNAMIC' in os.environ else 'static'
                            })
