summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/client/cocoabind
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/client/cocoabind')
-rw-r--r--toolkit/crashreporter/client/cocoabind/Cargo.toml12
-rw-r--r--toolkit/crashreporter/client/cocoabind/build.rs74
-rw-r--r--toolkit/crashreporter/client/cocoabind/src/lib.rs10
3 files changed, 96 insertions, 0 deletions
diff --git a/toolkit/crashreporter/client/cocoabind/Cargo.toml b/toolkit/crashreporter/client/cocoabind/Cargo.toml
new file mode 100644
index 0000000000..70a0f36582
--- /dev/null
+++ b/toolkit/crashreporter/client/cocoabind/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "cocoabind"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+block = "0.1"
+objc = "0.2"
+
+[build-dependencies]
+bindgen = { version = "0.69", default-features = false, features = ["runtime"] }
+mozbuild = "0.1.0"
diff --git a/toolkit/crashreporter/client/cocoabind/build.rs b/toolkit/crashreporter/client/cocoabind/build.rs
new file mode 100644
index 0000000000..ba91a87e97
--- /dev/null
+++ b/toolkit/crashreporter/client/cocoabind/build.rs
@@ -0,0 +1,74 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use mozbuild::config::CC_BASE_FLAGS as CFLAGS;
+
+const TYPES: &[&str] = &[
+ "ActionCell",
+ "Application",
+ "Array",
+ "AttributedString",
+ "Box",
+ "Button",
+ "ButtonCell",
+ "Cell",
+ "ClassDescription",
+ "Control",
+ "DefaultRunLoopMode",
+ "Dictionary",
+ "ForegroundColorAttributeName",
+ "LayoutDimension",
+ "LayoutGuide",
+ "LayoutXAxisAnchor",
+ "LayoutYAxisAnchor",
+ "MutableAttributedString",
+ "MutableParagraphStyle",
+ "MutableString",
+ "ModalPanelRunLoopMode",
+ "Panel",
+ "ProcessInfo",
+ "ProgressIndicator",
+ "Proxy",
+ "RunLoop",
+ "ScrollView",
+ "StackView",
+ "String",
+ "TextField",
+ "TextView",
+ "Value",
+ "View",
+ "Window",
+];
+
+fn main() {
+ let mut builder = bindgen::Builder::default()
+ .header_contents(
+ "cocoa_bindings.h",
+ "#define self self_
+ #import <Cocoa/Cocoa.h>
+ ",
+ )
+ .generate_block(true)
+ .prepend_enum_name(false)
+ .clang_args(CFLAGS)
+ .clang_args(["-x", "objective-c"])
+ .clang_arg("-fblocks")
+ .derive_default(true)
+ .allowlist_item("TransformProcessType");
+ for name in TYPES {
+ // (I|P) covers generated traits (interfaces and protocols). `(_.*)?` covers categories
+ // (which are generated as `CLASS_CATEGORY`).
+ builder = builder.allowlist_item(format!("(I|P)?NS{name}(_.*)?"));
+ }
+ let bindings = builder
+ .generate()
+ .expect("unable to generate cocoa bindings");
+ let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap());
+ bindings
+ .write_to_file(out_path.join("cocoa_bindings.rs"))
+ .expect("failed to write cocoa bindings");
+ println!("cargo:rustc-link-lib=framework=AppKit");
+ println!("cargo:rustc-link-lib=framework=Cocoa");
+ println!("cargo:rustc-link-lib=framework=Foundation");
+}
diff --git a/toolkit/crashreporter/client/cocoabind/src/lib.rs b/toolkit/crashreporter/client/cocoabind/src/lib.rs
new file mode 100644
index 0000000000..b7271d9d92
--- /dev/null
+++ b/toolkit/crashreporter/client/cocoabind/src/lib.rs
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#![allow(non_upper_case_globals)]
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+#![allow(unused_imports)]
+
+include!(concat!(env!("OUT_DIR"), "/cocoa_bindings.rs"));