All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miguel Ojeda <ojeda@kernel.org>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: linux-kbuild@vger.kernel.org,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Nicolas Schier" <nicolas@fjasle.eu>,
	rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
	patches@lists.linux.dev, "Miguel Ojeda" <ojeda@kernel.org>,
	"Alexandru Radovici" <msg4alex@gmail.com>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>
Subject: [PATCH 3/6] kbuild: rust_is_available: add check for `bindgen` invocation
Date: Mon,  9 Jan 2023 21:45:17 +0100	[thread overview]
Message-ID: <20230109204520.539080-3-ojeda@kernel.org> (raw)
In-Reply-To: <20230109204520.539080-1-ojeda@kernel.org>

`scripts/rust_is_available.sh` calls `bindgen` with a special
header in order to check whether the `libclang` version in use
is suitable.

However, the invocation itself may fail if, for instance, `bindgen`
cannot locate `libclang`. This is fine for Kconfig (since the
script will still fail and therefore disable Rust as it should),
but it is pretty confusing for users of the `rustavailable` target
given the error will be unrelated:

    ./scripts/rust_is_available.sh: 21: arithmetic expression: expecting primary: "100000 *  + 100 *  + "
    make: *** [Makefile:1816: rustavailable] Error 2

Instead, run the `bindgen` invocation independently in a previous
step, saving its output and return code. If it fails, then show
the user a proper error message. Otherwise, continue as usual
with the saved output.

Since the previous patch we show a reference to the docs, and
the docs now explain how `bindgen` looks for `libclang`,
thus the error message can leverage the documentation, avoiding
duplication here (and making users aware of the setup guide in
the documentation).

Reported-by: Nick Desaulniers <ndesaulniers@google.com>
Reported-by: fvalenduc (@fvalenduc)
Reported-by: Alexandru Radovici <msg4alex@gmail.com>
Link: https://lore.kernel.org/rust-for-linux/CAKwvOdm5JT4wbdQQYuW+RT07rCi6whGBM2iUAyg8A1CmLXG6Nw@mail.gmail.com/
Link: https://github.com/Rust-for-Linux/linux/issues/934
Link: https://github.com/Rust-for-Linux/linux/pull/921
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
 scripts/rust_is_available.sh | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/scripts/rust_is_available.sh b/scripts/rust_is_available.sh
index c907cf881c2c..cd87729ca3bf 100755
--- a/scripts/rust_is_available.sh
+++ b/scripts/rust_is_available.sh
@@ -108,8 +108,29 @@ if [ "$rust_bindings_generator_cversion" -gt "$rust_bindings_generator_min_cvers
 fi
 
 # Check that the `libclang` used by the Rust bindings generator is suitable.
+#
+# In order to do that, first invoke `bindgen` to get the `libclang` version
+# found by `bindgen`. This step may already fail if, for instance, `libclang`
+# is not found, thus inform the user in such a case.
+set +e
+bindgen_libclang_output=$(LC_ALL=C "$BINDGEN" $(dirname $0)/rust_is_available_bindgen_libclang.h 2>&1 >/dev/null)
+bindgen_libclang_code=$?
+set -e
+if [ $bindgen_libclang_code -ne 0 ]; then
+	echo >&2 "***"
+	echo >&2 "*** Running '$BINDGEN' to check the libclang version (used by the Rust"
+	echo >&2 "*** bindings generator) failed with code $bindgen_libclang_code. This may be caused by"
+	echo >&2 "*** a failure to locate libclang. See output and docs below for details:"
+	echo >&2 "***"
+	echo >&2 "$bindgen_libclang_output"
+	echo >&2 "***"
+	exit 1
+fi
+
+# `bindgen` returned successfully, thus use the output to check that the version
+# of the `libclang` found by the Rust bindings generator is suitable.
 bindgen_libclang_version=$( \
-	LC_ALL=C "$BINDGEN" $(dirname $0)/rust_is_available_bindgen_libclang.h 2>&1 >/dev/null \
+	echo "$bindgen_libclang_output" \
 		| grep -F 'clang version ' \
 		| grep -oE '[0-9]+\.[0-9]+\.[0-9]+' \
 		| head -n 1 \
-- 
2.39.0


  parent reply	other threads:[~2023-01-09 20:45 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-09 20:45 [PATCH 1/6] docs: rust: add paragraph about finding a suitable `libclang` Miguel Ojeda
2023-01-09 20:45 ` [PATCH 2/6] kbuild: rust_is_available: print docs reference Miguel Ojeda
2023-01-10 10:16   ` Finn Behrens
2023-01-10 12:28     ` Miguel Ojeda
2023-01-09 20:45 ` Miguel Ojeda [this message]
2023-01-09 22:46   ` [PATCH 3/6] kbuild: rust_is_available: add check for `bindgen` invocation Boqun Feng
2023-01-09 23:27     ` Miguel Ojeda
2023-01-12  4:33   ` Masahiro Yamada
2023-01-12  4:35     ` Masahiro Yamada
2023-01-13 23:10       ` Miguel Ojeda
2023-01-14  9:44         ` Masahiro Yamada
2023-01-14 12:11           ` Miguel Ojeda
2023-01-14 12:12   ` Miguel Ojeda
2023-01-09 20:45 ` [PATCH 4/6] kbuild: rust_is_available: check if the script was invoked from Kbuild Miguel Ojeda
2023-01-12  5:28   ` Masahiro Yamada
2023-01-13 23:12     ` Miguel Ojeda
2023-01-14 12:33       ` Masahiro Yamada
2023-01-09 20:45 ` [PATCH 5/6] kbuild: rust_is_available: fix confusion when a version appears in the path Miguel Ojeda
2023-01-12  5:32   ` Masahiro Yamada
2023-01-13 23:12     ` Miguel Ojeda
2023-01-15  2:39       ` Masahiro Yamada
2023-01-13 23:30   ` Miguel Ojeda
2023-01-09 20:45 ` [PATCH 6/6] kbuild: rust_is_available: normalize version matching Miguel Ojeda
2023-01-12  6:22   ` Masahiro Yamada
2023-01-13 23:15     ` Miguel Ojeda
2023-01-15  2:48       ` Masahiro Yamada
2023-01-15 10:48         ` Masahiro Yamada
2023-01-09 20:54 ` [PATCH 1/6] docs: rust: add paragraph about finding a suitable `libclang` Nick Desaulniers
2023-01-09 21:05   ` Miguel Ojeda
2023-01-09 21:06 ` Miguel Ojeda
2023-01-12  6:04   ` Masahiro Yamada
2023-01-13 23:13     ` Miguel Ojeda
2023-01-15  2:59       ` Masahiro Yamada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230109204520.539080-3-ojeda@kernel.org \
    --to=ojeda@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=msg4alex@gmail.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=nicolas@fjasle.eu \
    --cc=patches@lists.linux.dev \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=wedsonaf@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.