# 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 = [
    "ASCIICType.h",
    "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",
    "Assertions.cpp",
    "Assertions.h",
    "Atomics.h",
    "BitArray.h",
    "BitVector.cpp",
    "BitVector.h",
    "BitwiseOperations.h",
    "BloomFilter.h",
    "ByteOrder.h",
    "ByteSwap.h",
    "CPU.h",
    "CheckedArithmetic.h",
    "Compiler.h",
    "Complex.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",
    "DynamicAnnotations.cpp",
    "DynamicAnnotations.h",
    "FastAllocBase.h",
    "FastMalloc.cpp",
    "FastMalloc.h",
    "FilePrintStream.cpp",
    "FilePrintStream.h",
    "Float32Array.h",
    "Float64Array.h",
    "Forward.h",
    "Functional.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",
    "LinkedStack.h",
    "ListHashSet.h",
    "Locker.h",
    "MainThread.cpp",
    "MainThread.h",
    "MallocZoneSupport.h",
    "MathExtras.h",
    "MessageQueue.h",
    "NonCopyingSort.h",
    "Noncopyable.h",
    "NotFound.h",
    "NullPtr.cpp",
    "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",
    "RefCounted.h",
    "RefCountedLeakCounter.cpp",
    "RefCountedLeakCounter.h",
    "RefPtr.h",
    "RetainPtr.h",
    "SaturatedArithmetic.h",
    "SizeLimits.cpp",
    "SpinLock.h",
    "StaticConstructors.h",
    "StdLibExtras.h",
    "StringExtras.h",
    "StringHasher.h",
    "TemporaryChange.h",
    "ThreadIdentifierDataPthreads.cpp",
    "ThreadIdentifierDataPthreads.h",
    "ThreadRestrictionVerifier.h",
    "ThreadSafeRefCounted.h",
    "ThreadSpecific.h",
    "Threading.h",
    "ThreadingPrimitives.h",
    "ThreadingPthreads.cpp",
    "TreeNode.h",
    "TypeTraits.cpp",
    "TypeTraits.h",
    "TypedArrayBase.h",
    "Uint16Array.h",
    "Uint32Array.h",
    "Uint8Array.h",
    "Vector.h",
    "VectorTraits.h",
    "WTF.cpp",
    "WTF.h",
    "WTFExport.h",
    "WTFThreadData.cpp",
    "WTFThreadData.h",
    "WeakPtr.h",
    "asm/SaturatedArithmeticARM.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",
    "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/StringUTF8Adaptor.h",
    "text/StringView.h",
    "text/TextCodec.cpp",
    "text/TextCodecASCIIFastPath.h",
    "text/TextCodecICU.cpp",
    "text/TextCodecLatin1.cpp",
    "text/TextCodecReplacement.cpp",
    "text/TextCodecReplacement.h",
    "text/TextCodecUTF16.cpp",
    "text/TextCodecUTF8.cpp",
    "text/TextCodecUTF8.h",
    "text/TextCodecUserDefined.cpp",
    "text/TextEncoding.cpp",
    "text/TextEncodingRegistry.cpp",
    "text/TextPosition.cpp",
    "text/TextPosition.h",
    "text/WTFString.cpp",
    "text/WTFString.h",
    "unicode/CharacterNames.h",
    "unicode/Collator.h",
    "unicode/UTF8.cpp",
    "unicode/UTF8.h",
    "unicode/Unicode.h",
    "unicode/icu/CollatorICU.cpp",
    "unicode/icu/UnicodeIcu.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",
    "FunctionalTest.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",
  ]
}
