Add flexible module loading and complete file embedding
- Support any folder structure (no hard-coded folders) - Embed all file types recursively from any folder - Fix require() dot-to-slash conversion for embedded modules - Clean build folder for fresh builds every time - Generate empty headers for Lua-only projects Backward compatible with existing projects.
This commit is contained in:
@@ -27,7 +27,17 @@ def embed_files(output_file, input_files):
|
||||
data = inf.read()
|
||||
|
||||
var_name = sanitize_name(input_file)
|
||||
f.write(f'/* Embedded file: {input_file} */\n')
|
||||
# Get relative path for better module loading
|
||||
# Try to extract path relative to common directories
|
||||
relative_name = input_file
|
||||
for prefix in ['build/', 'build\\']:
|
||||
if prefix in input_file:
|
||||
parts = input_file.split(prefix, 1)
|
||||
if len(parts) > 1:
|
||||
relative_name = parts[1]
|
||||
break
|
||||
|
||||
f.write(f'/* Embedded file: {relative_name} */\n')
|
||||
f.write(f'static const unsigned char embedded_lua_{idx}_{var_name}[] = {{\n')
|
||||
|
||||
for i, byte in enumerate(data):
|
||||
@@ -55,18 +65,32 @@ def embed_files(output_file, input_files):
|
||||
f.write('static const EmbeddedLuaFile embedded_lua_files[] = {\n')
|
||||
for idx, input_file in enumerate(input_files):
|
||||
var_name = sanitize_name(input_file)
|
||||
# Store both original filename and basename for require compatibility
|
||||
basename = os.path.basename(input_file)
|
||||
f.write(f' {{ "{basename}", embedded_lua_{idx}_{var_name}, embedded_lua_{idx}_{var_name}_len }},\n')
|
||||
# Store relative path for proper require() support
|
||||
relative_name = input_file
|
||||
for prefix in ['build/', 'build\\']:
|
||||
if prefix in input_file:
|
||||
parts = input_file.split(prefix, 1)
|
||||
if len(parts) > 1:
|
||||
relative_name = parts[1]
|
||||
break
|
||||
# Normalize path separators
|
||||
relative_name = relative_name.replace('\\', '/')
|
||||
f.write(f' {{ "{relative_name}", embedded_lua_{idx}_{var_name}, embedded_lua_{idx}_{var_name}_len }},\n')
|
||||
f.write('};\n\n')
|
||||
|
||||
f.write(f'static const int embedded_lua_file_count = {len(input_files)};\n\n')
|
||||
|
||||
# Main entry point (first file)
|
||||
var_name = sanitize_name(input_files[0])
|
||||
# Main entry point (first file with 'main.lua' in name, or first file)
|
||||
main_idx = 0
|
||||
for idx, input_file in enumerate(input_files):
|
||||
if 'main.lua' in input_file.lower():
|
||||
main_idx = idx
|
||||
break
|
||||
|
||||
var_name = sanitize_name(input_files[main_idx])
|
||||
f.write('/* Main entry point */\n')
|
||||
f.write(f'#define embedded_main_lua embedded_lua_0_{var_name}\n')
|
||||
f.write(f'#define embedded_main_lua_len embedded_lua_0_{var_name}_len\n\n')
|
||||
f.write(f'#define embedded_main_lua embedded_lua_{main_idx}_{var_name}\n')
|
||||
f.write(f'#define embedded_main_lua_len embedded_lua_{main_idx}_{var_name}_len\n\n')
|
||||
|
||||
f.write('#endif /* EMBEDDED_MAIN_H */\n')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user