more cleanup
[m6w6/libmemcached] / CMake / CheckByteswap.cmake
index b238a805ace3904eb91a01f52bde4941511766e4..110880f9d4bcbf8494ebb55a12e95687f474673f 100644 (file)
@@ -1,7 +1,3 @@
-include(CheckHeader)
-include(CheckDecl)
-include(CheckCompiles)
-
 # defines HAVE_BYTESWAP
 # optionally defines BYTESWAP_HEADER
 # optionally defines BYTESWAP_32
@@ -17,42 +13,55 @@ include(CheckCompiles)
 # sys/endian.h: defines HAVE_SYS_ENDIAN_H
 # bswap32() in sys/endian.h: defines HAVE_BSWAP32
 #
-function(check_byteswap)
 
-    check_compiles(HAVE_BUILTIN_BSWAP32 "uint32_t a, b = __builtin_bswap32(a);" stdint.h)
+include(TestBigEndian)
+test_big_endian(WORDS_BIGENDIAN)
+configure_define(WORDS_BIGENDIAN)
 
-    if(HAVE_BUILTIN_BSWAP32)
-        unset(BYTESWAP_HEADER PARENT_SCOPE)
-        set(BYTESWAP_32 __builtin_bswap32 PARENT_SCOPE)
-        set(HAVE_BYTESWAP 1 PARENT_SCOPE)
-        return()
-    endif()
+configure_define(HAVE_BYTESWAP)
+configure_define_header(BYTESWAP_HEADER)
+configure_define_literal(BYTESWAP_32)
+
+check_c_source("
+        #include <stdint.h>
+        int main() {
+            uint32_t a = 1, b = __builtin_bswap32(a);
+            return b;
+        }"
+        HAVE_BUILTIN_BSWAP32
+)
+
+if(HAVE_BUILTIN_BSWAP32)
+    configure_undef(BYTESWAP_HEADER)
+    set(BYTESWAP_32 __builtin_bswap32 CACHE INTERNAL "BYTESWAP_32")
+    set(HAVE_BYTESWAP 1 CACHE INTERNAL "HAVE_BYTESWAP")
+    return()
+endif()
 
-    check_header(byteswap.h)
-    check_decl(bswap_32 byteswap.h)
+check_include(byteswap.h)
+check_symbol(bswap_32 byteswap.h)
 
-    if(HAVE_BSWAP_32)
-        if(HAVE_BYTESWAP_H)
-            set(BYTESWAP_HEADER byteswap.h PARENT_SCOPE)
-        endif()
-        set(BYTESWAP_32 bswap_32 PARENT_SCOPE)
-        set(HAVE_BYTESWAP 1 PARENT_SCOPE)
-        return()
+if(HAVE_BSWAP_32)
+    if(HAVE_BYTESWAP_H)
+        set(BYTESWAP_HEADER byteswap.h CACHE INTERNAL "BYTESWAP_HEADER")
     endif()
+    set(BYTESWAP_32 bswap_32 CACHE INTERNAL "BYTESWAP_32")
+    set(HAVE_BYTESWAP 1 CACHE INSTERNAL "HAVE_BYTESWAP")
+    return()
+endif()
 
-    check_header(sys/endian.h)
-    check_decl(bswap32 sys/endian.h)
+check_include(sys/endian.h)
+check_symbol(bswap32 sys/endian.h)
 
-    if(HAVE_BSWAP32)
-        if(HAVE_SYS_ENDIAN_H)
-            set(BYTESWAP_HEADER sys/endian.h PARENT_SCOPE)
-        endif()
-        set(BYTESWAP_32 bswap32 PARENT_SCOPE)
-        set(HAVE_BYTESWAP 1 PARENT_SCOPT)
-        return()
+if(HAVE_BSWAP32)
+    if(HAVE_SYS_ENDIAN_H)
+        set(BYTESWAP_HEADER sys/endian.h CACHE INTERNAL "BYTESWAP_HEADER")
     endif()
+    set(BYTESWAP_32 bswap32 CACHE INTERNAL "BYTESWAP_32")
+    set(HAVE_BYTESWAP 1 CACHE INTERNAL "HAVE_BYTESWAP")
+    return()
+endif()
 
-    unset(BYTESWAP_HEADER PARENT_SCOPE)
-    unset(BYTESWAP_32 PARENT_SCOPE)
-    set(HAVE_BYTESWAP 0 PARENT_SCOPE)
-endfunction()
+configure_undef(BYTESWAP_HEADER)
+configure_undef(BYTESWAP_32)
+set(HAVE_BYTESWAP 0)