#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#

load(":build_defs.bzl", "link")
load("//buildutils:test.bzl", "test")

link(
    name = "mime4j",
    bundle = "@mime4j_core//jar",
    symbolic_name = "org.apache.james.apache-mime4j-core",
)

link(
    name = "axiom-api",
    bundle = "//axiom-api:bundle",
    symbolic_name = "org.apache.ws.commons.axiom.axiom-api",
)

link(
    name = "axiom-impl",
    bundle = "//implementations/axiom-impl:bundle",
    symbolic_name = "org.apache.ws.commons.axiom.axiom-impl",
)

test(
    name = "system-deps-test",
    srcs = [
        "src/test/java/org/apache/axiom/test/SystemDepsTest.java",
    ],
    test_class = "org.apache.axiom.test.SystemDepsTest",
    deps = [
        "//axiom-api",
        "//third_party:pax-exam",
    ],
    runtime_deps = [
        ":axiom-api",
        ":axiom-impl",
        ":mime4j",
    ],
)
