diff --git a/src/aclocal.m4 b/src/aclocal.m4
index 848c8f0070dd72922dbaa82e89404699a918bbe4..41fa31a65c9d35d3b27a7c9201129006c1e23fb3 100644
--- a/src/aclocal.m4
+++ b/src/aclocal.m4
@@ -588,6 +588,60 @@ AC_DEFUN(PIKE_CHECK_CONSTANTS,
 ])
 
 
+dnl PIKE_AC_CHECK_OS()
+dnl
+dnl Check the operating system
+AC_DEFUN(PIKE_AC_CHECK_OS, [
+  AC_PATH_PROG(uname_prog,uname,no)
+  AC_MSG_CHECKING(operating system)
+  AC_CACHE_VAL(pike_cv_sys_os, [
+    if test "$cross_compiling" = "yes"; then
+      case "$host_alias" in
+	*amigaos*)	pike_cv_sys_os="AmigaOS";;
+	*linux*)	pike_cv_sys_os="Linux";;
+	*solaris*)	pike_cv_sys_os="Solaris";;
+	*sunos*)	pike_cv_sys_os="SunOS";;
+	*windows*)	pike_cv_sys_os="Windows_NT";;
+	*mingw*|*MINGW*)
+			pike_cv_sys_os="Windows_NT"
+			pike_cv_is_mingw="yes";;
+	*)		pike_cv_sys_os="Unknown";;
+      esac
+    elif test "$uname_prog" != "no"; then
+      # uname on UNICOS doesn't work like other people's uname...
+      if getconf CRAY_RELEASE >/dev/null 2>&1; then
+	pike_cv_sys_os="UNICOS"
+      else
+	pike_cv_sys_os="`uname`"
+      fi
+
+      case "$pike_cv_sys_os" in
+	SunOS)
+	  case "`uname -r`" in
+	    5.*) pike_cv_sys_os="Solaris" ;;
+	  esac
+	  ;;
+	Monterey64)
+	  # According to the release notes, the string "Monterey64"
+	  # will be changed to "AIX" in the final release.
+	  # (Monterey 64 is also known as AIX 5L).
+	  pike_cv_sys_os="AIX"
+	;;
+	*Windows*|*windows*)
+	  pike_cv_sys_os="Windows_NT"
+	;;
+	*MINGW*|*mingw*)
+	  pike_cv_is_mingw="yes"
+	  pike_cv_sys_os="Windows_NT"
+	;;
+      esac
+    else
+      pike_cv_sys_os="Not Solaris"
+    fi
+  ])
+  AC_MSG_RESULT($pike_cv_sys_os)
+])
+
 dnl 
 dnl PIKE_FEATURE_CLEAR()
 dnl PIKE_FEATURE(feature,text)
diff --git a/src/configure.in b/src/configure.in
index 29d6358043f1fa0e36268048f986127cffd7ee2a..0f4d632a84b0b6b46d0da79f37bef2efda90e210 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -570,57 +570,8 @@ else
   UNAME=unknown
 fi
 
