def genlicenses( name, out, opts = [], java_deps = [], non_java_deps = [], visibility = []): cmd = ['$(exe :gen_licenses)'] cmd.extend(opts) cmd.append('>$OUT') cmd.extend(java_deps) cmd.extend(non_java_deps) # Must use $(classpath) for Java deps, since transitive dependencies are not # first-order dependencies of the output jar, so changes would not cause # invalidation of the build cache key for the genrule. cmd.extend('; true $(classpath %s)' % d for d in java_deps) # Must use $(location) for non-Java deps, since $(classpath) will fail with an # error. This is ok, because transitive dependencies are included in the # output artifacts for everything _except_ Java libraries. cmd.extend('; true $(location %s)' % d for d in non_java_deps) genrule( name = name, out = out, cmd = ' '.join(cmd), visibility = visibility, )