diff --git a/configure.in b/configure.in
index 0adec58..f6afa58 100644
--- a/configure.in
+++ b/configure.in
@@ -1017,6 +1017,26 @@ AC_MSG_RESULT([no])
 
 AM_CONDITIONAL([HAVE_AT_FDCWD], [test x$ac_have_at_fdcwd = xyes])
 
+# Check for stpncpy function definition in string.h
+
+AC_MSG_CHECKING([for stpncpy])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#define _GNU_SOURCE
+#include <string.h>
+]], [[
+  char *d;
+  char *s;
+  size_t n = 0;
+  char *r = stpncpy(d, s, n);
+]])], [
+ac_have_stpncpy=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_stpncpy=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL([HAVE_STPNCPY], [test x$ac_have_stpncpy = xyes])
 
 # Check for CLOCK_MONOTONIC
 
diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
index 018ecc0..0429591 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -288,7 +288,6 @@ check_PROGRAMS = \
 	sbfragment \
 	sh-mem sh-mem-random \
 	sigaltstack signal2 sigprocmask static_malloc sigkill \
-	stpncpy \
 	strchr \
 	str_tester \
 	supp_unknown supp1 supp2 suppfree \
@@ -307,6 +306,10 @@ if DWARF4
 check_PROGRAMS += dw4
 endif
 
+if HAVE_STPNCPY
+check_PROGRAMS += stpncpy
+endif
+
 AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
 AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
 
diff --git a/memcheck/tests/stpncpy.c b/memcheck/tests/stpncpy.c
index 4c83419..fe348f8 100644
--- a/memcheck/tests/stpncpy.c
+++ b/memcheck/tests/stpncpy.c
@@ -1,5 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
+
+#define _GNU_SOURCE
 #include <string.h>
 
 int main(int argc, char **argv)
diff --git a/memcheck/tests/stpncpy.vgtest b/memcheck/tests/stpncpy.vgtest
index fbfcaa7..a54595a 100644
--- a/memcheck/tests/stpncpy.vgtest
+++ b/memcheck/tests/stpncpy.vgtest
@@ -1,2 +1,3 @@
 prog: stpncpy
+prereq: test -e ./stpncpy
 vgopts: -q
