File: configure.ac

package info (click to toggle)
znc 1.7.2-3
  • links: PTS
  • area: main
  • in suites: buster
  • size: 8,520 kB
  • sloc: cpp: 45,532; sh: 3,577; perl: 1,182; python: 867; makefile: 392; tcl: 218; ansic: 188; pascal: 65
file content (746 lines) | stat: -rw-r--r-- 22,358 bytes parent folder | download
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
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
dnl This redefines AC_PROG_CC to a version which errors out instead. This is
dnl because all our tests should be done with the C++ compiler. This should
dnl catch stuff which accidentally uses the C compiler.
AC_DEFUN([AC_PROG_CC], [m4_errprint(__file__:__line__[: Something is trying to use the C compiler. Since this is a C++ project, this should not happen!
])m4_exit(1)])

dnl Needed for AC_PATH_PROGS_FEATURE_CHECK which was added in 2.62
AC_PREREQ([2.62])
dnl Keep the version number in sync with version.h!
AC_INIT([znc], [1.7.2])
LIBZNC_VERSION=1.7.2
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/znc.cpp])
AC_LANG([C++])
AC_CONFIG_HEADERS([include/znc/zncconfig.h])
AH_TOP([#ifndef ZNCCONFIG_H
#define ZNCCONFIG_H])
AH_BOTTOM([#endif /* ZNCCONFIG_H */])

AC_DEFUN([ZNC_AUTO_FAIL], [
	# This looks better in the summary at the end
	$1="not found"
	if test "x$old_$1" != "xauto" ; then
		AC_MSG_ERROR([$2])
	else
		AC_MSG_WARN([$3])
	fi
])

# AC_PROG_CXX sets CXXFLAGS to "-O2 -g" if it is unset which we don't want
CXXFLAGS="$CXXFLAGS "
AC_PROG_CXX
# "Optional" because we want custom error message
AX_CXX_COMPILE_STDCXX_11([noext], [optional])
if test x"$HAVE_CXX11" != x1; then
	AC_MSG_ERROR([Upgrade your compiler. GCC 4.8+ and Clang 3.2+ are known to work.])
fi

appendLib () {
	if test "$LIBS" != ""; then
		LIBS="$LIBS $*"
	else
		LIBS=$*
	fi
}

appendCXX () {
	if test "$CXXFLAGS" != ""; then
		CXXFLAGS="$CXXFLAGS $*"
	else
		CXXFLAGS=$*
	fi
}

appendMod () {
	if test "$MODFLAGS" != ""; then
		MODFLAGS="$MODFLAGS $*"
	else
		MODFLAGS=$*
	fi
}

appendLD () {
	if test "$LDFLAGS" != ""; then
		LDFLAGS="$LDFLAGS $*"
	else
		LDFLAGS=$*
	fi
}

AC_PROG_INSTALL
AC_PROG_GREP
AC_PROG_SED
AC_CANONICAL_HOST
AC_SYS_LARGEFILE
ZNC_VISIBILITY
AC_PATH_PROG([GIT], [git])
PKG_PROG_PKG_CONFIG()

AC_ARG_ENABLE( [debug],
	AS_HELP_STRING([--enable-debug], [enable debugging]),
	[DEBUG="$enableval"],
	[DEBUG="no"])
AC_ARG_ENABLE( [ipv6],
	AS_HELP_STRING([--disable-ipv6], [disable ipv6 support]),
	[IPV6="$enableval"],
	[IPV6="yes"])
AC_ARG_ENABLE( [openssl],
	AS_HELP_STRING([--disable-openssl], [disable openssl]),
	[SSL="$enableval"],
	[SSL="auto"])
AC_ARG_ENABLE( [zlib],
	AS_HELP_STRING([--disable-zlib], [disable zlib]),
	[ZLIB="$enableval"],
	[ZLIB="auto"])
AC_ARG_ENABLE( [perl],
	AS_HELP_STRING([--enable-perl], [enable perl]),
	[PERL="$enableval"],
	[PERL="no"])
AC_ARG_ENABLE( [python],
	AS_HELP_STRING([--enable-python[[[=python3]]]], [enable python.
			By default python3.pc of pkg-config is used, but you can use
			another name, for example python-3.1]),
	[PYTHON="$enableval"],
	[PYTHON="no"])
AC_ARG_ENABLE( [swig],
	AS_HELP_STRING([--enable-swig], [Enable automatic generation of source files needed for modperl/modpython.
			This value is ignored if perl and python are disabled.
			Usually no need to enable it.
			]),
	[USESWIG="$enableval"],
	[USESWIG="auto"])
AC_ARG_ENABLE( [cyrus],
	AS_HELP_STRING([--enable-cyrus], [enable cyrus]),
	[if test "$enableval" = "yes" ; then CYRUS=1; fi],)
AC_ARG_ENABLE( [optimization],
	AS_HELP_STRING([--disable-optimization], [Disable some compiler optimizations to
			decrease memory usage while compiling]),
	[OPTIMIZE="$enableval"],
	[OPTIMIZE="yes"])
AC_ARG_ENABLE( [tdns],
	AS_HELP_STRING([--disable-tdns], [disable threads usage for DNS resolving]),
	[TDNS="$enableval"],
	[TDNS="auto"])
AC_ARG_ENABLE( [run-from-source],
	AS_HELP_STRING([--enable-run-from-source], [ZNC will be runnable without installation]),
	[if test "x$enableval" = "xyes" ; then
		AC_DEFINE([RUN_FROM_SOURCE], [1],
			  [Define if ZNC should be runnable without installation])
	fi
	RUNFROMSOURCE="$enableval"],
	[RUNFROMSOURCE="no"])
AC_ARG_ENABLE( [poll],
	AS_HELP_STRING([--disable-poll], [use select() instead of poll()]),
	[POLL="$enableval"],
	[POLL="yes"])

AC_ARG_WITH( [gtest],
	AS_HELP_STRING([--with-gtest=DIR], [Path to directory with src/gtest-all.cc file.
					If not specified, git submodule will be used.
					If it is not available either, "make test" will fail.]))
if test "x$with_gtest" != xno; then
	AC_SUBST([GTEST_DIR], [$with_gtest])
fi
AC_ARG_WITH([gmock],
	AS_HELP_STRING([--with-gmock=DIR], [Path to directory with src/gmock-all.cc and src/gmock_main.cc files.
					If not specified, git submodule will be used.
					If it is not available either, "make test" will fail.]))
if test "x$with_gmock" != xno; then
	AC_SUBST([GMOCK_DIR], [$with_gmock])
fi


AC_ARG_WITH([systemdsystemunitdir],
	AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
	[
		if test x"$with_systemdsystemunitdir" = xyes; then
			with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
		fi
	])
if test "x$with_systemdsystemunitdir" != xno; then
	AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
fi
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])

case "${host_os}" in
	freebsd*)
		# -D__GNU_LIBRARY__ makes this work on fbsd 4.11
		appendCXX -I/usr/local/include -D__GNU_LIBRARY__
		appendLib -L/usr/local/lib -lcompat
		appendMod -L/usr/local/lib
	;;
	solaris*)
		appendLib -lsocket -lnsl -lresolv
		ISSUN=1
	;;
	cygwin)
		# We don't want to use -std=gnu++11 instead of -std=c++11, but among other things, -std=c++11 defines __STRICT_ANSI__ which makes cygwin not to compile: undefined references to strerror_r, to fdopen, to strcasecmp, etc (their declarations in system headers are between ifdef)
		appendCXX -U__STRICT_ANSI__
		ISCYGWIN=1
	;;
	darwin*)
		ISDARWIN=1

		AC_PATH_PROG([BREW], [brew])
		if test -n "$BREW"; then
			# add default homebrew paths

			if test "x$HAVE_ICU" != "xno"; then
				AC_MSG_CHECKING([icu4c via homebrew])
				icu4c_prefix=`$BREW --prefix icu4c`
				if test -n "$icu4c_prefix"; then
					export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$icu4c_prefix/lib/pkgconfig"
					AC_MSG_RESULT([$icu4c_prefix])
				else
					AC_MSG_RESULT([no])
				fi
			fi

			if test "x$PYTHON" != "xno"; then
				brew_python_pc="$PYTHON"
				# This is duplication of non-darwin python logic below...
				if test "x$brew_python_pc" = "xyes"; then
					brew_python_pc="python3"
				fi
				AC_MSG_CHECKING([python3 via homebrew])
				python3_prefix=`$BREW --prefix python3`
				if test -n "$python3_prefix"; then
					python3_prefix=`find "$python3_prefix/" -name $brew_python_pc.pc | head -n1`
					if test -n "$python3_prefix"; then
						python3_prefix=`dirname "$python3_prefix"`
						export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$python3_prefix"
						AC_MSG_RESULT([$python3_prefix])
					else
						AC_MSG_RESULT([no $brew_python_pc.pc found])
					fi
				else
					AC_MSG_RESULT([no])
				fi
			fi

			if test "x$SSL" != "xno"; then
				AC_MSG_CHECKING([openssl via homebrew])
				openssl_prefix=`$BREW --prefix openssl`
				if test -n "$openssl_prefix"; then
					export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$openssl_prefix/lib/pkgconfig"
					AC_MSG_RESULT([$openssl_prefix])
				else
					AC_MSG_RESULT([no])
				fi
			fi
		fi
	;;
esac

if test "$DEBUG" != "no"; then
	appendCXX -ggdb3
	AC_DEFINE([_DEBUG], [1], [Define for debugging])
	if test "x$ISCYGWIN" != x1; then
		# These enable some debug options in g++'s STL, e.g. invalid use of iterators
		# But they cause crashes on cygwin while loading modules
		AC_DEFINE([_GLIBCXX_DEBUG], [1], [Enable extra debugging checks in libstdc++])
		AC_DEFINE([_GLIBCXX_DEBUG_PEDANTIC], [1], [Enable extra debugging checks in libstdc++])
	fi
else
	if test "x$OPTIMIZE" = "xyes"; then
		appendCXX -O2

		# In old times needed to define _FORTIFY_SOURCE to 2 ourself.
		# Then GCC started to define it itself to 2. It was ok.
		# But then GCC 4.7 started to define it to 0 or 2 depending on optimization level, and it started to conflict with our define.
		AC_MSG_CHECKING([whether compiler predefines _FORTIFY_SOURCE])
		AC_COMPILE_IFELSE([
			AC_LANG_PROGRAM([[
			]], [[
				#ifndef _FORTIFY_SOURCE
				#error "Just checking, nothing fatal here"
				#endif
			]])
		], [
			AC_MSG_RESULT([yes])
		], [
			AC_MSG_RESULT([no])
			appendCXX "-D_FORTIFY_SOURCE=2"
		])
	fi
