From 54dccbeb2e6ee3641910700a1deeb37b9cc28549 Mon Sep 17 00:00:00 2001 From: Giteabot Date: Sat, 14 Oct 2023 15:29:55 +0800 Subject: [PATCH] Fix build errors on BSD (in BSDMakefile) (#27594) (#27608) Backport #27594 by @sryze 1. `make build` fails because `||` and `&&` have the same precedence in sh/bash, so the `false` command always evaluated (leading to an error). ``` + which gmake /usr/local/bin/gmake + false *** Failed target: .BEGIN *** Failed command: which "gmake" || printf "Error: GNU Make is required!\n\n" 1>&2 && false *** Error code 1 ``` 2. When `GPREFIX` is set to an empty string with quotation marks, `gmake` mistakenly thinks that it's a file name: ``` gmake: *** empty string invalid as file name. Stop. ``` Co-authored-by: Sergey Zolotarev --- BSDmakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BSDmakefile b/BSDmakefile index 13174f8fd2..79696eadcf 100644 --- a/BSDmakefile +++ b/BSDmakefile @@ -42,13 +42,13 @@ GARGS = "--no-print-directory" # The GNU convention is to use the lowercased `prefix` variable/macro to # specify the installation directory. Humor them. -GPREFIX = "" +GPREFIX = .if defined(PREFIX) && ! defined(prefix) GPREFIX = 'prefix = "$(PREFIX)"' .endif .BEGIN: .SILENT - which $(GMAKE) || printf "Error: GNU Make is required!\n\n" 1>&2 && false + which $(GMAKE) || (printf "Error: GNU Make is required!\n\n" 1>&2 && false) .PHONY: FRC $(.TARGETS): FRC