summaryrefslogtreecommitdiff
path: root/scripts/embed_lua.py
diff options
context:
space:
mode:
authorIndrajith K L2025-11-10 01:58:00 +0530
committerIndrajith K L2025-11-10 01:58:25 +0530
commitd9d1a8a51ea7cd7e7076724918008b6adb1302ca (patch)
tree59a8f258c9bb4db4edafc2c70993319e3c3c859c /scripts/embed_lua.py
parent8c9367f3689aee05d33fc1cae8a5d1aa6d2b5fb8 (diff)
downloadreilua-enhanced-d9d1a8a51ea7cd7e7076724918008b6adb1302ca.tar.gz
reilua-enhanced-d9d1a8a51ea7cd7e7076724918008b6adb1302ca.tar.bz2
reilua-enhanced-d9d1a8a51ea7cd7e7076724918008b6adb1302ca.zip
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.
Diffstat (limited to 'scripts/embed_lua.py')
-rw-r--r--scripts/embed_lua.py40
1 files changed, 32 insertions, 8 deletions
diff --git a/scripts/embed_lua.py b/scripts/embed_lua.py
index 9562354..0d20921 100644
--- a/scripts/embed_lua.py
+++ b/scripts/embed_lua.py
@@ -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')