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

# Description:
#
# Tools used by the ant build.

# Google owns the copyright
licenses(["unencumbered"])

package(
    default_visibility = ["//third_party/java_src/gwt:__pkg__"],
)

filegroup(
    name = "ant",
    srcs = glob([
        "build.xml",
        "ant_gwt/**/*",
        "doctool/**/*",
    ]),
)
