X-Git-Url: https://git.m6w6.name/?p=m6w6%2Flibmemcached;a=blobdiff_plain;f=CMake%2FCheckByteswap.cmake;h=110880f9d4bcbf8494ebb55a12e95687f474673f;hp=b238a805ace3904eb91a01f52bde4941511766e4;hb=01c5e0ed8d3d9c72ea192792d1c49a50e756d635;hpb=808f81dba2553a1e552e8f3cea3ee376ad7d3558 diff --git a/CMake/CheckByteswap.cmake b/CMake/CheckByteswap.cmake index b238a805..110880f9 100644 --- a/CMake/CheckByteswap.cmake +++ b/CMake/CheckByteswap.cmake @@ -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 + 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)