configure 27 KB

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