Import('env', 'x86', 'sysname')

libgalerautils_env = env.Clone()

# Include paths
libgalerautils_env.Append(CPPPATH = Split('''
                                             #
                                          '''))

# C part
libgalerautils_sources = [
    'gu_abort.c',
    'gu_dbug.c',
    'gu_fifo.c',
    'gu_lock_step.c',
    'gu_log.c',
    'gu_mem.c',
    'gu_mmh3.c',
    'gu_spooky.c',
    'gu_crc32c.c',
    'gu_rand.c',
    'gu_mutex.c',
    'gu_hexdump.c',
    'gu_to.c',
    'gu_utils.c',
    'gu_uuid.c',
    'gu_backtrace.c',
    'gu_limits.c',
    'gu_time.c',
    'gu_init.c'
]

libgalerautils_objs = libgalerautils_env.SharedObject(libgalerautils_sources)

crc32c_sources = [ '#/www.evanjones.ca/crc32c.c' ]
crc32c_env = env.Clone()
crc32c_env.Append(CPPPATH = [ '#' ])
crc32c_env.Append(CPPFLAGS = ' -DWITH_GALERA')
crc32c_sources = [ '#/www.evanjones.ca/crc32c.c' ]
crc32c_objs = crc32c_env.SharedObject(crc32c_sources)

if x86:
    crc32c_env.Append(CFLAGS = ' -msse4.2')
    if sysname == 'sunos':
        # Ideally we want to simply strip SSE4.2 flag from the resulting
        # crc32.pic.o
        # (see http://ffmpeg.org/pipermail/ffmpeg-user/2013-March/013977.html)
        # but that requires some serious scons-fu, so we just don't
        # compile hardware support in if host CPU does not have it.
        from subprocess import check_call
        try:
            check_call("isainfo -v | grep sse4.2 >/dev/null 2>&1", shell=True);
        except:
            libgalerautils_env.Append(CPPFLAGS = ' -DCRC32C_NO_HARDWARE')
            crc32c_env.Append(CPPFLAGS = ' -DCRC32C_NO_HARDWARE')

libgalerautils_env.StaticLibrary('galerautils',
                                 libgalerautils_objs + crc32c_objs)

env.Append(LIBGALERA_OBJS = libgalerautils_objs + crc32c_objs)
#env.Append(LIBGALERA_OBJS = libgalerautils_env.SharedObject(
#           libgalerautils_sources))
#env.Append(LIBGALERA_OBJS = crc32c_objs)

libgalerautilsxx_env = env.Clone()

# Include paths
libgalerautilsxx_env.Append(CPPPATH = Split('''
                                               #
                                               #/common
                                            '''))

# disable old style cast warnings
libgalerautilsxx_env.Append(CXXFLAGS = ' -Wno-old-style-cast')

# C++ part
libgalerautilsxx_sources = [
    'gu_vlq.cpp',
    'gu_datetime.cpp',
    'gu_exception.cpp',
    'gu_logger.cpp',
    'gu_prodcons.cpp',
    'gu_regex.cpp',
    'gu_string_utils.cpp',
    'gu_uri.cpp',
    'gu_buffer.cpp',
    'gu_utils++.cpp',
    'gu_config.cpp',
    'gu_fdesc.cpp',
    'gu_mmap.cpp',
    'gu_alloc.cpp',
    'gu_rset.cpp',
    'gu_resolver.cpp',
    'gu_histogram.cpp',
    'gu_stats.cpp',
    'gu_asio.cpp',
    'gu_debug_sync.cpp',
    'gu_thread.cpp'
]

#libgalerautilsxx_objs  = libgalerautilsxx_env.Object(
#                         libgalerautilsxx_sources)

libgalerautilsxx_sobjs = libgalerautilsxx_env.SharedObject(
                         libgalerautilsxx_sources)

#hexdump_obj  = libgalerautilsxx_env.Object('gu_hexdump++','gu_hexdump.cpp')
hexdump_sobj = libgalerautilsxx_env.SharedObject('gu_hexdump++','gu_hexdump.cpp')

#libgalerautilsxx_objs  += hexdump_obj
libgalerautilsxx_sobjs += hexdump_sobj

#if '-DGALERA_USE_GU_NETWORK' in libgalerautils_env['CPPFLAGS']:
#    libgalerautilsxx_sources = [libgalerautilsxx_sources,
#                                'gu_resolver.cpp']

libgalerautilsxx_env.StaticLibrary('galerautils++',
                                   libgalerautilsxx_sobjs)

env.Append(LIBGALERA_OBJS = libgalerautilsxx_sobjs)