fi

if test "$IPV6" != "no"; then
	AC_DEFINE([HAVE_IPV6], [1], [Define if IPv6 support is enabled])
fi

if test "x$GXX" = "xyes"; then
	appendCXX -Wall -W -Wno-unused-parameter -Woverloaded-virtual -Wshadow
fi

if test "$POLL" = "yes"; then
	# poll() is broken on Mac OS, it fails with POLLNVAL for pipe()s.
	if test -n "$ISDARWIN"
	then
		# Did they give us --enable-poll?
		if test -n "$enable_poll"
		then
			# Yes, they asked for this.
			AC_MSG_WARN([poll() is known to be broken on Mac OS X. You have been warned.])
		else
			# No, our default value of "yes" got applied.
			AC_MSG_WARN([poll() is known to be broken on Mac OS X. Using select() instead.])
			AC_MSG_WARN([Use --enable-poll for forcing poll() to be used.])
			POLL=no
		fi
	fi
	if test "$POLL" = "yes"; then
		AC_DEFINE([CSOCK_USE_POLL], [1], [Use poll() instead of select()])
	fi
fi

AC_CHECK_LIB( gnugetopt, getopt_long,)
AC_CHECK_FUNCS([lstat getopt_long getpassphrase clock_gettime tcsetattr])

