distrib/configure: Fail if we can't detect machine's word size
authorBen Gamari <bgamari.foss@gmail.com>
Tue, 11 Jul 2017 22:40:31 +0000 (18:40 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 12 Jul 2017 12:55:00 +0000 (08:55 -0400)
This is a sure sign that something is terribly wrong.

We also now verify that the word size that the binary distribution
expects matches the word size produced by the local target toolchain.

Finally we rename WordSize to TargetWordSize, since non-host/target
qualified quantities are terribly confusing.

Reviewers: austin, hvr, Phyx

Reviewed By: Phyx

Subscribers: Phyx, rwbarton, thomie, erikd

Differential Revision: https://phabricator.haskell.org/D3711

configure.ac
distrib/configure.ac.in
settings.in

index c31deba..043dea8 100644 (file)
@@ -875,8 +875,8 @@ FP_CHECK_SIZEOF_AND_ALIGNMENT(uint64_t)
 
 
 dnl for use in settings.in
-WordSize=$ac_cv_sizeof_void_p
-AC_SUBST(WordSize)
+TargetWordSize=$ac_cv_sizeof_void_p
+AC_SUBST(TargetWordSize)
 FP_CHECK_FUNC([WinExec],
   [@%:@include <windows.h>], [WinExec("",0)])
 
index ac6af24..a15b4a5 100644 (file)
@@ -134,10 +134,20 @@ dnl May need to use gcc to find platform details.
 dnl --------------------------------------------------------------
 FPTOOLS_SET_HASKELL_PLATFORM_VARS
 
-dnl WordSize for settings.in
+dnl TargetWordSize for settings.in
 AC_CHECK_SIZEOF(void *, 4)
-WordSize=$ac_cv_sizeof_void_p
-AC_SUBST(WordSize)
+if test "x$ac_cv_sizeof_void_p" = "x0"; then
+    AC_MSG_ERROR([Failed to determine machine word size. Does your toolchain actually work?])
+fi
+dnl Check that the toolchain we have is consistent with what the compiler expects
+if test "x$ac_cv_sizeof_void_p" != "x@TargetWordSize@"; then
+    AC_MSG_ERROR([This binary distribution produces binaries for a target with
+                  word size of @TargetWordSize@, but your target toolchain produces binaries
+                  with a word size of $ac_cv_sizeof_void_p. Are you sure your toolchain
+                  targets the intended target platform of this compiler?])
+fi
+TargetWordSize=$ac_cv_sizeof_void_p
+AC_SUBST(TargetWordSize)
 
 #
 dnl ** how to invoke `ar' and `ranlib'
index 04b913b..df647f1 100644 (file)
@@ -22,7 +22,7 @@
  ("cross compiling", "@CrossCompiling@"),
  ("target os", "@HaskellTargetOs@"),
  ("target arch", "@HaskellTargetArch@"),
- ("target word size", "@WordSize@"),
+ ("target word size", "@TargetWordSize@"),
  ("target has GNU nonexec stack", "@HaskellHaveGnuNonexecStack@"),
  ("target has .ident directive", "@HaskellHaveIdentDirective@"),
  ("target has subsections via symbols", "@HaskellHaveSubsectionsViaSymbols@"),