mirror of
https://github.com/MezzalunaWM/Mezzaluna.git
synced 2026-03-08 04:57:32 -04:00
load a runtime file where the prefix is determined at comptime
This commit is contained in:
parent
ba4d403119
commit
86a01bbcf2
4 changed files with 59 additions and 8 deletions
12
build.zig
12
build.zig
|
|
@ -1,4 +1,5 @@
|
|||
const std = @import("std");
|
||||
const builtin = @import("builtin");
|
||||
|
||||
const Scanner = @import("wayland").Scanner;
|
||||
|
||||
|
|
@ -6,6 +7,13 @@ pub fn build(b: *std.Build) void {
|
|||
const target = b.standardTargetOptions(.{});
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
|
||||
// TODO: this will probably change based on the install paths, make this a var
|
||||
// that can be passed at comptime?
|
||||
const runtime_path_prefix = switch (builtin.mode) {
|
||||
.Debug => "runtime/",
|
||||
else => "/usr/share",
|
||||
};
|
||||
|
||||
// If instead your goal is to create an executable, consider if users might
|
||||
// be interested in also being able to embed the core functionality of your
|
||||
// program in their own executable in order to avoid the overhead involved in
|
||||
|
|
@ -60,6 +68,10 @@ pub fn build(b: *std.Build) void {
|
|||
mez.linkSystemLibrary("xkbcommon");
|
||||
mez.linkSystemLibrary("pixman-1");
|
||||
|
||||
const options = b.addOptions();
|
||||
options.addOption([]const u8, "runtime_path_prefix", runtime_path_prefix);
|
||||
mez.root_module.addOptions("config", options);
|
||||
|
||||
b.installArtifact(mez);
|
||||
|
||||
const run_step = b.step("run", "Run the app");
|
||||
|
|
|
|||
1
runtime/share/mezzaluna/init.lua
Normal file
1
runtime/share/mezzaluna/init.lua
Normal file
|
|
@ -0,0 +1 @@
|
|||
print("hello from our runtime file")
|
||||
43
src/lua.zig
Normal file
43
src/lua.zig
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
const Lua = @This();
|
||||
|
||||
const std = @import("std");
|
||||
const config = @import("config");
|
||||
const zlua = @import("zlua");
|
||||
|
||||
const gpa = std.heap.c_allocator;
|
||||
|
||||
state: *zlua.Lua,
|
||||
|
||||
fn loadRuntimeDir(self: *Lua) !void {
|
||||
const tmppath = try std.fs.path.join(gpa, &[_][]const u8{
|
||||
config.runtime_path_prefix,
|
||||
"share",
|
||||
"mezzaluna",
|
||||
"init.lua",
|
||||
});
|
||||
var path_buffer = try gpa.alloc(u8, tmppath.len + 1);
|
||||
std.mem.copyForwards(u8, path_buffer[0..tmppath.len], tmppath);
|
||||
path_buffer[tmppath.len] = 0;
|
||||
const path: [:0]u8 = path_buffer[0..tmppath.len :0];
|
||||
|
||||
try self.state.doFile(path);
|
||||
}
|
||||
|
||||
pub fn init(self: *Lua) !void {
|
||||
self.state = try zlua.Lua.init(gpa);
|
||||
errdefer self.state.deinit();
|
||||
self.state.openLibs();
|
||||
|
||||
{
|
||||
self.state.newTable();
|
||||
defer _ = self.state.pushString("mez");
|
||||
}
|
||||
|
||||
try loadRuntimeDir(self);
|
||||
|
||||
std.log.debug("Loaded lua", .{});
|
||||
}
|
||||
|
||||
pub fn deinit(self: *Lua) void {
|
||||
self.state.deinit();
|
||||
}
|
||||
11
src/main.zig
11
src/main.zig
|
|
@ -1,25 +1,20 @@
|
|||
const std = @import("std");
|
||||
const wlr = @import("wlroots");
|
||||
|
||||
const zlua = @import("zlua");
|
||||
const Lua = zlua.Lua;
|
||||
|
||||
const Server = @import("server.zig");
|
||||
const Lua = @import("lua.zig");
|
||||
|
||||
const gpa = std.heap.c_allocator;
|
||||
|
||||
pub var server: Server = undefined;
|
||||
pub var lua: Lua = undefined;
|
||||
|
||||
pub fn main() !void {
|
||||
wlr.log.init(.err, null);
|
||||
|
||||
var lua = try Lua.init(gpa);
|
||||
defer lua.deinit();
|
||||
lua.openLibs();
|
||||
lua.doString("print('Hello from Lua embedded in Zig!')") catch {};
|
||||
|
||||
std.log.info("Starting mezzaluna", .{});
|
||||
|
||||
try lua.init();
|
||||
try server.init();
|
||||
defer server.deinit();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue