# Copyright 2017 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.

import("//testing/test.gni")

source_set("lib") {
  sources = [
    "shape_detection_service.cc",
    "shape_detection_service.h",
    "text_detection_impl.h",
  ]

  if (is_mac) {
    sources += [
      "barcode_detection_impl_mac.h",
      "barcode_detection_impl_mac.mm",
      "barcode_detection_impl_mac_vision.h",
      "barcode_detection_impl_mac_vision.mm",
      "barcode_detection_impl_mac_vision_api.h",
      "barcode_detection_impl_mac_vision_api.mm",
      "barcode_detection_provider_mac.h",
      "barcode_detection_provider_mac.mm",
      "detection_utils_mac.h",
      "detection_utils_mac.mm",
      "face_detection_impl_mac.h",
      "face_detection_impl_mac.mm",
      "face_detection_impl_mac_vision.h",
      "face_detection_impl_mac_vision.mm",
      "face_detection_provider_mac.h",
      "face_detection_provider_mac.mm",
      "text_detection_impl_mac.h",
      "text_detection_impl_mac.mm",
    ]
    libs = [ "QuartzCore.framework" ]
  } else if (is_win) {
    sources += [
      "barcode_detection_provider_impl.cc",
      "barcode_detection_provider_impl.h",
      "detection_utils_win.cc",
      "detection_utils_win.h",
      "face_detection_impl_win.cc",
      "face_detection_impl_win.h",
      "face_detection_provider_win.cc",
      "face_detection_provider_win.h",
      "text_detection_impl_win.cc",
      "text_detection_impl_win.h",
    ]
  } else {
    sources += [
      "barcode_detection_provider_impl.cc",
      "barcode_detection_provider_impl.h",
      "face_detection_provider_impl.cc",
      "face_detection_provider_impl.h",
      "text_detection_impl.cc",
    ]
  }

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    "//mojo/public/cpp/bindings",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  public_deps = [
    "//base",
    "//media/capture",
    "//services/shape_detection/public/mojom",
  ]

  if (is_android) {
    deps += [ ":shape_detection_jni_headers" ]
  }
}

if (is_android) {
  generate_jni("shape_detection_jni_headers") {
    sources = [
      "android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java",
    ]
  }

  android_library("shape_detection_java") {
    java_files = [
      "android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java",
      "android/java/src/org/chromium/shape_detection/BarcodeDetectionProviderImpl.java",
      "android/java/src/org/chromium/shape_detection/FaceDetectionImpl.java",
      "android/java/src/org/chromium/shape_detection/FaceDetectionImplGmsCore.java",
      "android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java",
      "android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java",
      "android/java/src/org/chromium/shape_detection/BitmapUtils.java",
      "android/java/src/org/chromium/shape_detection/TextDetectionImpl.java",
    ]

    deps = [
      "$google_play_services_package:google_play_services_base_java",
      "$google_play_services_package:google_play_services_basement_java",
      "$google_play_services_package:google_play_services_vision_common_java",
      "$google_play_services_package:google_play_services_vision_java",
      "//base:base_java",
      "//mojo/public/java:base_java",
      "//mojo/public/java:bindings_java",
      "//mojo/public/java:system_java",
      "//mojo/public/java/system:system_impl_java",
      "//services/shape_detection/public/mojom:mojom_java",
      "//skia/public/mojom:mojom_java",
      "//ui/gfx/geometry/mojom:mojom_java",
    ]
  }
}

source_set("tests") {
  testonly = true
  sources = [
    "barcode_detection_impl_mac_unittest.mm",
    "barcode_detection_provider_mac_unittest.mm",
    "face_detection_impl_mac_unittest.mm",
    "face_detection_impl_win_unittest.cc",
    "text_detection_impl_mac_unittest.mm",
    "text_detection_impl_win_unittest.cc",
  ]
  if (is_mac) {
    libs = [
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "QuartzCore.framework",
    ]
  }

  deps = [
    ":lib",
    "//base",
    "//base/test:test_support",
    "//mojo/public/cpp/test_support:test_utils",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx",
    "//ui/gl",
  ]
  data = [
    "//services/test/data/mona_lisa.jpg",
    "//services/test/data/text_detection.png",
    "//services/test/data/the_beatles.jpg",
  ]
}