# ----- Check for dlopen

AC_SEARCH_LIBS([dlopen], [dl], [],
		[AC_MSG_ERROR([Could not find dlopen. ZNC will not work on this box until you upgrade this ancient system or at least install the necessary system libraries.])])

# ----- Check for pthreads

AX_PTHREAD([
	AC_DEFINE([HAVE_PTHREAD], [1], [Define if you have POSIX threads libraries and header files.])
	appendCXX "$PTHREAD_CFLAGS"
	appendLib "$PTHREAD_LIBS"
], [
	AC_MSG_ERROR([This compiler/OS doesn't seem to support pthreads.])
])

# Note that old broken systems, such as OpenBSD, NetBSD, which don't support AI_ADDRCONFIG, also have thread-unsafe getaddrinfo().
# Gladly, they fixed thread-safety before support of AI_ADDRCONFIG, so this can be abused to detect the thread-safe getaddrinfo().
#
# TODO: drop support of blocking DNS at some point. OpenBSD supports AI_ADDRCONFIG since Nov 2014, and their getaddrinfo() is thread-safe since Nov 2013. NetBSD's one is thread-safe since ages ago.
DNS_TEXT=blocking
if test "x$TDNS" != "xno"; then
	old_TDNS=$TDNS
	AC_MSG_CHECKING([whether getaddrinfo() supports AI_ADDRCONFIG])
	AC_COMPILE_IFELSE([
		AC_LANG_PROGRAM([[
			#include <sys/types.h>
			#include <sys/socket.h>
			#include <netdb.h>
		]], [[
			int x = AI_ADDRCONFIG;
			(void) x;
		]])
	], [
		AC_MSG_RESULT([yes])
		TDNS=yes
	], [
		AC_MSG_RESULT([no])
		TDNS=no
	])
	if test "x$TDNS" = "xyes"; then
		DNS_TEXT=threads
		AC_DEFINE([HAVE_THREADED_DNS], [1], [Define if threaded DNS is enabled])
	else
		ZNC_AUTO_FAIL([TDNS],
			[support for threaded DNS not found. Try --disable-tdns.
Disabling it may result in a slight performance decrease but will not have any other side-effects],
			[support for threaded DNS not found, so DNS resolving will be blocking])
	fi
fi

# ----- Check for openssl

SSL_TEXT="$SSL"
if test "x$SSL" != "xno"; then
	old_SSL=$SSL
	PKG_CHECK_MODULES([openssl], [openssl], [
		appendLib "$openssl_LIBS"
		appendCXX "$openssl_CFLAGS"
	], [
		# Don't reorder this!
		# On some arches libssl depends on libcrypto without linking to it :(
		AC_CHECK_LIB( crypto, BIO_new,, SSL=no ; SSL_TEXT="no (libcrypt not found)" )
		AC_CHECK_LIB( ssl, SSL_shutdown,, SSL=no ; SSL_TEXT="no (libssl not found)" )
	])

	if test "x$SSL" != "xno"; then
		AC_MSG_CHECKING([whether openssl is usable])
		AC_LINK_IFELSE([
			AC_LANG_PROGRAM([[
				#include <openssl/ssl.h>
				#include <openssl/dh.h>
			]], [[
				SSL_CTX* ctx = SSL_CTX_new(SSLv23_method());
				SSL* ssl = SSL_new(ctx);
				DH* dh = DH_new();
				DH_free(dh);
				SSL_free(ssl);
				SSL_CTX_free(ctx);
			]])
		], [
			AC_MSG_RESULT([yes])
		], [
			AC_MSG_RESULT([no])
			SSL=no
			SSL_TEXT="no (openssl not usable)"
		])

	fi

	if test "x$SSL" = "xno" ; then
		ZNC_AUTO_FAIL([SSL],
			[OpenSSL not found. Try --disable-openssl.],
			[OpenSSL was not found and thus disabled])
		NOSSL=1
	else
		AC_DEFINE([HAVE_LIBSSL], [1], [Define if openssl is enabled])
		SSL=yes
		SSL_TEXT=yes
	fi
else
	NOSSL=1
	SSL_TEXT="no (explicitly disabled)"
fi

# ----- Check for zlib

old_ZLIB="$ZLIB"
ZLIB_TEXT="$ZLIB"
if test "x$ZLIB" != "xno"; then
	AC_MSG_CHECKING([whether zlib is usable])
	my_saved_LIBS="$LIBS"
	appendLib "-lz"
	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
			#include "zlib.h"
		]], [[
			z_stream zs;
			(void) deflateInit2(&zs, 0, 0, 0, 0, 0);
			(void) deflate(&zs, 0);
		]])
		], [
			AC_MSG_RESULT([yes])
			ZLIB=yes
			ZLIB_TEXT=yes
		], [
			AC_MSG_RESULT([no])
			ZLIB=no
			ZLIB_TEXT="no (libz not found)"
	])
	if test "x$ZLIB" = "xno"; then
		ZNC_AUTO_FAIL([ZLIB],
			[zlib was not found. Try --disable-zlib],
			[zlib was not found and thus disabled])
		LIBS="$my_saved_LIBS"
	else
		AC_DEFINE([HAVE_ZLIB], [1], [Define if zlib is available])
	fi
