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

static_library("java_compiler_info_lib") {
  sources = [
    "java_compiler_info.cc",
    "java_compiler_info.h",
  ]

  public_deps = [
    "//client:compiler_info_lib",
  ]
}

static_library("java_compiler_type_specific") {
  sources = [
    "java_compiler_type_specific.cc",
    "java_compiler_type_specific.h",
  ]

  public_deps = [
    ":jar_parser_lib",
    ":java_compiler_info_builder_lib",
    "//client:compiler_type_specific_lib",
    "//lib:java_specific",
  ]
}

static_library("jarfile_reader_lib") {
  sources = [
    "jarfile_reader.cc",
    "jarfile_reader.h",
  ]

  public_deps = [
    "//lib",
    "//third_party:gtest_prod",
  ]

  public_configs = [ "//client:client_config" ]
}

static_library("jar_parser_lib") {
  sources = [
    "jar_parser.cc",
    "jar_parser.h",
  ]
  deps = [
    "//client:common",
    "//third_party:glog",
    "//third_party:minizip",
  ]

  public_configs = [ "//client:client_config" ]
}

static_library("java_compiler_info_builder_lib") {
  sources = [
    "java_compiler_info_builder.cc",
    "java_compiler_info_builder.h",
  ]
  deps = [
    "//client:common",
    "//client:ioutil_lib",
    "//lib:java_specific",
    "//third_party:glog",
    "//third_party/abseil",
  ]
  public_deps = [
    "//client:compiler_info_lib",
    "//lib",
  ]

  public_configs = [ "//client:client_config" ]
}

executable("jarfile_normalizer") {
  sources = [
    "jarfile_normalizer.cc",
  ]
  configs += [ "//client:client_config" ]
  deps = [
    ":jarfile_reader_lib",
    "//build/config:exe_and_shlib_deps",
    "//client:compiler_proxy_lib",
    "//lib",
    "//third_party:glog",
  ]
}

executable("jar_parser_unittest") {
  testonly = true
  sources = [
    "jar_parser_unittest.cc",
  ]
  deps = [
    ":jar_parser_lib",
    "//base",
    "//build/config:exe_and_shlib_deps",
    "//client:common",
    "//client:goma_test_lib",
    "//client:ioutil_lib",
    "//third_party:glog",
  ]
}

executable("jarfile_reader_unittest") {
  testonly = true
  sources = [
    "jarfile_reader_unittest.cc",
  ]
  deps = [
    "//build/config:exe_and_shlib_deps",
    "//client:compiler_proxy_lib",
    "//client:goma_test_lib",
  ]
}

executable("java_compiler_info_builder_unittest") {
  testonly = true
  sources = [
    "java_compiler_info_builder_unittest.cc",
  ]
  deps = [
    ":java_compiler_info_builder_lib",
    "//build/config:exe_and_shlib_deps",
    "//client:compiler_info_lib",
    "//client:goma_test_lib",
  ]
}
