--- ./configure.ac.orig
+++ ./configure.ac
@@ -34,6 +34,7 @@
 case "${host_os}" in
     linux-gnu*) HOST_OS="linux-gnu" ;;
     linux-uclibc*) HOST_OS="linux-gnu" ;;
+    linux-musl*) HOST_OS="linux-gnu" ;;
     *)		AC_MSG_ERROR([unkown host-os ${host_os}]) ;;
 esac
 AC_SUBST(HOST_OS)
@@ -234,6 +235,7 @@
 	sys/param.h \
 	sys/time.h \
 	unistd.h \
+	error.h \
 ])
 
 # Checks for typedefs, structures, and compiler characteristics.
diff --git a/expr.c b/expr.c
index 32860fd..374c549 100644
--- a/expr.c
+++ b/expr.c
@@ -19,9 +19,12 @@
  */
 
 #include <string.h>
+#include <stdio.h>
 #include <assert.h>
 #include <errno.h>
+#ifdef HAVE_ERROR_H
 #include <error.h>
+#endif
 #include <stdlib.h>
 
 #include "expr.h"
@@ -330,8 +333,11 @@ expr_self(void)
 	static struct expr_node *node = NULL;
 	if (node == NULL) {
 		node = malloc(sizeof(*node));
-		if (node == NULL)
-			error(1, errno, "malloc expr_self");
+		if (node == NULL) {
+			fprintf(stderr, "%s: malloc expr_self\n",
+				strerror(errno));
+			exit(1);
+		}
 		expr_init_self(node);
 	}
 	return node;
diff --git a/glob.c b/glob.c
index 075c867..06fec47 100644
--- a/glob.c
+++ b/glob.c
@@ -180,7 +180,7 @@ glob_to_regex(const char *glob, char **retp)
 			goto fail;
 	}
 	*retp = buf;
-	return REG_NOERROR;
+	return 0;
 }
 
 int
@@ -188,7 +188,7 @@ globcomp(regex_t *preg, const char *glob, int cflags)
 {
 	char *regex = NULL;
 	int status = glob_to_regex(glob, &regex);
-	if (status != REG_NOERROR)
+	if (status != 0)
 		return status;
 	assert(regex != NULL);
 	status = regcomp(preg, regex, cflags);
diff --git a/options.c b/options.c
index 1e19dc7..1dc5e1e 100644
--- a/options.c
+++ b/options.c
@@ -204,7 +204,7 @@ compile_libname(const char *expr, const char *a_lib, int lib_re_p,
 
 		regex_t lib_re;
 		int status = (lib_re_p ? regcomp : globcomp)(&lib_re, lib, 0);
-		if (status != REG_NOERROR) {
+		if (status != 0) {
 			char buf[100];
 			regerror(status, &lib_re, buf, sizeof buf);
 			fprintf(stderr, "Rule near '%s' will be ignored: %s.\n",
diff --git a/read_config_file.c b/read_config_file.c
index e247436..73528fe 100644
--- a/read_config_file.c
+++ b/read_config_file.c
@@ -27,7 +27,9 @@
 #include <stdlib.h>
 #include <ctype.h>
 #include <errno.h>
+#ifdef HAVE_ERROR_H
 #include <error.h>
+#endif
 #include <assert.h>
 
 #include "common.h"
@@ -1258,8 +1260,12 @@ void
 init_global_config(void)
 {
 	struct arg_type_info *info = malloc(2 * sizeof(*info));
-	if (info == NULL)
-		error(1, errno, "malloc in init_global_config");
+	if (info == NULL) {
+		report_error(filename, line_no,
+			     "%s: malloc in init_global_config",
+			     strerror(errno));
+		exit(1);
+	}
 
 	memset(info, 0, 2 * sizeof(*info));
 	info[0].type = ARGTYPE_POINTER;
diff --git a/zero.c b/zero.c
index bc119ee..e685f59 100644
--- a/zero.c
+++ b/zero.c
@@ -18,8 +18,11 @@
  * 02110-1301 USA
  */
 
+#ifdef HAVE_ERROR_H
 #include <error.h>
+#endif
 #include <errno.h>
+#include <string.h>
 
 #include "zero.h"
 #include "common.h"
@@ -96,8 +99,11 @@ expr_node_zero(void)
 	static struct expr_node *node = NULL;
 	if (node == NULL) {
 		node = malloc(sizeof(*node));
-		if (node == NULL)
-			error(1, errno, "malloc expr_node_zero");
+		if (node == NULL) {
+			report_global_error("%s: malloc expr_node_zero",
+					strerror(errno));
+			exit(1);
+		}
 		expr_init_cb1(node, &zero1_callback,
 			      expr_self(), 0, (void *)-1);
 	}
--- ./proc.h.orig
+++ ./proc.h
@@ -26,6 +26,7 @@
 #include "config.h"
 
 #include <sys/time.h>
+#include <unistd.h>
 
 #if defined(HAVE_LIBUNWIND)
 # include <libunwind.h>
