# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

EXPORTS += [
    'mozmemory.h',
    'mozmemory_wrap.h',
]

DEFINES['MOZ_MEMORY_IMPL'] = True

if CONFIG['MOZ_REPLACE_MALLOC']:
    EXPORTS += [
        'malloc_decls.h',
        'replace_malloc.h',
        'replace_malloc_bridge.h',
    ]

SOURCES += [
    'jemalloc_config.cpp',
    'mozmemory_wrap.c',
]

if CONFIG['MOZ_JEMALLOC4']:
    SOURCES += [
        'mozjemalloc_compat.c',
    ]
    LOCAL_INCLUDES += ['!../jemalloc/src/include']
    if CONFIG['_MSC_VER']:
        LOCAL_INCLUDES += ['/memory/jemalloc/src/include/msvc_compat']
        if not CONFIG['HAVE_INTTYPES_H']:
            LOCAL_INCLUDES += ['/memory/jemalloc/src/include/msvc_compat/C99']

if CONFIG['MOZ_REPLACE_MALLOC']:
    SOURCES += [
        'replace_malloc.c',
    ]

Library('memory')

if CONFIG['MOZ_JEMALLOC4']:
    if not CONFIG['MOZ_NATIVE_JEMALLOC']:
        USE_LIBS += [
            'jemalloc',
        ]
else:
    USE_LIBS += [
        'mozjemalloc',
    ]

if CONFIG['MOZ_GLUE_IN_PROGRAM']:
    SDK_LIBRARY = True
    DIST_INSTALL = True

# Keep jemalloc separated when mozglue is statically linked
if CONFIG['MOZ_MEMORY'] and (CONFIG['OS_TARGET'] in ('WINNT', 'Darwin', 'Android') or
                             CONFIG['MOZ_NATIVE_JEMALLOC']):
    FINAL_LIBRARY = 'mozglue'

if CONFIG['MOZ_REPLACE_MALLOC'] and CONFIG['OS_TARGET'] == 'Darwin':
    # The zone allocator for OSX needs some jemalloc internal functions
    LOCAL_INCLUDES += ['/memory/jemalloc/src/include']

if CONFIG['GNU_CC']:
    CFLAGS += ['-Wshadow']
