Han-Wen Nienhuys | 888f4ac | 2016-11-13 10:34:18 -0800 | [diff] [blame] | 1 | def _classpath_collector(ctx): |
David Ostrovsky | af39827 | 2019-03-03 10:22:00 +0100 | [diff] [blame] | 2 | all = [] |
Han-Wen Nienhuys | 888f4ac | 2016-11-13 10:34:18 -0800 | [diff] [blame] | 3 | for d in ctx.attr.deps: |
David Ostrovsky | 09c905e | 2019-09-09 20:53:31 +0200 | [diff] [blame] | 4 | if JavaInfo in d: |
| 5 | all.append(d[JavaInfo].transitive_runtime_deps) |
Marco Miller | 444d332 | 2019-09-10 10:28:55 -0400 | [diff] [blame] | 6 | if hasattr(d[JavaInfo].compilation_info, "runtime_classpath"): |
| 7 | all.append(d[JavaInfo].compilation_info.runtime_classpath) |
Han-Wen Nienhuys | a667b4c | 2018-07-10 11:51:36 +0200 | [diff] [blame] | 8 | elif hasattr(d, "files"): |
David Ostrovsky | af39827 | 2019-03-03 10:22:00 +0100 | [diff] [blame] | 9 | all.append(d.files) |
Han-Wen Nienhuys | 888f4ac | 2016-11-13 10:34:18 -0800 | [diff] [blame] | 10 | |
David Ostrovsky | af39827 | 2019-03-03 10:22:00 +0100 | [diff] [blame] | 11 | as_strs = [c.path for c in depset(transitive = all).to_list()] |
David Ostrovsky | 930f29e | 2019-01-08 23:11:59 +0100 | [diff] [blame] | 12 | ctx.actions.write( |
Han-Wen Nienhuys | a667b4c | 2018-07-10 11:51:36 +0200 | [diff] [blame] | 13 | output = ctx.outputs.runtime, |
| 14 | content = "\n".join(sorted(as_strs)), |
| 15 | ) |
Han-Wen Nienhuys | 888f4ac | 2016-11-13 10:34:18 -0800 | [diff] [blame] | 16 | |
Han-Wen Nienhuys | 888f4ac | 2016-11-13 10:34:18 -0800 | [diff] [blame] | 17 | classpath_collector = rule( |
Han-Wen Nienhuys | 888f4ac | 2016-11-13 10:34:18 -0800 | [diff] [blame] | 18 | attrs = { |
| 19 | "deps": attr.label_list(), |
| 20 | }, |
David Pursehouse | 2d08500 | 2016-12-11 19:00:10 +0900 | [diff] [blame] | 21 | outputs = { |
| 22 | "runtime": "%{name}.runtime_classpath", |
| 23 | }, |
| 24 | implementation = _classpath_collector, |
| 25 | ) |