1#!/bin/sh
2
3# Proprietary configure script of Coturn project
4
5cleanup() {
6	rm -rf ${TMPCPROGC}
7	rm -rf ${TMPCPROGB}
8	rm -rf ${TH_TMPCPROGC}
9	rm -rf ${TH_TMPCPROGB}
10	rm -rf ${GCM_TMPCPROGC}
11	rm -rf ${GCM_TMPCPROGB}
12	rm -rf ${D_TMPCPROGC}
13	rm -rf ${D_TMPCPROGB}
14	rm -rf ${TMPCADDRPROGO}
15}
16
17testlibraw() {
18    ${CC} ${TMPCPROGC} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -${1} 2>>/dev/null
19    ER=$?
20    if ! [ ${ER} -eq 0 ] ; then
21		${ECHO_CMD} "Library option -${1} cannot be used"
22		return 0
23    else
24		OSLIBS="${OSLIBS} -${1}"
25		return 1
26    fi
27}
28
29# testpkg pkg1 pkg2 ...
30# If all libraries are found, sets PKG_CFLAGS/PKG_LIBS and returns success.
31# Otherwise, returns failure.
32testpkg() {
33    PKG_LIBS="$($PKGCONFIG --libs "$@" 2>/dev/null)"
34    if [ $? -ne 0 ] ; then
35        return 1
36    fi
37    PKG_CFLAGS="$($PKGCONFIG --cflags "$@")"
38}
39
40# testpkg_db pkg1 pkg2 ...
41# If all libraries are found, adds them to DBCFLAGS/DBLIBS and returns success.
42# Otherwise, returns failure.
43testpkg_db() {
44    testpkg "$@" || return $?
45    DBCFLAGS="${DBCFLAGS} ${PKG_CFLAGS}"
46    DBLIBS="${DBLIBS} ${PKG_LIBS}"
47}
48
49# testpkg_common pkg1 pkg2 ...
50# If all libraries are found, adds them to OSCFLAGS/OSLIBS and returns success.
51# Otherwise, returns failure.
52testpkg_common() {
53    testpkg "$@" || return $?
54    OSCFLAGS="${OSCFLAGS} ${PKG_CFLAGS}"
55    OSLIBS="${OSLIBS} ${PKG_LIBS}"
56}
57
58testlib() {
59    testlibraw l${1}
60}
61
62pthread_testlib() {
63    if [ -n "${PTHREAD_LIBS}" ] ; then
64        OSLIBS="${OSLIBS} ${PTHREAD_LIBS}"
65        return
66    fi
67
68    if [ "$(uname)" = "DragonFly" ] ; then
69        OSLIBS="${OSLIBS} -pthread"
70        TURN_NO_SCTP=1
71        return
72    fi
73
74    if [ -n "$(uname | grep -i bsd)" ] ; then
75        OSLIBS="${OSLIBS} -pthread"
76        return
77    fi
78
79    ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null
80    ER=$?
81    if [ ${ER} -eq 0 ] ; then
82        return
83    fi
84
85    ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -pthread 2>>/dev/null
86    ER=$?
87    if [ ${ER} -eq 0 ] ; then
88        OSLIBS="${OSLIBS} -pthread"
89        return
90    fi
91
92    ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -lpthread 2>>/dev/null
93    ER=$?
94    if [ ${ER} -eq 0 ] ; then
95        OSLIBS="${OSLIBS} -lpthread"
96        return
97    fi
98
99    ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null
100    ER=$?
101    if [ ${ER} -eq 0 ] ; then
102        return
103    fi
104
105    ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -D_GNU_SOURCE 2>>/dev/null
106    ER=$?
107    if [ ${ER} -eq 0 ] ; then
108        ${ECHO_CMD} "Older GNU pthread library found"
109        OSCFLAGS="${OSCFLAGS} -D_GNU_SOURCE"
110        return
111    fi
112
113    ${ECHO_CMD} "Do not use pthreads"
114    return 1
115}
116
117pthread_testbarriers() {
118
119    ${ECHO_CMD} "pthread_barrier_t barrier;" >> ${TH_TMPCPROGC}
120    ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null
121    ER=$?
122    if ! [ ${ER} -eq 0 ] ; then
123		${ECHO_CMD} "pthread barriers not found"
124		OSCFLAGS="${OSCFLAGS} -DTURN_NO_THREAD_BARRIERS"
125    fi
126}
127
128gcm_testlib() {
129
130    if [ -z "${TURN_NO_GCM}" ] ; then
131    	${CC} ${GCM_TMPCPROGC} -o ${GCM_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null
132    	ER=$?
133    	if [ ${ER} -eq 0 ] ; then
134    	    return 1
135    	else
136    	    return 0
137    	fi
138    else
139		return 0
140    fi
141}
142
143testdaemon() {
144
145	${CC} ${D_TMPCPROGC} -o ${D_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null
146	ER=$?
147	if [ ${ER} -eq 0 ] ; then
148	    OSCFLAGS="${OSCFLAGS} -DTURN_HAS_DAEMON"
149	fi
150}
151
152test_sin_len() {
153    TMPCADDRPROGC=src/client/ns_turn_ioaddr.c
154    ${CC} -c ${OSCFLAGS} -DTURN_HAS_SIN_LEN -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null
155    ER=$?
156    if [ ${ER} -eq 0 ] ; then
157	OSCFLAGS="${OSCFLAGS} -DTURN_HAS_SIN_LEN"
158	${ECHO_CMD} "Sockets code is fine: sin_len field present"
159    else
160	${CC} -c ${OSCFLAGS} -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null
161	ER=$?
162	if [ ${ER} -eq 0 ] ; then
163	    ${ECHO_CMD} "Sockets code is fine: no sin_len field present"
164	else
165	    ${ECHO_CMD} "WARNING: trial compilation failed: src/client/ns_turn_ioaddr.c"
166	fi
167    fi
168}
169
170#########################
171# Start
172#########################
173
174cleanup
175
176#########################
177# To be set:
178#########################
179
180if [ -z "${ECHO_CMD}" ] ; then
181	ECHO_CMD=echo
182fi
183
184if [ -z "${FIND_CMD}" ] ; then
185	FIND_CMD=find
186fi
187
188if [ -z "${PORTNAME}" ] ; then
189	PORTNAME=turnserver
190fi
191
192#########################
193
194# Installation directory options
195
196ac_prev=
197ac_dashdash=
198for ac_option
199do
200  # If the previous option needs an argument, assign it.
201  if test -n "$ac_prev"; then
202    eval $ac_prev=\$ac_option
203    ac_prev=
204    continue
205  fi
206
207  case $ac_option in
208  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
209  *=)   ac_optarg= ;;
210  *)    ac_optarg=yes ;;
211  esac
212
213  # Accept the important Cygnus configure options, so we can diagnose typos.
214
215  case $ac_dashdash$ac_option in
216  --)
217    ac_dashdash=yes ;;
218
219  -bindir | --bindir | --bindi | --bind | --bin | --bi)
220    ac_prev=BINDIR ;;
221  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
222    BINDIR=$ac_optarg ;;
223
224  -localstatedir | --localstatedir | --localstatedi | --localstated | --localstate | --localstat)
225    ac_prev=LOCALSTATEDIR ;;
226  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* | --localstate=* | --localstat=*)
227    LOCALSTATEDIR=$ac_optarg ;;
228
229  -turndbdir | --turndbdir | --turndbdi | --turndbd | --turndb | --turnd)
230    ac_prev=TURNDBDIR ;;
231  -turndbdir=* | --turndbdir=* | --turndbdi=* | --turndbd=* | --turndb=* | --turnd=*)
232    TURNDBDIR=$ac_optarg ;;
233
234  -datadir | --datadir | --datadi | --datad | -schemadir | --schemadir)
235    ac_prev=SCHEMADIR ;;
236  -datadir=* | --datadir=* | --datadi=* | --datad=* | -schemadir=* | --schemadir=*)
237    SCHEMADIR=$ac_optarg ;;
238
239  -docdir | --docdir | --docdi | --doc | --do | -docsdir | --docsdir | --docsdi | --docs)
240    ac_prev=DOCDIR ;;
241  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=* | -docsdir=* | --docsdir=* | --docsdi=* | --docs=*)
242    DOCSDIR=$ac_optarg ;;
243
244  -examplesdir | --examplesdir | -examples | --examples)
245    ac_prev=EXAMPLESDIR ;;
246  -examplesdir=* | --examplesdir=* | -examples=* | --examples=*)
247    EXAMPLESDIR=$ac_optarg ;;
248
249  -includedir | --includedir | --includedi | --included | --include \
250  | --includ | --inclu | --incl | --inc)
251    ac_prev=INCLUDEDIR ;;
252  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
253  | --includ=* | --inclu=* | --incl=* | --inc=*)
254    INCLUDEDIR=$ac_optarg ;;
255
256  -turnincludedir | --turnincludedir)
257    ac_prev=TURNINCLUDEDIR ;;
258  -turnincludedir=* | --turnincludedir=*)
259    TURNINCLUDEDIR=$ac_optarg ;;
260
261  -libdir | --libdir | --libdi | --libd)
262    ac_prev=LIBDIR ;;
263  -libdir=* | --libdir=* | --libdi=* | --libd=*)
264    LIBDIR=$ac_optarg ;;
265
266  -mandir | --mandir | --mandi | --mand | --man | --ma | --m | -manprefix | --manprefix)
267    ac_prev=MAXPREFIX ;;
268  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=* | -manprefix=* | --manprefix=*)
269    MANPREFIX=$ac_optarg ;;
270
271  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
272    ac_prev=PREFIX ;;
273  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
274    PREFIX=$ac_optarg ;;
275
276  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
277  | --syscon | --sysco | --sysc | --sys | --sy | -confdir | --confdir)
278    ac_prev=CONFDIR ;;
279  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
280  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=* | -confdir=* | --confdir=*)
281    CONFDIR=$ac_optarg ;;
282
283  -disable-rpath | --disable-rpath)
284  	TURN_DISABLE_RPATH=1 ;;
285
286  esac
287
288done
289
290if test -n "$ac_prev"; then
291  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
292  as_fn_error $? "missing argument to $ac_option"
293fi
294
295#############################################
296
297if [ -z "${PREFIX}" ] ; then
298
299	if [ -z "${prefix}" ] ; then
300
301		SYSTEM=`uname`
302
303		if [ "${SYSTEM}" = "NetBSD" ] ; then
304			# A little tough guy
305			PREFIX=/usr/pkg
306		elif [ "${SYSTEM}" = "SunOS" ] ; then
307			# A fat guy
308			PREFIX=/usr
309		else
310			# An ordinary person
311			PREFIX=/usr/local
312		fi
313	else
314		PREFIX=${prefix}
315	fi
316fi
317
318if [ -z "${BINDIR}" ] ; then
319    if [ -z "${bindir}" ] ; then
320		BINDIR=${PREFIX}/bin
321    else
322		BINDIR=${bindir}
323    fi
324fi
325
326if [ -z "${LOCALSTATEDIR}" ] ; then
327    if [ -z "${localstatedir}" ] ; then
328
329    	if [ "${PREFIX}" = "/usr" ] ; then
330			LOCALSTATEDIR=/var
331		else
332			LOCALSTATEDIR=${PREFIX}/var
333		fi
334
335    else
336		LOCALSTATEDIR=${localstatedir}
337    fi
338fi
339
340if [ -z "${CONFDIR}" ] ; then
341    if [ -z "${confdir}" ] ; then
342	CONFDIR=${PREFIX}/etc
343    else
344	CONFDIR=${confdir}
345    fi
346fi
347
348if [ -z "${MANPREFIX}" ] ; then
349    if [ -z "${manprefix}" ] ; then
350	MANPREFIX=${PREFIX}
351    else
352	MANPREFIX=${manprefix}
353    fi
354fi
355
356if [ -z "${EXAMPLESDIR}" ] ; then
357    if [ -z "${examplesdir}" ] ; then
358	EXAMPLESDIR=${PREFIX}/share/examples/${PORTNAME}
359    else
360	EXAMPLESDIR=${examplesdir}
361    fi
362fi
363
364if [ -z "${DOCSDIR}" ] ; then
365    if [ -z "${docsdir}" ] ; then
366	DOCSDIR=${PREFIX}/share/doc/${PORTNAME}
367    else
368	DOCSDIR=${docsdir}
369    fi
370fi
371
372if [ -z "${LIBDIR}" ] ; then
373    if [ -z "${libdir}" ] ; then
374	LIBDIR=${PREFIX}/lib
375    else
376	LIBDIR=${libdir}
377    fi
378fi
379
380if [ -z "${SCHEMADIR}" ] ; then
381    if [ -z "${schemadir}" ] ; then
382	SCHEMADIR=${PREFIX}/share/${PORTNAME}
383    else
384	SCHEMADIR=${schemadir}
385    fi
386fi
387
388if [ -z "${INCLUDEDIR}" ] ; then
389    if [ -z "${includedir}" ] ; then
390	INCLUDEDIR=${PREFIX}/include
391    else
392	INCLUDEDIR=${includedir}
393    fi
394fi
395
396if [ -z "${TURNINCLUDEDIR}" ] ; then
397    if [ -z "${turnincludedir}" ] ; then
398	TURNINCLUDEDIR=${INCLUDEDIR}/turn
399    else
400	TURNINCLUDEDIR=${turnincludedir}
401    fi
402fi
403
404###############################################
405
406if [ -z "${ARCHIVERCMD}" ] ; then
407	ARCHIVERCMD="ar -r"
408fi
409
410if [ -z "${MORECMD}" ]; then
411	MORECMD="cat"
412fi
413
414OSCFLAGS="${CFLAGS}"
415OSLIBS="${LDFLAGS}"
416
417SYSTEM=`uname`
418if [ "${SYSTEM}" = "NetBSD" ] ; then
419	OSCFLAGS="${OSCFLAGS} -I/usr/pkg/include"
420	OSLIBS="-L/usr/pkg/lib ${OSLIBS}"
421	if ! [ -z "${TURN_ACCEPT_RPATH}" ] ; then
422	    TURN_RPATH="${TURN_RPATH} -Wl,-rpath,/usr/pkg/lib"
423	fi
424fi
425
426# If acme_redirect does not work, send_data_from_ioa_socket_nbh() probably
427# does not work. Set LIBEV_OK=1 to use a workaround for it.
428if [ -z "${LIBEV_OK}" ]; then
429	LIBEV_OK=1
430	if [ "${SYSTEM}" = "Linux" ]; then
431		OS=$( lsb_release -si 2>/dev/null )
432		[ "${OS}" = "Ubuntu" ] && LIBEV_OK=0
433	fi
434fi
435[ "${LIBEV_OK}" = "1" ] && OSCFLAGS="${OSCFLAGS} -DLIBEV_OK"
436
437###########################
438# Install shell commands
439###########################
440
441type ginstall 2>>/dev/null
442ER=$?
443if [ ${ER} -eq 0 ] ; then
444	INSTALL_PROGRAM="ginstall"
445	INSTALL_MAN="ginstall"
446	INSTALL_SCRIPT="ginstall"
447	INSTALL_SHARED_LIB="ginstall"
448	INSTALL_STATIC_LIB="ginstall"
449	INSTALL_DATA="ginstall"
450	MKDIR="ginstall -d"
451else
452	type install 2>>/dev/null
453	ER=$?
454	if [ ${ER} -eq 0 ] ; then
455		INSTALL_PROGRAM="install"
456		INSTALL_MAN="install"
457		INSTALL_SCRIPT="install"
458		INSTALL_SHARED_LIB="install"
459		INSTALL_STATIC_LIB="install"
460		INSTALL_DATA="install"
461		MKDIR="install -d"
462	else
463		INSTALL_PROGRAM="cp -pf"
464		INSTALL_MAN="cp -pf"
465		INSTALL_SCRIPT="cp -pf"
466		INSTALL_SHARED_LIB="cp -pf"
467		INSTALL_STATIC_LIB="cp -pf"
468		INSTALL_DATA="cp -pf"
469		MKDIR="mkdir -p"
470	fi
471fi
472
473type pkill 2>>/dev/null
474ER=$?
475if [ ${ER} -eq 0 ] ; then
476	PKILL_PROGRAM="pkill"
477else
478	PKILL_PROGRAM="${ECHO_CMD}"
479fi
480
481INSTALL_DIR="cp -rpf"
482MKBUILDDIR="mkdir -p"
483RMCMD="rm -rf"
484
485type sqlite3 2>>/dev/null
486ER=$?
487if [ ${ER} -eq 0 ] ; then
488    SQLITE_CMD="sqlite3"
489else
490    type sqlite 2>>/dev/null
491    ER=$?
492    if [ ${ER} -eq 0 ] ; then
493		SQLITE_CMD="sqlite"
494    else
495		SQLITE_CMD=${ECHO_CMD}
496    fi
497fi
498
499#############################
500# Adjustments for Solaris
501#############################
502
503SYSTEM=`uname`
504
505if [ "${SYSTEM}" = "SunOS" ] ; then
506# Solaris ? is this you ?!
507    OSCFLAGS="${OSCFLAGS} -D__EXTENSIONS__ -D_XOPEN_SOURCE=500 -DTURN_NO_GETDOMAINNAME"
508    OSLIBS="${OSLIBS} -lnsl"
509    TURN_NO_SCTP=1
510fi
511
512#########################
513# Temporary DIR location:
514#########################
515
516TMPDIR="."
517
518if [ -d /var/tmp ] ; then
519  TMPDIR="/var/tmp"
520elif [ -d /tmp ] ; then
521  TMPDIR=/tmp
522fi
523
524${ECHO_CMD} Use TMP dir ${TMPDIR}
525
526#########################
527# Basic C test programs
528#########################
529
530TMPCADDRPROGO=${TMPDIR}/__test__ccomp_addr_$$.o
531
532TMPCPROG=__test__ccomp__$$
533TMPCPROGC=${TMPDIR}/${TMPCPROG}.c
534TMPCPROGB=${TMPDIR}/${TMPCPROG}
535
536cat > ${TMPCPROGC} <<!
537#include <stdlib.h>
538int main(int argc, char** argv) {
539    return (int)(argv[argc][0]);
540}
541!
542
543TH_TMPCPROG=__test__ccomp__pthread__$$
544TH_TMPCPROGC=${TMPDIR}/${TH_TMPCPROG}.c
545TH_TMPCPROGB=${TMPDIR}/${TH_TMPCPROG}
546
547cat > ${TH_TMPCPROGC} <<!
548#include <stdlib.h>
549#include <pthread.h>
550int main(int argc, char** argv) {
551    pthread_mutexattr_settype(0,PTHREAD_MUTEX_RECURSIVE);
552    return (int)pthread_create(0,0,0,0)+(int)(argv[argc][0]);
553}
554
555!
556
557GCM_TMPCPROG=__test__ccomp__gcm__$$
558GCM_TMPCPROGC=${TMPDIR}/${GCM_TMPCPROG}.c
559GCM_TMPCPROGB=${TMPDIR}/${GCM_TMPCPROG}
560
561cat > ${GCM_TMPCPROGC} <<!
562#include <stdlib.h>
563#include <openssl/ssl.h>
564#include <openssl/evp.h>
565int main(int argc, char** argv) {
566    return (int)EVP_CIPH_GCM_MODE;
567}
568!
569
570D_TMPCPROG=__test__ccomp__daemon__$$
571D_TMPCPROGC=${TMPDIR}/${D_TMPCPROG}.c
572D_TMPCPROGB=${TMPDIR}/${D_TMPCPROG}
573
574cat > ${D_TMPCPROGC} <<!
575#include <stdlib.h>
576#include <unistd.h>
577int main(int argc, char** argv) {
578    return (int)daemon(0,0)+(int)(argv[argc][0]);
579}
580!
581
582##########################
583# What is our compiler ?
584##########################
585
586if [ -z "${CC}" ] ; then
587    for CC in cc gcc clang; do
588        ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null
589        ER=$?
590        if [ ${ER} -eq 0 ] ; then
591            break
592        fi
593        CC=
594    done
595
596    if [ -z "$CC" ] ; then
597        ${ECHO_CMD} "ERROR: failed to a find working C compiler"
598        cleanup
599        exit
600    fi
601else
602    ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null
603    ER=$?
604    if ! [ ${ER} -eq 0 ] ; then
605        ${ECHO_CMD} "ERROR: cannot use compiler ${CC} properly"
606        cleanup
607        exit
608    fi
609fi
610
611${ECHO_CMD} "Compiler: ${CC}"
612
613if [ -z "${TURN_ACCEPT_RPATH}" ] ; then
614    ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} -Wl,-rpath,/usr/lib 2>>/dev/null
615    ER=$?
616    if [ ${ER} -eq 0 ] ; then
617	TURN_ACCEPT_RPATH=1
618    fi
619fi
620
621##########################
622# Which pkg-config?
623##########################
624
625if [ -z "$PKGCONFIG" ] ; then
626    for PKGCONFIG in pkgconf pkg-config ; do
627        if type "$PKGCONFIG" 2>/dev/null ; then
628            break
629        fi
630        PKGCONFIG=
631    done
632
633    if [ -z "$PKGCONFIG" ] ; then
634        ${ECHO_CMD} "ERROR: pkg-config not found"
635        cleanup
636        exit
637    fi
638else
639    if ! type "$PKGCONFIG" 2>/dev/null ; then
640        ${ECHO_CMD} "ERROR: cannot use $PKGCONFIG"
641        cleanup
642        exit
643    fi
644fi
645
646${ECHO_CMD} "pkg-config: $PKGCONFIG"
647
648###########################
649# Check if we can use GNU
650# or Clang compiler flags
651###########################
652
653GNUOSCFLAGS="-g ${GNUOSCFLAGS}"
654GNUOSCFLAGS="${GNUOSCFLAGS} -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Wcast-qual"
655GNUOSCFLAGS="${GNUOSCFLAGS}"
656
657${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null
658ER=$?
659if ! [ ${ER} -eq 0 ] ; then
660    ${ECHO_CMD} "Hm..."
661    ${CC} -Wall ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null
662    ER=$?
663    if ! [ ${ER} -eq 0 ] ; then
664		${ECHO_CMD} "Not an ordinary GNU or Clang compiler"
665    else
666		${ECHO_CMD} "g++ or something..."
667		GNUOSCFLAGS="-g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wpointer-arith -Wcast-qual"
668		${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null
669		ER=$?
670		if ! [ ${ER} -eq 0 ] ; then
671	    	${ECHO_CMD} "Not an ordinary g++ compiler"
672	    	GNUOSCFLAGS="-x c++ -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wpointer-arith -Wcast-qual"
673	    	${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null
674	    	ER=$?
675	    	if ! [ ${ER} -eq 0 ] ; then
676	    		${ECHO_CMD} "Not an ordinary c++ compiler"
677	    	else
678				${ECHO_CMD} "Clang++ compiler ?"
679	    		OSCFLAGS="${GNUOSCFLAGS} ${OSCFLAGS}"
680	    	fi
681		else
682	    	OSCFLAGS="${GNUOSCFLAGS} ${OSCFLAGS}"
683		fi
684    fi
685else
686    OSCFLAGS="${GNUOSCFLAGS} ${OSCFLAGS}"
687fi
688
689###########################
690# Test some general-purpose
691# libraries
692###########################
693
694testlib socket
695testlib rt
696testlib wldap32
697ER=$?
698if ! [ ${ER} -eq 0 ] ; then
699    echo "CYGWIN ?"
700fi
701testlib wldap64
702testlib intl
703testlib nsl
704testlib resolv
705
706###########################
707# Test sockets compilation
708###########################
709
710test_sin_len
711
712###########################
713# Can we use multi-threading ?
714###########################
715
716pthread_testlib
717ER=$?
718if [ ${ER} -ne 0 ] ; then
719    ${ECHO_CMD} "ERROR: Cannot find pthread library functions."
720    exit
721fi
722
723if [ -z ${TURN_NO_THREAD_BARRIERS} ] ; then
724	pthread_testbarriers
725else
726	TURN_NO_THREAD_BARRIERS="-DTURN_NO_THREAD_BARRIERS"
727fi
728
729if [ -z ${TURN_IP_RECVERR} ] ; then
730	${ECHO_CMD} "Ignore IP_RECVERR"
731else
732	${ECHO_CMD} "Use IP_RECVERR"
733	TURN_IP_RECVERR="-DTURN_IP_RECVERR"
734	OSCFLAGS="${OSCFLAGS} ${TURN_IP_RECVERR}"
735fi
736
737###########################
738# Can we use daemon ?
739###########################
740
741testdaemon
742
743###########################
744# Test OpenSSL installation
745###########################
746
747if [ -n "${SSL_CFLAGS}" ] && [ -n "${SSL_LIBS}" ]; then
748    ${CC} ${TMPCPROGC} ${SSL_CFLAGS} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} ${SSL_LIBS} 2>>/dev/null
749    ER=$?
750    if ! [ ${ER} -eq 0 ] ; then
751        ${ECHO_CMD} "Private SSL Library option cannot be used"
752        exit
753    else
754        OSCFLAGS="${OSCFLAGS} ${SSL_CFLAGS}"
755        OSLIBS="${OSLIBS} ${SSL_LIBS}"
756    fi
757else
758    if testpkg_common libcrypto; then
759        ${ECHO_CMD} "OpenSSL Crypto lib found."
760    else
761	    testlib crypto
762	    ER=$?
763        if ! [ ${ER} -eq 0 ] ; then
764            ${ECHO_CMD} "OpenSSL Crypto lib found."
765        else
766            ${ECHO_CMD} "ERROR: OpenSSL Crypto development libraries are not installed properly in required location."
767            ${ECHO_CMD} "Abort."
768            cleanup
769            exit
770        fi
771    fi
772
773    if testpkg_common libssl; then
774        ${ECHO_CMD} "OpenSSL lib found."
775    else
776       testlib ssl
777        ER=$?
778        if ! [ ${ER} -eq 0 ] ; then
779            ${ECHO_CMD} "OpenSSL lib found."
780        else
781            ${ECHO_CMD} "ERROR: OpenSSL development libraries are not installed properly in required location."
782            ${ECHO_CMD} "Abort."
783            cleanup
784            exit
785        fi
786    fi
787fi
788###########################
789# Can we use GCM cipher ?
790###########################
791
792if [ -z ${TURN_NO_GCM} ] ; then
793
794gcm_testlib
795ER=$?
796if [ ${ER} -eq 0 ] ; then
797	${ECHO_CMD} "WARNING: Cannot find GCM support."
798	${ECHO_CMD} "Turning GCM off."
799	TURN_NO_GCM="-DTURN_NO_GCM"
800fi
801
802else
803	TURN_NO_GCM="-DTURN_NO_GCM"
804fi
805
806###########################
807# Test Libevent2 setup
808###########################
809if [ -n "${EVENT_CFLAGS}" ] && [ -n "${EVENT_LIBS}" ]; then
810    ${CC} ${TMPCPROGC} ${EVENT_CFLAGS} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} ${EVENT_LIBS} 2>>/dev/null
811    ER=$?
812    if ! [ ${ER} -eq 0 ] ; then
813        ${ECHO_CMD} "Private Event Library option cannot be used"
814        exit
815    else
816        OSCFLAGS="${OSCFLAGS} ${EVENT_CFLAGS}"
817        OSLIBS="${OSLIBS} ${EVENT_LIBS}"
818    fi
819else
820    if testpkg_common libevent_core libevent_extra libevent_openssl libevent_pthreads || testpkg_common libevent libevent_openssl libevent_pthreads; then
821        ${ECHO_CMD} "Libevent2 runtime found."
822    else
823        ${ECHO_CMD} "ERROR: Libevent2 development libraries are not installed properly in required location."
824        ${ECHO_CMD} "ERROR: may be you have just too old libevent tool - then you have to upgrade it."
825        ${ECHO_CMD} "See the INSTALL file."
826        ${ECHO_CMD} "Abort."
827        cleanup
828        exit
829    fi
830fi
831
832###########################
833# Test Prometheus
834###########################
835
836if [ -z "${TURN_NO_PROMETHEUS}" ] ; then
837
838	testlib prom
839	ER=$?
840	if ! [ ${ER} -eq 0 ] ; then
841		${ECHO_CMD} "Prometheus lib found."
842		testlib promhttp
843		ER=$?
844		if ! [ ${ER} -eq 0 ] ; then
845			${ECHO_CMD} "Prometheus http lib found."
846			testlib microhttpd
847			ER=$?
848			if ! [ ${ER} -eq 0 ] ; then
849				${ECHO_CMD} "Microhttpd lib found."
850			else
851				${ECHO_CMD}
852				${ECHO_CMD} "Warning: microhttpd development libraries are not installed properly in required location."
853				${ECHO_CMD} "Prometheus support will be disabled."
854				${ECHO_CMD} "See the INSTALL file."
855				${ECHO_CMD}
856				OSCFLAGS="${OSCFLAGS} -DTURN_NO_PROMETHEUS"
857			fi
858		else
859			${ECHO_CMD}
860			${ECHO_CMD} "Warning: Libpromhttp development libraries are not installed properly in required location."
861			${ECHO_CMD} "Prometheus support will be disabled."
862			${ECHO_CMD} "See the INSTALL file."
863			${ECHO_CMD}
864			OSCFLAGS="${OSCFLAGS} -DTURN_NO_PROMETHEUS"
865		fi
866	else
867		${ECHO_CMD}
868		${ECHO_CMD} "Warning: Libprom development libraries are not installed properly in required location."
869		${ECHO_CMD} "Prometheus support will be disabled."
870		${ECHO_CMD} "See the INSTALL file."
871		${ECHO_CMD}
872		OSCFLAGS="${OSCFLAGS} -DTURN_NO_PROMETHEUS"
873	fi
874
875else
876	OSCFLAGS="${OSCFLAGS} -DTURN_NO_PROMETHEUS"
877fi
878
879###########################
880# Test libsystemd
881###########################
882
883if [ -z "${TURN_NO_SYSTEMD}" ] ; then
884    if testpkg_common libsystemd; then
885        ${ECHO_CMD} "Systemd library found."
886    else
887        ${ECHO_CMD} "Systemd library not found. Building without systemd support."
888        TURN_NO_SYSTEMD="-DTURN_NO_SYSTEMD"
889    fi
890else
891    TURN_NO_SYSTEMD="-DTURN_NO_SYSTEMD"
892fi
893
894###########################
895# Test SQLite3 setup
896###########################
897
898if [ -z "${TURN_NO_SQLITE}" ] ; then
899    if testpkg_db sqlite3; then
900        ${ECHO_CMD} "SQLite3 library found."
901    else
902        ${ECHO_CMD} "SQLite3 development library not found. Building without SQLite3 support."
903        TURN_NO_SQLITE="-DTURN_NO_SQLITE"
904    fi
905else
906    TURN_NO_SQLITE="-DTURN_NO_SQLITE"
907    SQLITE_CMD=${ECHO_CMD}
908fi
909
910if [ -z "${TURNDBDIR}" ] ; then
911	TURNDBDIR=${LOCALSTATEDIR}/db
912fi
913
914###########################
915# Test PostgreSQL
916###########################
917
918if [ -z "${TURN_NO_PQ}" ] ; then
919    if testpkg_db libpq; then
920        ${ECHO_CMD} "PostgreSQL found."
921    else
922        ${ECHO_CMD} "PostgreSQL not found. Building without PostgreSQL support."
923        TURN_NO_PQ="-DTURN_NO_PQ"
924    fi
925else
926    TURN_NO_PQ="-DTURN_NO_PQ"
927fi
928
929###########################
930# Test MySQL
931###########################
932
933if [ -z "${TURN_NO_MYSQL}" ] ; then
934    if testpkg_db mariadb || testpkg_db mysqlclient ; then
935        ${ECHO_CMD} "MySQL found."
936    else
937        ${ECHO_CMD} "MySQL not found. Building without MySQL support."
938        TURN_NO_MYSQL="-DTURN_NO_MYSQL"
939    fi
940else
941    TURN_NO_MYSQL="-DTURN_NO_MYSQL"
942fi
943
944###########################
945# Test MongoDB
946###########################
947
948if [ -z "${TURN_NO_MONGO}" ] ; then
949    if testpkg_db libmongoc-1.0; then
950        ${ECHO_CMD} "MongoDB found."
951    else
952        ${ECHO_CMD} "MongoDB not found. Building without MongoDB support."
953        TURN_NO_MONGO="-DTURN_NO_MONGO"
954    fi
955else
956    TURN_NO_MONGO="-DTURN_NO_MONGO"
957fi
958
959###########################
960# Test Redis
961###########################
962
963if [ -z "${TURN_NO_HIREDIS}" ] ; then
964    if testpkg_db hiredis; then
965        ${ECHO_CMD} "Hiredis found."
966    else
967        ${ECHO_CMD} "Hiredis not found. Building without hiredis support."
968        TURN_NO_HIREDIS="-DTURN_NO_HIREDIS"
969    fi
970else
971    TURN_NO_HIREDIS="-DTURN_NO_HIREDIS"
972fi
973
974###############################
975# LDCONFIG
976###############################
977
978if [ -z "${LDCONFIG}" ] ; then
979	ISBSD=`uname | grep -i bsd`
980	if [ -z "${ISBSD}" ] ; then
981		ISLINUX=`uname | grep -i linux`
982		if [ -z "${ISLINUX}" ] ; then
983			SYSTEM=`uname`
984			if [ "${SYSTEM}" = "SunOS" ] ; then
985				LDCONFIG="crle -u -l"
986			else
987				LDCONFIG=${ECHO_CMD}
988			fi
989		else
990			LDCONFIG="ldconfig -n"
991		fi
992	else
993		LDCONFIG="ldconfig -m"
994	fi
995fi
996
997###############################
998# SCTP
999###############################
1000
1001if [ -z "${TURN_NO_SCTP}" ] ; then
1002    if [ -z "${TURN_SCTP_INCLUDE}" ] ; then
1003		if [ -f /usr/include/netinet/sctp.h ] ; then
1004	    	TURN_SCTP_INCLUDE="-DTURN_SCTP_INCLUDE=\"</usr/include/netinet/sctp.h>\""
1005		fi
1006    else
1007		TURN_SCTP_INCLUDE="-DTURN_SCTP_INCLUDE=\"\\\"${TURN_SCTP_INCLUDE}\\\"\""
1008    fi
1009else
1010    TURN_NO_SCTP="-DTURN_NO_SCTP"
1011fi
1012
1013###############################
1014# So, what we have now:
1015###############################
1016
1017OSCFLAGS="${OSCFLAGS} ${TURN_NO_SCTP} ${TURN_SCTP_INCLUDE} ${TURN_NO_THREAD_BARRIERS} ${TURN_NO_DTLS} ${TURN_NO_GCM} ${TURN_NO_TLS} -DINSTALL_PREFIX=${PREFIX} -DTURNDB=${TURNDBDIR}/turndb"
1018
1019if ! [ -z "${TURN_ACCEPT_RPATH}" ] ; then
1020  if [ -z "${TURN_DISABLE_RPATH}" ] ; then
1021    TURN_RPATH="${TURN_RPATH} -Wl,-rpath,/usr/local/lib"
1022    OSLIBS="${OSLIBS} ${TURN_RPATH}"
1023  fi
1024fi
1025
1026${ECHO_CMD} PREFIX="${PREFIX}" LOCALSTATEDIR="${LOCALSTATEDIR}" OSLIBS="${OSLIBS}" DBLIBS="${DBLIBS}" OSCFLAGS="${OSCFLAGS}" DBCFLAGS="${DBCFLAGS}" $@
1027
1028###############################
1029# Make make:
1030###############################
1031
1032${ECHO_CMD} "#################################" > Makefile
1033${ECHO_CMD} "# Generated by configure script #" >> Makefile
1034${ECHO_CMD} "#################################" >> Makefile
1035${ECHO_CMD} "ECHO_CMD = ${ECHO_CMD}" >> Makefile
1036${ECHO_CMD} "CC = ${CC}" >> Makefile
1037${ECHO_CMD} "LDFLAGS += ${OSLIBS}" >> Makefile
1038${ECHO_CMD} "DBLIBS += ${DBLIBS}" >> Makefile
1039${ECHO_CMD} "CFLAGS += ${OSCFLAGS}" >> Makefile
1040${ECHO_CMD} "CPPFLAGS = ${CPPFLAGS}" >> Makefile
1041${ECHO_CMD} "DBCFLAGS += ${DBCFLAGS} ${TURN_NO_PQ} ${TURN_NO_MYSQL} ${TURN_NO_SQLITE} ${TURN_NO_MONGO} ${TURN_NO_HIREDIS} ${TURN_NO_SYSTEMD}" >> Makefile
1042${ECHO_CMD} "#" >> Makefile
1043${ECHO_CMD} "PORTNAME = ${PORTNAME}" >> Makefile
1044${ECHO_CMD} "PREFIX = ${PREFIX}" >> Makefile
1045${ECHO_CMD} "prefix = ${PREFIX}" >> Makefile
1046${ECHO_CMD} "BINDIR = ${BINDIR}" >> Makefile
1047${ECHO_CMD} "bindir = ${BINDIR}" >> Makefile
1048${ECHO_CMD} "LOCALSTATEDIR = ${LOCALSTATEDIR}" >> Makefile
1049${ECHO_CMD} "localstatedir = ${LOCALSTATEDIR}" >> Makefile
1050${ECHO_CMD} "TURNDBDIR = ${TURNDBDIR}" >> Makefile
1051${ECHO_CMD} "turndbdir = ${TURNDBDIR}" >> Makefile
1052${ECHO_CMD} "CONFDIR = ${CONFDIR}" >> Makefile
1053${ECHO_CMD} "confdir = ${CONFDIR}" >> Makefile
1054${ECHO_CMD} "MANPREFIX = ${MANPREFIX}" >> Makefile
1055${ECHO_CMD} "manprefix = ${MANPREFIX}" >> Makefile
1056${ECHO_CMD} "EXAMPLESDIR = ${EXAMPLESDIR}" >> Makefile
1057${ECHO_CMD} "examplesdir = ${EXAMPLESDIR}" >> Makefile
1058${ECHO_CMD} "DOCSDIR = ${DOCSDIR}" >> Makefile
1059${ECHO_CMD} "docsdir = ${DOCSDIR}" >> Makefile
1060${ECHO_CMD} "LIBDIR = ${LIBDIR}" >> Makefile
1061${ECHO_CMD} "libdir = ${LIBDIR}" >> Makefile
1062${ECHO_CMD} "SCHEMADIR = ${SCHEMADIR}" >> Makefile
1063${ECHO_CMD} "schemadir = ${SCHEMADIR}" >> Makefile
1064${ECHO_CMD} "INCLUDEDIR = ${INCLUDEDIR}" >> Makefile
1065${ECHO_CMD} "includedir = ${INCLUDEDIR}" >> Makefile
1066${ECHO_CMD} "TURNINCLUDEDIR = ${TURNINCLUDEDIR}" >> Makefile
1067${ECHO_CMD} "turnincludedir = ${TURNINCLUDEDIR}" >> Makefile
1068${ECHO_CMD} "#" >> Makefile
1069${ECHO_CMD} "ARCHIVERCMD = ${ARCHIVERCMD}" >> Makefile
1070${ECHO_CMD} "MKDIR = ${MKDIR}" >> Makefile
1071${ECHO_CMD} "SQLITE_CMD = ${SQLITE_CMD}" >> Makefile
1072${ECHO_CMD} "INSTALL_PROGRAM = ${INSTALL_PROGRAM}" >> Makefile
1073${ECHO_CMD} "PKILL_PROGRAM = ${PKILL_PROGRAM}" >> Makefile
1074${ECHO_CMD} "INSTALL_MAN = ${INSTALL_MAN}" >> Makefile
1075${ECHO_CMD} "INSTALL_SCRIPT = ${INSTALL_SCRIPT}" >> Makefile
1076${ECHO_CMD} "INSTALL_SHARED_LIB = ${INSTALL_SHARED_LIB}" >> Makefile
1077${ECHO_CMD} "INSTALL_STATIC_LIB = ${INSTALL_STATIC_LIB}" >> Makefile
1078${ECHO_CMD} "INSTALL_DATA = ${INSTALL_DATA}" >> Makefile
1079${ECHO_CMD} "INSTALL_DIR = ${INSTALL_DIR}" >> Makefile
1080${ECHO_CMD} "MKBUILDDIR = ${MKBUILDDIR}" >> Makefile
1081${ECHO_CMD} "RMCMD = ${RMCMD}" >> Makefile
1082${ECHO_CMD} "MORECMD = ${MORECMD}" >> Makefile
1083${ECHO_CMD} "LDCONFIG=${LDCONFIG}" >> Makefile
1084${ECHO_CMD} "################################" >> Makefile
1085${ECHO_CMD} "" >> Makefile
1086cat Makefile.in >> Makefile
1087
1088###############################
1089# End:
1090###############################
1091
1092cleanup
1093
1094${ECHO_CMD} "Makefile created: success."
1095