[PATCH] configure: Fix error message when C compiler is not working

Thomas Huth posted 1 patch 1 month, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20240308060034.139670-1-thuth@redhat.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, Thomas Huth <thuth@redhat.com>
configure | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
[PATCH] configure: Fix error message when C compiler is not working
Posted by Thomas Huth 1 month, 3 weeks ago
If you try to run the configure script on a system without a working
C compiler, you get a very misleading error message:

 ERROR: Unrecognized host OS (uname -s reports 'Linux')

We should rather tell the user that we were not able to use the C
compiler instead, otherwise they will have a hard time to figure
out what was going wrong.

Fixes: 264b803721 ("configure: remove compiler sanity check")
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 configure | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/configure b/configure
index 3cd736b139..a036923dee 100755
--- a/configure
+++ b/configure
@@ -411,7 +411,7 @@ else
   # Using uname is really broken, but it is just a fallback for architectures
   # that are going to use TCI anyway
   cpu=$(uname -m)
-  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
+  echo "WARNING: could not determine host CPU, proceeding with 'uname -m' output '$cpu'"
 fi
 
 # Normalise host CPU name to the values used by Meson cross files and in source
@@ -1000,10 +1000,12 @@ if test -z "$ninja"; then
 fi
 
 if test "$host_os" = "bogus"; then
-    # Now that we know that we're not printing the help and that
-    # the compiler works (so the results of the check_defines we used
-    # to identify the OS are reliable), if we didn't recognize the
-    # host OS we should stop now.
+    # Now that we know that we're not printing the help, we should stop now
+    # if we didn't recognize the host OS (or the C compiler is not working).
+    write_c_skeleton;
+    if ! compile_object ; then
+        error_exit "C compiler \"$cc\" is not usable"
+    fi
     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
 fi
 
-- 
2.44.0
Re: [PATCH] configure: Fix error message when C compiler is not working
Posted by Peter Maydell 1 month, 1 week ago
On Fri, 8 Mar 2024 at 06:01, Thomas Huth <thuth@redhat.com> wrote:
>
> If you try to run the configure script on a system without a working
> C compiler, you get a very misleading error message:
>
>  ERROR: Unrecognized host OS (uname -s reports 'Linux')
>
> We should rather tell the user that we were not able to use the C
> compiler instead, otherwise they will have a hard time to figure
> out what was going wrong.
>
> Fixes: 264b803721 ("configure: remove compiler sanity check")
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  configure | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/configure b/configure
> index 3cd736b139..a036923dee 100755
> --- a/configure
> +++ b/configure
> @@ -411,7 +411,7 @@ else
>    # Using uname is really broken, but it is just a fallback for architectures
>    # that are going to use TCI anyway
>    cpu=$(uname -m)
> -  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
> +  echo "WARNING: could not determine host CPU, proceeding with 'uname -m' output '$cpu'"
>  fi
>
>  # Normalise host CPU name to the values used by Meson cross files and in source
> @@ -1000,10 +1000,12 @@ if test -z "$ninja"; then
>  fi
>
>  if test "$host_os" = "bogus"; then
> -    # Now that we know that we're not printing the help and that
> -    # the compiler works (so the results of the check_defines we used
> -    # to identify the OS are reliable), if we didn't recognize the
> -    # host OS we should stop now.
> +    # Now that we know that we're not printing the help, we should stop now
> +    # if we didn't recognize the host OS (or the C compiler is not working).
> +    write_c_skeleton;
> +    if ! compile_object ; then
> +        error_exit "C compiler \"$cc\" is not usable"
> +    fi
>      error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
>  fi

I think I would prefer as a structure:

(1) suppress the "unrecognized host CPU" message if "$host_os" == "bogus"
(2) do the "check the C compiler works" test as its own test immediately
    after we print the help message (and not guarded by testing $host_os)
(3) leave the "Unrecognized host OS" check code as it is

