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