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

TEST_DIRS += ['tests']

# On win we build two mfbt libs - mfbt linked to crt dlls here and in
# staticruntime we build a statically linked mfbt lib.
if CONFIG['OS_ARCH'] == 'WINNT':
    DIRS += ['staticruntime']

Library('mfbt')

EXPORTS.mozilla = [
    'Alignment.h',
    'AllocPolicy.h',
    'AlreadyAddRefed.h',
    'Array.h',
    'ArrayUtils.h',
    'Assertions.h',
    'Atomics.h',
    'Attributes.h',
    'BinarySearch.h',
    'BloomFilter.h',
    'Casting.h',
    'ChaosMode.h',
    'Char16.h',
    'CheckedInt.h',
    'Compiler.h',
    'Compression.h',
    'DebugOnly.h',
    'decimal/Decimal.h',
    'double-conversion/double-conversion.h',
    'double-conversion/utils.h',
    'Endian.h',
    'EnumeratedArray.h',
    'EnumeratedRange.h',
    'EnumSet.h',
    'FastBernoulliTrial.h',
    'FloatingPoint.h',
    'Function.h',
    'GuardObjects.h',
    'HashFunctions.h',
    'IndexSequence.h',
    'IntegerPrintfMacros.h',
    'IntegerRange.h',
    'IntegerTypeTraits.h',
    'JSONWriter.h',
    'Likely.h',
    'LinkedList.h',
    'MacroArgs.h',
    'MacroForEach.h',
    'MathAlgorithms.h',
    'Maybe.h',
    'MaybeOneOf.h',
    'MemoryChecking.h',
    'MemoryReporting.h',
    'Move.h',
    'NullPtr.h',
    'NumericLimits.h',
    'Opaque.h',
    'Pair.h',
    'PodOperations.h',
    'Poison.h',
    'Range.h',
    'RangedArray.h',
    'RangedPtr.h',
    'ReentrancyGuard.h',
    'RefCounted.h',
    'RefCountType.h',
    'RefPtr.h',
    'ReverseIterator.h',
    'RollingMean.h',
    'Scoped.h',
    'ScopeExit.h',
    'SegmentedVector.h',
    'SHA1.h',
    'SizePrintfMacros.h',
    'Snprintf.h',
    'SplayTree.h',
    'TaggedAnonymousMemory.h',
    'TemplateLib.h',
    'ThreadLocal.h',
    'ToString.h',
    'Tuple.h',
    'TypedEnumBits.h',
    'Types.h',
    'TypeTraits.h',
    'UniquePtr.h',
    'UniquePtrExtensions.h',
    'unused.h',
    'Variant.h',
    'Vector.h',
    'WeakPtr.h',
    'XorShift128PlusRNG.h',
]

if CONFIG['OS_ARCH'] == 'WINNT':
    EXPORTS.mozilla += [
        'WindowsVersion.h',
    ]
elif CONFIG['OS_ARCH'] == 'Linux':
    EXPORTS.mozilla += [
        'LinuxSignal.h',
    ]

include('objs.mozbuild')

UNIFIED_SOURCES += mfbt_src_cppsrcs

DEFINES['IMPL_MFBT'] = True

SOURCES += mfbt_nonunified_src_cppsrcs

DISABLE_STL_WRAPPING = True

# Suppress warnings in third-party LZ4 code.
# TODO: Remove these suppressions after bug 993267 is fixed.

if CONFIG['GNU_CXX']:
    SOURCES['/mfbt/Compression.cpp'].flags += ['-Wno-unused-function']

if CONFIG['_MSC_VER']:
    # Error 4804 is "'>' : unsafe use of type 'bool' in operation"
    SOURCES['/mfbt/Compression.cpp'].flags += ['-wd4804']

if CONFIG['MOZ_NEEDS_LIBATOMIC']:
    OS_LIBS += ['atomic']
