From 3da40f5a2a147877832e9848eb30504e79c7fb79 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Fri, 5 Apr 2024 13:16:40 +0200 Subject: [PATCH] Check for cargo when building rust language Prevent rust language from building when cargo is missing. config/ChangeLog: * acx.m4: Add a macro to check for rust components. ChangeLog: * configure: Regenerate. * configure.ac: Emit an error message when cargo is missing. Signed-off-by: Pierre-Emmanuel Patry --- config/acx.m4 | 11 +++++ configure | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 18 ++++++++ 3 files changed, 146 insertions(+) diff --git a/config/acx.m4 b/config/acx.m4 index 7efe98aaf960..3c5fe67342e1 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -424,6 +424,17 @@ else fi ]) +# Test for Rust +# We require cargo and rustc for some parts of the rust compiler. +AC_DEFUN([ACX_PROG_CARGO], +[AC_REQUIRE([AC_CHECK_TOOL_PREFIX]) +AC_CHECK_TOOL(CARGO, cargo, no) +if test "x$CARGO" != xno; then + have_cargo=yes +else + have_cargo=no +fi]) + # Test for D. AC_DEFUN([ACX_PROG_GDC], [AC_REQUIRE([AC_CHECK_TOOL_PREFIX]) diff --git a/configure b/configure index d3374ba2229a..b326e10e2d9f 100755 --- a/configure +++ b/configure @@ -715,6 +715,7 @@ PGO_BUILD_GEN_CFLAGS HAVE_CXX11_FOR_BUILD HAVE_CXX11 do_compare +CARGO GDC GNATMAKE GNATBIND @@ -5787,6 +5788,104 @@ else have_gdc=no fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cargo", so it can be a program name with args. +set dummy ${ac_tool_prefix}cargo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CARGO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CARGO"; then + ac_cv_prog_CARGO="$CARGO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CARGO="${ac_tool_prefix}cargo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CARGO=$ac_cv_prog_CARGO +if test -n "$CARGO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CARGO" >&5 +$as_echo "$CARGO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CARGO"; then + ac_ct_CARGO=$CARGO + # Extract the first word of "cargo", so it can be a program name with args. +set dummy cargo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CARGO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CARGO"; then + ac_cv_prog_ac_ct_CARGO="$ac_ct_CARGO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CARGO="cargo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CARGO=$ac_cv_prog_ac_ct_CARGO +if test -n "$ac_ct_CARGO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CARGO" >&5 +$as_echo "$ac_ct_CARGO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CARGO" = x; then + CARGO="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CARGO=$ac_ct_CARGO + fi +else + CARGO="$ac_cv_prog_CARGO" +fi + +if test "x$CARGO" != xno; then + have_cargo=yes +else + have_cargo=no +fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to compare bootstrapped objects" >&5 $as_echo_n "checking how to compare bootstrapped objects... " >&6; } if ${gcc_cv_prog_cmp_skip+:} false; then : @@ -9254,6 +9353,24 @@ $as_echo "$as_me: WARNING: --enable-host-shared required to build $language" >&2 ;; esac + # Disable Rust if cargo is unavailable. + case ${add_this_lang}:${language}:${have_cargo} in + yes:rust:no) + # Specifically requested language; tell them. + as_fn_error $? "cargo is required to build $language" "$LINENO" 5 + ;; + all:rust:no) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cargo is required to build $language" >&5 +$as_echo "$as_me: WARNING: cargo is required to build $language" >&2;} + add_this_lang=unsupported + ;; + *:rust:no) + # Silently disable. + add_this_lang=unsupported + ;; + esac + + # Disable a language that is unsupported by the target. case "${add_this_lang}: $unsupported_languages " in no:*) ;; diff --git a/configure.ac b/configure.ac index 52db66cc48c5..dde9148439e5 100644 --- a/configure.ac +++ b/configure.ac @@ -1411,6 +1411,7 @@ fi ACX_PROG_GNAT ACX_PROG_GDC +ACX_PROG_CARGO ACX_PROG_CMP_IGNORE_INITIAL AC_ARG_ENABLE([bootstrap], @@ -2347,6 +2348,23 @@ directories, to avoid imposing the performance cost of ;; esac + # Disable Rust if cargo is unavailable. + case ${add_this_lang}:${language}:${have_cargo} in + yes:rust:no) + # Specifically requested language; tell them. + AC_MSG_ERROR([cargo is required to build $language]) + ;; + all:rust:no) + AC_MSG_WARN([cargo is required to build $language]) + add_this_lang=unsupported + ;; + *:rust:no) + # Silently disable. + add_this_lang=unsupported + ;; + esac + + # Disable a language that is unsupported by the target. case "${add_this_lang}: $unsupported_languages " in no:*) ;;