threads / patch / 64654

patchrust: build correctly without GNU sed

Subject: [PATCH] rust: build correctly without GNU sed

## tl;dr

3 messages between Dec 18, 2025 and Dec 19, 2025. Diffs are folded; open one to read it.

replies: 2people: 3as markdown or json

D. Ben Knoble· Dec 18, 2025, 23:25 UTC · lore

From e509b5b8be (rust: support for Windows, 2025-10-15), we check cargo's information to decide which library to build. However, that check mistakenly used "sed -s" ("consider files as separate rather than as a single, continuous long stream"), which is a GNU extension. The build thus fails on macOS with "meson -Drust=enabled", which comes with BSD-derived sed.

Instead, use the intended "sed -n" and print the matching section of the output. This failure mode likely went unnoticed on systems with GNU sed (common for developer machines and CI) because, in those instances, the output being matched by case is the full cargo output (which either contains the string "-windows-" or doesn't).

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
---
 src/cargo-meson.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to src/cargo-meson.sh +1 −1
diff --git a/src/cargo-meson.sh b/src/cargo-meson.sh
index 3998db0435..38728a3711 100755
--- a/src/cargo-meson.sh
+++ b/src/cargo-meson.sh
@@ -26,7 +26,7 @@
 	exit $RET
 fi
 
-case "$(cargo -vV | sed -s 's/^host: \(.*\)$/\1/')" in
+case "$(cargo -vV | sed -n 's/^host: \(.*\)$/\1/p')" in
 	*-windows-*)
 		LIBNAME=gitcore.lib;;
 	*)
-- 
2.52.0.rc0.365.g9bf09b728d.dirty
Eric Sunshine· Dec 19, 2025, 00:53 UTC · re: D. Ben Knoble · lore

Re: [PATCH] rust: build correctly without GNU sed

On Thu, Dec 18, 2025 at 6:26 PM D. Ben Knoble <ben.knoble+github@gmail.com> wrote:

Show 23 quoted lines
> From e509b5b8be (rust: support for Windows, 2025-10-15), we check
> cargo's information to decide which library to build. However, that
> check mistakenly used "sed -s" ("consider files as separate rather than
> as a single, continuous long stream"), which is a GNU extension. The
> build thus fails on macOS with "meson -Drust=enabled", which comes with
> BSD-derived sed.
>
> Instead, use the intended "sed -n" and print the matching section of the
> output. This failure mode likely went unnoticed on systems with GNU sed
> (common for developer machines and CI) because, in those instances, the
> output being matched by case is the full cargo output (which either
> contains the string "-windows-" or doesn't).
>
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Helped-by: Patrick Steinhardt <ps@pks.im>
> Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
> ---
> diff --git a/src/cargo-meson.sh b/src/cargo-meson.sh
> @@ -26,7 +26,7 @@
> -case "$(cargo -vV | sed -s 's/^host: \(.*\)$/\1/')" in
> +case "$(cargo -vV | sed -n 's/^host: \(.*\)$/\1/p')" in
>         *-windows-*)
>                 LIBNAME=gitcore.lib;;
This change looks good to me. Thanks for tackling this.
Patrick Steinhardt· Dec 19, 2025, 06:24 UTC · re: D. Ben Knoble · lore

Re: [PATCH] rust: build correctly without GNU sed

On Thu, Dec 18, 2025 at 06:25:44PM -0500, D. Ben Knoble wrote:
Show 12 quoted lines
> From e509b5b8be (rust: support for Windows, 2025-10-15), we check
> cargo's information to decide which library to build. However, that
> check mistakenly used "sed -s" ("consider files as separate rather than
> as a single, continuous long stream"), which is a GNU extension. The
> build thus fails on macOS with "meson -Drust=enabled", which comes with
> BSD-derived sed.
> 
> Instead, use the intended "sed -n" and print the matching section of the
> output. This failure mode likely went unnoticed on systems with GNU sed
> (common for developer machines and CI) because, in those instances, the
> output being matched by case is the full cargo output (which either
> contains the string "-windows-" or doesn't).

Yeah, I guess that's what happened indeed. I seem to have confused "-s" for "--silent" with "-n" when I wrote this.

> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Helped-by: Patrick Steinhardt <ps@pks.im>

I'd say that it was you two folks who figured this out, I didn't really help much :) But I won't complain.

Show 18 quoted lines
> Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
> ---
>  src/cargo-meson.sh | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/cargo-meson.sh b/src/cargo-meson.sh
> index 3998db0435..38728a3711 100755
> --- a/src/cargo-meson.sh
> +++ b/src/cargo-meson.sh
> @@ -26,7 +26,7 @@
>  	exit $RET
>  fi
>  
> -case "$(cargo -vV | sed -s 's/^host: \(.*\)$/\1/')" in
> +case "$(cargo -vV | sed -n 's/^host: \(.*\)$/\1/p')" in
>  	*-windows-*)
>  		LIBNAME=gitcore.lib;;
>  	*)

Yup, this looks exactly like discussed. Thanks, the fix looks good to me!

Patrick

← back to recent threads