Merge pull request #438 from s4Ys369/revert-434-patch-1
[sm64pc.git] / tools / util / generate_audiofile_cpp.py
blob232e24dd9b77c3ac3bb95d26721dda0ad49e7e9c
1 #!/usr/bin/env python
3 import os
4 import re
5 import sys
7 file_list = [
8 'Features.h',
9 'Compiler.h',
10 'error.h',
11 'extended.h',
12 'compression.h',
13 'aupvinternal.h',
14 'aupvlist.h',
15 'audiofile.h',
16 'afinternal.h',
17 'byteorder.h',
18 'AudioFormat.h',
19 'debug.h',
20 'util.h',
21 'units.h',
22 'UUID.h',
23 'Shared.h',
24 'Buffer.h',
25 'File.h',
26 'FileHandle.h',
27 'Instrument.h',
28 'Track.h',
29 'Marker.h',
30 'Setup.h',
31 'Tag.h',
32 'PacketTable.h',
33 'pcm.h',
34 'g711.h',
35 'af_vfs.h',
36 'Raw.h',
37 'WAVE.h',
38 'SampleVision.h',
39 'modules/Module.h',
40 'modules/ModuleState.h',
41 'modules/SimpleModule.h',
42 'modules/FileModule.h',
43 'modules/RebufferModule.h',
44 'modules/BlockCodec.h',
45 'modules/BlockCodec.cpp',
46 'modules/FileModule.cpp',
47 'modules/G711.h',
48 'modules/G711.cpp',
49 'modules/Module.cpp',
50 'modules/ModuleState.cpp',
51 'modules/MSADPCM.h',
52 'modules/MSADPCM.cpp',
53 'modules/PCM.h',
54 'modules/PCM.cpp',
55 'modules/SimpleModule.cpp',
56 'modules/RebufferModule.cpp',
57 'AIFF.h',
58 'AIFF.cpp',
59 'AudioFormat.cpp',
60 'Buffer.cpp',
61 'File.cpp',
62 'FileHandle.cpp',
63 'Instrument.cpp',
64 'Loop.cpp',
65 'Marker.cpp',
66 'Miscellaneous.cpp',
67 'PacketTable.cpp',
68 'Raw.cpp',
69 'Setup.cpp',
70 'Track.cpp',
71 'UUID.cpp',
72 'WAVE.cpp',
73 'aes.cpp',
74 'af_vfs.cpp',
75 'aupv.c',
76 'compression.cpp',
77 'data.cpp',
78 'debug.cpp',
79 'error.c',
80 'extended.c',
81 'format.cpp',
82 'g711.c',
83 'openclose.cpp',
84 'pcm.cpp',
85 'query.cpp',
86 'units.cpp',
87 'util.cpp',
90 file_header = \
91 """// libaudiofile b62c902
92 // https://github.com/mpruett/audiofile
93 // To simplify compilation, all files have been concatenated into one.
94 // Support for all formats except WAVE, AIFF(C) and RAW has been stripped out.
95 """
97 prepend_defs = \
98 """#define HAVE_UNISTD_H 1
99 #if defined __BIG_ENDIAN__
100 # define WORDS_BIGENDIAN 1
101 #endif
102 #include <stdlib.h>
105 def banned(line):
106 return '#pragma once' in line or '#include "' in line or '#include <config.h>' in line
108 def cat_file(fout, fin_name):
109 with open(fin_name) as fin:
110 lines = fin.readlines()
111 lines = [l.rstrip() for l in lines if not banned(l)]
112 for l in lines:
113 fout.write(l + '\n')
114 fout.write('\n')
116 def combine_libaudiofile(fout_name, libaudiofile_path):
117 with open(fout_name, 'w') as fout:
118 fout.write(file_header + "\n")
119 fout.write("/*\n")
120 cat_file(fout, os.path.join(libaudiofile_path, '../COPYING'))
121 fout.write("*/\n\n")
122 fout.write(prepend_defs + "\n")
123 for f in file_list:
124 fout.write(f"// file: {f}\n")
125 cat_file(fout, os.path.join(libaudiofile_path, f))
127 def main():
128 if len(sys.argv) > 1 and sys.argv[1] in ['-h', '--help']:
129 print('Usage: generate_audiofile_cpp.py [output_filename] [libaudiofile_src_dir]')
130 print('Defaults: [output_filename = "audiofile.cpp"] [libaudiofile_src_dir = "./audiofile/libaudiofile"]')
131 return
132 fout_name = sys.argv[1] if len(sys.argv) > 1 else 'audiofile.cpp'
133 libaudiofile_path = sys.argv[2] if len(sys.argv) > 2 else './audiofile/libaudiofile'
134 combine_libaudiofile(fout_name, os.path.expanduser(libaudiofile_path))
136 main()