aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/CheckSystemHeaders.cmake
blob: 232814eba183010b032bc025a349bd73d31c2c35 (plain)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# CheckSystemHeaders.cmake
# Checks for the existence of system headers

# Check platform specific includes
function(CheckSystemHeaders)
    # Basic system headers
    check_include_files(sys/types.h HAVE_SYS_TYPES_H)
    check_include_files(sys/uio.h HAVE_SYS_UIO_H)

    # Standard C headers
    check_include_files(fcntl.h HAVE_FCNTL_H)
    check_include_files(math.h HAVE_MATH_H)
    check_include_files(stdio.h HAVE_STDIO_H)
    check_include_files(stdlib.h HAVE_STDLIB_H)
    check_include_files(string.h HAVE_STRING_H)
    check_include_files(strings.h HAVE_STRINGS_H)
    check_include_files(time.h HAVE_TIME_H)
    check_include_files(unistd.h HAVE_UNISTD_H)

    # Data type headers
    check_include_files(stdint.h HAVE_STDINT_H)
    check_include_files(inttypes.h HAVE_INTTYPES_H)
    check_include_files(stdbool.h HAVE_STDBOOL_H)

    # Endian-related headers
    check_include_files(endian.h HAVE_ENDIAN_H)
    check_include_files(sys/endian.h HAVE_SYS_ENDIAN_H)
    check_include_files(machine/endian.h HAVE_MACHINE_ENDIAN_H)

    # System utility headers
    check_include_files(sys/socket.h HAVE_SYS_SOCKET_H)
    check_include_files(sys/mman.h HAVE_SYS_MMAN_H)
    check_include_files(sys/un.h HAVE_SYS_UN_H)
    check_include_files(sys/stat.h HAVE_SYS_STAT_H)
    check_include_files(sys/wait.h HAVE_SYS_WAIT_H)
    check_include_files(sys/param.h HAVE_SYS_PARAM_H)
    check_include_files(sys/file.h HAVE_SYS_FILE_H)
    check_include_files(sys/resource.h HAVE_SYS_RESOURCE_H)

    # Network-related headers
    check_include_files(netinet/in.h HAVE_NETINET_IN_H)
    check_include_files(netinet/tcp.h HAVE_NETINET_TCP_H)
    check_include_files(arpa/inet.h HAVE_ARPA_INET_H)
    check_include_files(netdb.h HAVE_NETDB_H)

    # System logging and signal handling
    check_include_files(syslog.h HAVE_SYSLOG_H)
    check_include_files(siginfo.h HAVE_SIGINFO_H)

    # Internationalization and user/groups
    check_include_files(locale.h HAVE_LOCALE_H)
    check_include_files(libgen.h HAVE_LIBGEN_H)
    check_include_files(pwd.h HAVE_PWD_H)
    check_include_files(grp.h HAVE_GRP_H)

    # File and path handling
    check_include_files(glob.h HAVE_GLOB_H)
    check_include_files(poll.h HAVE_POLL_H)
    check_include_files(readpassphrase.h HAVE_READPASSPHRASE_H)
    check_include_files(termios.h HAVE_TERMIOS_H)
    check_include_files(paths.h HAVE_PATHS_H)

    # Other utilities
    check_include_files(ctype.h HAVE_CTYPE_H)
    check_include_files(cpuid.h HAVE_CPUID_H)
    check_include_files(dirent.h HAVE_DIRENT_H)

    # Context-related headers
    check_include_files(ucontext.h HAVE_UCONTEXT_H)
    check_include_files(sys/ucontext.h HAVE_SYS_UCONTEXT_H) # OSX specific

    # Time and memory
    check_include_files(sys/timeb.h HAVE_SYS_TIMEB_H)

    # Log the results for important headers
    if (NOT HAVE_SYS_TYPES_H)
        message(WARNING "sys/types.h not found - this may cause problems")
    endif ()

    if (NOT HAVE_SYS_SOCKET_H)
        message(WARNING "sys/socket.h not found - networking functionality may be limited")
    endif ()

    # Return results to parent scope
    foreach (var
            HAVE_SYS_TYPES_H
            HAVE_SYS_UIO_H
            HAVE_FCNTL_H
            HAVE_MATH_H
            HAVE_STDIO_H
            HAVE_STDLIB_H
            HAVE_STRING_H
            HAVE_STRINGS_H
            HAVE_TIME_H
            HAVE_UNISTD_H
            HAVE_STDINT_H
            HAVE_INTTYPES_H
            HAVE_STDBOOL_H
            HAVE_ENDIAN_H
            HAVE_SYS_ENDIAN_H
            HAVE_MACHINE_ENDIAN_H
            HAVE_SYS_SOCKET_H
            HAVE_SYS_MMAN_H
            HAVE_SYS_UN_H
            HAVE_SYS_STAT_H
            HAVE_SYS_WAIT_H
            HAVE_SYS_PARAM_H
            HAVE_SYS_FILE_H
            HAVE_SYS_RESOURCE_H
            HAVE_NETINET_IN_H
            HAVE_NETINET_TCP_H
            HAVE_ARPA_INET_H
            HAVE_NETDB_H
            HAVE_SYSLOG_H
            HAVE_SIGINFO_H
            HAVE_LOCALE_H
            HAVE_LIBGEN_H
            HAVE_PWD_H
            HAVE_GRP_H
            HAVE_GLOB_H
            HAVE_POLL_H
            HAVE_READPASSPHRASE_H
            HAVE_TERMIOS_H
            HAVE_PATHS_H
            HAVE_CTYPE_H
            HAVE_UNISTD_H
            HAVE_CPUID_H
            HAVE_DIRENT_H
            HAVE_UCONTEXT_H
            HAVE_SYS_UCONTEXT_H
            HAVE_SYS_TIMEB_H)
        if (${var})
            set(${var} ${${var}} PARENT_SCOPE)
        endif ()
    endforeach ()
endfunction()

# Execute the function
CheckSystemHeaders()