Skip to content

Commit

Permalink
Check for cargo when building rust language
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
P-E-P committed Apr 8, 2024
1 parent c4eb0b9 commit c60ce2b
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 0 deletions.
11 changes: 11 additions & 0 deletions config/acx.m4
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand Down
117 changes: 117 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,7 @@ PGO_BUILD_GEN_CFLAGS
HAVE_CXX11_FOR_BUILD
HAVE_CXX11
do_compare
CARGO
GDC
GNATMAKE
GNATBIND
Expand Down Expand Up @@ -5786,6 +5787,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 :
Expand Down Expand Up @@ -9099,6 +9198,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:*) ;;
Expand Down
18 changes: 18 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -1411,6 +1411,7 @@ fi

ACX_PROG_GNAT
ACX_PROG_GDC
ACX_PROG_CARGO
ACX_PROG_CMP_IGNORE_INITIAL

AC_ARG_ENABLE([bootstrap],
Expand Down Expand Up @@ -2305,6 +2306,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:*) ;;
Expand Down

0 comments on commit c60ce2b

Please sign in to comment.