11b5d61b8Smrgsrcs_os = [
21b5d61b8Smrg    'WaitFor.c',
31b5d61b8Smrg    'access.c',
41b5d61b8Smrg    'auth.c',
51b5d61b8Smrg    'backtrace.c',
61b5d61b8Smrg    'client.c',
71b5d61b8Smrg    'connection.c',
81b5d61b8Smrg    'inputthread.c',
91b5d61b8Smrg    'io.c',
101b5d61b8Smrg    'mitauth.c',
111b5d61b8Smrg    'oscolor.c',
121b5d61b8Smrg    'osinit.c',
131b5d61b8Smrg    'ospoll.c',
141b5d61b8Smrg    'utils.c',
151b5d61b8Smrg    'xdmauth.c',
161b5d61b8Smrg    'xsha1.c',
171b5d61b8Smrg    'xstrans.c',
181b5d61b8Smrg    'xprintf.c',
191b5d61b8Smrg    'log.c',
201b5d61b8Smrg]
211b5d61b8Smrg
22ed6184dfSmrg# Wrapper code for missing C library functions. Note that conf_data contains either '1' or false.
231b5d61b8Smrgsrcs_libc = []
24ed6184dfSmrgif conf_data.get('HAVE_REALLOCARRAY').to_int() == 0
251b5d61b8Smrg    srcs_libc += 'reallocarray.c'
261b5d61b8Smrgendif
27ed6184dfSmrgif conf_data.get('HAVE_STRCASECMP').to_int() == 0
281b5d61b8Smrg    srcs_libc += 'strcasecmp.c'
291b5d61b8Smrgendif
30ed6184dfSmrgif conf_data.get('HAVE_STRCASESTR').to_int() == 0
311b5d61b8Smrg    srcs_libc += 'strcasestr.c'
321b5d61b8Smrgendif
33ed6184dfSmrgif conf_data.get('HAVE_STRLCAT').to_int() == 0
341b5d61b8Smrg    srcs_libc += 'strlcat.c'
351b5d61b8Smrgendif
36ed6184dfSmrgif conf_data.get('HAVE_STRLCPY').to_int() == 0
371b5d61b8Smrg    srcs_libc += 'strlcpy.c'
381b5d61b8Smrgendif
39ed6184dfSmrgif conf_data.get('HAVE_STRNDUP').to_int() == 0
401b5d61b8Smrg    srcs_libc += 'strndup.c'
411b5d61b8Smrgendif
42ed6184dfSmrgif conf_data.get('HAVE_TIMINGSAFE_MEMCMP').to_int() == 0
431b5d61b8Smrg    srcs_libc += 'timingsafe_memcmp.c'
441b5d61b8Smrgendif
45ed6184dfSmrgif conf_data.get('HAVE_POLL').to_int() == 0
461b5d61b8Smrg    srcs_os += 'xserver_poll.c'
471b5d61b8Smrgendif
481b5d61b8Smrg
49ed6184dfSmrgif conf_data.get('BUSFAULT').to_int() != 0
501b5d61b8Smrg    srcs_os += 'busfault.c'
511b5d61b8Smrgendif
521b5d61b8Smrg
531b5d61b8Smrgif get_option('xdmcp')
541b5d61b8Smrg    srcs_os += 'xdmcp.c'
551b5d61b8Smrgendif
561b5d61b8Smrg
571b5d61b8Smrgrpc_dep = []
581b5d61b8Smrgif get_option('secure-rpc')
591b5d61b8Smrg    # prefer libtirpc (if available), otherwise ensure RPC functions are
601b5d61b8Smrg    # provided by libc.
611b5d61b8Smrg    rpc_dep = dependency('libtirpc', required: false)
621b5d61b8Smrg    if not (rpc_dep.found() or cc.has_header('rpc/rpc.h'))
631b5d61b8Smrg        error('secure-rpc requested, but neither libtirpc or libc RPC support were found')
641b5d61b8Smrg    endif
65ed6184dfSmrg    # XXX: also check if RPC library provides xdr_opaque_auth, authdes_(sec)create ???
661b5d61b8Smrg    srcs_os += 'rpcauth.c'
671b5d61b8Smrgendif
681b5d61b8Smrg
69ed6184dfSmrgos_dep = []
70ed6184dfSmrgos_c_args = []
71ed6184dfSmrgif get_option('xres')
72ed6184dfSmrg    # Only the XRes extension cares about the client ID.
73ed6184dfSmrg    os_c_args += '-DCLIENTIDS'
74ed6184dfSmrg    if host_machine.system() == 'openbsd'
75ed6184dfSmrg        os_dep += cc.find_library('kvm')
76ed6184dfSmrg    endif
77ed6184dfSmrgendif
78ed6184dfSmrg
791b5d61b8Smrglibxlibc = []
801b5d61b8Smrgif srcs_libc.length() > 0
811b5d61b8Smrg    libxlibc = static_library('libxlibc',
821b5d61b8Smrg        srcs_libc,
831b5d61b8Smrg        include_directories: inc,
841b5d61b8Smrg        dependencies: [
851b5d61b8Smrg            xproto_dep,
861b5d61b8Smrg        ],
871b5d61b8Smrg    )
881b5d61b8Smrgendif
891b5d61b8Smrg
90ed6184dfSmrgif enable_input_thread
91ed6184dfSmrg    os_dep += cc.find_library('pthread')
92ed6184dfSmrgendif
93ed6184dfSmrg
941b5d61b8Smrglibxserver_os = static_library('libxserver_os',
951b5d61b8Smrg    srcs_os,
961b5d61b8Smrg    include_directories: inc,
971b5d61b8Smrg    dependencies: [
98ed6184dfSmrg        dtrace_dep,
991b5d61b8Smrg        common_dep,
1001b5d61b8Smrg        dl_dep,
1011b5d61b8Smrg        sha1_dep,
1021b5d61b8Smrg        rpc_dep,
103ed6184dfSmrg        os_dep,
1041b5d61b8Smrg        dependency('xau')
1051b5d61b8Smrg    ],
106ed6184dfSmrg    c_args: os_c_args,
1071b5d61b8Smrg    link_with: libxlibc,
1081b5d61b8Smrg)
109