diff --git a/BaseLib/SystemTools.h b/BaseLib/SystemTools.h
index 5f775ddf4f615bb6e33246c9c8ba122da65eefc1..8939814f1fe3aa7f9ac895fdb9e5c4ac87de537e 100644
--- a/BaseLib/SystemTools.h
+++ b/BaseLib/SystemTools.h
@@ -19,11 +19,11 @@ namespace BaseLib
 /// return if this system supports little endian or not
 inline bool IsLittleEndian()
 {
-    int x = 0x00000001;
-    if (*(char*)&x)
-        return true;              //am little
-    else
-        return false;             //am big
+#ifdef ENDIAN_IS_BIG
+    return false;
+#elif ENDIAN_IS_LITTLE
+    return true;
+#endif
 }
 
 }
diff --git a/Tests/BaseLib/TestSystemTools.cpp b/Tests/BaseLib/TestSystemTools.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..16666ee91dbece3e7101d11d61314c8200c060b1
--- /dev/null
+++ b/Tests/BaseLib/TestSystemTools.cpp
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2012, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ * \file TestSystemTools.cpp
+ *
+ * Created on 2012-10-30 by Norihiro Watanabe
+ */
+
+// ** INCLUDES **
+#include "gtest.h"
+
+#include "SystemTools.h"
+
+TEST(BaseLib, EndianLittle) {
+    bool isLittle = false;
+    int x = 0x00000001;
+    if (*(char*)&x)
+        isLittle = true;              //am little
+
+	ASSERT_EQ (isLittle, BaseLib::IsLittleEndian());
+}
+
diff --git a/scripts/cmake/CheckTypeSizes.cmake b/scripts/cmake/CheckTypeSizes.cmake
index 4d9f23b54b1e5625997e2be48ee0c893a4c081a7..e88ff9e73d1eb40254410f97e54db55483fb2c83 100644
--- a/scripts/cmake/CheckTypeSizes.cmake
+++ b/scripts/cmake/CheckTypeSizes.cmake
@@ -14,4 +14,16 @@ ELSE()
 	SET( HAVE_64_BIT 1 )
 	ADD_DEFINITIONS(-DHAVE_64_BIT)
 	SET( BITS 64)
-ENDIF()
\ No newline at end of file
+ENDIF()
+
+# Check endian of the system
+INCLUDE (TestBigEndian)
+TEST_BIG_ENDIAN (IS_BIG_ENDIAN)
+IF (IS_BIG_ENDIAN)
+    ADD_DEFINITIONS(-DENDIAN_IS_BIG)
+   # cannot use BIG_ENDIAN because it's reserved in Linux
+ELSE ()
+    ADD_DEFINITIONS(-DENDIAN_IS_LITTLE)
+   # cannot use LITTLE_ENDIAN because it's reserved in Linux
+ENDIF () # IS_BIG_ENDIAN
+