diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | Cargo.lock | 42 | ||||
-rw-r--r-- | Cargo.toml | 9 | ||||
-rw-r--r-- | README.md | 5 | ||||
-rw-r--r-- | src/main.rs | 54 |
5 files changed, 112 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0a25f36 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/out diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..66b32ca --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,42 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "clang" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34c6913be3a1c94f52fb975cdec7ef5a7b69de10a55de66dcbc30d7046b85fa1" +dependencies = [ + "clang-sys", + "libc", +] + +[[package]] +name = "clang-sys" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" +dependencies = [ + "glob", + "libc", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "libc" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" + +[[package]] +name = "riir-wxwidgets" +version = "0.1.0" +dependencies = [ + "clang", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..f9cf65f --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "riir-wxwidgets" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clang = { version = "1.0.3", features = ["clang_8_0"] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..00251cf --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# riir-wxwidgets + +## Semi-Automatic C++-to-Rust Translation for the Only Good GUI Library + +Swag. diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..5e9a51e --- /dev/null +++ b/src/main.rs @@ -0,0 +1,54 @@ +use std::env::{current_dir, set_current_dir}; +use std::fs::{create_dir_all, metadata}; +use std::path::Path; +use std::process::Command; + +use clang::{Clang, Index}; + +const TARGET_TAG: &str = "v3.1.5"; + +fn main() { + assert_eq!(current_dir().unwrap(), Path::new(env!("CARGO_MANIFEST_DIR")), "running in the wrong place"); + create_dir_all("out").unwrap(); + set_current_dir("out").unwrap(); + + if metadata("orig").is_err() { + println!("cloning wxWidgets source..."); + let git_clone = Command::new("git") + .args(&["clone", "--quiet", "https://github.com/wxWidgets/wxWidgets.git", "orig", "--depth", "1"]) + .status() + .unwrap(); + assert!(git_clone.success()); + let git_config = Command::new("git") + .args(&["-C", "orig", "config", "--local", "advice.detachedHead", "false"]) + .status() + .unwrap(); + assert!(git_config.success()); + } + let git_tag = Command::new("git").args(&["-C", "orig", "describe"]).output().unwrap(); + if String::from_utf8(git_tag.stdout).unwrap().trim() != TARGET_TAG { + let git_checkout = Command::new("git") + .args(&["-C", "orig", "checkout", "--quiet", TARGET_TAG]) + .status() + .unwrap(); + assert!(git_checkout.success()); + } + + if metadata("new").is_err() { + println!("creating wx crate..."); + let cargo_new = Command::new("cargo") + .args(&["new", "--quiet", "--vcs", "none", "--lib", "--name", "wx", "new"]) + .status() + .unwrap(); + assert!(cargo_new.success()); + } + + let clang = Clang::new().unwrap(); + let index = Index::new(&clang, true, true); + + let mut root_header_parser = index.parser("orig/include/wx/wx.h"); + root_header_parser.keep_going(true); + root_header_parser.arguments(&["-Iorig/include", "-D"]); + let root_header = root_header_parser.parse().unwrap(); + println!("{}", root_header.get_entity().get_pretty_printer().print()); +} |