def genantlr(
    name,
    srcs,
    outs,
    antlr_version):
  genrule(
    name = name,
    srcs = srcs,
    cmd = '${//lib/antlr:antlr-tool} -o $(dirname $OUT) $SRCS',
    deps = ['//lib/antlr:antlr-tool'],
    out = outs[0],
  )

def gwt_module(
    name,
    srcs,
    gwtxml = None,
    resources = [],
    deps = [],
    visibility = []):
  if gwtxml:
    resources = resources + [gwtxml]
  resources += srcs
  java_library(
    name = name,
    srcs = srcs,
    deps = deps,
    resources = resources,
    visibility = visibility,
  )

def gwt_application(
    name,
    module_target,
    compiler_opts = [],
    compiler_jvm_flags = [],
    deps = [],
    visibility = []):
  cmd = ['${//lib/gwt:compiler}', module_target, '$OUT']
  cmd += compiler_opts + [' -- $DEPS']
  genrule(
    name = name,
    srcs = [],
    cmd = ' '.join(cmd),
    deps = [
      '//lib/gwt:compiler',
      '//lib/gwt:dev',
    ] + deps,
    out = '%s.zip' % (name,),
    visibility = visibility,
  )

def java_library2(
    name,
    srcs = [],
    resources = [],
    deps = [],
    compile_deps = [],
    visibility = []):
  c = name + '__compile'
  j = 'lib__%s__output/%s.jar' % (c,c)
  o = 'lib__%s__output/%s.jar' % (name,name)
  java_library(
    name = c,
    srcs = srcs,
    resources = resources,
    deps = deps + compile_deps,
    visibility = [],
  )
  genrule(
    name = name + '__link',
    cmd = 'mkdir -p $(dirname $OUT);ln -s $SRCS $OUT',
    srcs = [genfile(j)],
    deps = [':' + c],
    out = o,
  )
  prebuilt_jar(
    name = name,
    binary_jar = genfile(o),
    deps = deps + [':%s__link' % (name,)],
    visibility = visibility,
  )

def gerrit_extension(
    name,
    deps = [],
    srcs = [],
    resources = [],
    manifest_file = None,
    visibility = ['PUBLIC']):
  gerrit_plugin(
    name = name,
    deps = deps,
    srcs = srcs,
    resources = resources,
    manifest_file = manifest_file,
    type = 'extension',
    visibility = visibility,
  )

def gerrit_plugin(
    name,
    deps = [],
    srcs = [],
    resources = [],
    manifest_file = None,
    type = 'plugin',
    visibility = ['PUBLIC']):
  # TODO(sop): Buck should support manifest_file on java_library()
  lib = name + '__plugin.jar'
  genrule(
    name = name,
    cmd = ('cp $SRCS $TMP && cd $TMP && mv %s $OUT &&' +
      'mkdir META-INF && mv MANIFEST.MF META-INF &&' +
      'zip -qu $OUT META-INF/MANIFEST.MF') % (lib,),
    srcs = [
      genfile('MANIFEST.MF'),
      genfile('lib__%s__plugin__output/%s' % (name,lib,)),
    ],
    deps = [
      ':%s__plugin' % (name,),
      ':%s__manifest' % (name,),
    ],
    out = name + '.jar',
    visibility = visibility,
  )
  java_library(
    name = name + '__plugin',
    srcs = srcs,
    resources = resources,
    deps = ['//:%s-lib' % (type,)] + deps,
  )

  mf_cmd = 'v=`git describe HEAD` &&'
  if manifest_file:
    mf_src = [manifest_file]
    mf_cmd += 'sed "s:@VERSION@:$v:g" $SRCS >$OUT'
  else:
    mf_src = []
    mf_cmd += 'echo "Manifest-Version: 1.0" >$OUT &&'
    mf_cmd += 'echo "Gerrit-ApiType: %s" >>$OUT &&' % (type,)
    mf_cmd += 'echo "Implementation-Version: $v" >>$OUT'
  genrule(
    name = name + '__manifest',
    cmd = mf_cmd,
    srcs = mf_src,
    out = 'MANIFEST.MF',
  )
