See: https://gist.github.com/ingramj/1105106/adfad1a7b1f0575dd7737c296d644856f2c2d074
--- lib/cmdline.c.orig	2020-06-13 17:42:45.000000000 +0800
+++ lib/cmdline.c	2022-05-31 20:35:42.000000000 +0800
@@ -39,6 +39,97 @@
 #include <search.h>
 #include <sys/time.h>
 
+#if defined(__APPLE__)
+#if __STDC_VERSION__ >= 199901L
+/* restrict is a keyword */
+#else
+# define restrict
+#endif
+
+#ifndef _POSIX_SOURCE
+typedef long ssize_t;
+#define SSIZE_MAX LONG_MAX
+#endif
+
+ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delimiter,
+                 FILE *restrict stream);
+ssize_t getline(char **restrict lineptr, size_t *restrict n,
+                FILE *restrict stream);
+
+#define _GETDELIM_GROWBY 128    /* amount to grow line buffer by */
+#define _GETDELIM_MINLEN 4      /* minimum line buffer size */
+
+ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delimiter,
+                 FILE *restrict stream)
+{
+	char *buf, *pos;
+	int c;
+	ssize_t bytes;
+
+	if (lineptr == NULL || n == NULL) {
+		errno = EINVAL;
+		return -1;
+	}
+	if (stream == NULL) {
+		errno = EBADF;
+		return -1;
+	}
+
+	/* resize (or allocate) the line buffer if necessary */
+	buf = *lineptr;
+	if (buf == NULL || *n < _GETDELIM_MINLEN) {
+		buf = realloc(*lineptr, _GETDELIM_GROWBY);
+		if (buf == NULL) {
+			/* ENOMEM */
+			return -1;
+		}
+		*n = _GETDELIM_GROWBY;
+		*lineptr = buf;
+	}
+
+	/* read characters until delimiter is found, end of file is reached,
+	   or an error occurs. */
+	bytes = 0;
+	pos = buf;
+	while ((c = getc(stream)) != EOF) {
+		if (bytes + 1 >= SSIZE_MAX) {
+			errno = EOVERFLOW;
+			return -1;
+		}
+		bytes++;
+		if (bytes >= *n - 1) {
+			buf = realloc(*lineptr, *n + _GETDELIM_GROWBY);
+			if (buf == NULL) {
+				/* ENOMEM */
+				return -1;
+			}
+			*n += _GETDELIM_GROWBY;
+			pos = buf + bytes - 1;
+			*lineptr = buf;
+		}
+
+		*pos++ = (char) c;
+		if (c == delimiter) {
+			break;
+		}
+	}
+
+	if (ferror(stream) || (feof(stream) && (bytes == 0))) {
+		/* EOF, or an error from getc(). */
+		return -1;
+	}
+
+	*pos = '\0';
+	return bytes;
+}
+
+ssize_t getline(char **restrict lineptr, size_t *restrict n,
+                FILE *restrict stream)
+{
+	return getdelim(lineptr, n, '\n', stream);
+}
+#endif
+
 #include "cmdline.h"
 #include "formats.h"
 #include "hash-utility.h"


# See: https://github.com/hboetes/mg/issues/7#issuecomment-475869095
--- lib/traverse.c.orig	2020-06-13 17:42:45.000000000 +0800
+++ lib/traverse.c	2022-05-31 19:48:09.000000000 +0800
@@ -41,6 +41,12 @@
 
 #include "fts/fts.h"
 
+#if defined(__APPLE__)
+#define st_atim st_atimespec
+#define st_ctim st_ctimespec
+#define st_mtim st_mtimespec
+#endif
+
 //////////////////////
 // TRAVERSE SESSION //
 //////////////////////
