build.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. fn main() {
  2. // Warn the user if they enabled the launch feature without any renderers
  3. if feature_enabled("launch") {
  4. if feature_enabled("third-party-renderer"){
  5. return;
  6. }
  7. let liveview_renderers = [
  8. "liveview",
  9. "axum",
  10. "salvo",
  11. "warp",
  12. "rocket",
  13. ];
  14. let fullstack_renderers = [
  15. "axum",
  16. "salvo",
  17. "warp",
  18. ];
  19. let client_renderers = [
  20. "desktop",
  21. "mobile",
  22. "web",
  23. "tui",
  24. ];
  25. let client_renderer_selected = client_renderers.iter().any(|renderer| feature_enabled(renderer));
  26. if feature_enabled("fullstack") {
  27. let server_fullstack_enabled = fullstack_renderers.iter().any(|renderer| feature_enabled(renderer));
  28. if !server_fullstack_enabled && !client_renderer_selected {
  29. println!("cargo:warning=You have enabled the launch and fullstack features, but have not enabled any renderers. The application will not be able to launch. Try enabling one of the following renderers: {} for the server or one of the following renderers: {} for the client.", fullstack_renderers.join(", "), client_renderers.join(", "));
  30. }
  31. }
  32. if feature_enabled("liveview") {
  33. let server_selected = liveview_renderers.iter().any(|renderer| feature_enabled(renderer));
  34. if !server_selected {
  35. println!("cargo:warning=You have enabled the launch and liveview features, but have not enabled any liveview renderers. The application will not be able to launch. Try enabling one of the following renderers: {}", liveview_renderers.join(", "));
  36. }
  37. }
  38. if !client_renderer_selected {
  39. println!("cargo:warning=You have enabled the launch feature, but have not enabled any client renderers. The application will not be able to launch. Try enabling one of the following renderers: {}, fullstack or liveview", client_renderers.join(", "));
  40. }
  41. }
  42. }
  43. fn feature_enabled(feature: &str) -> bool {
  44. let feature = "CARGO_FEATURE_".to_owned() + &feature.to_uppercase().replace("-", "_");
  45. println!("cargo:rerun-if-env-changed={}", feature);
  46. std::env::var(feature).is_ok()
  47. }