river: make server a global variable
This commit is contained in:
parent
7ffa2f4b9e
commit
271b1563a8
1 changed files with 47 additions and 48 deletions
|
@ -26,7 +26,7 @@ const util = @import("util.zig");
|
|||
|
||||
const Server = @import("Server.zig");
|
||||
|
||||
const log_server = std.log.scoped(.server);
|
||||
pub var server: Server = undefined;
|
||||
|
||||
pub var level: std.log.Level = switch (std.builtin.mode) {
|
||||
.Debug => .debug,
|
||||
|
@ -44,47 +44,6 @@ const usage: []const u8 =
|
|||
\\
|
||||
;
|
||||
|
||||
fn testConfigPath(comptime fmt: []const u8, args: anytype) std.fmt.AllocPrintError!?[:0]const u8 {
|
||||
const path = try std.fmt.allocPrintZ(util.gpa, fmt, args);
|
||||
os.access(path, os.X_OK) catch {
|
||||
util.gpa.free(path);
|
||||
return null;
|
||||
};
|
||||
return path;
|
||||
}
|
||||
|
||||
fn getStartupCommand() std.fmt.AllocPrintError!?[:0]const u8 {
|
||||
if (os.getenv("XDG_CONFIG_HOME")) |xdg_config_home| {
|
||||
if (try testConfigPath("{}/river/init", .{xdg_config_home})) |path| {
|
||||
return path;
|
||||
}
|
||||
} else if (os.getenv("HOME")) |home| {
|
||||
if (try testConfigPath("{}/.config/river/init", .{home})) |path| {
|
||||
return path;
|
||||
}
|
||||
}
|
||||
if (try testConfigPath(build_options.default_config_path, .{})) |path| {
|
||||
return path;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
pub fn log(
|
||||
comptime message_level: std.log.Level,
|
||||
comptime scope: @TypeOf(.foobar),
|
||||
comptime format: []const u8,
|
||||
args: anytype,
|
||||
) void {
|
||||
if (@enumToInt(message_level) <= @enumToInt(level)) {
|
||||
// Don't store/log messages in release small mode to save space
|
||||
if (std.builtin.mode != .ReleaseSmall) {
|
||||
const stderr = std.io.getStdErr().writer();
|
||||
stderr.print(@tagName(message_level) ++ ": (" ++ @tagName(scope) ++ ") " ++
|
||||
format ++ "\n", args) catch return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn main() anyerror!void {
|
||||
var startup_command: ?[:0]const u8 = null;
|
||||
{
|
||||
|
@ -131,8 +90,7 @@ pub fn main() anyerror!void {
|
|||
if (try getStartupCommand()) |path| startup_command = path;
|
||||
}
|
||||
|
||||
log_server.info("initializing server", .{});
|
||||
var server: Server = undefined;
|
||||
std.log.info("initializing server", .{});
|
||||
try server.init();
|
||||
defer server.deinit();
|
||||
|
||||
|
@ -141,7 +99,7 @@ pub fn main() anyerror!void {
|
|||
// Run the child in a new process group so that we can send SIGTERM to all
|
||||
// descendants on exit.
|
||||
const child_pgid = if (startup_command) |cmd| blk: {
|
||||
log_server.info("running startup command '{}'", .{cmd});
|
||||
std.log.info("running startup command '{}'", .{cmd});
|
||||
const child_args = [_:null]?[*:0]const u8{ "/bin/sh", "-c", cmd, null };
|
||||
const pid = try os.fork();
|
||||
if (pid == 0) {
|
||||
|
@ -154,13 +112,13 @@ pub fn main() anyerror!void {
|
|||
break :blk pid;
|
||||
} else null;
|
||||
defer if (child_pgid) |pgid|
|
||||
os.kill(-pgid, os.SIGTERM) catch |e| log_server.err("failed to kill startup process: {}", .{e});
|
||||
os.kill(-pgid, os.SIGTERM) catch |e| std.log.err("failed to kill startup process: {}", .{e});
|
||||
|
||||
log_server.info("running server", .{});
|
||||
std.log.info("running server", .{});
|
||||
|
||||
server.wl_server.run();
|
||||
|
||||
log_server.info("shutting down", .{});
|
||||
std.log.info("shutting down", .{});
|
||||
}
|
||||
|
||||
fn printErrorExit(comptime format: []const u8, args: anytype) noreturn {
|
||||
|
@ -168,3 +126,44 @@ fn printErrorExit(comptime format: []const u8, args: anytype) noreturn {
|
|||
stderr.print(format ++ "\n", args) catch os.exit(1);
|
||||
os.exit(1);
|
||||
}
|
||||
|
||||
fn testConfigPath(comptime fmt: []const u8, args: anytype) std.fmt.AllocPrintError!?[:0]const u8 {
|
||||
const path = try std.fmt.allocPrintZ(util.gpa, fmt, args);
|
||||
os.access(path, os.X_OK) catch {
|
||||
util.gpa.free(path);
|
||||
return null;
|
||||
};
|
||||
return path;
|
||||
}
|
||||
|
||||
fn getStartupCommand() std.fmt.AllocPrintError!?[:0]const u8 {
|
||||
if (os.getenv("XDG_CONFIG_HOME")) |xdg_config_home| {
|
||||
if (try testConfigPath("{}/river/init", .{xdg_config_home})) |path| {
|
||||
return path;
|
||||
}
|
||||
} else if (os.getenv("HOME")) |home| {
|
||||
if (try testConfigPath("{}/.config/river/init", .{home})) |path| {
|
||||
return path;
|
||||
}
|
||||
}
|
||||
if (try testConfigPath(build_options.default_config_path, .{})) |path| {
|
||||
return path;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
pub fn log(
|
||||
comptime message_level: std.log.Level,
|
||||
comptime scope: @TypeOf(.foobar),
|
||||
comptime format: []const u8,
|
||||
args: anytype,
|
||||
) void {
|
||||
if (@enumToInt(message_level) <= @enumToInt(level)) {
|
||||
// Don't store/log messages in release small mode to save space
|
||||
if (std.builtin.mode != .ReleaseSmall) {
|
||||
const stderr = std.io.getStdErr().writer();
|
||||
stderr.print(@tagName(message_level) ++ ": (" ++ @tagName(scope) ++ ") " ++
|
||||
format ++ "\n", args) catch return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue