diff --git a/configure.ac b/configure.ac
index 35a4e43dce3bdd91889648436dd2c3660c9bffce..1cbd5510dff29f0492f98c81a4c9a8ff0944c5bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1131,7 +1131,14 @@ FP_FIND_LIBZSTD
 dnl ** Other RTS features
 dnl --------------------------------------------------------------
 FP_FIND_LIBDW
+AC_SUBST(UseLibdw)
+AC_SUBST(LibdwLibDir)
+AC_SUBST(LibdwIncludeDir)
+
 FP_FIND_LIBNUMA
+AC_SUBST(UseLibNuma)
+AC_SUBST(LibNumaLibDir)
+AC_SUBST(LibNumaIncludeDir)
 
 dnl ** Documentation
 dnl --------------------------------------------------------------
@@ -1282,17 +1289,15 @@ echo "\
    cabal-install : $CABAL
 "
 
-USING_LIBNUMA=$(if [ "$HaveLibNuma" = "1" ]; then echo "YES"; else echo "NO"; fi;)
 USING_LIBZSTD=$(if [ "$HaveLibZstd" = "1" ]; then echo "YES"; else echo "NO"; fi;)
 STATIC_LIBZSTD=$(if [ "$StaticLibZstd" = "1" ]; then echo "YES"; else echo "NO"; fi;)
-USING_LIBDW=$(if [ "$USE_LIBDW" = "1" ]; then echo "YES"; else echo "NO"; fi;)
 
 echo "\
    Using optional dependencies:
-      libnuma : $USING_LIBNUMA
+      libnuma : $UseLibNuma
       libzstd : $USING_LIBZSTD
          statically linked? : $STATIC_LIBZSTD
-      libdw   : $USING_LIBDW
+      libdw   : $UseLibdw
 
    Using LLVM tools
       llc   : $LlcCmd
diff --git a/m4/fp_find_libdw.m4 b/m4/fp_find_libdw.m4
index 29008408d792d41b48dd1efd744442cf9d88c5c2..22f24ab0232f4184685a115c4388cac6ae31c20f 100644
--- a/m4/fp_find_libdw.m4
+++ b/m4/fp_find_libdw.m4
@@ -1,6 +1,11 @@
-dnl ** Have libdw?
-dnl --------------------------------------------------------------
-dnl Sets UseLibdw.
+# FP_FIND_LIBDW
+# --------------------------------------------------------------
+# Should we used libdw? (yes, no, or auto.)
+#
+# Sets variables:
+#   - UseLibdw: [YES|NO]
+#   - LibdwLibDir: optional path
+#   - LibdwIncludeDir: optional path
 AC_DEFUN([FP_FIND_LIBDW],
 [
   AC_ARG_WITH([libdw-libraries],
@@ -12,8 +17,6 @@ AC_DEFUN([FP_FIND_LIBDW],
       LIBDW_LDFLAGS="-L$withval"
     ])
 
-  AC_SUBST(LibdwLibDir)
-
   AC_ARG_WITH([libdw-includes],
     [AS_HELP_STRING([--with-libdw-includes=ARG],
       [Find includes for libdw in ARG [default=system default]])
@@ -23,32 +26,28 @@ AC_DEFUN([FP_FIND_LIBDW],
       LIBDW_CFLAGS="-I$withval"
     ])
 
-  AC_SUBST(LibdwIncludeDir)
+  AC_ARG_ENABLE(dwarf-unwind,
+    [AS_HELP_STRING([--enable-dwarf-unwind],
+      [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])],
+    [],
+    [enable_dwarf_unwind=no])
 
   UseLibdw=NO
-  USE_LIBDW=0
-  AC_ARG_ENABLE(dwarf-unwind,
-      [AS_HELP_STRING([--enable-dwarf-unwind],
-          [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])])
-  if test "$enable_dwarf_unwind" = "yes" ; then
+  if test "$enable_dwarf_unwind" != "no" ; then
     CFLAGS2="$CFLAGS"
     CFLAGS="$LIBDW_CFLAGS $CFLAGS"
     LDFLAGS2="$LDFLAGS"
     LDFLAGS="$LIBDW_LDFLAGS $LDFLAGS"
 
-    AC_CHECK_LIB(dw, dwfl_attach_state,
-        [AC_CHECK_HEADERS([elfutils/libdw.h], [break], [])
-         UseLibdw=YES],
-        [AC_MSG_ERROR([Cannot find system libdw (required by --enable-dwarf-unwind)])])
+    AC_CHECK_HEADER([elfutils/libdwfl.h],
+      [AC_CHECK_LIB(dw, dwfl_attach_state,
+        [UseLibdw=YES])])
+
+    if test "x:$enable_dwarf_unwind:$UseLibdw" = "x:yes:NO" ; then
+      AC_MSG_ERROR([Cannot find system libdw (required by --enable-dwarf-unwind)])
+    fi
 
     CFLAGS="$CFLAGS2"
     LDFLAGS="$LDFLAGS2"
   fi
-
-  AC_SUBST(UseLibdw)
-  if test $UseLibdw = "YES" ; then
-    USE_LIBDW=1
-  fi
-  AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw])
 ])
