# Copyright (C) 2013 The Android Open Source Project
#
# 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.
#
# This bucklet simplifies creation of Javadocs
#
# Example:
#
# java_doc(
#   name = 'javadoc',
#   title = 'Gitiles API Documentation',
#   pkg = 'com.google.gitiles',
#   paths = ['gitiles-servlet/src/main/java'],
#   srcs = glob([n + '**/*.java' for n in SRCS]),
#   deps = DEPS,
#   visibility = ['PUBLIC'],
# )
#
def java_doc(
    name,
    title,
    pkg,
    paths,
    srcs = [],
    deps = [],
    visibility = []
  ):
  genrule(
    name = name,
    cmd = ' '.join([
      'while ! test -f .buckconfig; do cd ..; done;',
      'javadoc',
      '-quiet',
      '-protected',
      '-encoding UTF-8',
      '-charset UTF-8',
      '-notimestamp',
      '-windowtitle "' + title + '"',
      '-link http://docs.oracle.com/javase/7/docs/api',
      '-subpackages ' + pkg,
      '-sourcepath ',
      ':'.join([n for n in paths]),
      ' -classpath ',
      ':'.join(['$(location %s)' % n for n in deps]),
      '-d $TMP',
    ]) + ';jar cf $OUT -C $TMP .',
    srcs = srcs,
    out = name + '.jar',
    visibility = visibility,
)
