# Copyright 2016 The Tulsi Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Complex mock BUILD file for aspect testing.

load(":ComplexSingle.bzl", "test_macro")

config_setting(
    name = "config_test_enabled",
    values = {"define": "TEST=1"},
)

load(
    "@build_bazel_rules_apple//apple:ios.bzl",
    "apple_product_type",
    "ios_application",
    "ios_extension",
    "ios_unit_test",
    "ios_ui_test",
)
load(
    "@build_bazel_rules_apple//apple:tvos.bzl",
    "tvos_application",
    "tvos_extension",
)

ios_application(
    name = "Application",
    bundle_id = "example.iosapp",
    entitlements = "Application/entitlements.entitlements",
    extensions = [
        ":TodayExtension",
    ],
    families = [
        "iphone",
        "ipad",
    ],
    infoplists = ["Application/Info.plist"],
    minimum_os_version = "8.0",
    deps = [
        ":ApplicationLibrary",
        ":ApplicationResources",
    ],
)

objc_library(
    name = "ApplicationResources",
    structured_resources = [
        "Application/structured_resources.file1",
        "Application/structured_resources.file2",
    ],
)

objc_library(
    name = "ApplicationLibrary",
    srcs = [
        "Application/srcs/main.m",
        ":SrcGenerator",
    ],
    asset_catalogs = [
        "Application/AssetsOne.xcassets/test_file.ico",
        "Application/AssetsOne.xcassets/another_file.ico",
        "Application/AssetsTwo.xcassets/png_file.png",
    ],
    bundles = [":ObjCBundle"],
    defines = [
        "A=BINARY_DEFINE",
    ],
    includes = [
        "Application/includes/first/include",
        "Application/includes/second/include",
    ],
    non_arc_srcs = [
        "Application/non_arc_srcs/NonARCFile.mm",
    ],
    non_propagated_deps = [
        ":NonPropagatedLibrary",
    ],
    storyboards = [
        "Application/Base.lproj/One.storyboard",
        ":StoryboardGenerator",
    ],
    strings = [
        "Application/Base.lproj/Localizable.strings",
        "Application/Base.lproj/Localized.strings",
        "Application/en.lproj/Localized.strings",
        "Application/en.lproj/EN.strings",
        "Application/es.lproj/Localized.strings",
        "Application/NonLocalized.strings",
    ],
    deps = [
        ":CoreDataResources",
        ":Library",
        ":ObjCFramework",
    ],
)

objc_bundle(
    name = "ObjCBundle",
    bundle_imports = [
        "ObjCBundle.bundle/FileOne.txt",
        "ObjCBundle.bundle/FileTwo",
    ],
)

objc_library(
    name = "CoreDataResources",
    datamodels = glob(["Test.xcdatamodeld/**"]),
)

objc_library(
    name = "Library",
    srcs = [
        "Library/srcs/SrcsHeader.h",
        "Library/srcs/src5.mm",
        ":LibrarySources",
    ],
    hdrs = [
        "Library/hdrs/HdrsHeader.h",
    ],
    copts = ["-DLIBRARY_COPT_DEFINE"],
    defines = [
        "LIBRARY_DEFINES_DEFINE=1",
        "'LIBRARY SECOND DEFINE'=2",
        "LIBRARY_VALUE_WITH_SPACES=\"Value with spaces\"",
    ],
    pch = ":PCHGenerator",
    xibs = ["Library/xib.xib"],
    deps = [
        ":SubLibrary",
        ":SubLibraryWithDefines",
        ":SubLibraryWithDifferentDefines",
    ],
)

objc_library(
    name = "SubLibrary",
    srcs = [
        "SubLibrary/srcs/src.mm",
    ],
    enable_modules = 1,
    pch = "SubLibrary/pch/AnotherPCHFile.pch",
)

objc_library(
    name = "SubLibraryWithDefines",
    srcs = [
        "SubLibraryWithDefines/srcs/src.mm",
    ],
    copts = [
        "-menable-no-nans",
        "-menable-no-infs",
        "-I/SubLibraryWithDefines/local/includes",
        "-Irelative/SubLibraryWithDefines/local/includes",
    ],
    defines = [
        "SubLibraryWithDefines=1",
        "SubLibraryWithDefines_DEFINE=SubLibraryWithDefines",
    ],
    deps = ["SubLibraryWithIdenticalDefines"],
)

