# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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. import collections import os import re import sys import time license_dict = {} # The Apache Software License, Version 2.0 license_dict["The Apache Software License, Version 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache License, Version 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache License 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache 2"] = "The Apache Software License, Version 2.0" license_dict["Apache v2"] = "The Apache Software License, Version 2.0" license_dict["Apache-2.0"] = "The Apache Software License, Version 2.0" license_dict["ASF 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache License Version 2"] = "The Apache Software License, Version 2.0" license_dict["Apache License Version 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache License (v2.0)"] = "The Apache Software License, Version 2.0" license_dict["Apache License"] = "The Apache Software License, Version 2.0" license_dict["The Apache License, Version 2.0"] = "The Apache Software License, Version 2.0" license_dict["Apache 2.0 License"] = "The Apache Software License, Version 2.0" license_dict["Apache License, version 2.0"] = "The Apache Software License, Version 2.0" # The 3-Clause BSD License license_dict["3-Clause BSD License"] = "The 3-Clause BSD License" license_dict["New BSD License"] = "The 3-Clause BSD License" license_dict["The New BSD License"] = "The 3-Clause BSD License" license_dict["Modified BSD License"] = "The 3-Clause BSD License" license_dict["BSD Licence 3"] = "The 3-Clause BSD License" license_dict["BSD License 3"] = "The 3-Clause BSD License" license_dict["BSD 3-clause"] = "The 3-Clause BSD License" license_dict["BSD-3-Clause"] = "The 3-Clause BSD License" license_dict["The BSD 3-Clause License"] = "The 3-Clause BSD License" # The 2-Clause BSD License license_dict["The 2-Clause BSD License"] = "The 2-Clause BSD License" license_dict["BSD 2-Clause License"] = "The 2-Clause BSD License" license_dict["Simplified BSD License"] = "The 2-Clause BSD License" license_dict["FreeBSD License"] = "The 2-Clause BSD License" license_dict["BSD License"] = "The 2-Clause BSD License" license_dict["BSD Licence"] = "The 2-Clause BSD License" license_dict["BSD"] = "The 2-Clause BSD License" license_dict["The BSD License"] = "The 2-Clause BSD License" # The MIT License license_dict["The MIT License"] = "The MIT License" license_dict["MIT License"] = "The MIT License" license_dict["MIT license"] = "The MIT License" # Eclipse Public License - v1.0 license_dict["Eclipse Public License 1.0"] = "Eclipse Public License - v1.0" license_dict["Eclipse Public License - v 1.0"] = "Eclipse Public License - v1.0" # Eclipse Public License - v2.0 license_dict["Eclipse Public License 2.0"] = "Eclipse Public License - v2.0" # GNU General Public License license_dict["GNU General Public License"] = "GNU General Public License" # GNU General Public License, version 2 license_dict["The GNU General Public License, Version 2"] = "GNU General Public License, version 2" # Creative Commons Zero license_dict["cc0"] = "Creative Commons Zero" license_dict["CC0"] = "Creative Commons Zero" # CDDL + GPLv2 with classpath exception license_dict["CDDL + GPLv2 with classpath exception"] = "CDDL + GPLv2 with classpath exception" license_dict["CDDL/GPLv2+CE"] = "CDDL + GPLv2 with classpath exception" # Common Development and Distribution License (CDDL) v1.0 license_dict["Common Development and Distribution License (CDDL) v1.0"] = "Common Development and Distribution License (CDDL) v1.0" license_dict["CDDL 1.0"] = "Common Development and Distribution License (CDDL) v1.0" # The JSON License license_dict["The JSON License"] = "The JSON License" # CUP license license_dict["CUP License (MIT License)"] = "CUP License" # Eclipse Distribution License - v1.0 license_dict["Eclipse Distribution License - v 1.0"] = "Eclipse Distribution License - v1.0" license_dict["EDL 1.0"] = "Eclipse Distribution License - v1.0" # Public Domain license_dict["Public Domain"] = "Public Domain" ######################################################### license_file_dict = {} license_file_dict["The 3-Clause BSD License"] = "licenses/LICENSE-BSD-3.txt" license_file_dict["The 2-Clause BSD License"] = "licenses/LICENSE-BSD-2.txt" license_file_dict["The MIT License"] = "licenses/LICENSE-MIT.txt" license_file_dict["Eclipse Public License - v1.0"] = "licenses/LICENSE-EPL-1.0.txt" license_file_dict["Eclipse Public License - v2.0"] = "licenses/LICENSE-EPL-2.0.txt" license_file_dict["Eclipse Distribution License - v1.0"] = "licenses/LICENSE-EDL-1.0.txt" license_file_dict["Creative Commons Zero"] = "licenses/LICENSE-CC0.txt" license_file_dict["CDDL + GPLv2 with classpath exception"] = "licenses/LICENSE-CDDL.txt & licenses/LICENSE-GPLv2-CE.txt" license_file_dict["Common Development and Distribution License (CDDL) v1.0"] = "licenses/LICENSE-CDDL.txt" license_file_dict["CUP License"] = "licenses/LICENSE-CUP.txt" license_file_dict["Public Domain"] = "licenses/LICENSE-PD.txt" class LicenseParser: def __init__(self, license_file, out_file): self.license_file = license_file self.out_file = out_file; self.out_dict = dict() def parse_and_output(self): for line in open(self.license_file): #print line line = line.strip() if not len(line) or line.startswith("Lists of"): continue r = re.search(r'\((.+)\) (.+) \((.+) - (.+)\)', line) license_alias = r.group(1) project_name = r.group(2) package_name = r.group(3) url = r.group(4) #print self.convert_to_standard_name(license_alias) #print project_name; #print package_name; #print url self.assemble_output(license_alias, project_name, package_name, url); self.save_to_file() def save_to_file(self): f = open(self.out_file, 'w'); sorted_out_dict = collections.OrderedDict(sorted(self.out_dict.items())) for license_name in sorted_out_dict.keys(): license_file_location = license_file_dict.get(license_name, "unknown") f.write(license_name + " -- " + license_file_location + "\n") sorted_out_dict_2 = collections.OrderedDict(sorted(self.out_dict[license_name].items())) for project_name in sorted_out_dict_2.keys(): f.write(" * " + project_name + ":\n") sorted_out_dict_3 = sorted(self.out_dict[license_name][project_name]) for package in sorted_out_dict_3: f.write(" - " + package + "\n") f.write("\n") f.close() def assemble_output(self, license_alias, project_name, package_name, url): standard_name = self.convert_to_standard_name(license_alias); if standard_name in self.out_dict: if project_name in self.out_dict[standard_name]: self.out_dict[standard_name][project_name].add(package_name + " (" + url + ")") else: self.out_dict[standard_name][project_name] = set() self.out_dict[standard_name][project_name].add(package_name + " (" + url + ")") else: self.out_dict[standard_name] = dict() self.out_dict[standard_name][project_name] = set() self.out_dict[standard_name][project_name].add(package_name + " (" + url + ")") def convert_to_standard_name(self, alias): if alias in license_dict: return license_dict[alias] else: license_dict[alias] = alias; return alias def main(): license_file = sys.argv[1] out_file = sys.argv[2] license_parser = LicenseParser(license_file, out_file); license_parser.parse_and_output(); if __name__ == '__main__': main()