fi

AC_ARG_ENABLE( [charset],
	AS_HELP_STRING([--disable-charset], [disable ICU support]),
	[HAVE_ICU="$enableval"],
	[HAVE_ICU="auto"])
if test "x$HAVE_ICU" != "xno"
then
	old_HAVE_ICU="$HAVE_ICU"
	PKG_CHECK_MODULES([icu], [icu-uc], [
		appendLib "$icu_LIBS"
		appendCXX "$icu_CFLAGS"
		HAVE_ICU=yes
		AC_DEFINE([HAVE_ICU], [1], [Enable ICU library for Unicode handling])
		AC_DEFINE([U_USING_ICU_NAMESPACE], [0], [Do not clutter global namespace with ICU C++ stuff])
	], [
		ZNC_AUTO_FAIL([HAVE_ICU],
			      [support for charset conversion not found. Try --disable-charset.],
			      [support for charset conversion not found and thus disabled])
		HAVE_ICU="no (icu-uc not found via pkg-config)"
	])
fi

# For integration test only
PKG_CHECK_MODULES([qt], [Qt5Network >= 5.4], [], [:])

AC_ARG_WITH( [module-prefix],
	AS_HELP_STRING([--with-module-prefix], [module object code [LIBDIR/znc]]),
	[MODDIR=$withval],
	[MODDIR="${libdir}/znc"] )

AC_ARG_WITH( [module-data-prefix],
	AS_HELP_STRING([--with-module-data-prefix=DIR],
		[static module data (webadmin skins) [DATADIR/znc]]),
	[DATADIR=$withval],
	[DATADIR="${datadir}/znc"] )

appendMod "$CXXFLAGS"
appendMod "$CFLAG_VISIBILITY"

if test -z "$ISSUN" -a -z "$ISDARWIN" -a -z "$ISCYGWIN"; then
	# This is an unknown compiler flag on some OS
	appendLD -Wl,--export-dynamic
fi

