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

config("google_toolbox_for_mac_public_config") {
  include_dirs = [
    ".",
    "src",
    "src/AppKit",
    "src/DebugUtils",
    "src/Foundation",
  ]
}

component("google_toolbox_for_mac") {
  sources = [
    "src/GTMDefines.h",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  public_configs = [ ":google_toolbox_for_mac_public_config" ]

  if (!is_ios) {
    sources += [
      "src/AppKit/GTMCarbonEvent.h",
      "src/AppKit/GTMCarbonEvent.m",
      "src/AppKit/GTMUILocalizer.h",
      "src/AppKit/GTMUILocalizer.m",
      "src/AppKit/GTMUILocalizerAndLayoutTweaker.h",
      "src/AppKit/GTMUILocalizerAndLayoutTweaker.m",
      "src/DebugUtils/GTMDebugSelectorValidation.h",
      "src/DebugUtils/GTMTypeCasting.h",
    ]

    libs = [
      "AppKit.framework",
      "Carbon.framework",
      "Cocoa.framework",
      "QuartzCore.framework",
    ]
  } else {  # is_ios
    sources += [
      "src/DebugUtils/GTMMethodCheck.h",
      "src/DebugUtils/GTMMethodCheck.m",
      "src/Foundation/GTMLightweightProxy.h",
      "src/Foundation/GTMLightweightProxy.m",

      # GTMLogger is used by breakpad, which is still used on iOS.
      # GTMLogger and GTMSQLite are used by Phenotype, a dependency of GrowthKit.
      "src/Foundation/GTMLogger.h",
      "src/Foundation/GTMLogger.m",
      "src/Foundation/GTMNSData+zlib.h",
      "src/Foundation/GTMNSData+zlib.m",
      "src/Foundation/GTMNSDictionary+URLArguments.h",
      "src/Foundation/GTMNSDictionary+URLArguments.m",
      "src/Foundation/GTMNSString+URLArguments.h",
      "src/Foundation/GTMNSString+URLArguments.m",
      "src/Foundation/GTMSQLite.h",
      "src/Foundation/GTMSQLite.m",
      "src/Foundation/GTMStringEncoding.h",
      "src/Foundation/GTMStringEncoding.m",
      "src/iPhone/GTMFadeTruncatingLabel.h",
      "src/iPhone/GTMFadeTruncatingLabel.m",
      "src/iPhone/GTMRoundedRectPath.h",
      "src/iPhone/GTMRoundedRectPath.m",
      "src/iPhone/GTMUIImage+Resize.h",
      "src/iPhone/GTMUIImage+Resize.m",
      "src/iPhone/GTMUILocalizer.h",
      "src/iPhone/GTMUILocalizer.m",
    ]

    # TODO(crbug.com/569158): Suppresses warnings that are treated as errors
    # when minimum iOS version support is increased to iOS 9 and up.
    # This should be removed once all deprecation violations have been fixed.
    cflags = [ "-Wno-deprecated-declarations" ]

    libs = [
      "sqlite3",
      "z",
    ]
  }

  if (is_component_build) {
    # GTM is third-party code, so we don't want to add _EXPORT
    # annotations to it, so build it without -fvisibility=hidden
    # (else the interface class symbols will be hidden in a 64bit
    # build). Only do this in a component build, so that the shipping
    # chrome binary doesn't end up with unnecessarily exported
    # symbols.
    configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
    configs += [ "//build/config/gcc:symbol_visibility_default" ]
  }
}
