From b4f29807225cf3744c2f4f971902fbdd7486fc19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Valverde?= <j@v6e.pt>
Date: Fri, 26 May 2023 13:29:23 +0100
Subject: [PATCH] CMake: Fix a try_run() test when cross-compiling

Upstream-Status: Backport
Signed-off-by: Armin Kuster <akuster808@gmail.com>

---
 ConfigureChecks.cmake | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index dd8268e077..d8bca54115 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -122,26 +122,30 @@ check_type_size("ssize_t"       SSIZE_T)
 # Check if the libc vsnprintf() conforms to C99. If this fails we may
 # need to fall-back on GLib I/O.
 #
-check_c_source_runs("
-	#include <stdio.h>
-	int main(void)
-	{
-		/* Check that snprintf() and vsnprintf() don't return
-		 * -1 if the buffer is too small. C99 says this value
-		 * is the length that would be written not including
-		 * the nul byte. */
-		char buf[3];
-		return snprintf(buf, sizeof(buf), \"%s\", \"ABCDEF\") > 0 ? 0 : 1;
-	}"
-	HAVE_C99_VSNPRINTF
-)
-if (NOT HAVE_C99_VSNPRINTF)
-	message(FATAL_ERROR
+# If cross-compiling we can't check so just assume this requirement is met.
+#
+if(NOT CMAKE_CROSSCOMPILING)
+	check_c_source_runs("
+		#include <stdio.h>
+		int main(void)
+		{
+			/* Check that snprintf() and vsnprintf() don't return
+			* -1 if the buffer is too small. C99 says this value
+			* is the length that would be written not including
+			* the nul byte. */
+			char buf[3];
+			return snprintf(buf, sizeof(buf), \"%s\", \"ABCDEF\") > 0 ? 0 : 1;
+		}"
+		HAVE_C99_VSNPRINTF
+	)
+	if (NOT HAVE_C99_VSNPRINTF)
+		message(FATAL_ERROR
 "Building Wireshark requires a C99 compliant vsnprintf() and this \
 target does not meet that requirement. Compiling for ${CMAKE_SYSTEM} \
 using ${CMAKE_C_COMPILER_ID}. Please report this issue to the Wireshark \
 developers at wireshark-dev@wireshark.org."
-	)
+		)
+	endif()
 endif()
 
 #
-- 
2.25.1

