XXX push upstream

Index: src/as-system-info.c
--- src/as-system-info.c.orig
+++ src/as-system-info.c
@@ -49,7 +49,7 @@
 
 #if defined(__linux__)
 #include <sys/sysinfo.h>
-#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
 #include <sys/types.h>
 #include <sys/sysctl.h>
 #elif defined(__GNU__)
@@ -476,11 +476,15 @@ as_get_physical_memory_total (void)
 	if (si.mem_unit > 0)
 		return (si.totalram * si.mem_unit) / MB_IN_BYTES;
 	return 0;
-#elif defined(__FreeBSD__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+	int64_t physmem;
+	int mib[2] = { CTL_HW, HW_PHYSMEM64 };
+#elif defined(__FreeBSD__)
 	unsigned long physmem;
-	size_t len = sizeof (physmem);
 	int mib[2] = { CTL_HW, HW_PHYSMEM };
-
+#endif
+	size_t len = sizeof (physmem);
 	if (sysctl (mib, 2, &physmem, &len, NULL, 0) == -1) {
 		g_warning ("Unable to determine physical memory size: %s", g_strerror (errno));
 		return 0;
