# Copyright 2015 Google Inc. 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.

licenses(["notice"])  # Apache License 2.0

exports_files(["LICENSE"])

J2_DIR = "j2objc-0.9.8.1/"

package(
    default_visibility = ["//visibility:public"],
)

java_import(
    name = "annotations",
    jars = [J2_DIR + "lib/j2objc_annotations.jar"],
)

java_import(
    name = "j2objc",
    jars = [J2_DIR + "lib/j2objc.jar"],
    exports = [":annotations"],
)

filegroup(
    name = "jre_emul_headers",
    #srcs = glob([J2_DIR + "include/IOSClass.h"]),
    srcs = [J2_DIR + "include/IOSClass.h"],
)

objc_import(
    name = "jre_emul_archive",
    hdrs = glob([J2_DIR + "include/**"]),
    includes = [J2_DIR + "include"],
    archives = [J2_DIR + "lib/libjre_emul.a"],
)
