xref: /freebsd/contrib/openbsm/configure.ac (revision 5e386598a6d77973b93c073080f0cc574edda9e2)
13b97a967SRobert Watson#                                               -*- Autoconf -*-
23b97a967SRobert Watson# Process this file with autoconf to produce a configure script.
33b97a967SRobert Watson
43b97a967SRobert WatsonAC_PREREQ(2.59)
5*5e386598SRobert WatsonAC_INIT([OpenBSM], [1.2-alpha5], [trustedbsd-audit@TrustedBSD.org],[openbsm])
6aa772005SRobert WatsonAC_CONFIG_MACRO_DIR([m4])
73b97a967SRobert WatsonAC_CONFIG_SRCDIR([bin/auditreduce/auditreduce.c])
83b97a967SRobert WatsonAC_CONFIG_AUX_DIR(config)
9aa772005SRobert WatsonAC_CONFIG_MACRO_DIR([m4])
103b97a967SRobert WatsonAC_CONFIG_HEADER([config/config.h])
113b97a967SRobert WatsonAM_MAINTAINER_MODE
123b97a967SRobert Watson
1352267f74SRobert Watson# --with-native-includes forces the use of the system bsm headers.
1452267f74SRobert WatsonAC_ARG_WITH([native-includes],
1552267f74SRobert Watson[AS_HELP_STRING([--with-native-includes],
1652267f74SRobert Watson[Use the system native include files instead of those included with openbsm.])],
1752267f74SRobert Watson[
1852267f74SRobert WatsonAC_DEFINE(USE_NATIVE_INCLUDES,, Define to use native include files)
1952267f74SRobert Watsonuse_native_includes=true
2052267f74SRobert Watson],
2152267f74SRobert Watson[use_native_includes=false])
2252267f74SRobert WatsonAM_CONDITIONAL(USE_NATIVE_INCLUDES, $use_native_includes)
2352267f74SRobert Watson
2452267f74SRobert WatsonAC_PATH_PROGS(MIG, mig)
2552267f74SRobert Watson
263b97a967SRobert Watson# Checks for programs.
273b97a967SRobert WatsonAC_PROG_CC
283b97a967SRobert WatsonAC_PROG_INSTALL
29aa772005SRobert WatsonAC_PROG_LEX
303b97a967SRobert WatsonAC_PROG_LIBTOOL
31b6a05070SChristian BruefferAC_PROG_LN_S
32aa772005SRobert WatsonAC_PROG_YACC
333b97a967SRobert Watson
343b97a967SRobert WatsonAM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
353b97a967SRobert Watson
36506764c6SRobert WatsonAC_SEARCH_LIBS(dlsym, dl)
37aa772005SRobert WatsonAC_SEARCH_LIBS(pthread_create, pthread)
38506764c6SRobert WatsonAC_SEARCH_LIBS(clock_gettime, rt)
39aa772005SRobert WatsonAC_SEARCH_LIBS(SSL_connect, ssl)
40aa772005SRobert WatsonAC_SEARCH_LIBS(humanize_number, util)
41aa772005SRobert WatsonAC_SEARCH_LIBS(pidfile_open, util)
423b97a967SRobert Watson
433b97a967SRobert Watson# Checks for header files.
443b97a967SRobert WatsonAC_HEADER_STDC
453b97a967SRobert WatsonAC_HEADER_SYS_WAIT
46aa772005SRobert WatsonAC_CHECK_HEADERS([mach/mach.h stdint.h pthread_np.h printf.h])
473b97a967SRobert Watson
48c0020399SRobert WatsonAC_DEFINE([_GNU_SOURCE],,[Use extended API on platforms that require it])
49c0020399SRobert Watson
503b97a967SRobert Watson# Checks for typedefs, structures, and compiler characteristics.
513b97a967SRobert WatsonAC_C_CONST
523b97a967SRobert WatsonAC_TYPE_UID_T
533b97a967SRobert WatsonAC_TYPE_PID_T
543b97a967SRobert WatsonAC_TYPE_SIZE_T
553b97a967SRobert WatsonAC_CHECK_MEMBERS([struct stat.st_rdev])
563b97a967SRobert Watson
573b97a967SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm.__key],
583b97a967SRobert Watson[AC_DEFINE(HAVE_IPC_PERM___KEY,, Define if ipc_perm.__key instead of key)],
593b97a967SRobert Watson[],[
603b97a967SRobert Watson#include <sys/types.h>
613b97a967SRobert Watson#include <sys/ipc.h>
623b97a967SRobert Watson])
633b97a967SRobert Watson
6452267f74SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm._key],
6552267f74SRobert Watson[AC_DEFINE(HAVE_IPC_PERM__KEY,, Define if ipc_perm._key instead of key)],
6652267f74SRobert Watson[],[
6752267f74SRobert Watson#include <sys/types.h>
6852267f74SRobert Watson#include <sys/ipc.h>
6952267f74SRobert Watson])
7052267f74SRobert Watson
713b97a967SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm.__seq],
723b97a967SRobert Watson[AC_DEFINE(HAVE_IPC_PERM___SEQ,, Define if ipc_perm.__seq instead of seq)],
733b97a967SRobert Watson[],[
743b97a967SRobert Watson#include <sys/types.h>
753b97a967SRobert Watson#include <sys/ipc.h>
763b97a967SRobert Watson])
773b97a967SRobert Watson
7852267f74SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm._seq],
7952267f74SRobert Watson[AC_DEFINE(HAVE_IPC_PERM__SEQ,, Define if ipc_perm._seq instead of seq)],
8052267f74SRobert Watson[],[
8152267f74SRobert Watson#include <sys/types.h>
8252267f74SRobert Watson#include <sys/ipc.h>
8352267f74SRobert Watson])
8452267f74SRobert Watson
85aa772005SRobert WatsonAC_CHECK_MEMBER([struct sockaddr_storage.ss_len],
86aa772005SRobert Watson[AC_DEFINE(HAVE_SOCKADDR_STORAGE_SS_LEN,, Define if sockaddr_storage.ss_len field exists)],
87aa772005SRobert Watson[],[
88aa772005SRobert Watson#include <sys/types.h>
89aa772005SRobert Watson#include <sys/socket.h>
90aa772005SRobert Watson])
91aa772005SRobert Watson
923b97a967SRobert WatsonAC_HEADER_TIME
933b97a967SRobert WatsonAC_STRUCT_TM
943b97a967SRobert Watson
953b97a967SRobert Watson# Checks for library functions.
963b97a967SRobert WatsonAC_FUNC_CHOWN
973b97a967SRobert WatsonAC_FUNC_FORK
983b97a967SRobert WatsonAC_FUNC_MALLOC
993b97a967SRobert WatsonAC_FUNC_MKTIME
1003b97a967SRobert WatsonAC_TYPE_SIGNAL
1013b97a967SRobert WatsonAC_FUNC_STAT
1023b97a967SRobert WatsonAC_FUNC_STRFTIME
103aa772005SRobert WatsonAC_CHECK_FUNCS([arc4random arc4random_buf bzero cap_enter clock_gettime closefrom faccessat fdopendir fstatat ftruncate getresgid getresuid gettimeofday inet_ntoa jail kqueue memset openat pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_mutex_lock renameat setproctitle sigtimedwait strchr strerror strlcat strlcpy strndup strrchr strstr strtol strtoul unlinkat vis])
1043b97a967SRobert Watson
1053b97a967SRobert Watson# sys/queue.h exists on most systems, but its capabilities vary a great deal.
106d9af45c4SRobert Watson# test for LIST_FIRST and TAILQ_FOREACH_SAFE, which appears to not exist in
107d9af45c4SRobert Watson# all of them, and are necessary for OpenBSM.
1083b97a967SRobert WatsonAC_TRY_LINK([
1093b97a967SRobert Watson	#include <sys/queue.h>
1103b97a967SRobert Watson], [
1113b97a967SRobert Watson
112d9af45c4SRobert Watson	#ifndef LIST_FIRST
113d9af45c4SRobert Watson	#error LIST_FIRST missing
114d9af45c4SRobert Watson	#endif
115d9af45c4SRobert Watson	#ifndef TAILQ_FOREACH_SAFE
116d9af45c4SRobert Watson	#error TAILQ_FOREACH_SAFE
117d9af45c4SRobert Watson	#endif
1183b97a967SRobert Watson], [
1193b97a967SRobert WatsonAC_DEFINE(HAVE_FULL_QUEUE_H,, Define if queue.h includes LIST_FIRST)
1203b97a967SRobert Watson])
1213b97a967SRobert Watson
1223b97a967SRobert Watson# Systems may not define key audit system calls, in which case libbsm cannot
1233b97a967SRobert Watson# depend on them or it will generate link-time or run-time errors.  Test for
1243b97a967SRobert Watson# just one.
1253b97a967SRobert WatsonAC_TRY_LINK([
1267a0a89d2SRobert Watson	#include <stddef.h>
1273b97a967SRobert Watson
1283b97a967SRobert Watson	extern int auditon(int, void *, int);
1293b97a967SRobert Watson], [
1303b97a967SRobert Watson	int err;
1313b97a967SRobert Watson
1323b97a967SRobert Watson	err = auditon(0, NULL, 0);
1333b97a967SRobert Watson], [
1343b97a967SRobert WatsonAC_DEFINE(HAVE_AUDIT_SYSCALLS,, Define if audit system calls present)
1353b97a967SRobert Watsonhave_audit_syscalls=true
1363b97a967SRobert Watson], [
1373b97a967SRobert Watsonhave_audit_syscalls=false
1383b97a967SRobert Watson])
1393b97a967SRobert WatsonAM_CONDITIONAL(HAVE_AUDIT_SYSCALLS, $have_audit_syscalls)
1403b97a967SRobert Watson
1417a0a89d2SRobert Watson#
142aa772005SRobert Watson# We rely on the BSD be32toh() and be32enc()-style endian macros to perform
143aa772005SRobert Watson# byte order conversions.  Availability of these varies considerably -- in
144aa772005SRobert Watson# general, a system might have neither, be32toh(), or be32toh() and be32enc().
145aa772005SRobert Watson# There is also variation in which headers are even present, and whether they
146aa772005SRobert Watson# are macros or functions.  Try to organise the world into some simpler cases.
147aa772005SRobert Watson# The following macros may be set at the end:
148aa772005SRobert Watson#
149aa772005SRobert Watson# USE_ENDIAN_H
150aa772005SRobert Watson# USE_SYS_ENDIAN_H
151aa772005SRobert Watson# USE_MACHINE_ENDIAN_H
152aa772005SRobert Watson# USE_COMPAT_ENDIAN_H
153aa772005SRobert Watson# USE_COMPAT_ENDIAN_ENC_H
154aa772005SRobert Watson#
155aa772005SRobert Watson# First, decide which system endian.h to use.
156aa772005SRobert Watson#
157aa772005SRobert WatsonAC_CHECK_HEADERS([endian.h], [
158aa772005SRobert Watson	have_endian_h=yes
159aa772005SRobert Watson], [
160aa772005SRobert Watson	have_endian_h=no
161aa772005SRobert Watson])
162aa772005SRobert Watson
163aa772005SRobert WatsonAC_CHECK_HEADERS([sys/endian.h], [
164aa772005SRobert Watson	have_sys_endian_h=yes
165aa772005SRobert Watson], [
166aa772005SRobert Watson	have_sys_endian_h=no
167aa772005SRobert Watson])
168aa772005SRobert Watson
169aa772005SRobert WatsonAC_CHECK_HEADERS([machine/endian.h], [
170aa772005SRobert Watson	have_machine_endian_h=yes
171aa772005SRobert Watson], [
172aa772005SRobert Watson	have_machine_endian_h=no
173aa772005SRobert Watson])
174aa772005SRobert Watson
175aa772005SRobert Watsonif test $have_endian_h = yes; then
176aa772005SRobert Watson	AC_DEFINE(USE_ENDIAN_H,, Define if endian.h should be included)
177aa772005SRobert Watsonelif test $have_sys_endian_h = yes; then
178aa772005SRobert Watson	AC_DEFINE(USE_SYS_ENDIAN_H,, Define if sys/endian.h should be included)
179aa772005SRobert Watsonelif test $have_machine_endian_h = yes; then
180aa772005SRobert Watson	AC_DEFINE(USE_MACHINE_ENDIAN_H,, Define if machine/endian.h should be included)
181aa772005SRobert Watsonelse
182aa772005SRobert Watson	AC_MSG_ERROR([no endian.h])
183aa772005SRobert Watsonfi
184aa772005SRobert Watson
185aa772005SRobert Watson#
186aa772005SRobert Watson# Next, decide if we need to supplement with compat headers.
1877a0a89d2SRobert Watson#
1887a0a89d2SRobert WatsonAC_TRY_LINK([
189aa772005SRobert Watson	#ifdef USE_ENDIAN_H
190aa772005SRobert Watson	#include <endian.h>
191aa772005SRobert Watson	#endif
192aa772005SRobert Watson	#ifdef USE_SYS_ENDIAN_H
1937a0a89d2SRobert Watson	#include <sys/endian.h>
194aa772005SRobert Watson	#endif
195aa772005SRobert Watson	#ifdef USE_MACHINE_ENDIAN_H
196aa772005SRobert Watson	#include <machine/endian.h>
197aa772005SRobert Watson	#endif
198aa772005SRobert Watson], [
199aa772005SRobert Watson	(void)be32toh(0);
200aa772005SRobert Watson], [], [
201aa772005SRobert Watson	AC_DEFINE(USE_COMPAT_ENDIAN_H,, Define if compat/endian.h is required)
202aa772005SRobert Watson	AC_MSG_RESULT([using compat/endian.h])
203aa772005SRobert Watson])
204aa772005SRobert Watson
205aa772005SRobert WatsonAC_TRY_LINK([
206aa772005SRobert Watson	#ifdef USE_ENDIAN_H
207aa772005SRobert Watson	#include <endian.h>
208aa772005SRobert Watson	#endif
209aa772005SRobert Watson	#ifdef USE_SYS_ENDIAN_H
210aa772005SRobert Watson	#include <sys/endian.h>
211aa772005SRobert Watson	#endif
212aa772005SRobert Watson	#ifdef USE_MACHINE_ENDIAN_H
213aa772005SRobert Watson	#include <machine/endian.h>
214aa772005SRobert Watson	#endif
215aa772005SRobert Watson	#ifdef USE_COMPAT_ENDIAN_H
216aa772005SRobert Watson	#include "compat/endian.h"
217aa772005SRobert Watson	#endif
2187a0a89d2SRobert Watson	#include <stdlib.h>
2197a0a89d2SRobert Watson], [
220f7d22997SRobert Watson	int i;
221f7d22997SRobert Watson
222f7d22997SRobert Watson	i = bswap16(0);
223f7d22997SRobert Watson	i = bswap32(0);
224f7d22997SRobert Watson	i = bswap64(0);
225aa772005SRobert Watson	be32enc(NULL, 0);
226f7d22997SRobert Watson	i = htole64(0);
227f7d22997SRobert Watson	i = le64toh(0);
228aa772005SRobert Watson], [], [
229aa772005SRobert Watson	AC_DEFINE(USE_COMPAT_ENDIAN_ENC_H,, Define if compat/endian_enc.h is required)
230aa772005SRobert Watson	AC_MSG_RESULT([using compat/endian_enc.h])
2317a0a89d2SRobert Watson])
2327a0a89d2SRobert Watson
23352267f74SRobert Watson# Check to see if Mach IPC is used for trigger messages.  If so, use Mach IPC
23452267f74SRobert Watson# instead of the default for sending trigger messages to the audit components.
23552267f74SRobert WatsonAC_CHECK_FILE([/usr/include/mach/audit_triggers.defs], [
23652267f74SRobert WatsonAC_DEFINE(USE_MACH_IPC,, Define if uses Mach IPC for Triggers messages)
23752267f74SRobert Watsonuse_mach_ipc=true
23852267f74SRobert Watson], [
23952267f74SRobert Watsonuse_mach_ipc=false
24052267f74SRobert Watson])
24152267f74SRobert WatsonAM_CONDITIONAL(USE_MACH_IPC, $use_mach_ipc)
24252267f74SRobert Watson
2433b97a967SRobert WatsonAC_CONFIG_FILES([Makefile
2443b97a967SRobert Watson                 bin/Makefile
2453b97a967SRobert Watson                 bin/audit/Makefile
2463b97a967SRobert Watson                 bin/auditd/Makefile
247aa772005SRobert Watson                 bin/auditdistd/Makefile
248506764c6SRobert Watson                 bin/auditfilterd/Makefile
2493b97a967SRobert Watson                 bin/auditreduce/Makefile
2503b97a967SRobert Watson                 bin/praudit/Makefile
2513b97a967SRobert Watson                 bsm/Makefile
2527a0a89d2SRobert Watson                 libauditd/Makefile
2533b97a967SRobert Watson                 libbsm/Makefile
254506764c6SRobert Watson                 modules/Makefile
255506764c6SRobert Watson                 modules/auditfilter_noop/Makefile
2563b97a967SRobert Watson                 man/Makefile
25752267f74SRobert Watson                 sys/Makefile
25852267f74SRobert Watson                 sys/bsm/Makefile
259506764c6SRobert Watson                 test/Makefile
260506764c6SRobert Watson                 test/bsm/Makefile
2613b97a967SRobert Watson                 tools/Makefile])
2623b97a967SRobert Watson
2633b97a967SRobert WatsonAC_OUTPUT
264