-# We need some special hacks when running slowaris
-AC_PATH_PROG(uname_prog,uname,no)
-AC_MSG_CHECKING(operating system)
-AC_CACHE_VAL(pike_cv_sys_os,
-[
-if test "$cross_compiling" = "yes"; then
-  case "$host_alias" in
-    *amigaos*)	pike_cv_sys_os="AmigaOS";;
-    *linux*)	pike_cv_sys_os="Linux";;
-    *solaris*)	pike_cv_sys_os="Solaris";;
-    *sunos*)	pike_cv_sys_os="SunOS";;
-    *windows*)	pike_cv_sys_os="Windows_NT";;
-    *mingw*|*MINGW*)
-		pike_cv_sys_os="Windows_NT"
-		pike_cv_is_mingw="yes";;
-    *)		pike_cv_sys_os="Unknown";;
-  esac
-elif test "$uname_prog" != "no"; then
-  # uname on UNICOS doesn't work like other people's uname...
-  if getconf CRAY_RELEASE >/dev/null 2>&1; then
-    pike_cv_sys_os="UNICOS"
-  else
-    pike_cv_sys_os="`uname`"
-  fi
-
-  case "$pike_cv_sys_os" in
-    SunOS)
-      case "`uname -r`" in
-        5.*) pike_cv_sys_os="Solaris" ;;
-      esac
-    ;;
-    Monterey64)
-      # According to the release notes, the string "Monterey64"
-      # will be changed to "AIX" in the final release.
-      # (Monterey 64 is also known as AIX 5L).
-      pike_cv_sys_os="AIX"
-    ;;
-    *Windows*|*windows*)
-      pike_cv_sys_os="Windows_NT"
-    ;;
-    *MINGW*|*mingw*)
-      pike_cv_is_mingw="yes"
-      pike_cv_sys_os="Windows_NT"
-    ;;
-
-  esac
-else
-  pike_cv_sys_os="Not Solaris"
-fi
-])
-AC_MSG_RESULT($pike_cv_sys_os)
+# We need some special hacks when running slowaris and winblows.
+PIKE_AC_CHECK_OS()
 
 if test "x$pike_cv_sys_os" = xWindows_NT; then
   PIKE_FUNCS_NEED_DECLS(yes)
diff --git a/src/modules/system/configure.in b/src/modules/system/configure.in
index 423e9657f9cbcc4412316ea66d2b5e652f2736f6..7771cc934aeb6254d8ae2fd590a57ba54849ae15 100644
--- a/src/modules/system/configure.in
+++ b/src/modules/system/configure.in
@@ -11,55 +11,7 @@ AC_CHECK_LIB(net, __get_socket_descriptor)
 dnl For Cygwin
 AC_CHECK_LIB(cygipc, shmget)
 
-AC_MSG_CHECKING(operating system)
-AC_CACHE_VAL(pike_cv_sys_os,
-[
-if test "$cross_compiling" = "yes"; then
-  case "$host_alias" in
-    *amigaos*)	pike_cv_sys_os="AmigaOS";;
-    *linux*)	pike_cv_sys_os="Linux";;
-    *solaris*)	pike_cv_sys_os="Solaris";;
-    *sunos*)	pike_cv_sys_os="SunOS";;
-    *windows*)	pike_cv_sys_os="Windows_NT";;
-    *mingw*|*MINGW*)
-		pike_cv_sys_os="Windows_NT"
-		pike_cv_is_mingw="yes";;
-    *)		pike_cv_sys_os="Unknown";;
-  esac
-elif test "$uname_prog" != "no"; then
-  # uname on UNICOS doesn't work like other people's uname...
-  if getconf CRAY_RELEASE >/dev/null 2>&1; then
-    pike_cv_sys_os="UNICOS"
-  else
-    pike_cv_sys_os="`uname`"
-  fi
-
-  case "$pike_cv_sys_os" in
-    SunOS)
-      case "`uname -r`" in
-        5.*) pike_cv_sys_os="Solaris" ;;
-      esac
-    ;;
-    Monterey64)
-      # According to the release notes, the string "Monterey64"
-      # will be changed to "AIX" in the final release.
-      # (Monterey 64 is also known as AIX 5L).
-      pike_cv_sys_os="AIX"
-    ;;
-    *Windows*|*windows*)
-      pike_cv_sys_os="Windows_NT"
-    ;;
-    *MINGW*|*mingw*)
-      pike_cv_is_mingw="yes"
-      pike_cv_sys_os="Windows_NT"
-    ;;
-
-  esac
-else
-  pike_cv_sys_os="Not Solaris"
-fi
-])
-AC_MSG_RESULT($pike_cv_sys_os)
+PIKE_AC_CHECK_OS()
 
 if test x"$pike_cv_sys_os" = xWindows_NT ; then
   # FIXME: These look suspiciously much like 32bit versions.