diff --git a/CMakeLists.txt b/CMakeLists.txt
index 01fe997d27a3d7e5f4274fb3cf627f30fb1e6aef..fa403dbe894592cb641d2ca2883baf1a51d6343f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -437,24 +437,8 @@ IF(KWSYS_USE_FundamentalType)
   ENDIF(KWSYS_USE___INT64)
 
   # Check signedness of "char" type.
-  IF("KWSYS_CHAR_IS_SIGNED" MATCHES "^KWSYS_CHAR_IS_SIGNED$")
-    MESSAGE(STATUS "Checking signedness of char")
-    TRY_RUN(KWSYS_CHAR_IS_SIGNED KWSYS_CHAR_IS_SIGNED_COMPILED
-      ${CMAKE_CURRENT_BINARY_DIR}
-      ${CMAKE_CURRENT_SOURCE_DIR}/kwsysPlatformCxxTests.cxx
-      COMPILE_DEFINITIONS -DTEST_KWSYS_CHAR_IS_SIGNED)
-    IF(KWSYS_CHAR_IS_SIGNED_COMPILED)
-      IF(KWSYS_CHAR_IS_SIGNED)
-        MESSAGE(STATUS "Checking signedness of char -- signed")
-        SET(KWSYS_CHAR_IS_SIGNED 1 CACHE INTERNAL "Whether char is signed.")
-      ELSE(KWSYS_CHAR_IS_SIGNED)
-        MESSAGE(STATUS "Checking signedness of char -- unsigned")
-        SET(KWSYS_CHAR_IS_SIGNED 0 CACHE INTERNAL "Whether char is signed.")
-      ENDIF(KWSYS_CHAR_IS_SIGNED)
-    ELSE(KWSYS_CHAR_IS_SIGNED_COMPILED)
-      MESSAGE(FATAL_ERROR "Checking signedness of char -- failed")
-    ENDIF(KWSYS_CHAR_IS_SIGNED_COMPILED)
-  ENDIF("KWSYS_CHAR_IS_SIGNED" MATCHES "^KWSYS_CHAR_IS_SIGNED$")
+  KWSYS_PLATFORM_CXX_TEST_RUN(KWSYS_CHAR_IS_SIGNED
+    "Checking whether char is signed" DIRECT)
 ENDIF(KWSYS_USE_FundamentalType)
 
 IF(KWSYS_NAMESPACE MATCHES "^kwsys$")
diff --git a/kwsysPlatformCxxTests.cxx b/kwsysPlatformCxxTests.cxx
index e9216765c6ceef2b0893aa2da32885e5f9f10e98..8048acff8446690be8be6753f5852c94e156767f 100644
--- a/kwsysPlatformCxxTests.cxx
+++ b/kwsysPlatformCxxTests.cxx
@@ -267,11 +267,11 @@ int main()
 #endif
 
 #ifdef TEST_KWSYS_CHAR_IS_SIGNED
-/* Return 1 for char signed and 0 for char unsigned.  */
+/* Return 0 for char signed and 1 for char unsigned.  */
 int main()
 {
   unsigned char uc = 255;
-  return (*reinterpret_cast<char*>(&uc) < 0)?1:0;
+  return (*reinterpret_cast<char*>(&uc) < 0)?0:1;
 }
 #endif