configure: Never use 'uname' to identify target OS

For a very long time we have used 'uname -s' as our fallback if
we don't identify the target OS using a compiler #define. This
obviously doesn't work for cross-compilation, and we've had
a comment suggesting we fix this in configure for a long time.
Since we now have an exhaustive list of which OSes we can run
on (thanks to commit 898be3e041 making an unrecognized OS
be a fatal error), we know which ones we're missing.

Add check_define tests for the remaining OSes we support.  The
defines checked are based on ones we already use in the codebase for
identifying the host OS (with the exception of GNU/kFreeBSD).
We can now set bogus_os immediately rather than doing it later.

We leave the comment about uname being bad untouched, since
there is still a use of it for the fallback for unrecognized
host CPU type.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 1499958932-23839-1-git-send-email-peter.maydell@linaro.org
This commit is contained in:
Peter Maydell 2017-07-13 16:15:32 +01:00
parent e4335180d2
commit 951fedfcee

26
configure vendored
View File

@ -537,8 +537,24 @@ elif check_define __sun__ ; then
targetos='SunOS' targetos='SunOS'
elif check_define __HAIKU__ ; then elif check_define __HAIKU__ ; then
targetos='Haiku' targetos='Haiku'
elif check_define __FreeBSD__ ; then
targetos='FreeBSD'
elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
targetos='GNU/kFreeBSD'
elif check_define __DragonFly__ ; then
targetos='DragonFly'
elif check_define __NetBSD__; then
targetos='NetBSD'
elif check_define __APPLE__; then
targetos='Darwin'
elif check_define _AIX; then
targetos='AIX'
else else
targetos=$(uname -s) # This is a fatal error, but don't report it yet, because we
# might be going to just print the --help text, or it might
# be the result of a missing compiler.
targetos='bogus'
bogus_os='yes'
fi fi
# Some host OSes need non-standard checks for which CPU to use. # Some host OSes need non-standard checks for which CPU to use.
@ -782,12 +798,6 @@ Linux)
QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES" QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
supported_os="yes" supported_os="yes"
;; ;;
*)
# This is a fatal error, but don't report it yet, because we
# might be going to just print the --help text, or it might
# be the result of a missing compiler.
bogus_os="yes"
;;
esac esac
if [ "$bsd" = "yes" ] ; then if [ "$bsd" = "yes" ] ; then
@ -1582,7 +1592,7 @@ if test "$bogus_os" = "yes"; then
# the compiler works (so the results of the check_defines we used # the compiler works (so the results of the check_defines we used
# to identify the OS are reliable), if we didn't recognize the # to identify the OS are reliable), if we didn't recognize the
# host OS we should stop now. # host OS we should stop now.
error_exit "Unrecognized host OS $targetos" error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fi fi
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"