Blame view

configure.ac 11.8 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"],
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 216
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
217
	,
redmine authored
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
	[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
242
			]
redmine authored
243 244 245 246
		)
		;;
esac

redmine authored
247 248
dnl tre check

redmine authored
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
#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
281

Andrew Savchenko authored
282
dnl kqueue/inotify/gio/bsm
redmine authored
283

redmine authored
284 285 286 287 288 289 290 291 292 293 294 295 296 297
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
298 299 300 301 302 303 304
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
305 306
AC_ARG_WITH(bsm,
	AS_HELP_STRING(--with-bsm,
Artyom authored
307
		[Enable BSM (Sun/*BSD audit) support as FS monitor subsystem; values: no, lib, check; default: check]),
redmine authored
308
	[],
redmine authored
309
	[with_bsm=check]
redmine authored
310 311
)

redmine authored
312 313 314 315
case "$with_kqueue" in
	check)
		AC_CHECK_FUNC([kqueue],
			[
redmine authored
316
				HAVE_KQUEUE=2
redmine authored
317
			],
redmine authored
318 319 320 321 322 323 324 325 326 327
			[
				AC_CHECK_LIB([kqueue], [kqueue],
					[
						AC_CHECK_HEADER(sys/event.h, [
							LDFLAGS="${LDFLAGS} -lkqueue"
							HAVE_KQUEUE=1
						])
					]
				)
			]
redmine authored
328 329 330 331 332
		)
		;;
	native)
		AC_CHECK_FUNC([kqueue],
			[
redmine authored
333
				AC_CHECK_HEADER(sys/event.h, , [AC_MSG_FAILURE([Cannot find sys/event.h])])
redmine authored
334
				HAVE_KQUEUE=2
redmine authored
335 336 337 338 339 340 341 342 343 344
			],
			[
				AC_MSG_FAILURE(
					[There is no kqueue native support on this system])
			]
		)
		;;
	lib)
		AC_CHECK_LIB([kqueue], [kqueue],
			[
redmine authored
345
				AC_CHECK_HEADER(sys/event.h, , [AC_MSG_FAILURE([Cannot find sys/event.h])])
redmine authored
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
				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
361
				HAVE_INOTIFY=2
redmine authored
362
			],
redmine authored
363 364 365 366 367 368 369 370 371 372
			[
				AC_CHECK_LIB([inotify], [inotify_init],
					[
						AC_CHECK_HEADER(sys/inotify.h, [
							LDFLAGS="${LDFLAGS} -linotify"
							HAVE_INOTIFY=1
						])
					]
				)
			]
redmine authored
373 374 375 376 377
		)
		;;
	native)
		AC_CHECK_FUNC([inotify_init],
			[
redmine authored
378 379
				AC_CHECK_HEADER(sys/inotify.h, [], [AC_MSG_FAILURE([Cannot find sys/inotify.h])])
				HAVE_INOTIFY=2
redmine authored
380 381 382 383 384 385 386 387 388 389
			],
			[
				AC_MSG_FAILURE(
					[There is no inotify native support on this system])
			]
		)
		;;
	lib)
		AC_CHECK_LIB([inotify], [inotify_init],
			[
redmine authored
390
				AC_CHECK_HEADER(sys/inotify.h, [], [AC_MSG_FAILURE([Cannot find sys/inotify.h])])
redmine authored
391 392 393 394 395 396 397 398 399 400 401
				LDFLAGS="${LDFLAGS} -linotify"
				HAVE_INOTIFY=1
			],
			[
				AC_MSG_FAILURE(
					[Cannot find libinotify])
			]
		)
		;;
esac

redmine authored
402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
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
421 422 423 424
case "$with_bsm" in
	check)
		AC_CHECK_FUNC([au_fetch_tok],
			[
redmine authored
425
				HAVE_BSM=2
redmine authored
426
			],
redmine authored
427 428 429 430 431 432 433 434 435 436
			[
				AC_CHECK_LIB([bsm], [au_fetch_tok],
					[
						AC_CHECK_HEADER(bsm/libbsm.h, [
							LDFLAGS="${LDFLAGS} -lbsm"
							HAVE_BSM=1
						])
					]
				)
			]
redmine authored
437 438 439 440 441
		)
		;;
	lib)
		AC_CHECK_LIB([bsm], [au_fetch_tok],
			[
redmine authored
442
				AC_CHECK_HEADER(bsm/libbsm.h, [], [AC_MSG_FAILURE([Cannot find bsm/libbsm.h])])
redmine authored
443 444 445 446 447 448 449 450 451 452
				LDFLAGS="${LDFLAGS} -lbsm"
				HAVE_BSM=1
			],
			[
				AC_MSG_FAILURE(
					[Cannot find libbsm])
			]
		)
		;;
esac
redmine authored
453
#AC_CHECK_PROG([HAVE_DTRACEPIPE], [dtrace], [found])
redmine authored
454

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

redmine authored
457 458 459 460 461
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
462
AM_CONDITIONAL([HAVE_GIO],          [test "x$HAVE_GIO"          != "x"])
redmine authored
463 464 465
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
466
AM_CONDITIONAL([HAVE_GETMNTENT],    [test "x$HAVE_GETMNTENT"    != "x"])
redmine authored
467
AM_CONDITIONAL([HAVE_PIVOTROOT],    [test "x$HAVE_PIVOTROOT"    != "x"])
redmine authored
468 469
AM_CONDITIONAL([HAVE_UNSHARE],      [test "x$HAVE_UNSHARE"      != "x"])
AM_CONDITIONAL([HAVE_SECCOMP],      [test "x$HAVE_SECCOMP"      != "x"])
redmine authored
470
AM_CONDITIONAL([HAVE_TRE],          [test "x$HAVE_TRE"          != "x"])
redmine authored
471
AM_CONDITIONAL([HAVE_LIBCGROUP],    [test "x$HAVE_LIBCGROUP"    != "x"])
redmine authored
472

Andrew Savchenko authored
473 474 475
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
476

Andrew Savchenko authored
477
LIBS="${GLIB_LIBS} ${LIBS}"
Barak A. Pearlmutter authored
478
AM_CPPFLAGS="${GLIB_CFLAGS}"
Barak A. Pearlmutter authored
479 480
AC_SUBST(AM_CPPFLAGS)

redmine authored
481

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