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

DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@

include $(DEPTH)/config/autoconf.mk

STL_FLAGS =

CPP_UNIT_TESTS = \
  TestAtomics.cpp \
  TestBloomFilter.cpp \
  TestCasting.cpp \
  TestCheckedInt.cpp \
  TestEndian.cpp \
  TestEnumSet.cpp \
  TestSHA1.cpp \
  TestTypeTraits.cpp \
  TestWeakPtr.cpp \
  $(NULL)

# These tests don't work with AddressSanitizer enabled
ifndef MOZ_ASAN
CPP_UNIT_TESTS += \
  TestPoisonArea.cpp \
  $(NULL)
endif

# in order to prevent rules.mk from trying to link to libraries that are
# not available to MFBT, we have to reset these MOZ_GLUE*_LDFLAGS before including it
# and LIBS_ after including it. For WRAP_LDFLAGS, it shouldn't matter.
# See later comments in bug 732875.

MOZ_GLUE_PROGRAM_LDFLAGS=
MOZ_GLUE_LDFLAGS =
WRAP_LDFLAGS=

# Since we link directly with MFBT object files, define IMPL_MFBT
DEFINES += -DIMPL_MFBT

include $(topsrcdir)/config/rules.mk

LIBS= $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt)
