| # Copyright 2017 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. |
| """This tool build feature.xml files describing an Eclipse feature.""" |
| |
| from xml.etree import ElementTree |
| from xml.dom import minidom |
| import gflags |
| import sys |
| |
| gflags.DEFINE_string("output", None, "The output file, mandatory") |
| gflags.MarkFlagAsRequired("output") |
| |
| gflags.DEFINE_string("id", None, "The feature ID, mandatory") |
| gflags.MarkFlagAsRequired("id") |
| |
| gflags.DEFINE_string( |
| "label", |
| None, |
| "The feature label (i.e. short description), mandatory") |
| gflags.MarkFlagAsRequired("label") |
| |
| gflags.DEFINE_string("version", None, "The feature version, mandatory") |
| gflags.MarkFlagAsRequired("version") |
| |
| gflags.DEFINE_string( |
| "provider", None, "The provider (i.e. the vendor) of the feature, mandatory") |
| gflags.MarkFlagAsRequired("provider") |
| |
| gflags.DEFINE_string( |
| "url", None, "A URL associated to the description, optional") |
| |
| gflags.DEFINE_string( |
| "description", None, "Description of the feature, mandatory") |
| gflags.MarkFlagAsRequired("description") |
| |
| gflags.DEFINE_string( |
| "copyright", None, "Copyright line for the repository, mandatory") |
| gflags.MarkFlagAsRequired("copyright") |
| |
| gflags.DEFINE_string( |
| "license_url", None, "URL pointing to the license, mandatory") |
| gflags.MarkFlagAsRequired("license_url") |
| |
| gflags.DEFINE_string( |
| "license", None, "Text file of the license of the feature, mandatory") |
| gflags.MarkFlagAsRequired("license") |
| |
| gflags.DEFINE_multistring( |
| "site", [], "Sites related to the plugin, in the form `label=url`") |
| gflags.DEFINE_multistring( |
| "plugin", [], "List of plugins that this feature contains (filename).") |
| |
| FLAGS=gflags.FLAGS |
| |
| def _plugins(parent, plugins): |
| for plugin in plugins: |
| if plugin.endswith(".jar"): |
| id, version = plugin[:-4].split("_", 1) |
| p = ElementTree.SubElement(parent, "plugin") |
| p.set("id", id) |
| p.set("download-size", "0") |
| p.set("install-size", "0") |
| p.set("version", version) |
| |
| |
| def _sites(parent, sites): |
| for site in sites: |
| label, url = site.split("=", 1) |
| p = ElementTree.SubElement(parent, "discovery") |
| p.set("label", label) |
| p.set("url", url) |
| |
| |
| def main(unused_argv): |
| feature = ElementTree.Element("feature") |
| feature.set("id", FLAGS.id) |
| feature.set("label", FLAGS.label) |
| feature.set("version", FLAGS.version) |
| feature.set("provider-name", FLAGS.provider) |
| description = ElementTree.SubElement(feature, "description") |
| if FLAGS.url: |
| description.set("url", FLAGS.url) |
| description.text = FLAGS.description |
| copyright = ElementTree.SubElement(feature, "copyright") |
| copyright.text = FLAGS.copyright |
| license = ElementTree.SubElement(feature, "license") |
| license.set("url", FLAGS.license_url) |
| with open(FLAGS.license, "r") as f: |
| license.text = f.read() |
| _sites(ElementTree.SubElement(feature, "url"), FLAGS.site) |
| _plugins(feature, FLAGS.plugin) |
| |
| # Pretty print the resulting tree |
| output = ElementTree.tostring(feature, "utf-8") |
| reparsed = minidom.parseString(output) |
| with open(FLAGS.output, "w") as f: |
| f.write(reparsed.toprettyxml(indent=" ", encoding="UTF-8")) |
| |
| if __name__ == "__main__": |
| main(FLAGS(sys.argv)) |