# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

visibility = ["//sky/*"]

component("wtf") {
  sources = [
    "AddressSpaceRandomization.cpp",
    "AddressSpaceRandomization.h",
    "Alignment.h",
    "ArrayBuffer.cpp",
    "ArrayBuffer.h",
    "ArrayBufferBuilder.cpp",
    "ArrayBufferBuilder.h",
    "ArrayBufferContents.cpp",
    "ArrayBufferContents.h",
    "ArrayBufferDeallocationObserver.h",
    "ArrayBufferView.cpp",
    "ArrayBufferView.h",
    "ArrayPiece.cpp",
    "ArrayPiece.h",
    "ASCIICType.h",
    "asm/SaturatedArithmeticARM.h",
    "Assertions.cpp",
    "Assertions.h",
    "Atomics.h",
    "BitArray.h",
    "BitVector.cpp",
    "BitVector.h",
    "BitwiseOperations.h",
    "BloomFilter.h",
    "ByteOrder.h",
    "ByteSwap.h",
    "CheckedArithmetic.h",
    "Compiler.h",
    "Complex.h",
    "CPU.h",
    "CryptographicallyRandomNumber.cpp",
    "CryptographicallyRandomNumber.h",
    "CurrentTime.cpp",
    "CurrentTime.h",
    "DataLog.cpp",
    "DataLog.h",
    "DateMath.cpp",
    "DateMath.h",
    "DefaultAllocator.cpp",
    "DefaultAllocator.h",
    "Deque.h",
    "DoubleBufferedDeque.h",
    "DoublyLinkedList.h",
    "dtoa.cpp",
    "dtoa.h",
    "dtoa/bignum-dtoa.cc",
    "dtoa/bignum-dtoa.h",
    "dtoa/bignum.cc",
    "dtoa/bignum.h",
    "dtoa/cached-powers.cc",
    "dtoa/cached-powers.h",
    "dtoa/diy-fp.cc",
    "dtoa/diy-fp.h",
    "dtoa/double-conversion.cc",
    "dtoa/double-conversion.h",
    "dtoa/double.h",
    "dtoa/fast-dtoa.cc",
    "dtoa/fast-dtoa.h",
    "dtoa/fixed-dtoa.cc",
    "dtoa/fixed-dtoa.h",
    "dtoa/strtod.cc",
    "dtoa/strtod.h",
    "dtoa/utils.h",
    "DynamicAnnotations.cpp",
    "DynamicAnnotations.h",
    "EnumClass.h",
    "FastAllocBase.h",
    "FastMalloc.cpp",
    "FastMalloc.h",
    "FilePrintStream.cpp",
    "FilePrintStream.h",
    "Float32Array.h",
    "Float64Array.h",
    "Forward.h",
    "GetPtr.h",
    "HashCountedSet.h",
    "HashFunctions.h",
    "HashIterators.h",
    "HashMap.h",
    "HashSet.h",
    "HashTable.cpp",
    "HashTable.h",
    "HashTableDeletedValueType.h",
    "HashTraits.h",
    "HexNumber.h",
    "InstanceCounter.cpp",
    "InstanceCounter.h",
    "Int16Array.h",
    "Int32Array.h",
    "Int8Array.h",
    "IntegralTypedArrayBase.h",
    "LeakAnnotations.h",
    "LinkedHashSet.h",
    "LinkedStack.h",
    "ListHashSet.h",
    "Locker.h",
    "MainThread.cpp",
    "MainThread.h",
    "MallocZoneSupport.h",
    "MathExtras.h",
    "MessageQueue.h",
    "Noncopyable.h",
    "NonCopyingSort.h",
    "NotFound.h",
    "NullPtr.h",
    "OwnPtr.h",
    "OwnPtrCommon.h",
    "PageAllocator.cpp",
    "PageAllocator.h",
    "PartitionAlloc.cpp",
    "PartitionAlloc.h",
    "PassOwnPtr.h",
    "PassRefPtr.h",
    "PassTraits.h",
    "PrintStream.cpp",
    "PrintStream.h",
    "ProcessID.h",
    "RawPtr.h",
    "RefCounted.h",
    "RefCountedLeakCounter.cpp",
    "RefCountedLeakCounter.h",
    "RefPtr.h",
    "RefVector.h",
    "SaturatedArithmetic.h",
    "SizeLimits.cpp",
    "SpinLock.h",
    "StaticConstructors.h",
    "StdLibExtras.h",
    "StreamBuffer.h",
    "StringExtras.h",
    "StringHasher.h",
    "TemporaryChange.h",
    "TerminatedArray.h",
    "TerminatedArrayBuilder.h",
    "text/ASCIIFastPath.h",
    "text/AtomicString.cpp",
    "text/AtomicString.h",
    "text/AtomicStringHash.h",
    "text/Base64.cpp",
    "text/Base64.h",
    "text/CString.cpp",
    "text/CString.h",
    "text/IntegerToStringConversion.h",
    "text/StringBuffer.h",
    "text/StringBuilder.cpp",
    "text/StringBuilder.h",
    "text/StringConcatenate.h",
    "text/StringHash.h",
    "text/StringImpl.cpp",
    "text/StringImpl.h",
    "text/StringOperators.h",
    "text/StringStatics.cpp",
    "text/StringStatics.h",
    "text/StringUTF8Adaptor.h",
    "text/StringView.h",
    "text/TextCodec.cpp",
    "text/TextCodec.h",
    "text/TextCodecASCIIFastPath.h",
    "text/TextCodecICU.cpp",
    "text/TextCodecICU.h",
    "text/TextCodecLatin1.cpp",
    "text/TextCodecLatin1.h",
    "text/TextCodecReplacement.cpp",
    "text/TextCodecReplacement.h",
    "text/TextCodecUserDefined.cpp",
    "text/TextCodecUserDefined.h",
    "text/TextCodecUTF16.cpp",
    "text/TextCodecUTF16.h",
    "text/TextCodecUTF8.cpp",
    "text/TextCodecUTF8.h",
    "text/TextEncoding.cpp",
    "text/TextEncoding.h",
    "text/TextEncodingRegistry.cpp",
    "text/TextEncodingRegistry.h",
    "text/TextPosition.cpp",
    "text/TextPosition.h",
    "text/WTFString.cpp",
    "text/WTFString.h",
    "ThreadIdentifierDataPthreads.cpp",
    "ThreadIdentifierDataPthreads.h",
    "Threading.h",
    "ThreadingPrimitives.h",
    "ThreadingPthreads.cpp",
    "ThreadRestrictionVerifier.h",
    "ThreadSafeRefCounted.h",
    "ThreadSpecific.h",
    "TreeNode.h",
    "TriState.h",
    "TypedArrayBase.h",
    "TypeTraits.cpp",
    "TypeTraits.h",
    "Uint16Array.h",
    "Uint32Array.h",
    "Uint8Array.h",
    "Uint8ClampedArray.h",
    "unicode/CharacterNames.h",
    "unicode/Collator.h",
    "unicode/icu/CollatorICU.cpp",
    "unicode/icu/UnicodeIcu.h",
    "unicode/Unicode.h",
    "unicode/UTF8.cpp",
    "unicode/UTF8.h",
    "Vector.h",
    "VectorTraits.h",
    "WeakPtr.h",
    "WTF.cpp",
    "WTF.h",
    "WTFExport.h",
    "WTFThreadData.cpp",
    "WTFThreadData.h",
  ]

  configs += [
    "//sky/engine:config",
    "//sky/engine:non_test_config",
  ]

  defines = [ "WTF_IMPLEMENTATION=1" ]

  direct_dependent_configs = [
    "//sky/engine:features",
  ]

  deps = [
    "//third_party/icu",
  ]

  forward_dependent_configs_from = [ "//third_party/icu" ]

  if (is_android) {
    libs = [ "log" ]
  }
}

