public inbox for gcc-rust@gcc.gnu.org
 help / color / mirror / Atom feed
From: Andrew Pinski <pinskia@gmail.com>
To: pierre-emmanuel.patry@embecosm.com
Cc: gcc-patches@gcc.gnu.org, gcc-rust@gcc.gnu.org
Subject: Re: [PATCH] build: Check for cargo when building rust language
Date: Tue, 9 Apr 2024 07:12:08 -0700	[thread overview]
Message-ID: <CA+=Sn1mAR0T+YdZhuupkn_1HZvsvDxfV=Uo0AZna_cLCDgsH8g@mail.gmail.com> (raw)
In-Reply-To: <20240408163337.303317-2-pierre-emmanuel.patry@embecosm.com>

On Mon, Apr 8, 2024 at 9:39 AM <pierre-emmanuel.patry@embecosm.com> wrote:
>
> From: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
>
> Hello,
>
> The rust frontend requires cargo to build some of it's components,
> it's presence was not checked during configuration.

NOTE cargo itself is a huge security hole. If anything we should place
all of the required dependencies with the specific versions that has
been tested on gcc.gnu.org (with md5 sums) and download that instead
of depending on some random downloads via cargo. Talk about broken
supply chain when things are downloading things randomly off the
internet.

If there is a way to cache and use those specific versions using
cargo, that should be done but I suspect cargo does not work that way.
Also any time someone says this is a temporary measure it is NOT and
we should never treat it as such unless you already have a patch to
remove it.


Thanks,
Andrew Pinski


>
> Best regards,
> Pierre-Emmanuel
>
> ----------
>
> 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 <pierre-emmanuel.patry@embecosm.com>
> ---
>  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 7efe98aaf96..3c5fe67342e 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 874966fb9f0..46e66e20197 100755
> --- a/configure
> +++ b/configure
> @@ -714,6 +714,7 @@ PGO_BUILD_GEN_CFLAGS
>  HAVE_CXX11_FOR_BUILD
>  HAVE_CXX11
>  do_compare
> +CARGO
>  GDC
>  GNATMAKE
>  GNATBIND
> @@ -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 :
> @@ -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:*) ;;
> diff --git a/configure.ac b/configure.ac
> index 4f34004a072..8c33c89d02c 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],
> @@ -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:*) ;;
> --
> 2.43.0
>

  parent reply	other threads:[~2024-04-09 14:12 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-08 16:33 pierre-emmanuel.patry
2024-04-09  7:42 ` Richard Biener
2024-04-09  7:47 ` John Paul Adrian Glaubitz
2024-04-09  8:00   ` Jakub Jelinek
2024-04-09  8:29     ` John Paul Adrian Glaubitz
2024-04-09 10:40   ` Arthur Cohen
2024-04-09  8:55     ` Iain Sandoe
2024-04-09 12:01       ` Arthur Cohen
2024-04-09 10:09         ` Iain Sandoe
2024-04-09 13:53           ` Arthur Cohen
2024-04-09 14:12 ` Andrew Pinski [this message]
2024-04-09 14:25   ` Arthur Cohen
2024-04-15 11:14 ` Thomas Schwinge
2024-04-15 11:50   ` build: Don't check for host-prefixed 'cargo' program (was: [PATCH] build: Check for cargo when building rust language) Thomas Schwinge
2024-04-15 12:18     ` build: Don't check for host-prefixed 'cargo' program Pierre-Emmanuel Patry
2024-04-15 12:44   ` build: Use of cargo not yet supported here in Canadian cross configurations (was: [PATCH] build: Check for cargo when building rust language) Thomas Schwinge
2024-04-15 16:36     ` build: Use of cargo not yet supported here in Canadian cross configurations Pierre-Emmanuel Patry
2024-04-16  8:55     ` Arthur Cohen
2024-04-16 20:34 ` [PATCH] build: Check for cargo when building rust language Andrew Pinski
2024-04-17  8:13   ` Rainer Orth
2024-04-17 14:54     ` Arthur Cohen
2024-04-23  8:52       ` Rainer Orth

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='CA+=Sn1mAR0T+YdZhuupkn_1HZvsvDxfV=Uo0AZna_cLCDgsH8g@mail.gmail.com' \
    --to=pinskia@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=gcc-rust@gcc.gnu.org \
    --cc=pierre-emmanuel.patry@embecosm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).