diff options
Diffstat (limited to 'src/main/java')
7 files changed, 109 insertions, 33 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD index f52df1aad7..3de3431b66 100644 --- a/src/main/java/com/google/devtools/build/docgen/BUILD +++ b/src/main/java/com/google/devtools/build/docgen/BUILD @@ -17,6 +17,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/lib/rules/cpp", + "//src/main/java/com/google/devtools/common/options", "//third_party:apache_velocity", "//third_party:guava", "//third_party:jsr305", @@ -31,6 +32,7 @@ java_binary( ":docgen_javalib", "//src/main/java/com/google/devtools/build/lib:bazel-rules", "//src/main/java/com/google/devtools/build/lib:build-base", + "//src/main/java/com/google/devtools/common/options", ], ) diff --git a/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java b/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java index 8194d79723..e262aa4267 100644 --- a/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java +++ b/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java @@ -14,6 +14,7 @@ package com.google.devtools.build.docgen; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import java.io.IOException; @@ -37,8 +38,8 @@ public class BlazeRuleHelpPrinter { try { BuildDocCollector collector = new BuildDocCollector(provider, false); Map<String, RuleDocumentation> ruleDocs = collector.collect( - new String[] {"java/com/google/devtools/build/lib/view", - "java/com/google/devtools/build/lib/rules"}, null); + ImmutableList.of("java/com/google/devtools/build/lib/view", + "java/com/google/devtools/build/lib/rules"), null); ruleDocMap = new HashMap<>(); for (RuleDocumentation ruleDoc : ruleDocs.values()) { ruleDocMap.put(ruleDoc.getRuleName(), ruleDoc); diff --git a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java index 870bf9558b..00e1d50f30 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java @@ -87,7 +87,7 @@ public class BuildDocCollector { * @param blackList specify an optional black list file that list some rules that should * not be listed in the output. */ - public Map<String, RuleDocumentation> collect(String[] inputDirs, String blackList) + public Map<String, RuleDocumentation> collect(List<String> inputDirs, String blackList) throws BuildEncyclopediaDocException, IOException { // Read the blackList file Set<String> blacklistedRules = readBlackList(blackList); diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java index f16f70384e..64c0584a7d 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java @@ -14,26 +14,26 @@ package com.google.devtools.build.docgen; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; +import com.google.devtools.common.options.OptionsParser; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Collections; /** * The main class for the docgen project. The class checks the input arguments * and uses the BuildEncyclopediaProcessor for the actual documentation generation. */ public class BuildEncyclopediaGenerator { - - private static boolean checkArgs(String[] args) { - if (args.length < 2) { - System.err.println("There has to be two to four input parameters\n" - + " - a comma separated list for input directories\n" - + " - the name of the rule class provider\n" - + " - an output directory (optional)." - + " - a path to a file listing rules to not document (optional)"); - return false; - } - return true; + private static void printUsage(OptionsParser parser) { + System.err.println( + "Usage: docgen_bin -p rule_class_provider (-i input_dir)+\n" + + " [-o outputdir] [-b blacklist] [-h]\n\n" + + "Generates the Build Encyclopedia from embedded native rule documentation.\n" + + "The rule class provider (-p) and at least one input_dir (-i) must be specified.\n"); + System.err.println( + parser.describeOptions( + Collections.<String, String>emptyMap(), OptionsParser.HelpVerbosity.LONG)); } private static void fail(Throwable e, boolean printStackTrace) { @@ -53,22 +53,30 @@ public class BuildEncyclopediaGenerator { } public static void main(String[] args) { - if (checkArgs(args)) { - // TODO(bazel-team): use flags - try { - BuildEncyclopediaProcessor processor = new BuildEncyclopediaProcessor( - createRuleClassProvider(args[1])); - processor.generateDocumentation( - args[0].split(","), getArgsOrNull(args, 2), getArgsOrNull(args, 3)); - } catch (BuildEncyclopediaDocException e) { - fail(e, false); - } catch (Throwable e) { - fail(e, true); - } + OptionsParser parser = OptionsParser.newOptionsParser(BuildEncyclopediaOptions.class); + parser.setAllowResidue(false); + parser.parseAndExitUponError(args); + BuildEncyclopediaOptions options = parser.getOptions(BuildEncyclopediaOptions.class); + + if (options.help) { + printUsage(parser); + Runtime.getRuntime().exit(0); } - } - private static String getArgsOrNull(String[] args, int idx) { - return args.length > idx ? args[idx] : null; + if (options.inputDirs.size() == 0 || options.provider.isEmpty()) { + printUsage(parser); + Runtime.getRuntime().exit(1); + } + + try { + BuildEncyclopediaProcessor processor = new BuildEncyclopediaProcessor( + createRuleClassProvider(options.provider)); + processor.generateDocumentation( + options.inputDirs, options.outputDir, options.blacklist); + } catch (BuildEncyclopediaDocException e) { + fail(e, false); + } catch (Throwable e) { + fail(e, true); + } } } diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java new file mode 100644 index 0000000000..f75dc6a82b --- /dev/null +++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java @@ -0,0 +1,65 @@ +// Copyright 2014 The Bazel Authors. All rights reserved. +// +// 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. +package com.google.devtools.build.docgen; + +import com.google.devtools.common.options.Option; +import com.google.devtools.common.options.OptionsBase; + +import java.util.List; + +/** + * Command line options for the Build Encyclopedia docgen. + */ +public class BuildEncyclopediaOptions extends OptionsBase { + @Option( + name = "input_dir", + abbrev = 'i', + defaultValue = "", + allowMultiple = true, + help = "An input directory to read source files" + ) + public List<String> inputDirs; + + @Option( + name = "provider", + abbrev = 'p', + defaultValue = "", + help = "The name of the rule class provider" + ) + public String provider; + + @Option( + name = "output_dir", + abbrev = 'o', + defaultValue = ".", + help = "An output directory." + ) + public String outputDir; + + @Option( + name = "blacklist", + abbrev = 'b', + defaultValue = "", + help = "A path to a file listing rules not to document." + ) + public String blacklist; + + @Option( + name = "help", + abbrev = 'h', + defaultValue = "false", + help = "Prints the help string." + ) + public boolean help; +} diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java index b29e7610ef..c6bf396441 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java @@ -67,7 +67,7 @@ public class BuildEncyclopediaProcessor { * @param outputRootDir output directory where to write the build encyclopedia * @param blackList optional path to a file listing rules to not document */ - public void generateDocumentation(String[] inputDirs, String outputDir, String blackList) + public void generateDocumentation(List<String> inputDirs, String outputDir, String blackList) throws BuildEncyclopediaDocException, IOException { writeStaticPage(outputDir, "make-variables"); writeStaticPage(outputDir, "predefined-python-variables"); diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index cd023db4e1..a82f8d867e 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -1071,9 +1071,9 @@ genrule( cmd = ( "mkdir -p $(@D)/be && " + "$(location //src/main/java/com/google/devtools/build/docgen:docgen_bin)" + - " $$PWD/src/main/java/com/google/devtools/build/lib " + - "com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider" + - " $(@D)/be &&" + + " --provider=com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider" + + " --input_dir=$$PWD/src/main/java/com/google/devtools/build/lib" + + " --output_dir=$(@D)/be &&" + "zip -qj $@ $(@D)/be/*" ), tools = [ |