thanks
-- PMM
Re: [PATCH] configure: Fix error message when C compiler is not working
Posted by Thomas Huth 1 month, 1 week ago
On 19/03/2024 14.12, Peter Maydell wrote:
> On Fri, 8 Mar 2024 at 06:01, Thomas Huth <thuth@redhat.com> wrote:
>>
>> If you try to run the configure script on a system without a working
>> C compiler, you get a very misleading error message:
>>
>>   ERROR: Unrecognized host OS (uname -s reports 'Linux')
>>
>> We should rather tell the user that we were not able to use the C
>> compiler instead, otherwise they will have a hard time to figure
>> out what was going wrong.
>>
>> Fixes: 264b803721 ("configure: remove compiler sanity check")
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   configure | 12 +++++++-----
>>   1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/configure b/configure
>> index 3cd736b139..a036923dee 100755
>> --- a/configure
>> +++ b/configure
>> @@ -411,7 +411,7 @@ else
>>     # Using uname is really broken, but it is just a fallback for architectures
>>     # that are going to use TCI anyway
>>     cpu=$(uname -m)
>> -  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
>> +  echo "WARNING: could not determine host CPU, proceeding with 'uname -m' output '$cpu'"
>>   fi
>>
>>   # Normalise host CPU name to the values used by Meson cross files and in source
>> @@ -1000,10 +1000,12 @@ if test -z "$ninja"; then
>>   fi
>>
>>   if test "$host_os" = "bogus"; then
>> -    # Now that we know that we're not printing the help and that
>> -    # the compiler works (so the results of the check_defines we used
>> -    # to identify the OS are reliable), if we didn't recognize the
>> -    # host OS we should stop now.
>> +    # Now that we know that we're not printing the help, we should stop now
>> +    # if we didn't recognize the host OS (or the C compiler is not working).
>> +    write_c_skeleton;
>> +    if ! compile_object ; then
>> +        error_exit "C compiler \"$cc\" is not usable"
>> +    fi
>>       error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
>>   fi
> 
> I think I would prefer as a structure:
> 
> (1) suppress the "unrecognized host CPU" message if "$host_os" == "bogus"
> (2) do the "check the C compiler works" test as its own test immediately
>      after we print the help message (and not guarded by testing $host_os)
> (3) leave the "Unrecognized host OS" check code as it is

Hmm, another idea: Why do we print the --help output that late in the 
configure script at all? Couldn't we move this earlier, to the place where 
we already check for the --cc et al. switches? Then we could get rid of the 
"bogus" stuff completely?

  Thomas
Re: [PATCH] configure: Fix error message when C compiler is not working
Posted by Peter Maydell 1 month, 1 week ago
On Wed, 20 Mar 2024 at 14:38, Thomas Huth <thuth@redhat.com> wrote:
>
> On 19/03/2024 14.12, Peter Maydell wrote:
> > I think I would prefer as a structure:
> >
> > (1) suppress the "unrecognized host CPU" message if "$host_os" == "bogus"
> > (2) do the "check the C compiler works" test as its own test immediately
> >      after we print the help message (and not guarded by testing $host_os)
> > (3) leave the "Unrecognized host OS" check code as it is
>
> Hmm, another idea: Why do we print the --help output that late in the
> configure script at all? Couldn't we move this earlier, to the place where
> we already check for the --cc et al. switches? Then we could get rid of the
> "bogus" stuff completely?

We currently print in the help what the default values for --cc,
--host_cc, etc are -- which means we need to first figure out
those default values. We also print the default target list, and
to figure that out we need to know whether this is Linux or not,
and what the host architecture is. And to figure out the host
architecture we need to run the C compiler.

We could move --help earlier if we were prepared to make its
output more static and less dependent on the host environment,
I guess.

thanks
-- PMM
Re: [PATCH] configure: Fix error message when C compiler is not working
Posted by Thomas Huth 1 month, 1 week ago
On 08/03/2024 07.00, Thomas Huth wrote:
> If you try to run the configure script on a system without a working
> C compiler, you get a very misleading error message:
> 
>   ERROR: Unrecognized host OS (uname -s reports 'Linux')
> 
> We should rather tell the user that we were not able to use the C
> compiler instead, otherwise they will have a hard time to figure
> out what was going wrong.
> 
> Fixes: 264b803721 ("configure: remove compiler sanity check")
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>   configure | 12 +++++++-----
>   1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/configure b/configure
> index 3cd736b139..a036923dee 100755
> --- a/configure
> +++ b/configure
> @@ -411,7 +411,7 @@ else
>     # Using uname is really broken, but it is just a fallback for architectures
>     # that are going to use TCI anyway
>     cpu=$(uname -m)
> -  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
> +  echo "WARNING: could not determine host CPU, proceeding with 'uname -m' output '$cpu'"
>   fi
>   
>   # Normalise host CPU name to the values used by Meson cross files and in source
> @@ -1000,10 +1000,12 @@ if test -z "$ninja"; then
>   fi
>   
>   if test "$host_os" = "bogus"; then
> -    # Now that we know that we're not printing the help and that
> -    # the compiler works (so the results of the check_defines we used
> -    # to identify the OS are reliable), if we didn't recognize the
> -    # host OS we should stop now.
> +    # Now that we know that we're not printing the help, we should stop now
> +    # if we didn't recognize the host OS (or the C compiler is not working).
> +    write_c_skeleton;
> +    if ! compile_object ; then
> +        error_exit "C compiler \"$cc\" is not usable"
> +    fi
>       error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
>   fi
>   

