# -*- 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/.

# Build mozglue as a shared lib on Windows, OSX and Android.
# If this is ever changed, update MOZ_SHARED_MOZGLUE in browser/installer/Makefile.in
if CONFIG['OS_TARGET'] in ('WINNT', 'Darwin', 'Android'):
    SharedLibrary('mozglue')
else:
    Library('mozglue')

if not CONFIG['MOZ_CRT']:
    SDK_LIBRARY = True

if CONFIG['OS_TARGET'] == 'Android':
    SOURCES += [
        'BionicGlue.cpp',
    ]

if CONFIG['MOZ_ASAN']:
    SOURCES += [
        'AsanOptions.cpp',
    ]

if CONFIG['OS_TARGET'] == 'WINNT':
    DEFFILE = 'mozglue.def'
    # We'll break the DLL blocklist if we immediately load user32.dll
    DELAYLOAD_DLLS += [
        'user32.dll',
    ]

if not CONFIG['JS_STANDALONE']:

    if CONFIG['MOZ_MEMORY'] and (CONFIG['MOZ_NATIVE_JEMALLOC'] or FORCE_SHARED_LIB):
        pass
        # TODO: SHARED_LIBRARY_LIBS go here
    else:
        # Temporary, until bug 662814 lands
        NO_VISIBILITY_FLAGS = True
        SOURCES += [
            'dummy.cpp',
        ]

    if CONFIG['OS_TARGET'] == 'WINNT':
        SOURCES += [
            'WindowsDllBlocklist.cpp',
        ]
        DISABLE_STL_WRAPPING = True
        OS_LIBS += [
            'version',
        ]

    if CONFIG['MOZ_NUWA_PROCESS']:
        EXPORTS.ipc += [
            'Nuwa.h',
        ]
        SOURCES += [
            'Nuwa.cpp',
        ]

    EXPORTS.mozilla += [
        'arm.h',
        'SSE.h',
        'WindowsDllBlocklist.h',
    ]

    if CONFIG['CPU_ARCH'].startswith('x86'):
        SOURCES += [
            'SSE.cpp',
        ]

    if CONFIG['CPU_ARCH'] == 'arm':
        SOURCES += [
            'arm.cpp',
        ]

    if CONFIG['MOZ_LINKER']:
        USE_LIBS += [
            'zlib',
        ]

    if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
        SOURCES += [
            'cpuacct.c',
        ]

USE_LIBS += [
    'mfbt',
]

DEFINES['IMPL_MFBT'] = True

LDFLAGS += CONFIG['MOZ_GLUE_WRAP_LDFLAGS']

if CONFIG['OS_TARGET'] == 'Darwin':
    # On OSX 10.10.3, a dead lock happens in some cases involving dynamic
    # symbol resolution for symbols that jemalloc itself uses. While it
    # might be possible to find a way to avoid all such symbol resolutions,
    # it's currently not possible because at the very least there's a call
    # to pthread_self from tsd_init_check_recursion, which is necessary
    # because somehow clang doesn't want to accept the __thread keyword
    # for TLS.
    LDFLAGS += ['-Wl,-bind_at_load']

DIST_INSTALL = True

if CONFIG['GNU_CXX']:
    CXXFLAGS += ['-Wshadow']