test("unittests") {
  output_name = "sky_wtf_unittests"

  sources = [
    "ArrayBufferBuilderTest.cpp",
    "CheckedArithmeticTest.cpp",
    "DequeTest.cpp",
    "DoubleBufferedDequeTest.cpp",
    "HashMapTest.cpp",
    "HashSetTest.cpp",
    "ListHashSetTest.cpp",
    "MathExtrasTest.cpp",
    "PartitionAllocTest.cpp",
    "RefPtrTest.cpp",
    "SaturatedArithmeticTest.cpp",
    "StringExtrasTest.cpp",
    "StringHasherTest.cpp",
    "TemporaryChangeTest.cpp",
    "TreeNodeTest.cpp",
    "VectorTest.cpp",
    "testing/WTFTestHelpersTest.cpp",
    "text/AtomicStringTest.cpp",
    "text/CStringTest.cpp",
    "text/StringBufferTest.cpp",
    "text/StringBuilderTest.cpp",
    "text/StringImplTest.cpp",
    "text/StringOperatorsTest.cpp",
    "text/TextCodecReplacementTest.cpp",
    "text/TextCodecUTF8Test.cpp",
    "text/WTFStringTest.cpp",
    "testing/RunAllTests.cpp",
  ]

  configs += [ "//sky/engine:config", ]

  deps = [
    ":test_support",
    ":wtf",
    "//base",
    "//base/allocator",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

component("test_support") {
  output_name = "wtf_test_support"

  sources = [
    "testing/WTFTestHelpers.cpp",
    "testing/WTFTestHelpers.h",
    "testing/WTFUnitTestHelpersExport.h",
  ]

  defines = [ "WTF_UNITTEST_HELPERS_IMPLEMENTATION=1" ]

  configs += [
    "//sky/engine:config",
    "//sky/engine:non_test_config",
  ]

  deps = [
    ":wtf",
  ]
}
