From dd8fde52d9d62f322df8cb12a0e1adc361baf506 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 25 Oct 2022 16:21:11 -0700 Subject: [PATCH] pkg/objc starting --- build.zig | 2 ++ pkg/objc/build.zig | 10 ++++++++++ pkg/objc/c.zig | 4 ++++ pkg/objc/class.zig | 20 ++++++++++++++++++++ pkg/objc/main.zig | 6 ++++++ 5 files changed, 42 insertions(+) create mode 100644 pkg/objc/build.zig create mode 100644 pkg/objc/c.zig create mode 100644 pkg/objc/class.zig create mode 100644 pkg/objc/main.zig diff --git a/build.zig b/build.zig index efeeaa189..8bade4c10 100644 --- a/build.zig +++ b/build.zig @@ -11,6 +11,7 @@ const libxml2 = @import("vendor/zig-libxml2/libxml2.zig"); const libuv = @import("pkg/libuv/build.zig"); const libpng = @import("pkg/libpng/build.zig"); const macos = @import("pkg/macos/build.zig"); +const objc = @import("pkg/objc/build.zig"); const stb_image_resize = @import("pkg/stb_image_resize/build.zig"); const utf8proc = @import("pkg/utf8proc/build.zig"); const zlib = @import("pkg/zlib/build.zig"); @@ -194,6 +195,7 @@ fn addDeps( step.addPackage(imgui.pkg); step.addPackage(glfw.pkg); step.addPackage(libuv.pkg); + step.addPackage(objc.pkg); step.addPackage(stb_image_resize.pkg); step.addPackage(utf8proc.pkg); diff --git a/pkg/objc/build.zig b/pkg/objc/build.zig new file mode 100644 index 000000000..a29d90daf --- /dev/null +++ b/pkg/objc/build.zig @@ -0,0 +1,10 @@ +const std = @import("std"); + +pub const pkg = std.build.Pkg{ + .name = "objc", + .source = .{ .path = thisDir() ++ "/main.zig" }, +}; + +fn thisDir() []const u8 { + return std.fs.path.dirname(@src().file) orelse "."; +} diff --git a/pkg/objc/c.zig b/pkg/objc/c.zig new file mode 100644 index 000000000..622ea4bce --- /dev/null +++ b/pkg/objc/c.zig @@ -0,0 +1,4 @@ +pub usingnamespace @cImport({ + @cInclude("objc/runtime.h"); + @cInclude("objc/message.h"); +}); diff --git a/pkg/objc/class.zig b/pkg/objc/class.zig new file mode 100644 index 000000000..2f6d66920 --- /dev/null +++ b/pkg/objc/class.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const c = @import("c.zig"); + +pub const Class = struct { + value: c.Class, + + /// Returns the class definition of a specified class. + pub fn getClass(name: [:0]const u8) ?Class { + return Class{ + .value = c.objc_getClass(name.ptr) orelse return null, + }; + } +}; + +test { + const testing = std.testing; + const NSObject = Class.getClass("NSObject"); + try testing.expect(NSObject != null); + try testing.expect(Class.getClass("NoWay") == null); +} diff --git a/pkg/objc/main.zig b/pkg/objc/main.zig new file mode 100644 index 000000000..d83e205b2 --- /dev/null +++ b/pkg/objc/main.zig @@ -0,0 +1,6 @@ +pub const c = @import("c.zig"); +pub usingnamespace @import("class.zig"); + +test { + @import("std").testing.refAllDecls(@This()); +}