1
0

build.rs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. use std::{io::Write as _, path::PathBuf};
  2. fn check_gnu() {
  3. // WARN about wry support on windows gnu targets. GNU windows targets don't work well in wry currently
  4. if std::env::var("CARGO_CFG_WINDOWS").is_ok()
  5. && std::env::var("CARGO_CFG_TARGET_ENV").unwrap() == "gnu"
  6. && !cfg!(feature = "gnu")
  7. {
  8. println!("cargo:warning=GNU windows targets have some limitations within Wry. Using the MSVC windows toolchain is recommended. If you would like to use continue using GNU, you can read https://github.com/wravery/webview2-rs#cross-compilation and disable this warning by adding the gnu feature to dioxus-desktop in your Cargo.toml")
  9. }
  10. // To prepare for a release, we add extra examples to desktop for doc scraping and copy assets from the workspace to make those examples compile
  11. if option_env!("DIOXUS_RELEASE").is_some() {
  12. // Append EXAMPLES_TOML to the cargo.toml
  13. let cargo_toml = std::fs::OpenOptions::new()
  14. .append(true)
  15. .open("Cargo.toml")
  16. .unwrap();
  17. let mut write = std::io::BufWriter::new(cargo_toml);
  18. write.write_all(EXAMPLES_TOML.as_bytes()).unwrap();
  19. // Copy the assets from the workspace to the examples directory
  20. let crate_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
  21. let workspace_dir = crate_dir.parent().unwrap().parent().unwrap();
  22. let workspace_assets_dir = workspace_dir.join("examples").join("assets");
  23. let desktop_assets_dir = PathBuf::from("examples").join("assets");
  24. std::fs::create_dir_all(&desktop_assets_dir).unwrap();
  25. // move all files from the workspace assets dir to the desktop assets dir
  26. for entry in std::fs::read_dir(workspace_assets_dir).unwrap() {
  27. let entry = entry.unwrap();
  28. let path = entry.path();
  29. if path.is_file() {
  30. std::fs::copy(&path, desktop_assets_dir.join(path.file_name().unwrap())).unwrap();
  31. }
  32. }
  33. }
  34. }
  35. fn compile_ts() {
  36. // If any TS files change, re-run the build script
  37. lazy_js_bundle::LazyTypeScriptBindings::new()
  38. .with_watching("./src/ts")
  39. .with_binding("./src/ts/native_eval.ts", "./src/js/native_eval.js")
  40. .run();
  41. }
  42. fn main() {
  43. check_gnu();
  44. compile_ts();
  45. }
  46. const EXAMPLES_TOML: &str = r#"
  47. # Most of the examples live in the workspace. We include some here so that docs.rs can scrape our examples for better inline docs
  48. [[example]]
  49. name = "video_stream"
  50. path = "../../examples/video_stream.rs"
  51. doc-scrape-examples = true
  52. [[example]]
  53. name = "suspense"
  54. path = "../../examples/suspense.rs"
  55. doc-scrape-examples = true
  56. [[example]]
  57. name = "calculator_mutable"
  58. path = "../../examples/calculator_mutable.rs"
  59. doc-scrape-examples = true
  60. [[example]]
  61. name = "custom_html"
  62. path = "../../examples/custom_html.rs"
  63. doc-scrape-examples = true
  64. [[example]]
  65. name = "custom_menu"
  66. path = "../../examples/custom_menu.rs"
  67. doc-scrape-examples = true
  68. [[example]]
  69. name = "errors"
  70. path = "../../examples/errors.rs"
  71. doc-scrape-examples = true
  72. [[example]]
  73. name = "future"
  74. path = "../../examples/future.rs"
  75. doc-scrape-examples = true
  76. [[example]]
  77. name = "hydration"
  78. path = "../../examples/hydration.rs"
  79. doc-scrape-examples = true
  80. [[example]]
  81. name = "multiwindow"
  82. path = "../../examples/multiwindow.rs"
  83. doc-scrape-examples = true
  84. [[example]]
  85. name = "overlay"
  86. path = "../../examples/overlay.rs"
  87. doc-scrape-examples = true
  88. [[example]]
  89. name = "popup"
  90. path = "../../examples/popup.rs"
  91. doc-scrape-examples = true
  92. [[example]]
  93. name = "read_size"
  94. path = "../../examples/read_size.rs"
  95. doc-scrape-examples = true
  96. [[example]]
  97. name = "shortcut"
  98. path = "../../examples/shortcut.rs"
  99. doc-scrape-examples = true
  100. [[example]]
  101. name = "streams"
  102. path = "../../examples/streams.rs"
  103. doc-scrape-examples = true
  104. [[example]]
  105. name = "window_event"
  106. path = "../../examples/window_event.rs"
  107. doc-scrape-examples = true
  108. [[example]]
  109. name = "window_focus"
  110. path = "../../examples/window_focus.rs"
  111. doc-scrape-examples = true
  112. [[example]]
  113. name = "window_zoom"
  114. path = "../../examples/window_zoom.rs"
  115. doc-scrape-examples = true"#;