2015-05-15 15:08:42 -04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
import os, re, sys, getopt
|
|
|
|
|
|
2015-08-17 13:58:38 -04:00
|
|
|
def compile(filenames, output_source, relative_dirs, name):
|
2015-05-15 15:08:42 -04:00
|
|
|
# Make sure dirs have trailing slash /
|
|
|
|
|
relative_dirs = [os.path.join(d, '') for d in relative_dirs]
|
|
|
|
|
sourcefile = open(output_source, 'w')
|
|
|
|
|
sourcefile.write("#include <cpp3ds/Resources.hpp>\nnamespace cpp3ds { namespace priv {\n")
|
|
|
|
|
count = 1
|
|
|
|
|
varlist = []
|
|
|
|
|
for filename in filenames:
|
|
|
|
|
varname = "res_%s_%d" % (re.sub('[^0-9a-zA-Z_]', '_', os.path.basename(filename)), count)
|
2015-08-17 13:58:38 -04:00
|
|
|
resname = filename
|
2015-05-15 15:08:42 -04:00
|
|
|
for d in relative_dirs:
|
|
|
|
|
if filename.find(d) == 0:
|
|
|
|
|
resname = filename.replace(d,'').replace('\\','/')
|
|
|
|
|
varlist += [[varname, resname]]
|
|
|
|
|
with open(filename, 'rb') as f:
|
|
|
|
|
sourcefile.write("const Uint8 %s_data[] = {\n" % varname)
|
|
|
|
|
byte = f.read(1)
|
|
|
|
|
while byte:
|
|
|
|
|
sourcefile.write("%d," % ord(byte))
|
|
|
|
|
byte = f.read(1)
|
|
|
|
|
sourcefile.write("\n};\n")
|
|
|
|
|
sourcefile.write("const Uint32 %s_size = %d;\n" % (varname, f.tell()))
|
|
|
|
|
count += 1
|
2015-08-17 13:58:38 -04:00
|
|
|
sourcefile.write("std::map<std::string, ResourceInfo> %s = {\n" % name)
|
2015-05-15 15:08:42 -04:00
|
|
|
for varname in varlist:
|
|
|
|
|
sourcefile.write("{\"%s\",{%s_data,%s_size}}," % (varname[1], varname[0], varname[0]))
|
|
|
|
|
sourcefile.write('};}}')
|
|
|
|
|
|
|
|
|
|
def show_usage_exit():
|
2015-08-17 13:58:38 -04:00
|
|
|
print('res_compile.py -o <cpp source output> -d <relative directory> file1, file2, ...')
|
2015-05-15 15:08:42 -04:00
|
|
|
sys.exit(2)
|
|
|
|
|
|
|
|
|
|
def main(argv):
|
|
|
|
|
try:
|
2015-08-17 13:58:38 -04:00
|
|
|
opts, args = getopt.getopt(argv, "hn:o:d:")
|
2015-05-15 15:08:42 -04:00
|
|
|
except getopt.GetoptError:
|
|
|
|
|
show_usage_exit()
|
|
|
|
|
rel_dirs = []
|
2015-08-17 13:58:38 -04:00
|
|
|
name = "resources"
|
2015-05-15 15:08:42 -04:00
|
|
|
for opt, arg in opts:
|
|
|
|
|
if opt == '-h':
|
2015-08-17 13:58:38 -04:00
|
|
|
show_usage_exit()
|
2015-05-15 15:08:42 -04:00
|
|
|
elif opt in ("-d", "--dir"):
|
|
|
|
|
rel_dirs += [arg]
|
|
|
|
|
elif opt in ("-o", "--output"):
|
|
|
|
|
outfile = arg
|
2015-08-17 13:58:38 -04:00
|
|
|
elif opt in ("-n", "--name"):
|
|
|
|
|
name = arg
|
2015-05-15 15:08:42 -04:00
|
|
|
# print('Opts are: ', opts)
|
|
|
|
|
# print('Args are: ', args)
|
2015-08-17 13:58:38 -04:00
|
|
|
if not outfile:
|
2015-05-15 15:08:42 -04:00
|
|
|
show_usage_exit()
|
2015-08-17 13:58:38 -04:00
|
|
|
compile(args, outfile, rel_dirs, name)
|
2015-05-15 15:08:42 -04:00
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main(sys.argv[1:])
|