about summary refs log blame commit diff
path: root/third_party/overlays/patches/crate2nix-fix-resolve-missing-target-features-to-null.patch
blob: 96e0fdd263cc5bc870c12be1d97e86cf2457701d (plain) (tree)




















































                                                                                        
From 5ed4d5f99e8c2ee0e552ceb3842fdf0afaed7534 Mon Sep 17 00:00:00 2001
From: tilpner <git@tilpner.com>
Date: Tue, 24 Oct 2023 20:26:29 +0200
Subject: [PATCH] fix: resolve missing target features to 'null'

---
 crate2nix/Cargo.nix                              | 16 ++++++++--------
 crate2nix/src/render.rs                          | 10 +++++-----
 sample_projects/bin/Cargo.toml                   |  3 +++
 .../bin_with_git_submodule_dep/Cargo.nix         |  6 +++---
 sample_projects/codegen/Cargo.nix                |  2 +-
 5 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/crate2nix/src/render.rs b/crate2nix/src/render.rs
index 8ca2f1c..a269fc7 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -224,7 +224,7 @@ fn cfg_to_nix_expr(cfg: &CfgExpr) -> String {
                 } else if key == "target_family" {
                     format!("(builtins.elem {} target.{})", escaped_value, target(key))
                 } else {
-                    format!("({} == target.{})", escaped_value, target(key))
+                    format!("({} == target.{} or null)", escaped_value, target(key))
                 });
             }
             CfgExpr::Not(expr) => {
@@ -292,19 +292,19 @@ fn test_render_cfg_to_nix_expr() {
         &cfg_to_nix_expr(&kv("target_family", "unix"))
     );
     assert_eq!(
-        "(\"linux\" == target.\"os\")",
+        "(\"linux\" == target.\"os\" or null)",
         &cfg_to_nix_expr(&kv("target_os", "linux"))
     );
     assert_eq!(
-        "(!(\"linux\" == target.\"os\"))",
+        "(!(\"linux\" == target.\"os\" or null))",
         &cfg_to_nix_expr(&CfgExpr::Not(Box::new(kv("target_os", "linux"))))
     );
     assert_eq!(
-        "((target.\"unix\" or false) || (\"linux\" == target.\"os\"))",
+        "((target.\"unix\" or false) || (\"linux\" == target.\"os\" or null))",
         &cfg_to_nix_expr(&CfgExpr::Any(vec![name("unix"), kv("target_os", "linux")]))
     );
     assert_eq!(
-        "((target.\"unix\" or false) && (\"linux\" == target.\"os\"))",
+        "((target.\"unix\" or false) && (\"linux\" == target.\"os\" or null))",
         &cfg_to_nix_expr(&CfgExpr::All(vec![name("unix"), kv("target_os", "linux")]))
     );
     assert_eq!("true", &cfg_to_nix_expr(&CfgExpr::All(vec![])));
-- 
2.42.0