--- ./tests/hawkey/test_iutil.cpp_orig	2024-12-09 01:59:39.877395861 -0600
+++ ./tests/hawkey/test_iutil.cpp	2024-12-09 04:55:50.864445284 -0600
@@ -34,6 +34,122 @@
 #include <unistd.h>
 #include <glib.h>
 
+#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)
+
+ /*
+  * vasprintf(3)
+  * 20020809 entropy@tappedin.com
+  * public domain.  no warranty.  use at your own risk.  have a nice day.
+  */
+ 
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ 
+ #if HAVE_PATHS_H
+ #include <paths.h>
+ #endif /* HAVE_PATHS_H */
+ 
+ 
+ #if defined(HAVE__VSNPRINTF) && !defined(HAVE_VSNPRINTF)
+ #undef HAVE_VSNPRINTF
+ #undef vsnprintf
+ #define HAVE_VSNPRINTF 1
+ #define vsnprintf _vsnprintf
+ #endif
+ 
+ #ifndef _PATH_DEVNULL
+ #define _PATH_DEVNULL "/dev/null"
+ #endif
+ 
+ #define CHUNKSIZE 512
+ int
+ vasprintf(char **ret, const char *fmt, va_list ap)
+ {
+ #if HAVE_VSNPRINTF
+ 	int chunks;
+ 	size_t buflen;
+ 	char *buf;
+ 	int len;
+ 
+ 	chunks = ((strlen(fmt) + 1) / CHUNKSIZE) + 1;
+ 	buflen = chunks * CHUNKSIZE;
+ 	for (;;) {
+ 		if ((buf = malloc(buflen)) == NULL) {
+ 			*ret = NULL;
+ 			return -1;
+ 		}
+ 		len = vsnprintf(buf, buflen, fmt, ap);
+ 		if (len >= 0 && (size_t) len < (buflen - 1)) {
+ 			break;
+ 		}
+ 		free(buf);
+ 		buflen = (++chunks) * CHUNKSIZE;
+ 		/* 
+ 		 * len >= 0 are required for vsnprintf implementation that 
+ 		 * return -1 of buffer insufficient
+ 		 */
+ 		if (len >= 0 && (size_t) len >= buflen) {
+ 			buflen = len + 1;
+ 		}
+ 	}
+ 	*ret = buf;
+ 	return len;
+ #else /* HAVE_VSNPRINTF */
+ #ifdef _REENTRANT
+ 	FILE *fp;
+ #else /* !_REENTRANT */
+ 	static FILE *fp = NULL;
+ #endif /* !_REENTRANT */
+ 	int len;
+ 	char *buf;
+ 
+ 	*ret = NULL;
+ 
+ #ifdef _REENTRANT
+ 
+ # ifdef WIN32
+ #  error Win32 do not have /dev/null, should use vsnprintf version
+ # endif
+ 
+ 	if ((fp = fopen(_PATH_DEVNULL, "w")) == NULL)
+ 		return -1;
+ #else /* !_REENTRANT */
+ 	if ((fp == NULL) && ((fp = fopen(_PATH_DEVNULL, "w")) == NULL))
+ 		return -1;
+ #endif /* !_REENTRANT */
+ 
+ 	len = vfprintf(fp, fmt, ap);
+ 
+ #ifdef _REENTRANT
+ 	if (fclose(fp) != 0)
+ 		return -1;
+ #endif /* _REENTRANT */
+ 
+ 	if (len < 0)
+ 		return len;
+ 	if ((buf = malloc(len + 1)) == NULL)
+ 		return -1;
+ 	if (vsprintf(buf, fmt, ap) != len)
+ 		return -1;
+ 	*ret = buf;
+ 	return len;
+ #endif /* HAVE_VSNPRINTF */
+ }
+ int
+ asprintf(char **ret, const char *fmt, ...)
+ {
+ 	int len;
+ 	va_list ap;
+ 
+ 	va_start(ap, fmt);
+ 	len = vasprintf(ret, fmt, ap);
+ 	va_end(ap);
+ 	return len;
+ }
+
 static void
 build_test_file(const char *filename)
 {
--- ./tests/hawkey/CMakeLists.txt_orig	2024-12-15 05:44:36.711443699 -0600
+++ ./tests/hawkey/CMakeLists.txt	2024-12-15 05:45:02.899221432 -0600
@@ -20,6 +20,9 @@
     testsys.cpp
 )
 
+SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> -X32_64  rc <TARGET> <LINK_FLAGS> <OBJECTS>")
+SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> -X32_64  rc <TARGET> <LINK_FLAGS> <OBJECTS>")
+
 add_library(testshared STATIC testshared.cpp)
 set_target_properties(testshared PROPERTIES COMPILE_FLAGS -fPIC)
 