*Ping*

Does anybody got some spare minutes to review this? I think it would be nice 
to fix the error message for the 9.0 release...

  Thanks,
   Thomas
Re: [PATCH] configure: Fix error message when C compiler is not working
Posted by Peter Maydell 1 month, 3 weeks ago
On Fri, 8 Mar 2024 at 06:01, Thomas Huth <thuth@redhat.com> wrote:
>
> If you try to run the configure script on a system without a working
> C compiler, you get a very misleading error message:
>
>  ERROR: Unrecognized host OS (uname -s reports 'Linux')
>
> We should rather tell the user that we were not able to use the C
> compiler instead, otherwise they will have a hard time to figure
> out what was going wrong.
>
> Fixes: 264b803721 ("configure: remove compiler sanity check")
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  configure | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/configure b/configure
> index 3cd736b139..a036923dee 100755
> --- a/configure
> +++ b/configure
> @@ -411,7 +411,7 @@ else
>    # Using uname is really broken, but it is just a fallback for architectures
>    # that are going to use TCI anyway
>    cpu=$(uname -m)
> -  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
> +  echo "WARNING: could not determine host CPU, proceeding with 'uname -m' output '$cpu'"
>  fi
>
>  # Normalise host CPU name to the values used by Meson cross files and in source
> @@ -1000,10 +1000,12 @@ if test -z "$ninja"; then
>  fi
>
>  if test "$host_os" = "bogus"; then
> -    # Now that we know that we're not printing the help and that
> -    # the compiler works (so the results of the check_defines we used
> -    # to identify the OS are reliable), if we didn't recognize the
> -    # host OS we should stop now.
> +    # Now that we know that we're not printing the help, we should stop now
> +    # if we didn't recognize the host OS (or the C compiler is not working).
> +    write_c_skeleton;
> +    if ! compile_object ; then
> +        error_exit "C compiler \"$cc\" is not usable"
> +    fi
>      error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
>  fi

Why doesn't it work to check the C compiler works before we
do the "what is the host CPU" test ? Does that make the
--help output not work when there's no C compiler?

thanks
-- PMM
Re: [PATCH] configure: Fix error message when C compiler is not working
Posted by Thomas Huth 1 month, 3 weeks ago
On 08/03/2024 12.26, Peter Maydell wrote:
> On Fri, 8 Mar 2024 at 06:01, Thomas Huth <thuth@redhat.com> wrote:
>>
>> If you try to run the configure script on a system without a working
>> C compiler, you get a very misleading error message:
>>
>>   ERROR: Unrecognized host OS (uname -s reports 'Linux')
>>
>> We should rather tell the user that we were not able to use the C
>> compiler instead, otherwise they will have a hard time to figure
>> out what was going wrong.
>>
>> Fixes: 264b803721 ("configure: remove compiler sanity check")
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   configure | 12 +++++++-----
>>   1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/configure b/configure
>> index 3cd736b139..a036923dee 100755
>> --- a/configure
>> +++ b/configure
>> @@ -411,7 +411,7 @@ else
>>     # Using uname is really broken, but it is just a fallback for architectures
>>     # that are going to use TCI anyway
>>     cpu=$(uname -m)
>> -  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
>> +  echo "WARNING: could not determine host CPU, proceeding with 'uname -m' output '$cpu'"
>>   fi
>>
>>   # Normalise host CPU name to the values used by Meson cross files and in source
>> @@ -1000,10 +1000,12 @@ if test -z "$ninja"; then
>>   fi
>>
>>   if test "$host_os" = "bogus"; then
>> -    # Now that we know that we're not printing the help and that
>> -    # the compiler works (so the results of the check_defines we used
>> -    # to identify the OS are reliable), if we didn't recognize the
>> -    # host OS we should stop now.
>> +    # Now that we know that we're not printing the help, we should stop now
>> +    # if we didn't recognize the host OS (or the C compiler is not working).
>> +    write_c_skeleton;
>> +    if ! compile_object ; then
>> +        error_exit "C compiler \"$cc\" is not usable"
>> +    fi
>>       error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
>>   fi
> 
> Why doesn't it work to check the C compiler works before we
> do the "what is the host CPU" test ? Does that make the
> --help output not work when there's no C compiler?

Right, that's the problem: --help would not work when there is no working C 
compiler.

  Thomas