if test -z "$ISCYGWIN" ; then
	# cygwin doesn't need -fPIC, everything else does (for modules)
	# warning: -fPIC ignored for target (all code is position independent)
	appendMod -fPIC
else
	# But cygwin does want most of ZNC in a shared lib
	# See https://cygwin.com/ml/cygwin-apps/2015-07/msg00108.html for the reasoning behind the name.
	LIBZNC="cygznc-${LIBZNC_VERSION}.dll"
	LIBZNCDIR="$bindir"
	# See above about __STRICT_ANSI__
	qt_CFLAGS="$qt_CFLAGS -U__STRICT_ANSI__"
fi

if test -z "$ISDARWIN"; then
	MODLINK="-shared"
else
	# Mac OS X differentiates between shared libs (-dynamiclib)
	# and loadable modules (-bundle).
	MODLINK="-bundle -flat_namespace -undefined suppress"
	# TODO test if -twolevel_namespace and/or
	# -undefined dynamic_lookup work
	# (dynamic_lookup might only work on 10.4 and later)
fi

if test "x$PERL" != xno -o "x$PYTHON" != xno; then
	old_USESWIG="$USESWIG"
	if test "x$USESWIG" != "xno"; then
		AC_PROG_SWIG([3.0.0])
		test -z "$SWIG" && USESWIG=no
		if test "x$USESWIG" = xno -a "x$old_USESWIG" = yes; then
			AC_MSG_ERROR([Could not found appropriate SWIG installation. Check config.log for details.])
		fi
	fi
	if test -r "$srcdir/modules/modperl/generated.tar.gz" -a -r "$srcdir/modules/modpython/generated.tar.gz"; then
		AC_MSG_NOTICE([modperl/modpython files are found, disabling SWIG])
		USESWIG=no
	fi
	if test "x$USESWIG" = xno; then
		if test ! -r "$srcdir/modules/modperl/generated.tar.gz" -o ! -r "$srcdir/modules/modpython/generated.tar.gz"; then
			AC_MSG_ERROR([Can not build modperl/modpython. Either install SWIG, or build ZNC from a tarball, or disable modperl/modpython. Check config.log for details.])
		else
			AC_MSG_NOTICE([modperl/modpython files are found, no SWIG needed])
		fi
		USESWIG="not needed"
		SWIG=""
	else
		USESWIG=yes
	fi
else
	if test "x$USESWIG" = "xyes"; then
		AC_MSG_WARN([swig is used only for perl and python, but both are disabled. Disabling swig.])
	fi
	USESWIG='not needed'
fi

PERL_TEXT="$PERL"
if test "x$PERL" != "xno"; then
	old_PERL="$PERL"
	AC_PATH_PROG([PERL_BINARY], [perl], [])
	if test -n "$PERL_BINARY" && eval "$PERL_BINARY -e'use 5.010'"; then
		my_saved_LDFLAGS="$LDFLAGS"
		appendLD `$PERL_BINARY -MExtUtils::Embed -e ccopts -e ldopts`
		AC_CHECK_LIB(perl, perl_alloc,
			     [: No, we do not want autoconf to do sth automatically],
			     PERL="no" ; PERL_TEXT="no (libperl not found)")
		LDFLAGS="$my_saved_LDFLAGS"
	else
		PERL="no"
		PERL_TEXT="no (perl binary not found or too old)"
	fi
	if test "x$PERL" = "xno"; then
		ZNC_AUTO_FAIL([PERL],
			[perl not found. Try --disable-perl.],
			[perl was not found and thus disabled])
		PERL_BINARY=""
	else
		PERL="yes"
		PERL_TEXT="yes"
	fi
fi

