| # 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: |
| text += '// ' + line.strip() + '\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) |