# Copyright 2019 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("//build/config/ios/templates/ios_app_bundle.gni")
import("//build/config/ios/templates/storyboards.gni")

ios_app_bundle("hello") {
  output_name = "Hello"

  info_plist = "resources/Info.plist"

  sources = [
    "AppDelegate.h",
    "AppDelegate.m",
    "SceneDelegate.h",
    "SceneDelegate.m",
    "ViewController.h",
    "ViewController.m",
    "main.m",
  ]

  frameworks = [
    "CoreGraphics.framework",
    "Foundation.framework",
    "UIKit.framework",
  ]

  deps = [
    ":foo",
    ":storyboards",
    "//shared:hello_framework",
    "//shared:hello_framework+bundle",
  ]
}

storyboards("storyboards") {
  sources = [
    "resources/LaunchScreen.storyboard",
    "resources/Main.storyboard",
  ]
}

source_set("baz") {
  module_name = "Baz"
  sources = [ "Baz.swift" ]
}

source_set("bar") {
  module_name = "Bar"
  sources = [ "Bar.swift" ]
  deps = [ ":baz" ]
}

group("bar_indirect") {
  public_deps = [ ":bar" ]
}

source_set("foo") {
  module_name = "Foo"
  bridge_header = "Foo-Bridging-Header.h"
  sources = [
    "Foo.swift",
    "FooWrapper.swift",
  ]
  deps = [ ":bar_indirect" ]
}