objc_library(
    name = "SubLibraryWithIdenticalDefines",
    srcs = [
        "SubLibraryWithIdenticalDefines/srcs/sub_library_with_identical_defines.m",
    ],
    copts = [
        "-menable-no-nans",
        "-menable-no-infs",
        "-I/SubLibraryWithDefines/local/includes",
        "-Irelative/SubLibraryWithDefines/local/includes",
    ],
    defines = [
        "SubLibraryWithDefines=1",
        "SubLibraryWithDefines_DEFINE=SubLibraryWithDefines",
    ],
)

objc_library(
    name = "SubLibraryWithDifferentDefines",
    srcs = [
        "SubLibraryWithDifferentDefines/srcs/src.mm",
    ],
    copts = [
        "-DSubLibraryWithDifferentDefines_LocalDefine",
        "-DSubLibraryWithDifferentDefines_INTEGER_DEFINE=1",
        "-DSubLibraryWithDifferentDefines_STRING_DEFINE=Test",
        "-DSubLibraryWithDifferentDefines_STRING_WITH_SPACES='String with spaces'",
        "-D'SubLibraryWithDifferentDefines Define with spaces'",
        "-D'SubLibraryWithDifferentDefines Define with spaces and value'=1",
    ],
    defines = [
        "SubLibraryWithDifferentDefines=1",
    ],
    includes = ["SubLibraryWithDifferentDefines/includes"],
)

objc_library(
    name = "TestLibrary",
    srcs = select({
        ":config_test_enabled": ["XCTest/srcs/configTestSource.m"],
        "//conditions:default": ["XCTest/srcs/defaultTestSource.m"],
    }),
)

ios_unit_test(
    name = "XCTest",
    minimum_os_version = "8.0",
    test_host = ":Application",
    deps = [
        ":Library",
        ":TestLibrary",
    ],
)

objc_library(
    name = "NonPropagatedLibrary",
    srcs = [
        "NonPropagatedLibrary/srcs/non_propagated.m",
    ],
)

objc_framework(
    name = "ObjCFramework",
    framework_imports = [
        "ObjCFramework/test.framework/file1",
        "ObjCFramework/test.framework/file2.txt",
        "ObjCFramework/test.framework/file3.m",
        "ObjCFramework/test.framework/file4.h",
    ],
)

ios_extension(
    name = "TodayExtension",
    bundle_id = "example.iosapp.todayextension",
    families = [
        "iphone",
        "ipad",
    ],
    infoplists = [
        "TodayExtension/Plist1.plist",
    ],
    minimum_os_version = "8.0",
    deps = [
        ":TodayExtensionLibrary",
        ":TodayExtensionResources",
    ],
)

objc_library(
    name = "TodayExtensionLibrary",
    srcs = [
        "TodayExtension/srcs/today_extension_library.m",
    ],
)

objc_library(
    name = "TodayExtensionResources",
    resources = [
        "TodayExtension/resources/file1",
        "TodayExtension/resources/file2.file",
    ],
)

filegroup(
    name = "LibrarySources",
    srcs = [
        "LibrarySources/srcs/src1.m",
        "LibrarySources/srcs/src2.m",
        "LibrarySources/srcs/src3.m",
        "LibrarySources/srcs/src4.m",
    ],
)

genrule(
    name = "PCHGenerator",
    srcs = ["PCHGenerator/srcs/pch.h"],
    outs = ["PCHGenerator/outs/PCHFile.pch"],
    cmd = "cp $< $@",
)

genrule(
    name = "SrcGenerator",
    srcs = ["SrcGenerator/srcs/input.m"],
    outs = ["SrcGenerator/outs/output.m"],
    cmd = "cp $< $@",
)

genrule(
    name = "StoryboardGenerator",
    srcs = ["StoryboardGenerator/srcs/storyboard_input.file"],
    outs = ["StoryboardGenerator/outs/Two.storyboard"],
    cmd = "cp $< $@",
)

tvos_application(
    name = "tvOSApplication",
    bundle_id = "c.test.tvOSApplication",
    extensions = [":tvOSExtension"],
    infoplists = [
        "tvOSApplication/Info.plist",
    ],
    minimum_os_version = "10.0",
    deps = [":tvOSLibrary"],
)

tvos_extension(
    name = "tvOSExtension",
    bundle_id = "c.test.tvOSExtension",
    infoplists = [
        "tvOSExtension/Info.plist",
    ],
    minimum_os_version = "10.0",
    deps = [":tvOSLibrary"],
)

objc_library(
    name = "tvOSLibrary",
    srcs = ["tvOSLibrary/srcs/src.m"],
    enable_modules = 1,
)