PYTHON_TEXT="$PYTHON"
if test "x$PYTHON" != "xno"; then
	# Default value for just --enable-python
	if test "x$PYTHON" = "xyes"; then
		PYTHON="python3"
	fi
	old_PYTHON="$PYTHON"
	if test -z "$PKG_CONFIG"; then
		AC_MSG_ERROR([pkg-config is required for modpython.])
	fi
	PKG_CHECK_MODULES([python], [$PYTHON >= 3.0],, AC_MSG_ERROR([$PYTHON.pc not found or is wrong. Try --disable-python or install python3.]))
	my_saved_LIBS="$LIBS"
	my_saved_CXXFLAGS="$CXXFLAGS"
	appendLib $python_LIBS
	appendCXX $python_CFLAGS
	AC_CHECK_FUNC([Py_Initialize], [], [PYTHON="no" ; PYTHON_TEXT="no (libpython not found)"])
	if test "x$PYTHON" != "xno"; then
		# Yes, modpython depends on perl.
		AC_PATH_PROG([PERL_BINARY], [perl])
		if test -z "$PERL_BINARY"; then
			AC_MSG_ERROR([To compile modpython you need to be able to execute perl scripts. Try --disable-python or install perl.])
		fi
		LIBS="$my_saved_LIBS"
		CXXFLAGS="$my_saved_CXXFLAGS"
	fi
	if test "x$HAVE_ICU" != "xyes"; then
		AC_MSG_ERROR([Modpython requires ZNC to be compiled with charset support, but ICU library not found. Try --disable-python or install libicu.])
	fi
	if test "x$PYTHON" = "xno"; then
		ZNC_AUTO_FAIL([PYTHON],
			[python not found. Try --disable-python.],
			[python was not found and thus disabled])
		PYTHONCFG_BINARY=""
	else
		PYTHON="yes"
		PYTHON_TEXT="yes"
	fi
fi

if test -n "$CYRUS"; then
	AC_CHECK_LIB( sasl2, sasl_server_init,
		[: Dont let autoconf add -lsasl2, Makefile handles that],
		AC_MSG_ERROR([could not find libsasl2. Try --disable-cyrus.]))
fi

# Check if we want modtcl
AC_ARG_ENABLE( [tcl],
	AS_HELP_STRING([--enable-tcl], [enable modtcl]),
	[TCL="$enableval"],
	[TCL="no"])

AC_ARG_WITH( [tcl-flags],
	AS_HELP_STRING([--with-tcl-flags=FLAGS],
		[The flags needed for compiling and linking modtcl]),
	[TCL_FLAGS="$withval"],)

if test x"$TCL" = "xyes"
then
	AC_ARG_WITH( [tcl],
		AS_HELP_STRING([--with-tcl=DIR],
			[directory containing tclConfig.sh]),
			TCL_DIR="${withval}")

	# This will need to be extended in the future, but I don't think
	# it's a good idea to stuff a shitload of random stuff in here right now
	for path in $TCL_DIR /usr/lib /usr/lib/tcl8.4 /usr/lib/tcl8.5 /usr/lib/tcl8.6
	do
		file="${path}/tclConfig.sh"
		AC_MSG_CHECKING([for ${file}])
		if test -r ${file}
		then
			TCL_CONF=${file}
			AC_MSG_RESULT([yes])
			break
		fi
		AC_MSG_RESULT([no])
	done

	if test x"${TCL_CONF}" = x
	then
		# They --enable-tcl'd, so give them some sane default
		TCL_FLAGS="-I/usr/include/tcl -ltcl"
		AC_MSG_WARN([Could not find tclConfig.sh, using some sane defaults.])
	else
		AC_MSG_CHECKING([modtcl flags])
		. ${TCL_CONF}
		# eval because those vars depend on other vars in there
		eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
		eval "TCL_INCLUDE_SPEC=\"${TCL_INCLUDE_SPEC}\""
		TCL_FLAGS="$TCL_INCLUDE_SPEC $TCL_LIB_SPEC"
		AC_MSG_RESULT([$TCL_FLAGS])
	fi
	my_saved_LIBS="$LIBS"
	appendLib "$TCL_FLAGS"
	AC_CHECK_FUNC([Tcl_CreateInterp], [TCL_TEST=yes], [TCL_TEST=no])
	if test x"$TCL_TEST" = "xno"; then
		AC_MSG_ERROR([tcl not found, try --disable-tcl, or install tcl properly. If tcl is installed to a non-standard path, use --enable-tcl --with-tcl=/path])
	fi
	LIBS="$my_saved_LIBS"
