| # 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) |