| # text parts | |
| processed_files = {} | |
| # authors | |
| for filename in ["AUTHORS", "CONTRIBUTORS"]: | |
| with open(filename, encoding="utf8") as f: | |
| text = "" | |
| for line in f: | |
| if filename == "AUTHORS": | |
| text += "// fast_float by " + line | |
| if filename == "CONTRIBUTORS": | |
| text += "// with contributions from " + line | |
| processed_files[filename] = text + "//\n//\n" | |
| # licenses | |
| for filename in ["LICENSE-MIT", "LICENSE-APACHE", "LICENSE-BOOST"]: | |
| lines = [] | |
| with open(filename, encoding="utf8") as f: | |
| lines = f.readlines() | |
| # Retrieve subset required for inclusion in source | |
| if filename == "LICENSE-APACHE": | |
| lines = [" Copyright 2021 The fast_float authors\n", *lines[179:-1]] | |
| text = "" | |
| for line in lines: | |
| line = line.strip() | |
| if len(line): | |
| line = " " + line | |
| text += "//" + line + "\n" | |
| processed_files[filename] = text | |
| # code | |
| for filename in [ | |
| "constexpr_feature_detect.h", | |
| "float_common.h", | |
| "fast_float.h", | |
| "ascii_number.h", | |
| "fast_table.h", | |
| "decimal_to_binary.h", | |
| "bigint.h", | |
| "digit_comparison.h", | |
| "parse_number.h", | |
| ]: | |
| with open("include/fast_float/" + filename, encoding="utf8") as f: | |
| text = "" | |
| for line in f: | |
| if line.startswith('#include "'): | |
| continue | |
| text += line | |
| processed_files[filename] = "\n" + text | |
| # command line | |
| import argparse | |
| parser = argparse.ArgumentParser(description="Amalgamate fast_float.") | |
| parser.add_argument( | |
| "--license", | |
| default="TRIPLE", | |
| choices=["DUAL", "TRIPLE", "MIT", "APACHE", "BOOST"], | |
| help="choose license", | |
| ) | |
| parser.add_argument("--output", default="", help="output file (stdout if none") | |
| args = parser.parse_args() | |
| def license_content(license_arg): | |
| result = [] | |
| if license_arg == "TRIPLE": | |
| result += [ | |
| "// Licensed under the Apache License, Version 2.0, or the\n", | |
| "// MIT License or the Boost License. This file may not be copied,\n", | |
| "// modified, or distributed except according to those terms.\n", | |
| "//\n", | |
| ] | |
| if license_arg == "DUAL": | |
| result += [ | |
| "// Licensed under the Apache License, Version 2.0, or the\n", | |
| "// MIT License at your option. This file may not be copied,\n", | |
| "// modified, or distributed except according to those terms.\n", | |
| "//\n", | |
| ] | |
| if license_arg in ("DUAL", "TRIPLE", "MIT"): | |
| result.append("// MIT License Notice\n//\n") | |
| result.append(processed_files["LICENSE-MIT"]) | |
| result.append("//\n") | |
| if license_arg in ("DUAL", "TRIPLE", "APACHE"): | |
| result.append("// Apache License (Version 2.0) Notice\n//\n") | |
| result.append(processed_files["LICENSE-APACHE"]) | |
| result.append("//\n") | |
| if license_arg in ("TRIPLE", "BOOST"): | |
| result.append("// BOOST License Notice\n//\n") | |
| result.append(processed_files["LICENSE-BOOST"]) | |
| result.append("//\n") | |
| return result | |
| text = "".join( | |
| [ | |
| processed_files["AUTHORS"], | |
| processed_files["CONTRIBUTORS"], | |
| *license_content(args.license), | |
| processed_files["constexpr_feature_detect.h"], | |
| processed_files["float_common.h"], | |
| processed_files["fast_float.h"], | |
| processed_files["ascii_number.h"], | |
| processed_files["fast_table.h"], | |
| processed_files["decimal_to_binary.h"], | |
| processed_files["bigint.h"], | |
| processed_files["digit_comparison.h"], | |
| processed_files["parse_number.h"], | |
| ] | |
| ) | |
| if args.output: | |
| with open(args.output, "wt", encoding="utf8") as f: | |
| f.write(text) | |
| else: | |
| print(text) |