fi

AC_CACHE_CHECK([for GNU make], [ac_cv_path_GNUMAKE], [
	AC_PATH_PROGS_FEATURE_CHECK([GNUMAKE], [make gmake], [[
			if $ac_path_GNUMAKE --version | $GREP GNU > /dev/null; then
				ac_cv_path_GNUMAKE=$ac_path_GNUMAKE
				ac_path_GNUMAKE_found=:
			fi
		]], [AC_MSG_ERROR([could not find GNU make])]
	)
])
GNUMAKE=`echo $ac_cv_path_GNUMAKE | $SED "s%.*/%%"`

# this is in the end, for not trying to include it when it doesn't exist yet
appendCXX "-include znc/zncconfig.h"
appendMod "-include znc/zncconfig.h"

AC_SUBST([CXXFLAGS])
AC_SUBST([CPPFLAGS])
AC_SUBST([MODFLAGS])
AC_SUBST([LDFLAGS])
AC_SUBST([LIBS])
AC_SUBST([LIBZNC])
AC_SUBST([LIBZNCDIR])
AC_SUBST([ISCYGWIN])
AC_SUBST([MODLINK])
AC_SUBST([NOSSL])
AC_SUBST([TCL_FLAGS])
AC_SUBST([CYRUS])
AC_SUBST([MODDIR])
AC_SUBST([DATADIR])
AC_SUBST([PERL])
AC_SUBST([PYTHON])
AC_SUBST([SWIG])
AC_SUBST([python_CFLAGS])
AC_SUBST([python_LIBS])
AC_SUBST([qt_CFLAGS])
AC_SUBST([qt_LIBS])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([znc-buildmod])
AC_CONFIG_FILES([man/Makefile])
AC_CONFIG_FILES([znc.pc])
AC_CONFIG_FILES([znc-uninstalled.pc])
AC_CONFIG_FILES([modules/Makefile])
AC_OUTPUT

if test "x$ISCYGWIN" = x1; then
		# Side effect of undefining __STRICT_ANSI__
		# http://llvm.org/bugs/show_bug.cgi?id=13530
		echo                                 >> include/znc/zncconfig.h
		echo '#ifndef ZNCCONFIG_H_ADDITIONS' >> include/znc/zncconfig.h
		echo '#define ZNCCONFIG_H_ADDITIONS' >> include/znc/zncconfig.h
		echo '#ifdef __clang__'              >> include/znc/zncconfig.h
		echo 'struct __float128;'            >> include/znc/zncconfig.h
		echo '#endif'                        >> include/znc/zncconfig.h
		echo '#endif'                        >> include/znc/zncconfig.h
fi

echo
echo ZNC AC_PACKAGE_VERSION configured
echo
echo "prefix:       $prefix"
echo "debug:        $DEBUG"
echo "ipv6:         $IPV6"
echo "openssl:      $SSL_TEXT"
echo "dns:          $DNS_TEXT"
echo "perl:         $PERL_TEXT"
echo "python:       $PYTHON_TEXT"
echo "swig:         $USESWIG"
if test x"$CYRUS" = "x" ; then
	echo "cyrus:        no"
else
	echo "cyrus:        yes"
fi
if test x"$TCL_FLAGS" = "x" ; then
	echo "tcl:          no"
else
	echo "tcl:          yes"
fi
echo "charset:      $HAVE_ICU"
echo "zlib:         $ZLIB_TEXT"
echo "run from src: $RUNFROMSOURCE"
echo
echo "Now you can run \"$GNUMAKE\" to compile ZNC"