-
diff --git a/m4/fp_find_libnuma.m4 b/m4/fp_find_libnuma.m4
index 4f55453f8e32f9d5e254ee8e56ab4bbc4b540eae..83930954f475fa877a63460379a8f37b90018834 100644
--- a/m4/fp_find_libnuma.m4
+++ b/m4/fp_find_libnuma.m4
@@ -1,7 +1,13 @@
+# FP_FIND_LIBNUMA
+# --------------------------------------------------------------
+# Should we used libnuma? (yes, no, or auto.)
+#
+# Sets variables:
+#   - UseLibNuma: [YES|NO]
+#   - LibNumaLibDir: optional path
+#   - LibNumaIncludeDir: optional path
 AC_DEFUN([FP_FIND_LIBNUMA],
 [
-  dnl ** Have libnuma?
-  dnl --------------------------------------------------------------
   AC_ARG_WITH([libnuma-libraries],
     [AS_HELP_STRING([--with-libnuma-libraries=ARG],
       [Find libraries for libnuma in ARG [default=system default]])
@@ -11,8 +17,6 @@ AC_DEFUN([FP_FIND_LIBNUMA],
       LIBNUMA_LDFLAGS="-L$withval"
     ])
 
-  AC_SUBST(LibNumaLibDir)
-
   AC_ARG_WITH([libnuma-includes],
     [AS_HELP_STRING([--with-libnuma-includes=ARG],
       [Find includes for libnuma in ARG [default=system default]])
@@ -22,14 +26,14 @@ AC_DEFUN([FP_FIND_LIBNUMA],
       LIBNUMA_CFLAGS="-I$withval"
     ])
 
-  AC_SUBST(LibNumaIncludeDir)
-
-  HaveLibNuma=0
   AC_ARG_ENABLE(numa,
-      [AS_HELP_STRING([--enable-numa],
-          [Enable NUMA memory policy and thread affinity support in the
-           runtime system via numactl's libnuma [default=auto]])])
+    [AS_HELP_STRING([--enable-numa],
+      [Enable NUMA memory policy and thread affinity support in the
+       runtime system via numactl's libnuma [default=auto]])],
+    [],
+    [enable_numa=auto])
 
+  UseLibNuma=NO
   if test "$enable_numa" != "no" ; then
     CFLAGS2="$CFLAGS"
     CFLAGS="$LIBNUMA_CFLAGS $CFLAGS"
@@ -38,23 +42,14 @@ AC_DEFUN([FP_FIND_LIBNUMA],
 
     AC_CHECK_HEADERS([numa.h numaif.h])
 
-    if test "$ac_cv_header_numa_h$ac_cv_header_numaif_h" = "yesyes" ; then
-      AC_CHECK_LIB(numa, numa_available,HaveLibNuma=1)
+    if test "$ac_cv_header_numa_h:$ac_cv_header_numaif_h" = "yes:yes" ; then
+      AC_CHECK_LIB([numa], [numa_available], [UseLibNuma=YES])
     fi
-    if test "$enable_numa:$HaveLibNuma" = "yes:0" ; then
-        AC_MSG_ERROR([Cannot find system libnuma (required by --enable-numa)])
+    if test "$enable_numa:$UseLibNuma" = "yes:NO" ; then
+      AC_MSG_ERROR([Cannot find system libnuma (required by --enable-numa)])
     fi
 
     CFLAGS="$CFLAGS2"
     LDFLAGS="$LDFLAGS2"
   fi
-
-  AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$HaveLibNuma], [Define to 1 if you have libnuma])
-  if test $HaveLibNuma = "1" ; then
-    AC_SUBST([UseLibNuma],[YES])
-    AC_SUBST([CabalHaveLibNuma],[True])
-  else
-    AC_SUBST([UseLibNuma],[NO])
-    AC_SUBST([CabalHaveLibNuma],[False])
-  fi
 ])
diff --git a/rts/configure.ac b/rts/configure.ac
index 3284a1d5d9c88815e10c45459a4b44ab54c04cc9..a4c0dc2a234b376362183d31e6ba58f67502e02d 100644
--- a/rts/configure.ac
+++ b/rts/configure.ac
@@ -33,6 +33,20 @@ GHC_CONVERT_PLATFORM_PARTS([host], [Host])
 FPTOOLS_SET_PLATFORM_VARS([host], [Host])
 FPTOOLS_SET_HASKELL_PLATFORM_VARS([Host])
 
+dnl ** Other RTS features
+dnl --------------------------------------------------------------
+AC_DEFINE_UNQUOTED([USE_LIBDW], [$CABAL_FLAG_libdw], [Set to 1 to use libdw])
+
+AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$CABAL_FLAG_libnuma], [Define to 1 if you have libnuma])
+dnl We should have these headers if the flag is set, but check anyways
+dnl in order to define `HAVE_*` macros.
+AS_IF(
+  [test "$CABAL_FLAG_libnuma" = 1],
+  [AC_CHECK_HEADERS([numa.h numaif.h])])
+
+dnl ** Write config files
+dnl --------------------------------------------------------------
+
 AC_OUTPUT
 
 dnl ######################################################################