-
Notifications
You must be signed in to change notification settings - Fork 109
/
configure.ac
598 lines (487 loc) · 18 KB
/
configure.ac
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
AC_INIT([lsof],[4.99.4])
AM_INIT_AUTOMAKE([subdir-objects])
LT_INIT([disable-fast-install]) # avoid lt-lsof naming
# Locate custom m4 macros
AC_CONFIG_MACRO_DIR([m4])
# Require C compiler
AC_PROG_CC
# For legacy automake on e.g. CentOS 7
AM_PROG_CC_C_O
# Detect OS
AC_CANONICAL_HOST
LSOF_VSTR=$(uname -r)
LSOF_DIALECT=unknown
LSOF_DIALECT_DIR=unknown
LSOF_TGT=unknown
AS_CASE([${host_os}],
[linux*], [
LSOF_DIALECT=linux
LSOF_DIALECT_DIR=linux
LSOF_TGT=linux
# Compute version
LSOF_VERS=$(echo $LSOF_VSTR | sed 's/\./ /g' | awk '{printf "%d%d%03d",$1,$2,$3}')
# Always use large file
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64"
# Enable LTbigf test
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_BIGF -D_FILE_OFFSET_BITS=64"
], [darwin*], [
LSOF_DIALECT=darwin
LSOF_DIALECT_DIR=darwin
LSOF_TGT=darwin
AS_CASE([$LSOF_VSTR],
[7.*], [LSOF_VERS=700], # Mac OS X 10.3 (Panther)
[8.*], [LSOF_VERS=800], # Mac OS X 10.4 (Tiger)
[9.*], [LSOF_VERS=900], # Mac OS X 10.5 (Leopard)
[10.*], [LSOF_VERS=1000], # Mac OS X 10.6 (SnowLeopard)
[11.*], [LSOF_VERS=1100], # Mac OS X 10.7 (Lion)
[12.*], [LSOF_VERS=1200], # Mac OS X 10.8 (Mountain Lion)
[13.*], [LSOF_VERS=1300], # Mac OS X 10.9 (Mavericks)
[14.*], [LSOF_VERS=1400], # Mac OS X 10.10 (Yosemite)
[15.*], [LSOF_VERS=1500], # Mac OS X 10.11 (El Capitan)
[16.*], [LSOF_VERS=1600], # macOS 10.12 (Sierra)
[17.*], [LSOF_VERS=1700], # macOS 10.13 (High Sierra)
[18.*], [LSOF_VERS=1800], # macOS 10.14 (Mojave)
[19.*], [LSOF_VERS=1900], # macOS 10.15 (Catalina)
[
AC_MSG_NOTICE([Unknown Darwin release: $(uname -r)])
AC_MSG_NOTICE([Assuming Darwin 19.0])
LSOF_VERS=1900
])
# Add DARWINV to cflags
CFLAGS="$CFLAGS -DDARWINV=$LSOF_VERS"
# Enable LTbigf test
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_BIGF"
], [freebsd*], [
LSOF_DIALECT=freebsd
LSOF_DIALECT_DIR=freebsd
LSOF_TGT=freebsd
AS_CASE([$LSOF_VSTR],
[10*], [LSOF_VERS=10000],
[11*], [LSOF_VERS=11000],
[12*], [LSOF_VERS=12000],
[13*], [LSOF_VERS=13000],
[14*], [LSOF_VERS=14000],
[15*], [LSOF_VERS=15000], [
AC_MSG_ERROR([Unknown FreeBSD release: $(uname -r)])
])
# Add FREEBSDV to cflags
CFLAGS="$CFLAGS -DFREEBSDV=$LSOF_VERS"
# Always define HASPROCFS
CFLAGS="$CFLAGS -DHASPROCFS"
# Always link libutil
LDFLAGS="$LDFLAGS -lutil"
# Detect FreeBSD source code
AS_IF([test -d /usr/src/sys], [
FREEBSD_SYS=/usr/src/sys
], [test -d /sys], [
FREEBSD_SYS=/sys
], [
AC_MSG_WARN([No kernel sources in /usr/src/sys or /sys])
])
# Enable LTbigf test
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_BIGF"
], [netbsd*], [
LSOF_DIALECT=netbsd
LSOF_DIALECT_DIR=netbsd
LSOF_TGT=netbsd
case $LSOF_VSTR in
8.[[0123]]*)
LSOF_VERS="8000000"
;;
8.99.*)
LSOF_VERS="8099000"
;;
8.*)
LSOF_VERS="8000000"
AC_MSG_WARN([Unsupported NetBSD release: $(uname -r)])
AC_MSG_WARN([Configuring for NetBSD 8.0])
;;
9.[[0123]]*)
LSOF_VERS="9000000"
;;
9.99.10[[45678]])
LSOF_VERS="9099104"
;;
9.99.*)
LSOF_VERS="9099000"
;;
9.*)
LSOF_VERS="9000000"
AC_MSG_WARN([Unsupported NetBSD release: $(uname -r)])
AC_MSG_WARN([Configuring for NetBSD 9.0])
;;
10.99.*)
LSOF_VERS="10099000"
;;
10.*)
LSOF_VERS="10000000"
AC_MSG_WARN([Unsupported NetBSD release: $(uname -r)])
AC_MSG_WARN([Configuring for NetBSD 10.0])
;;
*)
AC_MSG_ERROR([Unknown NetBSD release: $(uname -r)])
;;
esac
# Add NETBSDV to cflags
CFLAGS="$CFLAGS -DNETBSDV=$LSOF_VERS"
# Define _KMEMUSER for paddr_t and __NAMECACHE_PRIVATE for struct namecache
CFLAGS="$CFLAGS -D_KMEMUSER -D__NAMECACHE_PRIVATE"
# Define HASNFSVATTRP because the relevant change in kernel src is in 1997
# We can safely assume that n_vattr is a pointer
CFLAGS="$CFLAGS -DHASNFSVATTRP"
# Check /dev/kmem
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_KMEM"
# Detect NetBSD source code
AS_IF([test -d /usr/src/sys], [
NETBSD_SYS=/usr/src/sys
CFLAGS="$CFLAGS -I$NETBSD_SYS"
], [
AC_MSG_WARN([No kernel sources in /usr/src/sys])
])
], [openbsd*], [
LSOF_DIALECT=openbsd
LSOF_DIALECT_DIR=openbsd
LSOF_TGT=openbsd
AS_CASE([$LSOF_VSTR],
[7.2], [LSOF_VERS=7020],
[7.3], [LSOF_VERS=7030],
[
AC_MSG_NOTICE([Unknown OpenBSD release: $(uname -r)])
AC_MSG_NOTICE([Assuming OpenBSD 7.3])
LSOF_VERS=7030
])
], [solaris*], [
LSOF_DIALECT=solaris
LSOF_DIALECT_DIR=sun
LSOF_TGT=solaris
AS_CASE([$LSOF_VSTR],
[5.11], [LSOF_VERS=110000],
[
AC_MSG_NOTICE([Unknown Solaris release: $(uname -r)])
AC_MSG_NOTICE([Assuming Solaris 5.11])
LSOF_VERS=110000
])
# Add solaris to cflags
CFLAGS="$CFLAGS -Dsolaris=$LSOF_VERS"
# Link system libraries
LIBS="$LIBS -lelf -lsocket -lnsl"
# Handle missing header
mkdir -p ./solaris11/sys
touch ./solaris11/sys/extdirent.h
CFLAGS="$CFLAGS -Isolaris11"
], [aix*], [
LSOF_DIALECT=aix
LSOF_DIALECT_DIR=aix
LSOF_TGT=aix
LSOF_TMP1=/usr/bin/oslevel
AS_IF([test -x $LSOF_TMP1], [
echo "Determining AIX version with $LSOF_TMP1."
echo "This may take a while, depending on your maintenance level."
LSOF_VSTR=`$LSOF_TMP1 | sed 's/[^0-9]*\([0-9\.]*\).*/\1/'`
echo "$LSOF_TMP1 reports the version is $LSOF_VSTR."
], [
# If oslevel can't be used, build the version string with
# `uname -rv` and issue a warning.
LSOF_VSTR=`uname -rv | awk '{printf "%d.%d.0.0\n",\$2,\$1}'`
echo "WARNING: can't execute $LSOF_TMP1; uname -rv reports"
echo " the version is $LSOF_VSTR;"
])
LSOF_VERS=`echo $LSOF_VSTR | sed 's/\.//g'`
# Add AIXV to cflags
CFLAGS="$CFLAGS -DAIXV=$LSOF_VERS"
# Assuming recent AIX on PowerPC64
CFLAGS="$CFLAGS -maix64 -DAIXA=1 -DAIX_KERNBITS=64 -DHASSTAT64"
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_AIXA=1"
# JFS2 support
# Add -fms-extensions to handle use of i_dev from the wInode anonymous
# structure reference in the JFS2 inode structure of <j2/j2_inode.h>.
CFLAGS="$CFLAGS -DHAS_JFS2 -I./lib/dialects/aix/aix5 -fms-extensions"
], [
AC_MSG_ERROR(["Host $host_os not supported"])
])
# Pass dialect info to Makefile.am
AM_CONDITIONAL([LINUX], [test x$LSOF_DIALECT_DIR = xlinux])
AM_CONDITIONAL([DARWIN], [test x$LSOF_DIALECT_DIR = xdarwin])
AM_CONDITIONAL([FREEBSD], [test x$LSOF_DIALECT_DIR = xfreebsd])
AM_CONDITIONAL([NETBSD], [test x$LSOF_DIALECT_DIR = xnetbsd])
AM_CONDITIONAL([OPENBSD], [test x$LSOF_DIALECT_DIR = xopenbsd])
AM_CONDITIONAL([SOLARIS], [test x$LSOF_DIALECT_DIR = xsun])
AM_CONDITIONAL([AIX], [test x$LSOF_DIALECT_DIR = xaix])
# Pass OS version
AS_IF([test x$LSOF_DIALECT_DIR != xlinux], [
LSOF_TMP=$(echo $LSOF_VSTR | sed 's/(/\\\\(/g' | sed 's/)/\\\\)/g')
CFLAGS="$CFLAGS -DLSOF_VSTR=\\\"$LSOF_TMP\\\""
])
# Pass LSOF_DIALECT/LSOF_DIALECT_DIR to Makefile.am
AC_SUBST([LSOF_DIALECT])
AC_SUBST([LSOF_DIALECT_DIR])
# Export public function with default visibility
AC_DEFINE([API_EXPORT], [__attribute__ ((visibility ("default")))],
[Set visibility to default for exported API functions.])
# --enable-liblsof to install liblsof
AC_ARG_ENABLE(liblsof, AS_HELP_STRING([--enable-liblsof],
[build and install liblsof @<:@default=yes@:>@]), [], [enable_liblsof=yes])
AM_CONDITIONAL([INSTALL_LIBLSOF], [test "x$enable_liblsof" = xyes])
# --enable-security to define HASSECURITY
AC_ARG_ENABLE(security, AS_HELP_STRING([--enable-security],
[allow only the root user to list all open files @<:@default=no@:>@]), [], [enable_security=no])
AS_IF([test "x$enable_security" = xyes], [
CFLAGS="$CFLAGS -DHASSECURITY"
])
# --enable-no-sock-security to define HASNOSOCKSECURITY
AC_ARG_ENABLE(no_sock_security, AS_HELP_STRING([--enable-no-sock-security],
[combined with --enable-security, allow anyone to list anyone else's socket files @<:@default=no@:>@]), [], [enable_no_sock_security=no])
AS_IF([test "x$enable_no_sock_security" = xyes], [
AS_IF([test "x$enable_security" = xyes], [
CFLAGS="$CFLAGS -DHASNOSOCKSECURITY"
], [
AC_MSG_ERROR([--enable-no-sock-security must be used with --enable-security])
])
])
# Check rpc/rpc.h or libtirpc
# with_libtirpc=yes/no/auto
AC_ARG_WITH(libtirpc, AS_HELP_STRING([--with-libtirpc],
[build with libtirpc support @<:@default=auto@:>@]), [], [with_libtirpc=auto])
AS_IF([test "x$with_libtirpc" != xno], [
PKG_CHECK_MODULES([LIBTIRPC], [libtirpc], [
CFLAGS="$CFLAGS $LIBTIRPC_CFLAGS"
LIBS="$LIBS $LIBTIRPC_LIBS"
with_libtirpc=yes
], [
AS_IF([test "x$with_libtirpc" = xyes], [
AC_MSG_ERROR([--with-libtirpc specified, but libtirpc could not be found])
])
with_libtirpc=no
])
])
AS_IF([test "x$with_libtirpc" = "xyes"],
[AC_DEFINE(HAVE_LIBTIRPC, 1, [Enable libtirpc support])])
AC_CHECK_HEADERS([rpc/rpc.h])
# Detect glibc for GLIBCV
AC_CHECK_DECLS([__GLIBC__])
# Detect ipv6 headers and definitions for HASIPv6
AC_CHECK_DECLS([AF_INET6], [], [], [[#include <sys/socket.h>]])
AC_CHECK_HEADERS([netinet6/in6.h netinet/in6.h netinet/ip6.h])
# Detect tcp definitions for NEEDS_NETINET_TCPH
AC_CHECK_DECLS([TCP_ESTABLISHED], [], [], [[#include <netinet/tcp.h>]])
# Detect unix socket endpoint headers for HASUXSOCKEPT
AC_CHECK_HEADERS([linux/sock_diag.h linux/unix_diag.h])
# Detect pty endpoint definition for HASPTYEPT
AC_CHECK_DECLS([TTYAUX_MAJOR], [], [], [[#include <linux/major.h>]])
# Detect socket state definition for HASSOSTATE and HASSOOPT
AC_CHECK_DECLS([SS_CONNECTED], [], [], [[#include <linux/net.h>]])
# Define _FILE_OFFSET_BITS if necessary
AC_SYS_LARGEFILE
# Detect strftime function for HAS_STRFTIME
AC_CHECK_FUNCS([strftime])
# Detect selinux headers for HASSELINUX
# with_selinux=yes/no/auto
AC_ARG_WITH(selinux, AS_HELP_STRING([--with-selinux],
[build with selinux support @<:@default=auto@:>@]), [], [with_selinux=auto])
AS_IF([test "x$with_selinux" != xno], [
AC_CHECK_HEADERS([selinux/selinux.h], [LIBS="$LIBS -lselinux"], [
AS_IF([test "x$with_selinux" = xyes], [
AC_MSG_ERROR([--with-selinux specified, but libselinux could not be found])
])
])
])
# Detect utmpx headers for HASUTMPX
AC_CHECK_HEADERS([utmpx.h])
# Detect vm_memattr_t definition for HAS_VM_MEMATTR_T
AC_CHECK_TYPES([vm_memattr_t], [], [], [[#include <sys/types.h>
#include <vm/vm.h>]])
# Detect doadump function for NEEDS_BOOLEAN_T
AC_CHECK_DECLS([doadump], [], [], [[#define _KERNEL 1
#include <sys/types.h>
#include <sys/param.h>
#include <sys/conf.h>]])
# Detect struct vnode definition for HAS_KVM_VNODE
# Linking libkvm is not required in AIX
AS_IF([test x$LSOF_DIALECT_DIR != xaix], [
AC_EGREP_CPP([struct vnode], [#define _KVM_VNODE 1
#include <sys/vnode.h>], [AC_DEFINE([HAVE_KVM_VNODE], [1], ["Define to 1 if struct vnode exists"])
LIBS="$LIBS -lkvm"])
])
# Detect SBS_CANTSENDMORE definition for HASSBSTATE
AC_CHECK_DECLS([SBS_CANTSENDMORE], [], [], [[#include <sys/types.h>
#include <sys/socketvar.h>]])
# Detect lockf_entry definition for HAS_LOCKF_ENTRY
AC_CHECK_TYPES([struct lockf_entry], [
HEADER_GENERATE([lockf_owner.h], [${FREEBSD_SYS}/kern/kern_lockf.c], ["^struct lock_owner {"], ["^};"], [LOCKF_OWNER_H])
AC_MSG_NOTICE([lockf_owner.h creation succeeded.])
CFLAGS="$CFLAGS -DHAS_LOCKF_ENTRY"
], [], [#include <sys/types.h>
#include <sys/lockf.h>])
# Detect ki_numthreads definition for HASTASKS
AC_CHECK_MEMBERS([struct kinfo_proc.ki_numthreads], [], [], [#include <sys/types.h>
#include <sys/user.h>])
# Detect i_effnlink/i_ffs_effnlink for HASEFFNLINK
AC_CHECK_MEMBERS([struct inode.i_effnlink], [CFLAGS="$CFLAGS -DHASEFFNLINK=i_effnlink"], [], [#define __BSD_VISIBLE 1
#include <sys/types.h>
#include <ufs/ufs/quota.h>
#include <ufs/ufs/inode.h>])
# Detect struct file.f_vnode for HASF_VNODE
AC_CHECK_MEMBERS([struct file.f_vnode], [], [], [#define __BSD_VISIBLE 1
#define _KERNEL 1
#define GENOFFSET
#include <sys/types.h>
#include <sys/file.h>])
# Detect struct filedescent for HAS_FILEDESCENT
AC_CHECK_TYPES([struct filedescent], [], [], [#define __BSD_VISIBLE 1
#include <sys/types.h>
#include <sys/filedesc.h>])
# Detect fs/tmpfs/tmpfs.h for HAS_TMPFS
AS_IF([test -r ${FREEBSD_SYS}/fs/tmpfs/tmpfs.h], [
AC_DEFINE([HAS_TMPFS], [1], [Define if fs/tmpfs/tmpfs.h is found])
])
# Detect wctype.h for HASWCTYPE_H
AC_CHECK_HEADERS([wctype.h])
# Detect struct inode.i_din2 for HAS_UFS1_2
AC_CHECK_MEMBERS([struct inode.i_din2], [], [], [#define __BSD_VISIBLE 1
#include <sys/types.h>
#include <ufs/ufs/quota.h>
#include <ufs/ufs/inode.h>])
# Detect struct vnode.v_lockf definition for HAS_V_LOCKF
AC_CHECK_MEMBERS([struct vnode.v_lockf], [], [], [#define _KVM_VNODE 1
#define __BSD_VISIBLE 1
#include <sys/types.h>
#include <sys/vnode.h>])
# Detect fdescfs version for HASFDESCFS
AC_CHECK_HEADERS([fs/fdescfs/fdesc.h], [], [], [#define _KERNEL 1
#define __BSD_VISIBLE 1
#include <sys/types.h>
#include <sys/mount.h>])
# Detect pseudofs for HASPSEUDOFS
AS_IF([test -d ${FREEBSD_SYS}/fs/pseudofs], [
CFLAGS="$CFLAGS -DHASPSEUDOFS -I$FREEBSD_SYS"
])
# Detect nullfs for HASNULLFS
AC_CHECK_HEADERS([fs/nullfs/null.h], [], [], [])
# Detect struct xtcpcb.t_maxseg for HAS_XTCPCB_TMAXSEG
AC_CHECK_MEMBERS([struct xtcpcb.t_maxseg], [], [], [#include <sys/types.h>
#include <sys/queue.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_pcb.h>
#include <netinet/tcp_var.h>])
# Detect struct kinfo_file.kf_un.kf_sock.kf_sock_sendq for HAS_KF_SOCK_SENDQ
AC_CHECK_MEMBERS([struct kinfo_file.kf_un.kf_sock.kf_sock_sendq], [], [], [#include <sys/types.h>
#include <sys/user.h>])
# Detect struct kinfo_file.kf_un.kf_file.kf_file_nlink for HAS_KF_FILE_NLINK
AC_CHECK_MEMBERS([struct kinfo_file.kf_un.kf_file.kf_file_nlink], [], [], [#include <sys/types.h>
#include <sys/user.h>])
# Detect nfs/nfsproto.h for HASNFSPROTO
AC_CHECK_HEADERS([nfs/nfsproto.h])
# Detect uvm/uvm.h for HAS_UVM_INCL
AC_CHECK_HEADERS([uvm/uvm.h])
# Detect struct statvfs for HASSTATVFS
AC_CHECK_TYPES([struct statvfs], [], [], [#include <sys/statvfs.h>])
# Detect struct inode.i_ffs1_size for HASI_FFS1
AC_CHECK_MEMBERS([struct inode.i_ffs1_size], [], [], [#include <ufs/ufs/inode.h>])
# Detect getbootfile function for HASGETBOOTFILE
AC_CHECK_DECLS([getbootfile()], [
LDFLAGS="$LDFLAGS -lutil"
], [], [#include <util.h>])
# Detect kvm_getproc2 function for HASKVMGETPROC2
AC_CHECK_DECLS([kvm_getproc2], [], [], [#include <kvm.h>])
# Detect fs/ptyfs/ptyfs.h header for HASPTYFS
AC_CHECK_HEADERS([fs/ptyfs/ptyfs.h])
# Detect fs/ptyfs/ptyfs.h header for HASPROCFS
AC_CHECK_HEADERS([miscfs/procfs/procfs.h])
# Detect PFSroot enum for HASPROCFS_PFSROOT
AC_CHECK_DECLS([PFSroot], [], [], [#define _KERNEL
#include <sys/types.h>
#include <miscfs/procfs/procfs.h>])
# Detect fs/tmpfs/tmpfs.h header for HASTMPFS
AC_CHECK_HEADERS([fs/tmpfs/tmpfs.h])
# Detect sys/pipe.h header for HAS_SYS_PIPEH
AC_CHECK_HEADERS([sys/pipe.h])
# Copy struct lockf definition from kernel source code for HAS_LOCKF_H
AS_IF([test x$LSOF_DIALECT = xnetbsd], [
# Generate lockf.h from kern/vfs_lockf.c
HEADER_GENERATE([lockf.h], [${NETBSD_SYS}/kern/vfs_lockf.c], ["^TAILQ_HEAD"], ["^};"], [LOCKF_H])
AC_MSG_NOTICE([lockf.h creation succeeded])
CFLAGS="$CFLAGS -DHAS_LOCKF_H"
])
# Detect fdescfs version for HASFDESCFS
AC_CHECK_HEADERS([miscfs/fdesc/fdesc.h])
# Detect struct fdescnode.fd_link for HASFDLINK
AC_CHECK_MEMBERS([struct fdescnode.fd_link], [], [], [#define _KERNEL
#include <sys/types.h>
#include <miscfs/fdesc/fdesc.h>])
# Detect miscfs/nullfs/null.h header for HASNULLFS
AC_CHECK_HEADERS([miscfs/nullfs/null.h], [], [], [#include <sys/mount.h>])
# Detect dup2 for HAS_DUP2
AC_CHECK_DECLS([dup2], [], [], [[#include <unistd.h>]])
# Detect closefrom for HAS_CLOSEFROM
AC_CHECK_DECLS([closefrom], [], [], [[#include <unistd.h>]])
# Detect sizeof(dev_t) for LT_DEV64
AC_CHECK_SIZEOF([dev_t])
AS_IF([test "x$ac_cv_sizeof_dev_t" = x8], [
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_DEV64"
])
# Detect inet/ipclassifier.h header for HAS_IPCLASSIFIER_H
AC_CHECK_HEADERS([inet/ipclassifier.h], [], [], [#define _KERNEL
#include <inet/ip.h>])
# Detect struct conn_s.conn_ixa header for HAS_CONN_NEW
AC_CHECK_MEMBERS([struct conn_s.conn_ixa], [], [], [#define _KERNEL
#include <inet/ip.h>
#include <inet/ipclassifier.h>])
# Detect sys/zone.h header for HASZONES
AC_CHECK_HEADERS([sys/zone.h])
# Detect pad_mutex_t for HAS_PAD_MUTEX
AC_CHECK_TYPES([pad_mutex_t], [], [], [#define _KERNEL
#include <sys/mutex.h>])
# Detect libctf.h header for HAS_LIBCTF
AC_CHECK_HEADERS([libctf.h], [LIBS="$LIBS -lctf"])
# Detect pc_direntpersec macro for HAS_PC_DIRENTPERSEC
AC_CHECK_DECLS([pc_direntpersec((struct pcfs *)NULL)], [], [], [#include <sys/fs/pc_fs.h>])
# Detect sys/fs/zfs.h header for HAS_ZFS
AC_CHECK_HEADERS([sys/fs/zfs.h])
# Detect sys/cred_impl.h header for HAS_CRED_IMPL_H
AC_CHECK_HEADERS([sys/cred_impl.h])
# Detect struct vnode.v_path for HAS_V_PATH
AC_CHECK_MEMBERS([struct vnode.v_path], [
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_VPATH"
], [], [#include <sys/vnode.h>])
# Detect VSOCK for HAS_VSOCK
AC_CHECK_DECLS([VSOCK], [], [], [#include <sys/vnode.h>])
# Detect struct aio_req for HAS_AIO_REQ_STRUCT
AC_CHECK_TYPES([struct aio_req], [], [], [#define _KERNEL
#include <sys/aio_req.h>])
# Detect sys/rgm.h header for HAS_SYS_RGM_H
AC_CHECK_HEADERS([sys/rgm.h])
# Detect rpc/rpc_tags.h header for HAS_RPC_RPC_TAGS_H
AC_CHECK_HEADERS([rpc/rpc_tags.h])
# Generate Makefile from Makefile.in/am
AC_CONFIG_FILES([Makefile])
# Pass build configurations to version.h.in
AC_SUBST(cc, $CC)
AC_SUBST(ccv, $($CC -v 2>&1 | sed -n 's/.*version \(.*\)/\1/p;q'))
AC_SUBST(ccflags, $CFLAGS)
AC_SUBST(ldflags, "$LDFLAGS$LIBS")
# Reproducible build
AS_IF([test "X$SOURCE_DATE_EPOCH" = "X"], [
AC_SUBST(host, $(uname -n))
AC_SUBST(logname, $LOGNAME)
AC_SUBST(user, $USER)
AC_SUBST(sysinfo, $(uname -a))
])
# Generate version.h/autotools.h
AC_CONFIG_FILES([autotools/version.h autotools/autotools.h])
# Generate version
AC_CONFIG_FILES([version])
# Generate config.h
AC_CONFIG_HEADERS([config.h])
# For VPATH building
AC_CONFIG_LINKS([tests/common.bash:tests/common.bash
lib/dialects/linux/tests/util-open-flags.bash:lib/dialects/linux/tests/util-open-flags.bash
Lsof.8:Lsof.8 00DIALECTS:00DIALECTS 00DIST:00DIST])
# Generate cflags for tests
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_DIAL_$LSOF_TGT -DLT_VERS=$LSOF_VERS"
# Override default lsof path
LSOF_TEST_CFLAGS="$LSOF_TEST_CFLAGS -DLT_DEF_LSOF_PATH=\\\"$PWD/lsof\\\""
AC_SUBST([LSOF_TEST_CFLAGS])
# Finish
AC_OUTPUT