huangcm
2024-12-18 9d29be7f7249789d6ffd0440067187a9f040c2cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/
# All rights reserved
 
# @synopsis:
#
# Provides a library of common tests on top of the 'cc' module.
 
use cc
 
module-options {}
 
# @cc-check-lfs
#
# The equivalent of the AC_SYS_LARGEFILE macro
# defines 'HAVE_LFS' if LFS is available,
# and defines '_FILE_OFFSET_BITS=64' if necessary
#
# Returns 1 if 'LFS' is available or 0 otherwise
#
proc cc-check-lfs {} {
   cc-check-includes sys/types.h
   msg-checking "Checking if -D_FILE_OFFSET_BITS=64 is needed..."
   set lfs 1
   if {[msg-quiet cc-with {-includes sys/types.h} {cc-check-sizeof off_t}] == 8} {
       msg-result no
   } elseif {[msg-quiet cc-with {-includes sys/types.h -cflags -D_FILE_OFFSET_BITS=64} {cc-check-sizeof off_t}] == 8} {
       define _FILE_OFFSET_BITS 64
       msg-result yes
   } else {
       set lfs 0
       msg-result none
   }
   define-feature lfs $lfs
   return $lfs
}
 
# @cc-check-endian
#
# The equivalent of the AC_C_BIGENDIAN macro
# defines 'HAVE_BIG_ENDIAN' if endian is known to be big,
# or 'HAVE_LITTLE_ENDIAN' if endian is known to be little.
#
# Returns 1 if determined, or 0 if not.
#
proc cc-check-endian {} {
   cc-check-includes sys/types.h sys/param.h
   set rc 0
   msg-checking "Checking endian..."
   cc-with {-includes {sys/types.h sys/param.h}} {
       if {[cctest -code {
           #if !defined(BIG_ENDIAN) || !defined(BYTE_ORDER)
               #error unknown
           #elif BYTE_ORDER != BIG_ENDIAN
               #error little
           #endif
       }]} {
           define-feature big-endian
           msg-result "big"
           set rc 1
       } elseif {[cctest -code {
           #if !defined(LITTLE_ENDIAN) || !defined(BYTE_ORDER)
               #error unknown
           #elif BYTE_ORDER != LITTLE_ENDIAN
               #error big
           #endif
       }]} {
           define-feature little-endian
           msg-result "little"
           set rc 1
       } else {
           msg-result "unknown"
       }
   }
   return $rc
}