Torque3D/Engine/lib/libsndfile/make_lite.py
marauder2k7 a745fc3757 Initial commit
added libraries:
opus
flac
libsndfile

updated:
libvorbis
libogg
openal

- Everything works as expected for now. Bare in mind libsndfile needed the check for whether or not it could find the xiph libraries removed in order for this to work.
2024-03-21 17:33:47 +00:00

492 lines
17 KiB
Python

#!/usr/bin/python
import commands, os, re, string, sys, time
def count_enclosed_functions (source):
func_count = 0
open_brace = 0
close_brace = 0
for ch in source:
if ch == '{':
open_brace += 1
elif ch == '}':
close_brace += 1
if open_brace == close_brace:
func_count += 1
if open_brace < close_brace:
print "count_enclosed_functions : open_brace < close_brace"
return -1
return func_count
def find_function_prototype (source, proto_name):
proto_re = "(^[a-zA-Z_ \t]+\s+%s[^a-zA-Z0-9_]\s*\([^\)]+\)\s+;\n)" % (proto_name)
proto_result = re.search (proto_re, source, re.MULTILINE | re.DOTALL)
if not proto_result:
return None
proto_text = proto_result.groups ()[0]
return proto_text
def find_function_definition (source, func_name):
func_re = "(\n[a-zA-Z_ \t]+\n%s[^a-zA-Z0-9_].* /\* %s \*/\n)" % (func_name, func_name)
func_result = re.search (func_re, source, re.MULTILINE | re.DOTALL)
if not func_result:
sys.exit (1)
return None
func_text = func_result.groups ()[0]
# Now to check that we only have one enclosing function.
func_count = count_enclosed_functions (func_text)
if func_count != 1:
return None
return func_text
def find_include (source, inc_name):
inc_re = "(^#include\s+[\<\"]%s[\"\>]\s*)" % inc_name
inc_result = re.search (inc_re, source, re.MULTILINE | re.DOTALL)
if not inc_result:
return None
inc_text = inc_result.groups ()[0]
return inc_text
def find_assign_statement (source, var_name):
var_re = "(^\s+%s\s*=[^;]+;)" % var_name
var_result = re.search (var_re, source, re.MULTILINE | re.DOTALL)
if not var_result:
return None
assign_text = var_result.groups ()[0]
return assign_text
#--------------------------------------------------------------------------------
def remove_include (source, inc_name):
inc_text = find_include (source, inc_name)
if not inc_text:
print "remove_include : include '%s' not found. Exiting." % inc_name
sys.exit (1)
source = string.replace (source, inc_text, "")
return source
def remove_assign (source, assign_name):
assign_text = find_assign (source, inc_name)
if not inc_text:
print "remove_include : include '%s' not found. Exiting." % inc_name
sys.exit (1)
source = string.replace (source, inc_text, "")
return source
def remove_prototype (source, proto_name):
proto_text = find_function_prototype (source, proto_name)
if not proto_text:
print "remove_prototype : prototype '%s' not found. Exiting." % proto_name
sys.exit (1)
source = string.replace (source, proto_text, "")
return source
def remove_function (source, func_name):
func_text = find_function_definition (source, func_name)
if not func_text:
print "remove_function : function '%s' not found. Exiting." % func_name
sys.exit (1)
source = string.replace (source, func_text, "/* Function %s() removed here. */\n" % func_name)
return source
def remove_all_assignments (source, var):
count = 0
while 1:
assign_text = find_assign_statement (source, var)
if not assign_text:
if count != 0:
break
print "remove_all_assignments : variable '%s' not found. Exiting." % var
sys.exit (1)
source = string.replace (source, assign_text, "")
count += 1
return source
#----------------------------------------------------------------
def remove_funcs_and_protos_from_file (filename, func_list):
source_code = open (filename, 'r').read ()
for func in func_list:
source_code = remove_prototype (source_code, func) ;
source_code = remove_function (source_code, func) ;
open (filename, 'w').write (source_code)
def remove_funcs_from_file (filename, func_list):
source_code = open (filename, 'r').read ()
for func in func_list:
source_code = remove_function (source_code, func) ;
open (filename, 'w').write (source_code)
def remove_protos_from_file (filename, func_list):
source_code = open (filename, 'r').read ()
for func in func_list:
source_code = remove_prototype (source_code, func) ;
open (filename, 'w').write (source_code)
def remove_includes_from_file (filename, inc_list):
source_code = open (filename, 'r').read ()
for inc in inc_list:
source_code = remove_include (source_code, inc) ;
open (filename, 'w').write (source_code)
def remove_all_assignments_from_file (filename, var_list):
source_code = open (filename, 'r').read ()
for var in var_list:
source_code = remove_all_assignments (source_code, var) ;
open (filename, 'w').write (source_code)
def remove_comment_start_end (filename, start_comment, end_comment):
source_code = open (filename, 'r').read ()
while 1:
start_index = string.find (source_code, start_comment)
end_index = string.find (source_code, end_comment)
if start_index < 0 or end_index < start_index:
break
end_index += len (end_comment)
source_code = source_code [:start_index-1] + source_code [end_index:] ;
open (filename, 'w').write (source_code)
def remove_strings_from_file (filename, str_list):
file_text = open (filename, 'r').read ()
for current_str in str_list:
file_text = string.replace (file_text, current_str, '')
open (filename, 'w').write (file_text)
def string_replace_in_file (filename, from_str, to_str):
file_text = open (filename, 'r').read ()
file_text = string.replace (file_text, from_str, to_str)
open (filename, 'w').write (file_text)
def remove_regex_from_file (filename, regex_list):
file_text = open (filename, 'r').read ()
for regex in regex_list:
file_text = re.sub (regex, '', file_text, re.MULTILINE | re.DOTALL)
open (filename, 'w').write (file_text)
#==========================================================================
def find_configure_version (filename):
# AM_INIT_AUTOMAKE(libsndfile,0.0.21pre6)
file = open (filename)
while 1:
line = file.readline ()
if re.search ("AC_INIT", line):
x = re.sub ("[^\(]+\(", "", line)
x = re.sub ("\).*\n", "", x)
x = string.split (x, ",")
package = x [0]
version = x [1]
break
file.close ()
# version = re.escape (version)
return package, version
def fix_configure_ac_file (filename):
data = open (filename, 'r').read ()
data = string.replace (data, "AM_INIT_AUTOMAKE(libsndfile,", "AM_INIT_AUTOMAKE(libsndfile_lite,", 1)
file = open (filename, 'w')
file.write (data)
file.close ()
def make_dist_file (package, version):
print "Making dist file."
tar_gz_file = "%s-%s.tar.gz" % (package, version)
if os.path.exists (tar_gz_file):
return
if os.system ("make dist"):
sys.exit (1)
return
def delete_files (file_list):
for file_name in file_list:
os.remove (file_name)
#=======================================================================
source_dir = os.getcwd ()
conf_package, conf_version = find_configure_version ('configure.ac')
package_version = "%s-%s" % (conf_package, conf_version)
lite_version = "%s_lite-%s" % (conf_package, conf_version)
os.system ("rm -rf %s%s.tar.gz" % (source_dir, package_version))
os.system ("make dist")
make_dist_file (conf_package, conf_version)
os.chdir ("/tmp")
print "Uncompressing .tar.gz file."
os.system ("rm -rf %s" % package_version)
if os.system ("tar zxf %s/%s.tar.gz" % (source_dir, package_version)):
sys.exit (1)
print "Renaming to libsndfile_lite."
os.system ("rm -rf %s" % lite_version)
os.rename (package_version, lite_version)
print "Changing into libsndfile_lite directory."
os.chdir (lite_version)
print "Removing un-neeed directories."
delete_dirs = [ 'src/G72x' ]
for dir_name in delete_dirs:
os.system ("rm -rf %s" % dir_name)
print "Removing un-needed files."
delete_files ([ 'src/ircam.c', 'src/nist.c',
'src/ima_adpcm.c', 'src/ms_adpcm.c', 'src/au_g72x.c',
'src/mat4.c', 'src/mat5.c', 'src/dwvw.c', 'src/paf.c',
'src/ogg.c', 'src/pvf.c', 'src/xi.c', 'src/htk.c',
'src/sd2.c', 'src/rx2.c', 'src/txw.c', 'src/wve.c',
'src/dwd.c', 'src/svx.c', 'src/voc.c', 'src/vox_adpcm.c',
'src/sds.c'
])
print "Hacking 'configure.ac' and 'src/Makefile.am'."
remove_strings_from_file ('configure.ac', [ 'src/G72x/Makefile' ])
remove_strings_from_file ('src/Makefile.am', [ 'G72x/libg72x.la', 'G72x',
'ircam.c', 'nist.c', 'ima_adpcm.c', 'ms_adpcm.c', 'au_g72x.c', 'mat4.c',
'mat5.c', 'dwvw.c', 'paf.c', 'ogg.c', 'pvf.c', 'xi.c', 'htk.c',
'sd2.c', 'rx2.c', 'txw.c', 'wve.c', 'dwd.c', 'svx.c', 'voc.c',
'vox_adpcm.c', 'sds.c'
])
#----------------------------------------------------------------------------
print "Hacking header files."
remove_protos_from_file ('src/common.h', [ 'xi_open', 'sd2_open', 'ogg_open',
'dwvw_init', 'paf_open', 'svx_open', 'nist_open', 'rx2_open', 'mat4_open',
'voc_open', 'txw_open', 'dwd_open', 'htk_open', 'wve_open', 'mat5_open',
'pvf_open', 'ircam_open', 'sds_open',
'float32_init', 'double64_init', 'aiff_ima_init', 'vox_adpcm_init',
'wav_w64_ima_init', 'wav_w64_msadpcm_init'
])
remove_protos_from_file ('src/au.h',
[ 'au_g72x_reader_init', 'au_g72x_writer_init' ])
remove_protos_from_file ('src/wav_w64.h', [ 'msadpcm_write_adapt_coeffs' ])
#----------------------------------------------------------------------------
print "Hacking case statements."
remove_comment_start_end ('src/sndfile.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/aiff.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/au.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/raw.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/w64.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/wav.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/double64.c', '/* Lite remove start */' , '/* Lite remove end */')
remove_comment_start_end ('src/float32.c', '/* Lite remove start */' , '/* Lite remove end */')
#----------------------------------------------------------------------------
print "Hacking src/pcm.c."
remove_funcs_from_file ('src/pcm.c', [
'f2sc_array', 'f2sc_clip_array', 'f2uc_array', 'f2uc_clip_array',
'f2bes_array', 'f2bes_clip_array', 'f2les_array', 'f2les_clip_array',
'f2let_array', 'f2let_clip_array', 'f2bet_array', 'f2bet_clip_array',
'f2bei_array', 'f2bei_clip_array', 'f2lei_array', 'f2lei_clip_array',
'd2sc_array', 'd2sc_clip_array', 'd2uc_array', 'd2uc_clip_array',
'd2bes_array', 'd2bes_clip_array', 'd2les_array', 'd2les_clip_array',
'd2let_array', 'd2let_clip_array', 'd2bet_array', 'd2bet_clip_array',
'd2bei_array', 'd2bei_clip_array', 'd2lei_array', 'd2lei_clip_array',
])
remove_funcs_and_protos_from_file ('src/pcm.c', [
'pcm_read_sc2f', 'pcm_read_uc2f', 'pcm_read_les2f', 'pcm_read_bes2f',
'pcm_read_let2f', 'pcm_read_bet2f', 'pcm_read_lei2f', 'pcm_read_bei2f',
'pcm_read_sc2d', 'pcm_read_uc2d', 'pcm_read_les2d', 'pcm_read_bes2d',
'pcm_read_let2d', 'pcm_read_bet2d', 'pcm_read_lei2d', 'pcm_read_bei2d',
'pcm_write_f2sc', 'pcm_write_f2uc', 'pcm_write_f2bes', 'pcm_write_f2les',
'pcm_write_f2bet', 'pcm_write_f2let', 'pcm_write_f2bei', 'pcm_write_f2lei',
'pcm_write_d2sc', 'pcm_write_d2uc', 'pcm_write_d2bes', 'pcm_write_d2les',
'pcm_write_d2bet', 'pcm_write_d2let', 'pcm_write_d2bei', 'pcm_write_d2lei',
'sc2f_array', 'uc2f_array', 'bes2f_array', 'les2f_array',
'bet2f_array', 'let2f_array', 'bei2f_array', 'lei2f_array',
'sc2d_array', 'uc2d_array', 'bes2d_array', 'les2d_array',
'bet2d_array', 'let2d_array', 'bei2d_array', 'lei2d_array'
])
remove_includes_from_file ('src/pcm.c', [ 'float_cast.h' ])
remove_all_assignments_from_file ('src/pcm.c', [
'psf-\>write_float', 'psf\-\>write_double',
'psf-\>read_float', 'psf\-\>read_double' ])
#----------------------------------------------------------------------------
print "Hacking src/ulaw.c."
remove_funcs_and_protos_from_file ('src/ulaw.c', [
'ulaw_read_ulaw2f', 'ulaw_read_ulaw2d',
'ulaw_write_f2ulaw', 'ulaw_write_d2ulaw',
'ulaw2f_array', 'ulaw2d_array', 'f2ulaw_array', 'd2ulaw_array'
])
remove_includes_from_file ('src/ulaw.c', [ 'float_cast.h' ])
remove_all_assignments_from_file ('src/ulaw.c', [
'psf-\>write_float', 'psf\-\>write_double',
'psf-\>read_float', 'psf\-\>read_double' ])
#----------------------------------------------------------------------------
print "Hacking src/alaw.c."
remove_funcs_and_protos_from_file ('src/alaw.c', [
'alaw_read_alaw2f', 'alaw_read_alaw2d',
'alaw_write_f2alaw', 'alaw_write_d2alaw',
'alaw2f_array', 'alaw2d_array', 'f2alaw_array', 'd2alaw_array'
])
remove_includes_from_file ('src/alaw.c', [ 'float_cast.h' ])
remove_all_assignments_from_file ('src/alaw.c', [
'psf-\>write_float', 'psf\-\>write_double',
'psf-\>read_float', 'psf\-\>read_double' ])
#----------------------------------------------------------------------------
print "Hacking src/gsm610.c."
remove_funcs_and_protos_from_file ('src/gsm610.c', [
'gsm610_read_f', 'gsm610_read_d', 'gsm610_write_f', 'gsm610_write_d'
])
remove_includes_from_file ('src/gsm610.c', [ 'float_cast.h' ])
remove_all_assignments_from_file ('src/gsm610.c', [
'psf-\>write_float', 'psf\-\>write_double',
'psf-\>read_float', 'psf\-\>read_double' ])
#----------------------------------------------------------------------------
print "Hacking src/float32.c."
# string_replace_in_file ('src/float32.c', '"float_cast.h"', '<math.h>')
remove_funcs_from_file ('src/float32.c', [ 'float32_init' ])
remove_funcs_and_protos_from_file ('src/float32.c', [
'host_read_f2s', 'host_read_f2i', 'host_read_f', 'host_read_f2d',
'host_write_s2f', 'host_write_i2f', 'host_write_f', 'host_write_d2f',
'f2s_array', 'f2i_array', 'f2d_array', 's2f_array', 'i2f_array', 'd2f_array',
'float32_peak_update',
'replace_read_f2s', 'replace_read_f2i', 'replace_read_f', 'replace_read_f2d',
'replace_write_s2f', 'replace_write_i2f', 'replace_write_f', 'replace_write_d2f',
'bf2f_array', 'f2bf_array',
'float32_get_capability',
])
#----------------------------------------------------------------------------
print "Hacking src/double64.c."
remove_funcs_from_file ('src/double64.c', [ 'double64_init' ])
remove_funcs_and_protos_from_file ('src/double64.c', [
'host_read_d2s', 'host_read_d2i', 'host_read_d2f', 'host_read_d',
'host_write_s2d', 'host_write_i2d', 'host_write_f2d', 'host_write_d',
'd2s_array', 'd2i_array', 'd2f_array',
's2d_array', 'i2d_array', 'f2d_array',
'double64_peak_update', 'double64_get_capability',
'replace_read_d2s', 'replace_read_d2i', 'replace_read_d2f', 'replace_read_d',
'replace_write_s2d', 'replace_write_i2d', 'replace_write_f2d', 'replace_write_d',
'd2bd_read', 'bd2d_write'
])
#----------------------------------------------------------------------------
print "Hacking test programs."
delete_files ([ 'tests/dwvw_test.c', 'tests/floating_point_test.c',
'tests/dft_cmp.c', 'tests/peak_chunk_test.c',
'tests/scale_clip_test.tpl', 'tests/scale_clip_test.def'
])
remove_comment_start_end ('tests/write_read_test.def', '/* Lite remove start */', '/* Lite remove end */')
remove_comment_start_end ('tests/write_read_test.tpl', '/* Lite remove start */', '/* Lite remove end */')
remove_comment_start_end ('tests/Makefile.am', '# Lite remove start', '# Lite remove end')
remove_strings_from_file ('tests/Makefile.am', [
'scale_clip_test.tpl', 'scale_clip_test.def',
'\n\t./dwvw_test',
'\n\t./floating_point_test', '\n\t./scale_clip_test',
'\n\t./peak_chunk_test aiff', '\n\t./peak_chunk_test wav',
'\n\t./command_test norm', '\n\t./command_test peak',
'\n\t./lossy_comp_test wav_ima', '\n\t./lossy_comp_test wav_msadpcm',
'\n\t./lossy_comp_test au_g721', '\n\t./lossy_comp_test au_g723',
'\n\t./lossy_comp_test vox_adpcm',
'\n\t./lossy_comp_test w64_ima', '\n\t./lossy_comp_test w64_msadpcm',
'peak_chunk_test', 'dwvw_test', 'floating_point_test', 'scale_clip_test',
'paf-tests', 'svx-tests', 'nist-tests', 'ircam-tests', 'voc-tests',
'mat4-tests', 'mat5-tests', 'pvf-tests', 'xi-tests', 'htk-tests',
'sds-tests'
])
remove_comment_start_end ('tests/pcm_test.c', '/* Lite remove start */', '/* Lite remove end */')
remove_funcs_and_protos_from_file ('tests/pcm_test.c', [
'pcm_test_float', 'pcm_test_double'
])
remove_comment_start_end ('tests/lossy_comp_test.c', '/* Lite remove start */', '/* Lite remove end */')
remove_funcs_and_protos_from_file ('tests/lossy_comp_test.c', [
'lcomp_test_float', 'lcomp_test_double', 'sdlcomp_test_float', 'sdlcomp_test_double',
'smoothed_diff_float', 'smoothed_diff_double'
])
remove_comment_start_end ('tests/multi_file_test.c', '/* Lite remove start */', '/* Lite remove end */')
remove_strings_from_file ('tests/stdio_test.c', [
'"paf",', '"svx",', '"nist",', '"ircam",', '"voc",', '"mat4",', '"mat5",', '"pvf",'
])
remove_comment_start_end ('tests/pipe_test.c', '/* Lite remove start */', '/* Lite remove end */')
#----------------------------------------------------------------------------
print "Fixing configure.ac file."
fix_configure_ac_file ('configure.ac')
print "Building and testing source."
# Try --disable-shared --disable-gcc-opt
if os.system ("./reconfigure.mk && ./configure --disable-shared --disable-gcc-opt && make check"):
os.system ('PS1="FIX > " bash --norc')
sys.exit (1)
print "Making distcheck"
if os.system ("make distcheck"):
os.system ('PS1="FIX > " bash --norc')
sys.exit (1)
print "Copying tarball"
if os.system ("cp %s.tar.gz %s" % (lite_version, source_dir)):
print "??? %s.tar.gz ???" % lite_version
os.system ('PS1="FIX > " bash --norc')
sys.exit (1)
os.chdir (source_dir)
os.system ("rm -rf /tmp/%s" % lite_version)
print "Done."