Blame view

configure.ac 12 KB
Barak A. Pearlmutter authored
1 2 3
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

Andrew Savchenko authored
4
AC_PREREQ([2.59])
redmine authored
5
AC_INIT([clsync],[0.4.1],[Dmitry Yu Okunev <dyokunev@ut.mephi.ru>],,[https://github.com/xaionaro/clsync])
Barak A. Pearlmutter authored
6
AC_CONFIG_SRCDIR([sync.c])
Barak A. Pearlmutter authored
7
AC_CONFIG_MACRO_DIR([m4])
redmine authored
8
AM_INIT_AUTOMAKE([1.11 foreign -Wall -Wno-portability])
Barak A. Pearlmutter authored
9
AC_CONFIG_HEADERS([config.h])
redmine authored
10
AC_PROG_CC([gcc cc])
redmine authored
11
AM_PROG_CC_C_O
redmine authored
12
AC_PROG_CC_STDC
Andrew Savchenko authored
13
AC_CONFIG_MACRO_DIR([m4])
redmine authored
14 15
AC_PROG_LIBTOOL
AM_PROG_LIBTOOL
redmine authored
16 17

LT_INIT
Barak A. Pearlmutter authored
18

Barak A. Pearlmutter authored
19 20
PKG_INSTALLDIR

redmine authored
21
AC_CANONICAL_HOST
redmine authored
22 23

m4_include(m4/ax_pthread.m4)
redmine authored
24 25 26 27 28 29 30 31 32 33 34
AX_PTHREAD(
	[
		CC="$PTHREAD_CC"
		LIBS="$LIBS $PTHREAD_LIBS"
		CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
		LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
	], [
		AC_MSG_ERROR([Pthread library not found. Please set PTHREAD_CFLAGS and PTHREAD_LIBS correctly for your setup])
	]
)

redmine authored
35

redmine authored
36
HAVE_BACKTRACE=1
redmine authored
37 38 39
case $host_os in
	*bsd*)
		AC_SEARCH_LIBS([backtrace], [execinfo], [],
redmine authored
40
			[HAVE_BACKTRACE=])
redmine authored
41 42 43
		;;
esac

Andrew Savchenko authored
44 45 46 47 48 49
dnl --enable-clsync
AC_ARG_ENABLE(clsync,
AS_HELP_STRING(--disable-clsync,
[do not build clsync binary, default: build clsync]))
AM_CONDITIONAL([CLSYNC], [test "x$enable_clsync" != "xno"])

Andrew Savchenko authored
50 51 52 53 54
dnl check for glibc only if clsync is being build
AS_IF([test "x$enable_clsync" != "xno"], [
    PKG_CHECK_MODULES(GLIB,  [glib-2.0])
])

Andrew Savchenko authored
55 56 57 58 59
dnl --enable-cluster
AC_ARG_ENABLE(cluster,
AS_HELP_STRING(--enable-cluster,
[enable clustering support (not yet implemented), default: no]))

redmine authored
60
AS_IF([test "x$enable_cluster" = "xyes"], [CPPFLAGS="${CPPFLAGS} -DCLUSTER_SUPPORT"
redmine authored
61 62 63 64 65 66 67
	dnl mhash check
	AC_ARG_WITH(mhash,
	AS_HELP_STRING(--with-mhash,
	[use mhash instead of internal version of hash algo, default: enabled]))

	AS_IF([test "x$with_mhash" = "xno"], [], [
	AC_CHECK_HEADER([mhash.h], [], [AC_MSG_ERROR("Unable to find mhash.h")])
redmine authored
68
	AC_SEARCH_LIBS([mhash_init], [mhash], [CPPFLAGS="${CPPFLAGS} -DHAVE_MHASH"; LDFLAGS="${LDFLAGS} -lmhash"],
redmine authored
69 70 71
		[AC_MSG_ERROR("Unable to find libmhash")])
	])
])
Andrew Savchenko authored
72

redmine authored
73

redmine authored
74 75 76 77 78 79
dnl --enable-socket
AC_ARG_ENABLE(socket,
AS_HELP_STRING(--enable-socket,
[enable control socket support, default: no]))

AS_IF([test "x$enable_socket" = "xyes"],
redmine authored
80
[CPPFLAGS="${CPPFLAGS} -DENABLE_SOCKET"])
redmine authored
81

redmine authored
82 83
AM_CONDITIONAL([SOCKET], [test "x$enable_socket" = "xyes"])

Andrew Savchenko authored
84
dnl --enable-libclsync
Andrew Savchenko authored
85 86
AC_ARG_ENABLE(socket-library,
AS_HELP_STRING(--enable-socket-library,
Andrew Savchenko authored
87
[build libclsync socket library, default: no]))
Andrew Savchenko authored
88
AM_CONDITIONAL([LIBCLSYNC], [test "x$enable_socket_library" = "xyes"])
Andrew Savchenko authored
89

redmine authored
90 91
dnl --enable-unshare
AC_ARG_ENABLE(unshare,
Andrew Savchenko authored
92 93
AS_HELP_STRING(--disable-unshare,
[disable support of unshare(), default: enabled]))
redmine authored
94

Andrew Savchenko authored
95
AS_IF([ test "x$enable_unshare" != "xno" ],
redmine authored
96
[
Andrew Savchenko authored
97
    AC_CHECK_FUNC([unshare], [HAVE_UNSHARE=1])
redmine authored
98 99
])

redmine authored
100 101
dnl --enable-highload-locks
AC_ARG_ENABLE(highload-locks,
redmine authored
102 103 104
AS_HELP_STRING(--disable-highload-locks,
[disable locks for high loaded instances with --splitting={thread,process} [which are not enough tested and can cause deadlocks with 100% CPU utilization]]))
AM_CONDITIONAL([HLLOCKS], [test "x$enable_highload_locks" != "xno"])
redmine authored
105

Andrew Savchenko authored
106
dnl --enable-debug
Barak A. Pearlmutter authored
107
AC_ARG_ENABLE(debug,
Andrew Savchenko authored
108
AS_HELP_STRING(--enable-debug,
redmine authored
109 110 111 112 113 114 115 116 117 118 119
[enable debugging support, default: yes; value: no, yes, force]),
[case "${enableval}" in
	(0|"no")    debug=0 ;;
	(1|"yes")   debug=1 ;;
	(2|"force") debug=2 ;;
	(*)         AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],
[debug=1])

AS_IF([ test "$debug" -ge 1 ],
[CFLAGS="${CFLAGS} -pipe -Wall -O0 -ggdb3" CPPFLAGS="${CPPFLAGS} -D_DEBUG_SUPPORT"])
Barak A. Pearlmutter authored
120

redmine authored
121 122
AS_IF([ test "$debug" -ge 2 ],
[CPPFLAGS="${CPPFLAGS} -D_DEBUG_FORCE"])
redmine authored
123

Andrew Savchenko authored
124
dnl --paranoid
redmine authored
125 126
AC_ARG_ENABLE(paranoid,
AS_HELP_STRING([--enable-paranoid],
Andrew Savchenko authored
127
[set paranoid level of code security, default: 1, values: 0, 1, 2]),
redmine authored
128
[case "${enableval}" in
Andrew Savchenko authored
129 130 131
	(0|"no")    paranoid=0 ;;
	(1|"yes")   paranoid=1 ;;
	(2)         paranoid=2 ;;
redmine authored
132
	(*)         AC_MSG_ERROR([bad value ${enableval} for --enable-paranoid]) ;;
redmine authored
133 134 135
esac],
[paranoid=1])

redmine authored
136 137 138 139 140 141 142 143 144
AS_IF(
	[test $paranoid -ge 1],
	[
		CPPFLAGS="${CPPFLAGS} -D_FORTIFY_SOURCE=2 -DPARANOID"
		CFLAGS="${CFLAGS} -fstack-protector-all -Wall --param ssp-buffer-size=4"
		LDFLAGS="${LDFLAGS} -Xlinker -zrelro"
		AX_CHECK_COMPILE_FLAG([-fstack-check], [CFLAGS="${CFLAGS} -fstack-check"])
	]
)
redmine authored
145
AS_IF([test $paranoid -eq 2], [CPPFLAGS="${CPPFLAGS} -DVERYPARANOID"])
Barak A. Pearlmutter authored
146

redmine authored
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
dnl searching for seccomp
AC_ARG_ENABLE(seccomp,
	AS_HELP_STRING(--enable-seccomp,
		[Enable seccomp support be able to forbid extra syscalls; values: no, check, yes; default: check]),
	,
	[enable_seccomp=check]
)

case "$enable_seccomp" in
	yes)
		AC_CHECK_TYPES([struct seccomp_data], [HAVE_SECCOMP=1], [AC_MSG_FAILURE([Cannot find valid linux/seccomp.h])], [[#include <linux/seccomp.h>]])
		;;
	check)
		AC_CHECK_TYPES([struct seccomp_data], [HAVE_SECCOMP=1], ,                                                      [[#include <linux/seccomp.h>]])
		;;
esac

dnl capabilities check
AC_ARG_ENABLE(capabilities,
	AS_HELP_STRING(--enable-capabilities,
		[Enable linux capabilities support; values: no, check, yes; default: check]),
	,
	[enable_capabilities=check]
)

case "$enable_capabilities" in
	yes)
		AC_CHECK_FUNC([capset],
			[
				AC_CHECK_HEADER(sys/capability.h, [HAVE_CAPABILITIES=2], [AC_MSG_FAILURE([Cannot find sys/capability.h])])
			],
			[
				AC_MSG_FAILURE([There is no capabilities support on this system])
			]
		)
		;;
	check)
		AC_CHECK_FUNC([capset],
			[
				AC_CHECK_HEADER(sys/capability.h, [HAVE_CAPABILITIES=2])
			]
		)
		;;
esac

Barak A. Pearlmutter authored
192
# Checks for programs.
Barak A. Pearlmutter authored
193
AC_PROG_CC_C99
Barak A. Pearlmutter authored
194 195 196 197
AC_PROG_INSTALL
PKG_PROG_PKG_CONFIG([0.20])

# Checks for libraries.
redmine authored
198 199
dnl libdl
AC_CHECK_HEADER([dlfcn.h], [], [AC_MSG_ERROR("Unable to find dlfcn.h")])
redmine authored
200
AC_SEARCH_LIBS([dlopen], [dl], [LDFLAGS="${LDFLAGS} -rdynamic"],
redmine authored
201 202
[AC_MSG_ERROR("Unable to find libdl")])

Andrew Savchenko authored
203
dnl -lrt is needed on < glibc-2.17
redmine authored
204 205
AC_SEARCH_LIBS([clock_getres], [rt], [],
    [AC_MSG_ERROR("Unable to find librt; clock_getres() is needed")])
Andrew Savchenko authored
206

redmine authored
207 208 209
dnl searching for getmntent
AC_CHECK_FUNC([getmntent], [HAVE_GETMNTENT=1])

redmine authored
210 211 212
dnl searching for pivot_root
AC_CHECK_FUNC([pivot_root], [HAVE_PIVOTROOT=1])

redmine authored
213 214 215
dnl searching for pthread_timedjoin_np
AC_CHECK_FUNC([pthread_timedjoin_np], [HAVE_PTHREAD_TIMEDJOIN_NP=1])

redmine authored
216 217 218 219
dnl libcgroup check
AC_ARG_WITH(libcgroup,
	AS_HELP_STRING(--with-libcgroup,
		[Enable cgroup support via libcgroup; values: no, check, yes; default: check]),
redmine authored
220
	,
redmine authored
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
	[with_libcgroup=check]
)

case "$with_libcgroup" in
	yes)

		AC_CHECK_LIB([cgroup], [cgroup_init],
			[
				AC_CHECK_HEADER(libcgroup.h, [], [AC_MSG_FAILURE([Cannot find libcgroup.h])])
				LDFLAGS="${LDFLAGS} -lcgroup"
				HAVE_LIBCGROUP=1
			],
			[
				AC_MSG_FAILURE(
					[Cannot find libcgroup])
			]
		)
		;;
	check)
		AC_CHECK_LIB([cgroup], [cgroup_init],
			[
				AC_CHECK_HEADER(libcgroup.h, [], [AC_MSG_FAILURE([Cannot find libcgroup.h])])
				LDFLAGS="${LDFLAGS} -lcgroup"
				HAVE_LIBCGROUP=1
redmine authored
245
			]
redmine authored
246 247 248 249
		)
		;;
esac

redmine authored
250 251
dnl tre check

redmine authored
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
#AC_ARG_WITH(tre,
#	AS_HELP_STRING(--with-tre,
#		[Enable tre support be able to predict which directories should be scanned for excludes; values: no, check, yes; default: check]),
#	[],
#	[with_tre=check]
#)
#
#case "$with_tre" in
#	yes)
#		AC_CHECK_LIB([tre], [tre_regaexec],
#			[
#				AC_CHECK_HEADER(tre/tre.h, [], [AC_MSG_FAILURE([Cannot find tre/tre.h])])
#				LDFLAGS="${LDFLAGS} -ltre"
#				HAVE_TRE=1
#			],
#			[
#				AC_MSG_FAILURE(
#					[Cannot find libtre])
#			]
#		)
#		;;
#	check)
#		AC_CHECK_LIB([tre], [tre_regaexec],
#			[
#				AC_CHECK_HEADER(tre/tre.h, [], [AC_MSG_FAILURE([Cannot find tre/tre.h])])
#				LDFLAGS="${LDFLAGS} -ltre"
#				HAVE_TRE=1
#			],
#			[]
#		)
#		;;
#esac
redmine authored
284

Andrew Savchenko authored
285
dnl kqueue/inotify/gio/bsm
redmine authored
286

redmine authored
287 288 289 290 291 292 293 294 295 296 297 298 299 300
AC_ARG_WITH(kqueue,
	AS_HELP_STRING(--with-kqueue,
		[Enable kqueue support; values: no, native, lib, check; default: check]),
	[],
	[with_kqueue=check]
)

AC_ARG_WITH(inotify,
	AS_HELP_STRING(--with-inotify,
		[Enable inotify support; values: no, native, lib, check; default: check]),
	[],
	[with_inotify=check]
)

redmine authored
301 302 303 304 305 306 307
AC_ARG_WITH(gio,
	AS_HELP_STRING(--with-gio,
		[Enable GIO support as FS monitor subsystem; values: no, lib, check; default: check]),
	[],
	[with_gio=check]
)

redmine authored
308 309
AC_ARG_WITH(bsm,
	AS_HELP_STRING(--with-bsm,
Artyom authored
310
		[Enable BSM (Sun/*BSD audit) support as FS monitor subsystem; values: no, lib, check; default: check]),
redmine authored
311
	[],
redmine authored
312
	[with_bsm=check]
redmine authored
313 314
)

redmine authored
315 316 317 318
case "$with_kqueue" in
	check)
		AC_CHECK_FUNC([kqueue],
			[
redmine authored
319
				HAVE_KQUEUE=2
redmine authored
320
			],
redmine authored
321 322 323 324 325 326 327 328 329 330
			[
				AC_CHECK_LIB([kqueue], [kqueue],
					[
						AC_CHECK_HEADER(sys/event.h, [
							LDFLAGS="${LDFLAGS} -lkqueue"
							HAVE_KQUEUE=1
						])
					]
				)
			]
redmine authored
331 332 333 334 335
		)
		;;
	native)
		AC_CHECK_FUNC([kqueue],
			[
redmine authored
336
				AC_CHECK_HEADER(sys/event.h, , [AC_MSG_FAILURE([Cannot find sys/event.h])])
redmine authored
337
				HAVE_KQUEUE=2
redmine authored
338 339 340 341 342 343 344 345 346 347
			],
			[
				AC_MSG_FAILURE(
					[There is no kqueue native support on this system])
			]
		)
		;;
	lib)
		AC_CHECK_LIB([kqueue], [kqueue],
			[
redmine authored
348
				AC_CHECK_HEADER(sys/event.h, , [AC_MSG_FAILURE([Cannot find sys/event.h])])
redmine authored
349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
				LDFLAGS="${LDFLAGS} -lkqueue"
				HAVE_KQUEUE=1
			],
			[
				AC_MSG_FAILURE(
					[Cannot find libkqueue])
			]
		)
		;;
esac

case "$with_inotify" in
	check)
		AC_CHECK_FUNC([inotify_init],
			[
redmine authored
364
				HAVE_INOTIFY=2
redmine authored
365
			],
redmine authored
366 367 368 369 370 371 372 373 374 375
			[
				AC_CHECK_LIB([inotify], [inotify_init],
					[
						AC_CHECK_HEADER(sys/inotify.h, [
							LDFLAGS="${LDFLAGS} -linotify"
							HAVE_INOTIFY=1
						])
					]
				)
			]
redmine authored
376 377 378 379 380
		)
		;;
	native)
		AC_CHECK_FUNC([inotify_init],
			[
redmine authored
381 382
				AC_CHECK_HEADER(sys/inotify.h, [], [AC_MSG_FAILURE([Cannot find sys/inotify.h])])
				HAVE_INOTIFY=2
redmine authored
383 384 385 386 387 388 389 390 391 392
			],
			[
				AC_MSG_FAILURE(
					[There is no inotify native support on this system])
			]
		)
		;;
	lib)
		AC_CHECK_LIB([inotify], [inotify_init],
			[
redmine authored
393
				AC_CHECK_HEADER(sys/inotify.h, [], [AC_MSG_FAILURE([Cannot find sys/inotify.h])])
redmine authored
394 395 396 397 398 399 400 401 402 403 404
				LDFLAGS="${LDFLAGS} -linotify"
				HAVE_INOTIFY=1
			],
			[
				AC_MSG_FAILURE(
					[Cannot find libinotify])
			]
		)
		;;
esac

redmine authored
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
case "$with_gio" in
	check)
		PKG_CHECK_MODULES(GIO,  [gio-2.0], [
			HAVE_GIO=1
			AC_SUBST([GIO_CFLAGS])
			AC_SUBST([GIO_LIBS])
		])
		;;
	lib)
		PKG_CHECK_MODULES(GIO,  [gio-2.0], [
			HAVE_GIO=1
			AC_SUBST([GIO_CFLAGS])
			AC_SUBST([GIO_LIBS])
		], [
			AC_MSG_FAILURE([Cannot find libgio-2.0])
		])
		;;
esac

redmine authored
424 425 426 427
case "$with_bsm" in
	check)
		AC_CHECK_FUNC([au_fetch_tok],
			[
redmine authored
428
				HAVE_BSM=2
redmine authored
429
			],
redmine authored
430 431 432 433 434 435 436 437 438 439
			[
				AC_CHECK_LIB([bsm], [au_fetch_tok],
					[
						AC_CHECK_HEADER(bsm/libbsm.h, [
							LDFLAGS="${LDFLAGS} -lbsm"
							HAVE_BSM=1
						])
					]
				)
			]
redmine authored
440 441 442 443 444
		)
		;;
	lib)
		AC_CHECK_LIB([bsm], [au_fetch_tok],
			[
redmine authored
445
				AC_CHECK_HEADER(bsm/libbsm.h, [], [AC_MSG_FAILURE([Cannot find bsm/libbsm.h])])
redmine authored
446 447 448 449 450 451 452 453 454 455
				LDFLAGS="${LDFLAGS} -lbsm"
				HAVE_BSM=1
			],
			[
				AC_MSG_FAILURE(
					[Cannot find libbsm])
			]
		)
		;;
esac
redmine authored
456
#AC_CHECK_PROG([HAVE_DTRACEPIPE], [dtrace], [found])
redmine authored
457

redmine authored
458
AS_IF([test "$HAVE_INOTIFY" != ""], [AC_CHECK_FUNC([inotify_init1], [], [INOTIFY_OLD=1])])
Andrew Savchenko authored
459

redmine authored
460 461 462 463 464
AM_CONDITIONAL([HAVE_KQUEUE],       [test "x$HAVE_KQUEUE"       != "x"])
AM_CONDITIONAL([HAVE_INOTIFY],      [test "x$HAVE_INOTIFY"      != "x"])
AM_CONDITIONAL([INOTIFY_OLD],       [test "x$INOTIFY_OLD"       != "x"])
AM_CONDITIONAL([HAVE_FANOTIFY],     [test "x$HAVE_FANOTIFY"     != "x"])
AM_CONDITIONAL([HAVE_BSM],          [test "x$HAVE_BSM"          != "x"])
redmine authored
465
AM_CONDITIONAL([HAVE_GIO],          [test "x$HAVE_GIO"          != "x"])
redmine authored
466 467 468
AM_CONDITIONAL([HAVE_DTRACEPIPE],   [test "x$HAVE_DTRACEPIPE"   != "x"])
AM_CONDITIONAL([HAVE_BACKTRACE],    [test "x$HAVE_BACKTRACE"    != "x"])
AM_CONDITIONAL([HAVE_CAPABILITIES], [test "x$HAVE_CAPABILITIES" != "x"])
redmine authored
469
AM_CONDITIONAL([HAVE_GETMNTENT],    [test "x$HAVE_GETMNTENT"    != "x"])
redmine authored
470
AM_CONDITIONAL([HAVE_PIVOTROOT],    [test "x$HAVE_PIVOTROOT"    != "x"])
redmine authored
471 472
AM_CONDITIONAL([HAVE_UNSHARE],      [test "x$HAVE_UNSHARE"      != "x"])
AM_CONDITIONAL([HAVE_SECCOMP],      [test "x$HAVE_SECCOMP"      != "x"])
redmine authored
473
AM_CONDITIONAL([HAVE_TRE],          [test "x$HAVE_TRE"          != "x"])
redmine authored
474
AM_CONDITIONAL([HAVE_LIBCGROUP],    [test "x$HAVE_LIBCGROUP"    != "x"])
redmine authored
475
AM_CONDITIONAL([HAVE_PTHREAD_TIMEDJOIN_NP], [test "x$HAVE_PTHREAD_TIMEDJOIN_NP" != "x"])
redmine authored
476

Andrew Savchenko authored
477 478 479
AS_IF([test "$HAVE_KQUEUE" = '' -a "$HAVE_INOTIFY" = '' -a "$HAVE_FANOTIFY" = '' -a "$HAVE_BSM" = '' -a  "$HAVE_GIO" = ''],
[AC_MSG_FAILURE([At least one monitoring engine must be enabled!
Available (depending on system): inotify, kqueue, gio, bsm])])
redmine authored
480

Andrew Savchenko authored
481
LIBS="${GLIB_LIBS} ${LIBS}"
Barak A. Pearlmutter authored
482
AM_CPPFLAGS="${GLIB_CFLAGS}"
Barak A. Pearlmutter authored
483 484
AC_SUBST(AM_CPPFLAGS)

redmine authored
485

Barak A. Pearlmutter authored
486
AC_CONFIG_FILES([Makefile examples/Makefile pkgconfig/libclsync.pc])
Barak A. Pearlmutter authored
487
AC_OUTPUT