Skip to content

Commit f65b463

Browse files
committed
merge tcl definitions into tcl-sys
1 parent 8e0f99d commit f65b463

File tree

9 files changed

+85
-12
lines changed

9 files changed

+85
-12
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[workspace]
2-
members = [ "shared-build",
3-
"tcl-sys", "tk-sys",
2+
members = [
3+
"shared-build", "tcl", "tcl-sys", "tk-sys"
44
]
55
resolver = "3"
66

shared-build/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub fn build(
3636
get_lib_dirs: fn() -> Vec<String>,
3737
get_include_dirs: fn() -> Vec<String>,
3838
get_libs: fn() -> Vec<String>,
39+
tk: bool,
3940
) {
4041
println!("cargo:rerun-if-changed={wrapper_file}");
4142
println!("cargo:rerun-if-changed=build.rs");
@@ -53,6 +54,9 @@ pub fn build(
5354
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
5455
.blocklist_function("Tcl_DecrRefCount")
5556
.blocklist_function("Tcl_IncrRefCount");
57+
if tk {
58+
builder = builder.blocklist_item("Tcl_.*");
59+
}
5660
for dir in get_include_dirs() {
5761
builder = builder.clang_arg(format!("-I{dir}"));
5862
}

tcl-sys/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,5 @@ mod os {
7474
use os::{get_include_dirs, get_lib_dirs, get_libs};
7575

7676
fn main() {
77-
shared_build::build(WRAPPER_FILE, get_lib_dirs, get_include_dirs, get_libs);
77+
shared_build::build(WRAPPER_FILE, get_lib_dirs, get_include_dirs, get_libs, false);
7878
}

tcl-sys/examples/get_var.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
use std::ffi::{CStr, CString};
2+
3+
fn main() {
4+
// readline
5+
let mut var1 = String::new();
6+
std::io::stdin()
7+
.read_line(&mut var1)
8+
.expect("Failed to read line");
9+
let mut var2 = String::new();
10+
std::io::stdin()
11+
.read_line(&mut var2)
12+
.expect("Failed to read line");
13+
let var1 = var1.trim();
14+
let var2 = var2.trim();
15+
println!("var1: {}", var1);
16+
println!("var2: {}", var2);
17+
let var1 = CString::new(var1).unwrap();
18+
let var2 = CString::new(var2).unwrap();
19+
let var2 = if var2.is_empty() {
20+
std::ptr::null()
21+
} else {
22+
var2.as_ptr()
23+
};
24+
unsafe {
25+
let interp = tcl_sys::Tcl_CreateInterp();
26+
tcl_sys::Tcl_Init(interp);
27+
let out = tcl_sys::Tcl_GetVar(interp, var1.as_ptr() as _, tcl_sys::TCL_LEAVE_ERR_MSG as _);
28+
if out.is_null() {
29+
let err_obj = tcl_sys::Tcl_GetObjResult(interp);
30+
let err_msg = tcl_sys::Tcl_GetString(err_obj);
31+
let err = CStr::from_ptr(err_msg as _);
32+
println!("Variable not found: {err:?}");
33+
} else {
34+
println!("Variable found");
35+
let converted_string = CStr::from_ptr(out as _);
36+
println!("{converted_string:?}");
37+
}
38+
let res = tcl_sys::Tcl_GetVar2Ex(interp, var1.as_ptr() as _, var2 as _, tcl_sys::TCL_LEAVE_ERR_MSG as _);
39+
if res.is_null() {
40+
let err_obj = tcl_sys::Tcl_GetObjResult(interp);
41+
let err_msg = tcl_sys::Tcl_GetString(err_obj);
42+
let err = CStr::from_ptr(err_msg as _);
43+
println!("Variable not found: {err:?}");
44+
} else {
45+
println!("Variable found");
46+
let string = tcl_sys::Tcl_GetString(res);
47+
let converted_string = CStr::from_ptr(string as _);
48+
println!("{converted_string:?}");
49+
}
50+
}
51+
}

tk-sys/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ description = "Raw TK bindings for Rust"
1515
[lib]
1616
name = "tk_sys"
1717

18+
[dependencies]
19+
tcl-sys = { version = "0.3", path = "../tcl-sys" }
20+
1821
[build-dependencies]
1922
pkg-config = { workspace = true }
2023
shared-build = { path = "../shared-build" }

tk-sys/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,5 @@ mod os {
7979
use os::{get_include_dirs, get_lib_dirs, get_libs};
8080

8181
fn main() {
82-
shared_build::build(WRAPPER_FILE, get_lib_dirs, get_include_dirs, get_libs);
82+
shared_build::build(WRAPPER_FILE, get_lib_dirs, get_include_dirs, get_libs, true);
8383
}

tk-sys/examples/simple.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
fn main() {
2+
unsafe {
3+
let interp = tcl_sys::Tcl_CreateInterp();
4+
tk_sys::Tk_Init(interp);
5+
let window = tk_sys::Tk_MainWindow(interp);
6+
tk_sys::Tk_SetAppName(window, b"simple\0".as_ptr() as _);
7+
tcl_sys::Tcl_Eval(interp, b"button .b -text \"Click Me\" -command {puts \"Hello from Tk\"}\0".as_ptr() as _);
8+
tcl_sys::Tcl_Eval(interp, b"pack .b\0".as_ptr() as _);
9+
10+
// Start the main event loop
11+
tk_sys::Tk_MainLoop();
12+
}
13+
}

tk-sys/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
#![allow(non_camel_case_types)]
33
#![allow(non_snake_case)]
44

5+
use tcl_sys::*;
6+
57
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
68
include!(concat!(env!("OUT_DIR"), "/custom.rs"));

tk-sys/tests/simple.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@ fn convert_str(s: &str) -> *const std::ffi::c_char {
55
#[test]
66
fn test_basic() {
77
unsafe {
8-
let interp = tk_sys::Tcl_CreateInterp();
8+
let interp = tcl_sys::Tcl_CreateInterp();
99
assert!(!interp.is_null());
10-
tk_sys::Tcl_DeleteInterp(interp);
10+
tcl_sys::Tcl_DeleteInterp(interp);
1111
}
1212
}
1313

1414
#[test]
1515
fn test_mem() {
1616
unsafe {
17-
let interp = tk_sys::Tcl_CreateInterp();
18-
let ptr = tk_sys::Tcl_Alloc(100);
17+
let interp = tcl_sys::Tcl_CreateInterp();
18+
let ptr = tcl_sys::Tcl_Alloc(100);
1919
assert!(!ptr.is_null());
20-
tk_sys::Tcl_Free(ptr);
21-
let mut value = *tk_sys::Tcl_NewStringObj(convert_str("true"), -1);
22-
tk_sys::Tcl_DecrRefCount(&mut value);
23-
tk_sys::Tcl_DeleteInterp(interp);
20+
tcl_sys::Tcl_Free(ptr);
21+
let mut value = *tcl_sys::Tcl_NewStringObj(convert_str("true"), -1);
22+
tcl_sys::Tcl_DecrRefCount(&mut value);
23+
tcl_sys::Tcl_DeleteInterp(interp);
2424
}
2525
}

0 commit comments

Comments
 (0)