Skip to content

Commit d16ea17

Browse files
authored
Merge pull request #37 from kcbanner/0.15.x
Remove usingnamespace usage and fixup build script / callconv deprecations
2 parents 511a2d1 + 33b73d8 commit d16ea17

File tree

2 files changed

+67
-44
lines changed

2 files changed

+67
-44
lines changed

build.zig

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,19 @@ pub fn build(b: *std.Build) void {
3838

3939
if (target.result.os.tag == .emscripten) return;
4040

41-
const glfw = if (options.shared) blk: {
42-
const lib = b.addSharedLibrary(.{
43-
.name = "glfw",
41+
const glfw = b.addLibrary(.{
42+
.name = "glfw",
43+
.linkage = if (options.shared) .dynamic else .static,
44+
.root_module = b.createModule(.{
4445
.target = target,
4546
.optimize = optimize,
46-
});
47-
if (target.result.os.tag == .windows) {
48-
lib.root_module.addCMacro("_GLFW_BUILD_DLL", "");
49-
}
50-
break :blk lib;
51-
} else b.addStaticLibrary(.{
52-
.name = "glfw",
53-
.target = target,
54-
.optimize = optimize,
47+
}),
5548
});
49+
50+
if (options.shared and target.result.os.tag == .windows) {
51+
glfw.root_module.addCMacro("_GLFW_BUILD_DLL", "");
52+
}
53+
5654
b.installArtifact(glfw);
5755
glfw.installHeadersDirectory(b.path("libs/glfw/include"), "", .{});
5856

@@ -183,9 +181,11 @@ pub fn build(b: *std.Build) void {
183181
const test_step = b.step("test", "Run zglfw tests");
184182
const tests = b.addTest(.{
185183
.name = "zglfw-tests",
186-
.root_source_file = b.path("src/zglfw.zig"),
187-
.target = target,
188-
.optimize = optimize,
184+
.root_module = b.createModule(.{
185+
.root_source_file = b.path("src/zglfw.zig"),
186+
.target = target,
187+
.optimize = optimize,
188+
}),
189189
});
190190
addIncludePaths(b, tests, target, options);
191191
linkSystemLibs(b, tests, target, options);

src/zglfw.zig

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ extern fn glfwGetError(out_desc: ?*?[*:0]const u8) ErrorCode;
151151

152152
pub const setErrorCallback = glfwSetErrorCallback;
153153
extern fn glfwSetErrorCallback(?ErrorFn) ?ErrorFn;
154-
pub const ErrorFn = *const fn (ErrorCode, desc: ?[*:0]const u8) callconv(.C) void;
154+
pub const ErrorFn = *const fn (ErrorCode, desc: ?[*:0]const u8) callconv(.c) void;
155155

156156
pub fn rawMouseMotionSupported() bool {
157157
return glfwRawMouseMotionSupported() == TRUE;
@@ -736,6 +736,7 @@ pub const Window = opaque {
736736
pub const getClipboardString = zglfw.getClipboardString;
737737
pub const setClipboardString = zglfw.setClipboardString;
738738
pub const setCursor = zglfw.setCursor;
739+
pub const getInputMode = zglfw.getInputMode;
739740
pub const setInputMode = zglfw.setInputMode;
740741
pub const setInputModeUntyped = zglfw.setInputModeUntyped;
741742
pub const swapBuffers = zglfw.swapBuffers;
@@ -832,47 +833,47 @@ extern fn glfwSetWindowUserPointer(window: *Window, pointer: ?*anyopaque) void;
832833

833834
pub const setFramebufferSizeCallback = glfwSetFramebufferSizeCallback;
834835
extern fn glfwSetFramebufferSizeCallback(*Window, ?FramebufferSizeFn) ?FramebufferSizeFn;
835-
pub const FramebufferSizeFn = *const fn (*Window, width: c_int, height: c_int) callconv(.C) void;
836+
pub const FramebufferSizeFn = *const fn (*Window, width: c_int, height: c_int) callconv(.c) void;
836837

837838
pub const setWindowSizeCallback = glfwSetWindowSizeCallback;
838839
extern fn glfwSetWindowSizeCallback(*Window, ?WindowSizeFn) ?WindowSizeFn;
839-
pub const WindowSizeFn = *const fn (*Window, width: c_int, height: c_int) callconv(.C) void;
840+
pub const WindowSizeFn = *const fn (*Window, width: c_int, height: c_int) callconv(.c) void;
840841

841842
pub const setWindowPosCallback = glfwSetWindowPosCallback;
842843
extern fn glfwSetWindowPosCallback(*Window, ?WindowPosFn) ?WindowPosFn;
843-
pub const WindowPosFn = *const fn (*Window, x: c_int, y: c_int) callconv(.C) void;
844+
pub const WindowPosFn = *const fn (*Window, x: c_int, y: c_int) callconv(.c) void;
844845

845846
pub const setWindowFocusCallback = glfwSetWindowFocusCallback;
846847
extern fn glfwSetWindowFocusCallback(*Window, ?WindowFocusFn) ?WindowFocusFn;
847-
pub const WindowFocusFn = *const fn (*Window, focused: Bool) callconv(.C) void;
848+
pub const WindowFocusFn = *const fn (*Window, focused: Bool) callconv(.c) void;
848849

849850
pub const setWindowIconifyCallback = glfwSetWindowIconifyCallback;
850851
extern fn glfwSetWindowIconifyCallback(*Window, ?IconifyFn) ?IconifyFn;
851-
pub const IconifyFn = *const fn (*Window, iconified: Bool) callconv(.C) void;
852+
pub const IconifyFn = *const fn (*Window, iconified: Bool) callconv(.c) void;
852853

853854
pub const setWindowContentScaleCallback = glfwSetWindowContentScaleCallback;
854855
extern fn glfwSetWindowContentScaleCallback(*Window, ?WindowContentScaleFn) ?WindowContentScaleFn;
855-
pub const WindowContentScaleFn = *const fn (*Window, xscale: f32, yscale: f32) callconv(.C) void;
856+
pub const WindowContentScaleFn = *const fn (*Window, xscale: f32, yscale: f32) callconv(.c) void;
856857

857858
pub const setWindowCloseCallback = glfwSetWindowCloseCallback;
858859
extern fn glfwSetWindowCloseCallback(*Window, ?WindowCloseFn) ?WindowCloseFn;
859-
pub const WindowCloseFn = *const fn (*Window) callconv(.C) void;
860+
pub const WindowCloseFn = *const fn (*Window) callconv(.c) void;
860861

861862
pub const setKeyCallback = glfwSetKeyCallback;
862863
extern fn glfwSetKeyCallback(*Window, ?KeyFn) ?KeyFn;
863-
pub const KeyFn = *const fn (*Window, Key, scancode: c_int, Action, Mods) callconv(.C) void;
864+
pub const KeyFn = *const fn (*Window, Key, scancode: c_int, Action, Mods) callconv(.c) void;
864865

865866
pub const setCharCallback = glfwSetCharCallback;
866867
extern fn glfwSetCharCallback(*Window, ?CharFn) ?CharFn;
867-
pub const CharFn = *const fn (*Window, codepoint: u32) callconv(.C) void;
868+
pub const CharFn = *const fn (*Window, codepoint: u32) callconv(.c) void;
868869

869870
pub const setDropCallback = glfwSetDropCallback;
870871
extern fn glfwSetDropCallback(window: *Window, callback: ?DropFn) ?DropFn;
871872
pub const DropFn = *const fn (
872873
window: *Window,
873874
path_count: i32,
874875
paths: [*][*:0]const u8,
875-
) callconv(.C) void;
876+
) callconv(.c) void;
876877

877878
pub const setMouseButtonCallback = glfwSetMouseButtonCallback;
878879
extern fn glfwSetMouseButtonCallback(window: *Window, callback: ?MouseButtonFn) ?MouseButtonFn;
@@ -881,7 +882,7 @@ pub const MouseButtonFn = *const fn (
881882
button: MouseButton,
882883
action: Action,
883884
mods: Mods,
884-
) callconv(.C) void;
885+
) callconv(.c) void;
885886

886887
pub const getWindowMonitor = glfwGetWindowMonitor;
887888
extern fn glfwGetWindowMonitor(window: *Window) ?*Monitor;
@@ -892,22 +893,22 @@ pub const CursorPosFn = *const fn (
892893
window: *Window,
893894
xpos: f64,
894895
ypos: f64,
895-
) callconv(.C) void;
896+
) callconv(.c) void;
896897

897898
pub const setScrollCallback = glfwSetScrollCallback;
898899
extern fn glfwSetScrollCallback(window: *Window, callback: ?ScrollFn) ?ScrollFn;
899900
pub const ScrollFn = *const fn (
900901
window: *Window,
901902
xoffset: f64,
902903
yoffset: f64,
903-
) callconv(.C) void;
904+
) callconv(.c) void;
904905

905906
pub const setCursorEnterCallback = glfwSetCursorEnterCallback;
906907
extern fn glfwSetCursorEnterCallback(window: *Window, callback: ?CursorEnterFn) ?CursorEnterFn;
907908
pub const CursorEnterFn = *const fn (
908909
window: *Window,
909910
entered: i32,
910-
) callconv(.C) void;
911+
) callconv(.c) void;
911912

912913
pub const setWindowMonitor = glfwSetWindowMonitor;
913914
extern fn glfwSetWindowMonitor(
@@ -1009,6 +1010,19 @@ pub const InputMode = enum(c_int) {
10091010
};
10101011
}
10111012
};
1013+
pub fn getInputMode(
1014+
window: *Window,
1015+
comptime mode: InputMode,
1016+
) Error!InputMode.ValueType(mode) {
1017+
return @enumFromInt(try getInputModeUntyped(window, mode));
1018+
}
1019+
pub fn getInputModeUntyped(window: *Window, mode: InputMode) Error!c_int {
1020+
const value = glfwGetInputMode(window, mode);
1021+
try maybeError();
1022+
return value;
1023+
}
1024+
extern fn glfwGetInputMode(*Window, InputMode) c_int;
1025+
10121026
pub fn setInputMode(
10131027
window: *Window,
10141028
comptime mode: InputMode,
@@ -1232,20 +1246,29 @@ fn _isLinuxDesktopLike() bool {
12321246
// Emscripten
12331247
//
12341248
//--------------------------------------------------------------------------------------------------
1235-
const os = builtin.target.os.tag;
1236-
usingnamespace if (os == .emscripten or os == .freestanding) struct {
1237-
// GLFW - emscripten uses older version that doesn't have these functions - implement dummies
1238-
var glfwGetGamepadStateWarnPrinted: bool = false;
1239-
pub export fn glfwGetGamepadState(_: i32, _: ?*anyopaque) i32 {
1240-
if (!glfwGetGamepadStateWarnPrinted) {
1241-
std.log.err("glfwGetGamepadState(): not implemented! Use emscripten specific functions: https://emscripten.org/docs/api_reference/html5.h.html?highlight=gamepadstate#c.emscripten_get_gamepad_status", .{});
1242-
glfwGetGamepadStateWarnPrinted = true;
1249+
comptime {
1250+
const os = builtin.target.os.tag;
1251+
const emscripten = struct {
1252+
// GLFW - emscripten uses older version that doesn't have these functions - implement dummies
1253+
var glfwGetGamepadStateWarnPrinted: bool = false;
1254+
fn glfwGetGamepadState(_: i32, _: ?*anyopaque) callconv(.c) i32 {
1255+
if (!glfwGetGamepadStateWarnPrinted) {
1256+
std.log.err("glfwGetGamepadState(): not implemented! Use emscripten specific functions: https://emscripten.org/docs/api_reference/html5.h.html?highlight=gamepadstate#c.emscripten_get_gamepad_status", .{});
1257+
glfwGetGamepadStateWarnPrinted = true;
1258+
}
1259+
return 0; // false - failure
12431260
}
1244-
return 0; // false - failure
1245-
}
12461261

1247-
/// use glfwSetCallback instead
1248-
pub export fn glfwGetError() i32 {
1249-
return 0; // no error
1262+
/// use glfwSetCallback instead
1263+
/// This is a stub implementation for Emscripten compatibility.
1264+
/// It always returns 0 to indicate no error, as Emscripten does not support this functionality.
1265+
fn glfwGetError() callconv(.c) i32 {
1266+
return 0; // no error
1267+
}
1268+
};
1269+
1270+
if (os == .emscripten or os == .freestanding) {
1271+
@export(&emscripten.glfwGetGamepadState, .{ .name = "glfwGetGamepadState" });
1272+
@export(&emscripten.glfwGetError, .{ .name = "glfwGetError" });
12501273
}
1251-
} else struct {};
1274+
}

0 commit comments

Comments
 (0)