configure.ac 74 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183
  1. # This file is part of GNUnet.
  2. # (C) 2001--2019 GNUnet e.V.
  3. #
  4. # GNUnet is free software: you can redistribute it and/or modify it
  5. # under the terms of the GNU Affero General Public License as published
  6. # by the Free Software Foundation, either version 3 of the License,
  7. # or (at your option) any later version.
  8. #
  9. # GNUnet is distributed in the hope that it will be useful, but
  10. # WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. # Affero General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Affero General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. #
  17. # SPDX-License-Identifier: AGPL3.0-or-later
  18. #
  19. # Process this file with autoconf to produce a configure script.
  20. #
  21. #
  22. AC_PREREQ(2.61)
  23. # Checks for programs.
  24. AC_INIT([gnunet], [0.11.8], [bug-gnunet@gnu.org])
  25. AC_CONFIG_AUX_DIR([build-aux])
  26. # check for legacy option that is no longer supported (#5627) and fail hard
  27. AC_ARG_WITH(nssdir,
  28. [ --with-nssdir=DIR legacy switch, no longer supported, do not use],
  29. [AC_MSG_RESULT([$with_nssdir])
  30. AS_CASE([$with_nssdir],
  31. [no],[],
  32. [AC_MSG_ERROR([--with-nssdir is no longer supported])])
  33. ])
  34. AC_CANONICAL_TARGET
  35. AC_CANONICAL_HOST
  36. AC_CANONICAL_SYSTEM
  37. AM_INIT_AUTOMAKE
  38. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AM_DEFAULT_VERBOSITY=1 AC_SUBST(AM_DEFAULT_VERBOSITY)])
  39. AC_CONFIG_HEADERS([gnunet_config.h])
  40. AH_TOP([#define _GNU_SOURCE 1])
  41. AC_CONFIG_MACRO_DIR([m4])
  42. AC_PROG_AWK
  43. AC_PROG_CC_C99
  44. AC_PROG_OBJC
  45. AC_PROG_INSTALL
  46. AC_PROG_LN_S
  47. AC_PROG_MAKE_SET
  48. AM_PROG_CC_C_O
  49. LT_INIT([disable-static dlopen])
  50. AC_SUBST(MKDIR_P)
  51. # allow for different autotools
  52. AS_AUTOTOOLS_ALTERNATE
  53. # large file support
  54. AC_SYS_LARGEFILE
  55. AC_FUNC_FSEEKO
  56. CFLAGS="-Wall $CFLAGS"
  57. AC_MSG_CHECKING(whether cc can use -fno-strict-aliasing)
  58. # use '-fno-strict-aliasing', but only if the compiler can take it
  59. AS_IF([$CC -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1],
  60. [CFLAGS="-fno-strict-aliasing $CFLAGS"])
  61. # A helper which allows us to check cflags if compiler
  62. AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
  63. AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
  64. [ac_save_CFLAGS="$CFLAGS"
  65. CFLAGS="$CFLAGS $1 -Werror"
  66. AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])],
  67. [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
  68. [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
  69. CFLAGS="$ac_save_CFLAGS"
  70. ])
  71. AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
  72. [$2], [$3])
  73. ])
  74. # CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found])
  75. # Check for CFLAG and appends them to CFLAGS if supported
  76. AC_DEFUN([CC_CHECK_CFLAG_APPEND], [
  77. AC_CACHE_CHECK([if $CC supports -Wno-$1 flag],
  78. AS_TR_SH([cc_cv_cflags_-W$1]),
  79. CC_CHECK_CFLAGS_SILENT([-W$1]) #gcc is stupid. It does not fail with the -W-no option for backwards compat but then shows the error "in case something goes wrong".
  80. )
  81. AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_-W$1])[ = xyes],
  82. [CFLAGS="$CFLAGS -Wno-$1"; $2], [$3])
  83. ])
  84. # We make heavy use of this, llvm/gcc and gcc-9 give warnings so disable.
  85. CC_CHECK_CFLAG_APPEND([address-of-packed-member])
  86. # Use Linux interface name unless the OS has a different preference
  87. DEFAULT_INTERFACE="\"eth0\""
  88. funcstocheck="getnameinfo gethostname gethostbyname gethostbyaddr getaddrinfo getaddrinfo_a"
  89. # Srcdir in a form that native compiler understands (i.e. DOS path on W32)
  90. native_srcdir=$srcdir
  91. OLD_LDFLAGS="$LDFLAGS"
  92. LDFLAGS="$LDFLAGS -Wl,--unresolved-symbols=report-all"
  93. # Check system type
  94. AS_CASE(["$host_os"],
  95. [*darwin* | *rhapsody* | *macosx*],[
  96. AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system])
  97. CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
  98. CFLAGS="-fno-common $CFLAGS"
  99. LDFLAGS="$OLD_LDFLAGS"
  100. AC_MSG_WARN([WARNING: The VPN application cannot be compiled on your OS])
  101. AC_CHECK_LIB(intl, gettext)
  102. build_target="darwin"
  103. DEFAULT_INTERFACE="\"en0\""
  104. LIBPREFIX=
  105. DLLDIR=lib
  106. UNIXONLY="#"
  107. ],
  108. [linux*],[
  109. AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
  110. build_target="linux"
  111. LIBPREFIX=
  112. DLLDIR=lib
  113. UNIXONLY="#"
  114. AC_PATH_XTRA
  115. ],
  116. [*freebsd*],[
  117. CFLAGS="-D_THREAD_SAFE $CFLAGS"
  118. build_target="freebsd"
  119. LIBPREFIX=
  120. DLLDIR=lib
  121. UNIXONLY="#"
  122. ],
  123. [*openbsd*],[
  124. LIBS=`echo $LIBS | sed -e "s/-ldl//"`
  125. build_target="openbsd"
  126. LIBPREFIX=
  127. DLLDIR=lib
  128. UNIXONLY="#"
  129. ],
  130. [*netbsd*],[
  131. build_target="netbsd"
  132. LIBPREFIX=
  133. DLLDIR=lib
  134. UNIXONLY="#"
  135. ],
  136. [*solaris*],[
  137. AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
  138. AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
  139. AC_CHECK_LIB(resolv, res_init)
  140. AC_CHECK_LIB(rt, nanosleep)
  141. build_target="solaris"
  142. LIBPREFIX=
  143. DLLDIR=lib
  144. UNIXONLY="#"
  145. ],
  146. [*arm-linux*],[
  147. AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
  148. CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
  149. build_target="linux"
  150. LIBPREFIX=
  151. DLLDIR=lib
  152. UNIXONLY="#"
  153. ],
  154. [gnu*],[
  155. AC_DEFINE_UNQUOTED(GNU,1,[This is a GNU system])
  156. build_target="gnu"
  157. UNIXONLY="#"
  158. ],
  159. [
  160. AC_MSG_RESULT(Unrecognised OS $host_os)
  161. AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
  162. UNIXONLY=""
  163. ])
  164. AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface])
  165. AC_SUBST(DEFAULT_INTERFACE)
  166. # Disable TCP-based IPC on systems that support UNIX domain
  167. # sockets in default configuratin:
  168. AC_SUBST(UNIXONLY)
  169. AC_MSG_CHECKING([for build target])
  170. AM_CONDITIONAL(DARWIN, test "$build_target" = "darwin")
  171. AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris")
  172. AM_CONDITIONAL(XNETBSD, test "$build_target" = "netbsd")
  173. AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd")
  174. AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd")
  175. AM_CONDITIONAL(LINUX, test "$build_target" = "linux")
  176. AM_CONDITIONAL(GNU, test "$build_target" = "gnu")
  177. AC_MSG_RESULT([$build_target])
  178. AC_SUBST(build_target)
  179. AM_CONDITIONAL([am__fastdepOBJC], false)
  180. AC_UNALIGNED_64_ACCESS
  181. # some other checks for standard libs
  182. AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
  183. AC_SEARCH_LIBS([memrchr], [],
  184. AC_DEFINE(HAVE_MEMRCHR,1,[memrchr supported]), [])
  185. AC_SEARCH_LIBS([memset_s], [],
  186. AC_DEFINE(HAVE_MEMSET_S,1,[memset_s supported]), [])
  187. AC_SEARCH_LIBS([memset_s], [],
  188. AC_DEFINE(HAVE_EXPLICIT_BZERO,1,[explicit_bzero supported]), [])
  189. AC_CHECK_LIB(socket, socket)
  190. AC_CHECK_LIB(m, log)
  191. AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
  192. AC_CHECK_PROG(VAR_GETOPT_BINARY, getopt, true, false)
  193. AM_CONDITIONAL(HAVE_GETOPT_BINARY, $VAR_GETOPT_BINARY)
  194. AC_CHECK_PROGS(PKG_CONFIG, [pkgconf, pkg-config], false)
  195. AM_CONDITIONAL(HAVE_PKG_CONFIG, test x$PKG_CONFIG != xfalse)
  196. AC_CHECK_PROG(VAR_SSH_BINARY, ssh, true, false)
  197. AM_CONDITIONAL(HAVE_SSH_BINARY, $VAR_SSH_BINARY)
  198. AC_MSG_CHECKING(for SSH key)
  199. AM_CONDITIONAL(HAVE_SSH_KEY, ssh -D 12345 -o "BatchMode yes" -o "UserKnownHostsFile /tmp/gnunet_test_cosks_ssh_garbage" -o "StrictHostKeyChecking no" 127.0.0.1 echo -n)
  200. if test -f /tmp/gnunet_test_cosks_ssh_garbage; then
  201. rm -f /tmp/gnunet_test_cosks_ssh_garbage
  202. fi
  203. # autotools' m4 for python has no maximum version!
  204. # python3.4 - python3.8 for tests (3.8 unchecked)
  205. # TODO: document how to override the lowest version
  206. # TODO: found by this.
  207. m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.4 python3.5 python3.6 python3.7 python3.8 python])
  208. AM_PATH_PYTHON([3.4],, [:])
  209. AC_SUBST([PYTHON])
  210. AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
  211. # perl
  212. AC_PATH_PROG( PERL, perl, ,
  213. $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
  214. AC_SUBST([PERL])
  215. # iptables is a soft requirement to run tests
  216. AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false)
  217. AS_IF([test x"$VAR_IPTABLES_BINARY" = x"false"],
  218. [AS_IF([test -x "/sbin/iptables"],
  219. [VAR_IPTABLES_BINARY="/sbin/iptables"],
  220. [AS_IF([test -x "/usr/sbin/iptables"],
  221. [VAR_IPTABLES_BINARY="/usr/sbin/iptables"])])])
  222. AS_IF([test x"$VAR_IPTABLES_BINARY" != x"false"],
  223. [AC_DEFINE_UNQUOTED([IPTABLES], "$VAR_IPTABLES_BINARY", [Path to iptables])],
  224. [AC_MSG_WARN([warning: 'iptables' not found.])])
  225. # ip6tables is a soft requirement for some features
  226. AC_PATH_TARGET_TOOL(VAR_IP6TABLES_BINARY, ip6tables, false)
  227. AS_IF([test x"$VAR_IP6TABLES_BINARY" = x"false"],
  228. [AS_IF([test -x "/sbin/ip6tables"],
  229. [VAR_IP6TABLES_BINARY="/sbin/ip6tables"],
  230. [AS_IF([test -x "/usr/sbin/ip6tables"],
  231. [VAR_IP6TABLES_BINARY="/usr/sbin/ip6tables"])])])
  232. AS_IF([test x"$VAR_IP6TABLES_BINARY" != x"false"],
  233. [AC_DEFINE_UNQUOTED([IP6TABLES], "$VAR_IP6TABLES_BINARY", [Path to ip6tables])],
  234. [AC_MSG_WARN([warning: 'ip6tables' not found.])])
  235. # ip is a soft requirement for some features
  236. AC_PATH_TARGET_TOOL(VAR_IP_BINARY, ip, false)
  237. AS_IF([test x"$VAR_IP_BINARY" = x"false"],
  238. [AS_IF([test -x "/sbin/ip"],
  239. [VAR_IP_BINARY="/sbin/ip"],
  240. [AS_IF([test -x "/usr/sbin/ip"],
  241. [VAR_IP_BINARY="/usr/sbin/ip"])])])
  242. AS_IF([test x"$VAR_IP_BINARY" != x"false"],
  243. [AC_DEFINE_UNQUOTED([PATH_TO_IP], "$VAR_IP_BINARY", [Path to ip])],
  244. [AC_MSG_WARN([warning: 'ip' not found.])])
  245. # locate 'ifconfig'
  246. AC_PATH_TARGET_TOOL(VAR_IFCONFIG_BINARY, ifconfig, false)
  247. AC_CHECK_PROG(VAR_IFCONFIG_BINARY, ifconfig, true, false)
  248. AS_IF([test x"$VAR_IFCONFIG_BINARY" = x"false"],
  249. [AS_IF([test -x "/sbin/ifconfig"],
  250. [VAR_IFCONFIG_BINARY="/sbin/ifconfig"],
  251. [AS_IF([test -x "/usr/sbin/ifconfig"],
  252. [VAR_IFCONFIG_BINARY="/usr/sbin/ifconfig"])])])
  253. AS_IF([test x"$VAR_IFCONFIG_BINARY" != x"false"],
  254. [AC_DEFINE_UNQUOTED([IFCONFIG], "$VAR_IFCONFIG_BINARY", [Path to ifconfig])],
  255. [AC_MSG_WARN(['ifconfig' not found.])])
  256. AC_PATH_TARGET_TOOL(VAR_SYSCTL_BINARY, sysctl, false)
  257. AC_CHECK_PROG(VAR_SYSCTL_BINARY, sysctl, true, false)
  258. AS_IF([test x"$VAR_SYSCTL_BINARY" = x"false"],
  259. [AS_IF([test -x "/sbin/sysctl"],
  260. [VAR_SYSCTL_BINARY="/sbin/sysctl"],
  261. [AS_IF([test -x "/usr/sbin/sysctl"],
  262. [VAR_SYSCTL_BINARY="/usr/sbin/sysctl"])])])
  263. AS_IF([test x"$VAR_SYSCTL_BINARY" != x"false"],
  264. [AC_DEFINE_UNQUOTED([SYSCTL], "$VAR_SYSCTL_BINARY", [Path to sysctl])],
  265. [AC_MSG_WARN(['sysctl' not found.])])
  266. # miniupnpc / upnpc binary is a soft runtime requirement
  267. AC_PATH_TARGET_TOOL(VAR_UPNPC_BINARY, upnpc, false)
  268. AS_IF([test x"$VAR_UPNPC_BINARY" != x"false"],
  269. [AC_DEFINE_UNQUOTED([UPNPC], "$VAR_UPNPC_BINARY", [Path to upnpc binary])],
  270. [AC_MSG_WARN([warning: 'upnpc' binary not found.])])
  271. # checkbashisms
  272. AC_CHECK_PROGS(CHECKBASHISMS_BINARY, [checkbashisms checkbashisms.pl], false)
  273. AM_CONDITIONAL(HAVE_CHECKBASHISMS, test x$CHECKBASHISMS_BINARY != xfalse)
  274. # uncrustify
  275. # TODO: maybe add flag to pass location
  276. AC_CHECK_PROG(UNCRUSTIFY_BINARY, uncrustify, true)
  277. AM_CONDITIONAL(HAVE_UNCRUSTIFY_BINARY, $UNCRUSTIFY_BINARY)
  278. # yapf
  279. # TODO: less repetition, add flag to pass name
  280. AC_CHECK_PROGS(YAPF_BINARY, [yapf yapf3.0 yapf3.1 yapf3.2 yapf3.3 yapf3.4 yapf3.5 yapf3.6 yapf3.7 yapf3.8 yapf3.9 yapf4.0], false)
  281. AM_CONDITIONAL(HAVE_YAPF_BINARY, test x$YAPF_BINARY != xfalse)
  282. AC_CHECK_MEMBER(struct tm.tm_gmtoff,
  283. [AC_DEFINE(HAVE_TM_GMTOFF, 1,
  284. [Define if struct tm has the tm_gmtoff member.])],
  285. ,
  286. [#include <time.h>])
  287. # 'save' libs; only those libs found so far will be
  288. # linked against _everywhere_. For the others, we
  289. # will be more selective!
  290. SAVE_LIBS=$LIBS
  291. have_addrinfo_a=0
  292. AC_CHECK_LIB(anl,
  293. getaddrinfo_a,
  294. [have_addrinfo_a=1 AC_DEFINE(HAVE_GETADDRINFO_A,
  295. 1,
  296. [getaddrinfo_a supported])])
  297. AM_CONDITIONAL(HAVE_GETADDRINFO_A,
  298. [test "$have_addrinfo_a" = 1])
  299. # libgcrypt
  300. gcrypt=0
  301. NEED_LIBGCRYPT_API=1
  302. NEED_LIBGCRYPT_VERSION=1.6.0
  303. AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", gcrypt=1)
  304. AC_CHECK_DECLS([gcry_mpi_set_opaque_copy], [], [], [[#include <gcrypt.h>]])
  305. AS_IF([test $gcrypt = 0],
  306. [
  307. AC_MSG_ERROR([[
  308. ***
  309. *** You need libgcrypt to build this program.
  310. *** This library is for example available at
  311. *** ftp://ftp.gnupg.org/gcrypt/libgcrypt/.
  312. *** At least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API)
  313. *** is required.
  314. ***]])
  315. ])
  316. AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [required libgcrypt version])
  317. AC_CHECK_DECLS([struct in6_ifreq], [], [], [[#include <linux/if_tun.h>]])
  318. # should the build process be building the documentation?
  319. AC_MSG_CHECKING(whether to build documentation)
  320. AC_ARG_ENABLE([documentation],
  321. [AS_HELP_STRING([--disable-documentation],
  322. [do not build the documentation])],
  323. [documentation=${enableval}],
  324. [documentation=yes])
  325. AC_MSG_RESULT($documentation)
  326. AS_IF([test "x$documentation" = "xyes"],
  327. [AM_CONDITIONAL([DOCUMENTATION],
  328. true)
  329. AC_DEFINE([DOCUMENTATION],
  330. [1],
  331. [Building the documentation])],
  332. [AM_CONDITIONAL([DOCUMENTATION],
  333. false)
  334. AC_DEFINE([DOCUMENTATION],
  335. [0],
  336. [Not building the documentation])])
  337. # COMMENT: Check whether to transpile texinfo to mdoc.
  338. # COMMENT: This is TRUE when --enable-texi2mdoc-generation
  339. # COMMENT: but ERRORS when texi2mdoc binary is missing in your $PATH
  340. # COMMENT: and makes the configure fail if it is missing.
  341. # COMMENT: Consequential the DEFINE and CONDITIONAL are set to true.
  342. # COMMENT: This is FALSE when --disable-texi2mdoc-generation was set
  343. # COMMENT: or nothing was set (this is the default).
  344. # COMMENT: There are 2 nested AS_IFs because we need to catch the
  345. # COMMENT: potential non-existence of the texi2mdoc binary.
  346. # COMMENT: Default return value / setting: no
  347. AC_MSG_CHECKING(whether to include generated texi2mdoc output in installation)
  348. AC_ARG_ENABLE([texi2mdoc-generation],
  349. [AS_HELP_STRING([--enable-texi2mdoc-generation],
  350. [include generated texi2mdoc output in installation])],
  351. [texi2mdoc_generation=${enableval}],
  352. [texi2mdoc_generation=no])
  353. AC_MSG_RESULT($texi2mdoc_generation)
  354. AS_IF([test "x$texi2mdoc_generation" = "xyes"],
  355. [AS_IF([test "$texi2mdoc" = 0],
  356. [AC_MSG_WARN([ERROR: transpiled mdoc output requires texi2mdoc.])
  357. AC_MSG_WARN([ERROR: texi2mdoc can be obtained via your])
  358. AC_MSG_WARN([ERROR: Operating System package manager or from])
  359. AC_MSG_WARN([ERROR: https://mandoc.bsd.lv/texi2mdoc/])],
  360. [AM_CONDITIONAL([TEXI2MDOC_GENERATION],true)
  361. AC_DEFINE([TEXI2MDOC_GENERATION],
  362. [1],
  363. [Building section 7 mdoc output])])],
  364. [AM_CONDITIONAL([TEXI2MDOC_GENERATION],
  365. false)
  366. AC_DEFINE([TEXI2MDOC_GENERATION],
  367. [0],
  368. [Not building section 7 mdoc output])])
  369. # test for texi2mdoc (the binary, not the script distributed
  370. # with autogen)
  371. # TODO: refactor this and the check above.
  372. AC_MSG_CHECKING(for texi2mdoc binary)
  373. AC_CHECK_PROGS(TEXI2MDOC_BINARY, [texi2mdoc], false)
  374. AM_CONDITIONAL(HAVE_TEXI2MDOC, test x$TEXI2MDOC_BINARY != xfalse)
  375. # texi2man is a tool which needs to be investigated and
  376. # is probably incompatible to texi2mdoc in invocation.
  377. # Detection at this point only serves as a reminder that
  378. # I will work this into the build-system.
  379. AC_MSG_CHECKING(for texi2man perl script)
  380. AC_CHECK_PROGS(TEXI2MAN_SCRIPT, [texi2man], false)
  381. AM_CONDITIONAL(HAVE_TEXI2MAN, test x$TEXI2MAN_SCRIPT != xfalse)
  382. # test for mandoc
  383. AC_MSG_CHECKING(for mandoc binary)
  384. AC_CHECK_PROGS(MANDOC_BINARY, [mandoc], false)
  385. AM_CONDITIONAL(HAVE_MANDOC, test x$MANDOC_BINARY != xfalse)
  386. # should the build process be building only the documentation?
  387. AC_MSG_CHECKING(whether to build only documentation)
  388. AC_ARG_ENABLE([documentation-only],
  389. [AS_HELP_STRING([--enable-documentation-only],
  390. [build only the documentation])],
  391. [documentation_only=${enableval}],
  392. [documentation_only=no])
  393. AC_MSG_RESULT($documentation_only)
  394. AS_IF([test "x$documentation_only" = "xyes"],
  395. [
  396. AM_CONDITIONAL([DOCUMENTATION_ONLY],true)
  397. AC_DEFINE([DOCUMENTATION_ONLY],[1],[Building only the documentation])
  398. ],[
  399. AM_CONDITIONAL([DOCUMENTATION_ONLY],false)
  400. AC_DEFINE([DOCUMENTATION_ONLY],[0],[Doing a normal build, more than only documentation])
  401. ])
  402. # should the build process be including the manpages? (default: yes)
  403. AC_MSG_CHECKING(whether to include man pages)
  404. AC_ARG_ENABLE([include-manpages],
  405. [AS_HELP_STRING([--disable-include-manpages],
  406. [Do not include the man pages in build and installation])],
  407. [include_manpages=${enableval}],
  408. [include_manpages=yes])
  409. AC_MSG_RESULT($include_manpages)
  410. AS_IF([test "x$include_manpages" = "xyes"],
  411. [
  412. AM_CONDITIONAL([INCLUDE_MANPAGES],true)
  413. AC_DEFINE([INCLUDE_MANPAGES],[1],[Including the man pages in the build and installation])
  414. ],[
  415. AM_CONDITIONAL([INCLUDE_MANPAGES],false)
  416. AC_DEFINE([INCLUDE_MANPAGES],[0],[Not including the man pages in the build and installation])
  417. ])
  418. # Do we have texinfo4? If yes, it is used to set texinfo4 specific switches
  419. # (not syntax!) to the commandline tools which generate the html. If not,
  420. # texinfo5 switches are used. This comes with no version checks, is
  421. # enabled only at distributors action (ie defaults to "no").
  422. # Mantis #3914 for more details (https://bugs.gnunet.org/view.php?id=3914)
  423. AC_MSG_CHECKING(whether to enable texinfo4 switches)
  424. AC_ARG_ENABLE([texinfo4],
  425. [AS_HELP_STRING([--enable-texinfo4], [Use texinfo version 4 specific switches])],
  426. [activate_texinfo4=${enableval}],
  427. [activate_texinfo4=no])
  428. AC_MSG_RESULT($activate_texinfo4)
  429. AS_IF([test "x$activate_texinfo4" = "xyes"],
  430. [
  431. AM_CONDITIONAL([ACTIVATE_TEXINFO4],true)
  432. AC_DEFINE([ACTIVATE_TEXINFO4],[1],[Using texinfo version 4 specific switches])
  433. ],[
  434. AM_CONDITIONAL([ACTIVATE_TEXINFO4],false)
  435. AC_DEFINE([INCLUDE_MANPAGES],[0],[Using texinfo version 5 or later switches])
  436. ])
  437. # Adam shostack suggests the following for Windows:
  438. # -D_FORTIFY_SOURCE=2 -fstack-protector-all
  439. AC_ARG_ENABLE(gcc-hardening,
  440. AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks),
  441. [AS_IF([test x$enableval = xyes],[
  442. CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all"
  443. CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector"
  444. CFLAGS="$CFLAGS --param ssp-buffer-size=1"
  445. LDFLAGS="$LDFLAGS -pie"
  446. ])])
  447. # Linker hardening options
  448. # Currently these options are ELF specific - you can't use this with MacOSX
  449. AC_ARG_ENABLE(linker-hardening,
  450. AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups),
  451. [AS_IF([test x$enableval = xyes],
  452. [LDFLAGS="$LDFLAGS -z relro -z now"])])
  453. AC_ARG_ENABLE(sanitizer,
  454. AS_HELP_STRING(--enable-sanitizer, enable Address Sanitizer and Undefined Behavior Sanitizer),
  455. [AS_IF([test x$enableval = xyes],[
  456. LDFLAGS="$CFLAGS -fsanitize=address,undefined -fno-omit-frame-pointer"
  457. ])])
  458. extra_logging=GNUNET_NO
  459. AC_ARG_ENABLE([logging],
  460. AS_HELP_STRING([--enable-logging@<:@=value@:>@],[Enable logging calls. Possible values: yes,no,verbose,veryverbose ('yes' is the default)]),
  461. [AS_IF([test "x$enableval" = "xyes"], [],
  462. [test "x$enableval" = "xno"], [AC_DEFINE([GNUNET_CULL_LOGGING],[],[Define to cull all logging calls])],
  463. [test "x$enableval" = "xverbose"], [extra_logging=GNUNET_YES]
  464. [test "x$enableval" = "xveryverbose"], [extra_logging=\(GNUNET_YES+1\)])
  465. ], [])
  466. AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
  467. # should memory poisoning be enabled?
  468. AC_MSG_CHECKING(whether to poison freed memory)
  469. AC_ARG_ENABLE([poisoning],
  470. [AS_HELP_STRING([--enable-poisoning], [enable poisoning of freed memory (good for debugging)])],
  471. [enable_poisoning=${enableval}],
  472. [
  473. AS_IF([test "x$extra_logging" != "xGNUNET_NO"],
  474. [enable_poisoning="defaults to yes (extra logging is enabled)"],
  475. [enable_poisoning=no])
  476. ])
  477. AC_MSG_RESULT($enable_poisoning)
  478. AS_IF([test ! "x$enable_poisoning" = "xno"],
  479. [enable_poisoning=1],
  480. [enable_poisoning=0])
  481. AC_DEFINE_UNQUOTED([ENABLE_POISONING],[$enable_poisoning],[1 if freed memory should be poisoned, 0 otherwise])
  482. AS_IF([test $build = $target],
  483. [
  484. AC_MSG_CHECKING([for working HMAC])
  485. AC_LANG_PUSH(C)
  486. LIBS="$LIBS $LIBGCRYPT_LIBS"
  487. CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
  488. AC_RUN_IFELSE(
  489. [AC_LANG_PROGRAM([#include <gcrypt.h>
  490. #include <stdio.h>], [[
  491. gcry_md_hd_t mac;
  492. unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
  493. 0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
  494. 0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
  495. unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
  496. unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
  497. 0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
  498. 0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
  499. 0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
  500. 0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
  501. 0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
  502. if (!gcry_check_version (GCRYPT_VERSION))
  503. {
  504. fprintf (stderr, "Version mismatch %s <-> %s \n", gcry_check_version (NULL), GCRYPT_VERSION);
  505. return 1;
  506. }
  507. gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
  508. gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
  509. if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
  510. {
  511. fprintf (stderr, "gcry_md_open error\n");
  512. return 2;
  513. }
  514. gcry_md_setkey (mac, key, sizeof (key));
  515. gcry_md_write (mac, data, sizeof (data));
  516. if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
  517. {
  518. fprintf (stderr, "memcmp error\n");
  519. return 3;
  520. }
  521. gcry_md_close (mac);
  522. return 0;
  523. ]])],
  524. [AC_MSG_RESULT([yes])],
  525. [
  526. RESULT=$?
  527. if test $RESULT = 3
  528. then
  529. AC_MSG_FAILURE([HMAC test vector does not match. This is a known problem with libgcrypt 1.2.2 on Windows and fixed in 1.4.6.])
  530. fi
  531. if test $RESULT = 2
  532. then
  533. AC_MSG_FAILURE([HMAC test failed])
  534. fi
  535. if test $RESULT = 1
  536. then
  537. AC_MSG_FAILURE([libgcrypt header version does not match library version])
  538. fi
  539. ],
  540. [AC_MSG_RESULT([cross compiling, test skipped])])
  541. AC_LANG_POP(C)
  542. ]) # $build = $target
  543. # check for bluetooth library
  544. bluetooth=0
  545. AC_MSG_CHECKING(for libbluetooth)
  546. AC_ARG_WITH(libbluetooth,
  547. [ --with-libbluetooth=PREFIX (base of libbluetooth installation)],
  548. [AC_MSG_RESULT([$with_libbluetooth])
  549. AS_CASE([$with_libbluetooth],
  550. [no],[],
  551. [yes],[
  552. CHECK_LIBHEADER(BLUETOOTH,
  553. bluetooth,
  554. ba2str,
  555. bluetooth/bluetooth.h,
  556. bluetooth=1,)
  557. ],[
  558. LDFLAGS="-L$with_libbluetooth/lib $LDFLAGS"
  559. CPPFLAGS="-I$with_libbluetooth/include $CPPFLAGS"
  560. AC_CHECK_HEADERS(bluetooth/bluetooth.h,
  561. AC_CHECK_LIB([bluetooth],
  562. [ba2str],
  563. EXT_LIB_PATH="-L$with_libbluetooth/lib $EXT_LIB_PATH"
  564. bluetooth=1))
  565. ])
  566. ],
  567. [AC_MSG_RESULT([--with-libbluetooth not specified])
  568. CHECK_LIBHEADER(BLUETOOTH,
  569. bluetooth,
  570. ba2str,
  571. bluetooth/bluetooth.h,
  572. bluetooth=1,)])
  573. AM_CONDITIONAL(HAVE_LIBBLUETOOTH, [test "$bluetooth" = 1])
  574. AS_IF([test "$bluetooth" = 1],
  575. [AC_DEFINE([HAVE_LIBBLUETOOTH],[1],[Have bluetooth library])],
  576. [AC_DEFINE([HAVE_LIBBLUETOOTH],[0],[Lacking bluetooth library])])
  577. # check for zbar library
  578. # NOTE: Do not add checks for: -lSM, -lICE, -lX11, -lXv and -ljpeg
  579. # NOTE: they must be provided by the build environment, not the
  580. # NOTE: build-system of gnunet, as they are 2nd or 3rd level dependencies.
  581. zbar=0
  582. AC_MSG_CHECKING(for libzbar)
  583. AC_ARG_WITH(zbar,
  584. [ --with-zbar=PREFIX (base of libzbar installation)],
  585. [AC_MSG_RESULT([$with_zbar])
  586. AS_CASE([$with_zbar],
  587. [no],[],
  588. [yes],[CHECK_LIBHEADER(ZBAR, zbar, zbar_processor_create, zbar.h,zbar=1,,)],
  589. [
  590. LDFLAGS="-L$with_zbar/lib $LDFLAGS"
  591. CPPFLAGS="-I$with_zbar/include $CPPFLAGS"
  592. AC_CHECK_HEADERS(zbar.h,
  593. AC_CHECK_LIB([zbar], [zbar_processor_create],
  594. EXT_LIB_PATH="-L$with_zbar/lib $EXT_LIB_PATH"
  595. zbar=1))
  596. ])
  597. ],
  598. [AC_MSG_RESULT([--with-zbar not specified])
  599. CHECK_LIBHEADER(ZBAR, zbar, zbar_processor_create, zbar.h,zbar=1,,)])
  600. AM_CONDITIONAL(HAVE_ZBAR, [test "$zbar" = 1])
  601. AS_IF([test "x$zbar" = x1],
  602. [AC_DEFINE([HAVE_ZBAR],[1],[Have zbar library])],
  603. [AC_DEFINE([HAVE_ZBAR],[0],[Lacking zbar library])])
  604. # check for jansson library
  605. jansson=0
  606. AC_MSG_CHECKING(for libjansson)
  607. AC_ARG_WITH(jansson,
  608. [ --with-jansson=PREFIX (base of libjansson installation)],
  609. [AC_MSG_RESULT([$with_jansson])
  610. AS_CASE([$with_jansson],
  611. [no],[],
  612. [yes],[
  613. CHECK_LIBHEADER(JANSSON, jansson, json_loads, jansson.h,jansson=1,)
  614. ],[
  615. LDFLAGS="-L$with_jansson/lib $LDFLAGS"
  616. CPPFLAGS="-I$with_jansson/include $CPPFLAGS"
  617. AC_CHECK_HEADERS(jansson.h,
  618. AC_CHECK_LIB([jansson], [json_loads],
  619. EXT_LIB_PATH="-L$with_jansson/lib $EXT_LIB_PATH"
  620. jansson=1))
  621. ])
  622. ],
  623. [AC_MSG_RESULT([--with-jansson not specified])
  624. CHECK_LIBHEADER(JANSSON, jansson, json_loads, jansson.h,jansson=1,)])
  625. AM_CONDITIONAL(HAVE_JANSSON, [test "$jansson" = 1])
  626. AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
  627. AS_IF([test "x$jansson" = x1],
  628. [AC_DEFINE([HAVE_JANSSON],[1],[Have jansson library])],
  629. [AC_DEFINE([HAVE_JANSSON],[0],[Lacking jansson library])])
  630. # check for libpulse(audio) library
  631. pulse=0
  632. libpulse_msg="no"
  633. AC_MSG_CHECKING(for libpulse)
  634. # TODO: --with-libpulse or --with-pulseaudio? What is more established
  635. # TODO: in this context?
  636. AC_ARG_WITH(libpulse,
  637. [ --with-libpulse=PREFIX (base of libpulse installation)],
  638. [AC_MSG_RESULT([$with_libpulse])
  639. AS_CASE([$with_libpulse],
  640. [no],[],
  641. [yes],[
  642. CHECK_LIBHEADER(LIBPULSE,
  643. pulse,
  644. pa_stream_peek,
  645. pulse/simple.h,
  646. pulse=1,)
  647. ],[
  648. LDFLAGS="-L$with_libpulse/lib $LDFLAGS"
  649. CPPFLAGS="-I$with_libpulse/include $CPPFLAGS"
  650. AC_CHECK_HEADERS(pulse/simple.h,
  651. AC_CHECK_LIB([pulse],
  652. [pa_stream_peek],
  653. EXT_LIB_PATH="-L$with_libpulse/lib $EXT_LIB_PATH"
  654. pulse=1))
  655. ])
  656. ],
  657. [AC_MSG_RESULT([--with-libpulse not specified])
  658. CHECK_LIBHEADER(LIBPULSE,
  659. pulse,
  660. pa_stream_peek,
  661. pulse/simple.h,
  662. pulse=1,)])
  663. AM_CONDITIONAL(HAVE_PULSE, [test "$pulse" = 1])
  664. AS_IF([test x"$pulse" = x1],
  665. [AC_DEFINE([HAVE_PULSE],[1],[Have libpulse(audio) library])
  666. libpulse_msg="yes"],
  667. [AC_DEFINE([HAVE_PULSE],[0],[Lacking libpulse(audio) library])
  668. libpulse_msg="no"])
  669. # check for libopus(audio) library
  670. opus=0
  671. libopus_msg="no"
  672. AC_MSG_CHECKING(for libopus)
  673. AC_ARG_WITH(libopus,
  674. [ --with-libopus=PREFIX (base of libopus installation)],
  675. [AC_MSG_RESULT([$with_libopus])
  676. AS_CASE([$with_libopus],
  677. [no],[],
  678. [yes],[
  679. CHECK_LIBHEADER(LIBOPUS,
  680. opus,
  681. opus_decode_float,
  682. opus/opus.h,
  683. AC_CHECK_DECL([OPUS_SET_GAIN],
  684. [opus=1],
  685. [],
  686. [[
  687. #include <opus/opus.h>
  688. ]]))
  689. ],[
  690. LDFLAGS="-L$with_libopus/lib $LDFLAGS"
  691. CPPFLAGS="-I$with_libopus/include $CPPFLAGS"
  692. AC_CHECK_HEADERS(opus/opus.h,
  693. AC_CHECK_LIB([opus],
  694. [OPUS_SET_GAIN],
  695. EXT_LIB_PATH="-L$with_libopus/lib $EXT_LIB_PATH"
  696. opus=1))
  697. ])
  698. ],
  699. [AC_MSG_RESULT([--with-libopus not specified])
  700. CHECK_LIBHEADER(LIBOPUS,
  701. opus,
  702. opus_decode_float,
  703. opus/opus.h,
  704. AC_CHECK_DECL([OPUS_SET_GAIN],
  705. [opus=1],
  706. [],
  707. [[
  708. #include <opus/opus.h>
  709. ]]))])
  710. AM_CONDITIONAL(HAVE_OPUS, [test "$opus" = 1])
  711. AS_IF([test "x$opus" = x1],
  712. [AC_DEFINE([HAVE_OPUS],[1],[Have libopus library])
  713. libopus_msg="yes"],
  714. [AC_DEFINE([HAVE_OPUS],[0],[Lacking libopus library])
  715. libopus_msg="no"])
  716. # libogg
  717. AC_MSG_CHECKING(for libogg)
  718. AC_ARG_WITH(libogg,
  719. [ --with-libogg=PREFIX (base of libogg installation)],
  720. [AC_MSG_RESULT([$with_libogg])
  721. AS_CASE([$with_libogg],
  722. [no],[],
  723. [yes],[
  724. CHECK_LIBHEADER(LIBOGG,
  725. ogg,
  726. ogg_stream_flush_fill,
  727. ogg/ogg.h,
  728. ogg=1,)
  729. ],[
  730. LDFLAGS="-L$with_libogg/lib $LDFLAGS"
  731. CPPFLAGS="-I$with_libogg/include $CPPFLAGS"
  732. AC_CHECK_HEADERS(ogg/ogg.h,
  733. AC_CHECK_LIB([ogg],
  734. [ogg_stream_flush_fill],
  735. EXT_LIB_PATH="-L$with_libogg/lib $EXT_LIB_PATH"
  736. ogg=1))
  737. ])
  738. ],
  739. [AC_MSG_RESULT([--with-libogg not specified])
  740. CHECK_LIBHEADER(LIBOGG,
  741. ogg,
  742. ogg_stream_flush_fill,
  743. ogg/ogg.h,
  744. ogg=1,)])
  745. AM_CONDITIONAL(HAVE_OGG, [test "$ogg" = 1])
  746. AS_IF([test x"$ogg" = x1],
  747. [AC_DEFINE([HAVE_OGG],[1],[Have ogg])]
  748. [AC_DEFINE([HAVE_OGG],[0],[Lacking ogg])])
  749. PKG_CHECK_MODULES([GLIB],
  750. [glib-2.0],
  751. [# check for pbc library
  752. pbc=0
  753. AC_CHECK_HEADER([pbc/pbc.h],pbc=1)
  754. AC_CHECK_HEADER([gabe.h],abe=1)
  755. AM_CONDITIONAL(HAVE_PBC, [test "x$pbc" = x1])
  756. AM_CONDITIONAL(HAVE_ABE, [test "x$abe" = x1])
  757. AS_IF([test "x$pbc" = x1],
  758. [AC_DEFINE([HAVE_PBC],[1],[Have pbc library])],
  759. [AC_DEFINE([HAVE_PBC],[0],[Lacking pbc library])])
  760. AS_IF([test "x$abe" = x1],
  761. [AC_DEFINE([HAVE_ABE],[1],[Have ABE library])],
  762. [AC_DEFINE([HAVE_ABE],[0],[Lacking ABE library])])],
  763. [# glib-2 not found
  764. AM_CONDITIONAL(HAVE_PBC, [false])
  765. AM_CONDITIONAL(HAVE_ABE, [false])
  766. AC_DEFINE([HAVE_PBC],[0],[Lacking glib library])])
  767. gst=0
  768. gstreamer_msg="no"
  769. AC_MSG_CHECKING(for gstreamer)
  770. PKG_CHECK_MODULES(
  771. [GST],
  772. [glib-2.0 gobject-2.0 gstreamer-1.0 gstreamer-app-1.0 gstreamer-audio-1.0],
  773. [gst=1
  774. gstreamer_msg="yes"],
  775. [gst=0])
  776. # conversation
  777. AC_MSG_CHECKING(conversation feature set to build)
  778. AS_IF([test "x$pulse" != "x1" -o "x$opus" != "x1" -o "x$ogg" != "x1"],[
  779. AS_IF([test "x$gst" != "x1"],[
  780. conversation_backend=none
  781. AM_CONDITIONAL(BUILD_PULSE_HELPERS, false)
  782. AM_CONDITIONAL(BUILD_GST_HELPERS, false)
  783. AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
  784. ],[
  785. conversation_backend=gst
  786. AM_CONDITIONAL(BUILD_PULSE_HELPERS, false)
  787. AM_CONDITIONAL(BUILD_GST_HELPERS, true)
  788. AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
  789. ])
  790. ],[
  791. conversation_backend=pulse
  792. AM_CONDITIONAL(BUILD_PULSE_HELPERS, true)
  793. AM_CONDITIONAL(BUILD_GST_HELPERS, false)
  794. AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
  795. ])
  796. AS_IF([test "x$conversation_backend" = "xnone"],
  797. AM_CONDITIONAL(BUILD_CONVERSATION, false),
  798. AM_CONDITIONAL(BUILD_CONVERSATION, true))
  799. # libgnurl
  800. LIBGNURL_CHECK_CONFIG(,7.34.0,gnurl=1,gnurl=0)
  801. SAVE_CPPFLAGS=$CPPFLAGS
  802. CPPFLAGS="$LIBGNURL_CPPFLAGS $LIBCURL_CPPFLAGS $CPPFLAGS"
  803. LIBS="$LIBGNURL $LIBCURL $LIBS"
  804. # libcurl-gnutls
  805. LIBCURL_CHECK_CONFIG(,7.34.0,[curl=true],[curl=false])
  806. AS_IF([test "x$curl" = xtrue],[
  807. AC_CHECK_HEADER([curl/curl.h],
  808. AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=true],[curl=false],[[#include <curl/curl.h>]]),
  809. [curl=false])
  810. # need libcurl-gnutls.so, everything else is not acceptable
  811. AC_CHECK_LIB([curl-gnutls],[curl_easy_getinfo],,[curl=false])
  812. # cURL must support CURLINFO_TLS_SESSION, version >= 7.34
  813. ])
  814. # libcurl and libgnurl should be mutually exclusive
  815. AS_IF([test "$gnurl" = 1],
  816. [AM_CONDITIONAL(HAVE_LIBGNURL, true)
  817. AC_DEFINE([HAVE_LIBGNURL],[1],[Have libgnurl])
  818. AM_CONDITIONAL(HAVE_LIBCURL, false)
  819. AC_DEFINE([HAVE_LIBCURL],[0],[Lacking libcurl])],
  820. [AS_IF([test "$curl" = true],
  821. [AM_CONDITIONAL(HAVE_LIBGNURL, false)
  822. AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl])
  823. AM_CONDITIONAL(HAVE_LIBCURL, true)
  824. AC_DEFINE([HAVE_LIBCURL],[1],[Have libcurl])],
  825. [AC_MSG_WARN([ERROR: GNUnet requires libcurl-gnutls or gnurl >= 7.34])
  826. AM_CONDITIONAL(HAVE_LIBGNURL, false)
  827. AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl])
  828. AM_CONDITIONAL(HAVE_LIBCURL, false)
  829. AC_DEFINE([HAVE_LIBCURL],[0],[Lacking libcurl])])])
  830. AC_SEARCH_LIBS(__atomic_load_8, atomic, [have_libatomic=1 AC_DEFINE(HAVE_LIBATOMIC,1,[external libatomic])])
  831. AM_CONDITIONAL(HAVE_LIBATOMIC, [test "$have_libatomic" = 1])
  832. # restore LIBS & CPPFLAGS
  833. LIBS=$SAVE_LIBS
  834. CPPFLAGS=$SAVE_CPPFLAGS
  835. AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false])
  836. AS_IF([test x$nss = xfalse],
  837. [
  838. AM_CONDITIONAL(HAVE_GLIBCNSS, false)
  839. AC_MSG_WARN([No GNU libc nss header, will not build NSS plugin])
  840. ],[
  841. NSS_INCLUDES="
  842. #include <nss.h>
  843. "
  844. AC_CHECK_DECL([NSS_STATUS_UNAVAIL],
  845. [AM_CONDITIONAL(HAVE_GLIBCNSS, true)],
  846. [AM_CONDITIONAL(HAVE_GLIBCNSS, false)
  847. AC_MSG_WARN([No nss header fails to define NSS_STATUS_UNAVAIl, will not build NSS plugin])],
  848. [$NSS_INCLUDES])
  849. ])
  850. # test for kvm and kstat (for CPU stats under BSD/Solaris)
  851. AC_CHECK_LIB([kvm],[kvm_open])
  852. AC_CHECK_LIB([kstat],[kstat_open])
  853. # should the build process be restricted to the code required
  854. # for GNU Taler wallets?
  855. AC_MSG_CHECKING(whether to compile GNU Taler Wallet library ONLY)
  856. AC_ARG_ENABLE([taler-wallet],
  857. [AS_HELP_STRING([--enable-taler-wallet], [only compile for Taler wallet])],
  858. [taler_only=${enableval}],
  859. [taler_only=no])
  860. AC_MSG_RESULT($taler_only)
  861. AS_IF([test "x$taler_only" = "xyes"],
  862. [
  863. AM_CONDITIONAL([TALER_ONLY],true)
  864. AC_DEFINE([TALER_WALLET_ONLY],[1],[Compiling for Taler wallet])
  865. ],[
  866. AM_CONDITIONAL([TALER_ONLY],false)
  867. AC_DEFINE([TALER_WALLET_ONLY],[0],[Canonical compilation])
  868. ])
  869. # test for libextractor
  870. extractor=0
  871. AC_MSG_CHECKING(for libextractor)
  872. AC_ARG_WITH(extractor,
  873. [ --with-extractor=PREFIX (base of libextractor installation)],
  874. [AC_MSG_RESULT([$with_extractor])
  875. AS_CASE([$with_extractor],
  876. [no],[],
  877. [yes],[
  878. AC_CHECK_HEADERS([extractor.h],
  879. AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
  880. extractor=1))
  881. ],[
  882. LDFLAGS="-L$with_extractor/lib $LDFLAGS"
  883. CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
  884. AC_CHECK_HEADERS([extractor.h],
  885. AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
  886. EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
  887. extractor=1))
  888. ])
  889. ],
  890. [AC_MSG_RESULT([--with-extractor not specified])
  891. AC_CHECK_HEADERS([extractor.h],
  892. AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
  893. extractor=1))])
  894. # restore LIBS
  895. LIBS=$SAVE_LIBS
  896. AS_IF([test "$extractor" != 1],
  897. [
  898. AM_CONDITIONAL(HAVE_LIBEXTRACTOR, false)
  899. AC_DEFINE([HAVE_LIBEXTRACTOR],[0],[Lacking libextractor])
  900. ],[
  901. AM_CONDITIONAL(HAVE_LIBEXTRACTOR, true)
  902. AC_DEFINE([HAVE_LIBEXTRACTOR],[1],[Have libextractor])
  903. ])
  904. AS_IF([test "$taler_only" != yes],[
  905. # Check for libltdl header (#2999)
  906. ltdl=0
  907. AC_MSG_CHECKING(for libltdl)
  908. AC_ARG_WITH(ltdl,
  909. [AS_HELP_STRING([--with-ltdl=PREFIX],[base of libltdl installation])],
  910. [AC_MSG_RESULT([$with_ltdl])
  911. AS_CASE([$with_ltdl],
  912. [no],[],
  913. [yes],[
  914. AC_CHECK_HEADERS(ltdl.h,
  915. AC_CHECK_LIB([ltdl], [lt_dlopenext],
  916. ltdl=1))
  917. ],[
  918. LDFLAGS="-L$with_ltdl/lib $LDFLAGS"
  919. CPPFLAGS="-I$with_ltdl/include $CPPFLAGS"
  920. AC_CHECK_HEADERS(ltdl.h,
  921. AC_CHECK_LIB([ltdl], [lt_dlopenext],
  922. EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH"
  923. ltdl=1))
  924. ])
  925. ],
  926. [AC_MSG_RESULT([--with-ltdl not specified])
  927. AC_CHECK_HEADERS(ltdl.h,
  928. AC_CHECK_LIB([ltdl], [lt_dlopenext],
  929. ltdl=1))])
  930. AS_IF([test x$ltdl = x1],
  931. [
  932. AC_MSG_RESULT([libltdl found])
  933. ],[
  934. AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool).])
  935. ])
  936. # restore LIBS
  937. LIBS=$SAVE_LIBS
  938. # libidn and libidn2. The ideal goal is this:
  939. # check for libidn2, if it doesn't exist check for libidn
  940. # if both exist, prefer libidn2
  941. # if none exist, fail and message that libidn or libidn2
  942. # is required with a preference for libidn2.
  943. # TODO: What we have right here can probably be improved.
  944. AC_MSG_CHECKING(for idn or idn2)
  945. AC_MSG_CHECKING(for idn)
  946. my_with_libidn=1
  947. AC_ARG_WITH(libidn,
  948. AS_HELP_STRING([--with-libidn=pathname],
  949. [Support IDN (needs libidn)]),
  950. [],
  951. [withval="yes"])
  952. AS_IF([test x_$withval = x_yes],
  953. [AC_CHECK_HEADERS([idna.h],
  954. AC_MSG_NOTICE([Found idna.h]),
  955. AC_CHECK_HEADERS([idn/idna.h],
  956. AC_MSG_NOTICE([Found idn/idna.h]),
  957. my_with_libidn=0))],
  958. [AS_IF([test x_$withval != x_no],
  959. [CFLAGS="$CFLAGS -I$withval/include"
  960. LDFLAGS="$LDFLAGS -L$withval/lib"
  961. AC_CHECK_HEADERS([idna.h],
  962. AC_MSG_NOTICE([Found idna.h]),
  963. [AC_MSG_NOTICE([Failed to find idna.h])
  964. my_with_libidn=0])],
  965. [my_with_libidn=0])])
  966. AC_MSG_CHECKING(for idn2)
  967. my_with_libidn2=1
  968. AC_ARG_WITH(libidn2,
  969. AS_HELP_STRING([--with-libidn2=pathname],
  970. [Support IDN (needs libidn2)]),
  971. [],
  972. [withval="yes"])
  973. AS_IF([test x_$withval = x_yes],
  974. [AC_CHECK_HEADERS([idn2.h],
  975. AC_MSG_NOTICE([Found idn2.h]),
  976. AC_CHECK_HEADERS([idn2/idn2.h],
  977. AC_MSG_NOTICE([Found idn2/idn2.h]),
  978. [AC_MSG_NOTICE([Failed to find idn2.h])
  979. my_with_libidn2=0]))],
  980. [AS_IF([test x_$withval != x_no],
  981. [CFLAGS="$CFLAGS -I$withval/include"
  982. LDFLAGS="$LDFLAGS -L$withval/lib"],
  983. [my_with_libidn2=0])])
  984. AC_MSG_CHECKING([if libidn can be used])
  985. # Check for LIBIDNs
  986. there_can_only_be_one=1
  987. working_libidn1=0
  988. working_libidn2=0
  989. AS_IF([test x$my_with_libidn2 = x1],
  990. [AC_MSG_NOTICE([Checking for libidn2])
  991. AC_CHECK_LIB([idn2],
  992. [idn2_to_unicode_8z8z],
  993. [working_libidn2=1
  994. LIBS="-lidn2 $LIBS"
  995. AC_DEFINE_UNQUOTED([HAVE_LIBIDN2],
  996. [1],
  997. [Define to 1 if you have 'libidn2' (-lidn2).])],
  998. [MISSING_DEPS="${MISSING_DEPS}${MISSING_SEP}libidn2"
  999. MISSING_SEP=", "])])
  1000. AM_CONDITIONAL(HAVE_LIBIDN2, test x$working_libidn2 = x1)
  1001. AS_IF([test x$working_libidn2 = x0],
  1002. [AS_IF([test x$my_with_libidn = x1],
  1003. [AC_MSG_NOTICE([Checking for libidn])
  1004. AC_CHECK_LIB([idn],
  1005. [idna_to_ascii_8z],
  1006. [working_libidn1=1
  1007. LIBS="-lidn $LIBS"
  1008. AC_DEFINE_UNQUOTED([HAVE_LIBIDN],
  1009. [1],
  1010. [Define to 1 if you have 'libidn' (-lidn).])],
  1011. [there_can_only_be_one=0])],
  1012. [AS_IF([test x$my_with_libidn2 = x1],
  1013. [there_can_only_be_one=0
  1014. AC_MSG_FAILURE([* There can only be one libidn.
  1015. * Provide either libidn >= 1.13
  1016. * or
  1017. * libidn2 to the configure
  1018. * script via
  1019. * --with-libidn2
  1020. * --with-libidn])])])])
  1021. AM_CONDITIONAL(HAVE_LIBIDN, test x$working_libidn1 = x1)
  1022. AS_IF([test "$working_libidn1" = 0 -a "$working_libidn2" = 0],
  1023. [AC_MSG_ERROR([GNUnet requires libidn (or libidn2)])])
  1024. AS_IF([test x$there_can_only_be_one = x0],
  1025. [AC_MSG_FAILURE([Missing dependencies: $MISSING_DEPS])])
  1026. # test for zlib
  1027. SAVE_LDFLAGS=$LDFLAGS
  1028. SAVE_CPPFLAGS=$CPPFLAGS
  1029. AC_ARG_WITH(zlib,
  1030. [ --with-zlib[[=DIR]] use libz in DIR],
  1031. [AS_IF([test "$withval" = "no"],
  1032. [AC_MSG_ERROR([GNUnet requires zlib])],
  1033. [test "$withval" != "yes"],
  1034. [Z_DIR=$withval
  1035. CPPFLAGS="${CPPFLAGS} -I$withval/include"
  1036. LDFLAGS="${LDFLAGS} -L$withval/lib"])])
  1037. AC_CHECK_HEADER(zlib.h,
  1038. [],
  1039. [AC_MSG_ERROR([GNUnet requires zlib])])
  1040. AC_CHECK_LIB(z,
  1041. compress2,
  1042. [AC_DEFINE([HAVE_ZLIB],
  1043. [],
  1044. [Have compression library])
  1045. if test "x${Z_DIR}" != "x"; then
  1046. Z_CFLAGS="-I${Z_DIR}/include"
  1047. Z_LIBS="-L${Z_DIR}/lib -lz"
  1048. else
  1049. Z_LIBS="-lz"
  1050. fi],
  1051. [AC_MSG_ERROR([GNUnet requires zlib])])
  1052. AC_SUBST(Z_CFLAGS)
  1053. AC_SUBST(Z_LIBS)
  1054. AS_IF([test "$enable_shared" = "no"],
  1055. [AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])])
  1056. # restore LIBS
  1057. LIBS=$SAVE_LIBS
  1058. # end of taler-only being false
  1059. ])
  1060. # check for iconv
  1061. AM_ICONV
  1062. # test for libunistring
  1063. gl_LIBUNISTRING
  1064. AS_IF([test $HAVE_LIBUNISTRING != yes],
  1065. [AC_MSG_ERROR([GNUnet requires libunistring])])
  1066. # under emscripten, $gl_libunistring_hexversion is undefined
  1067. if test "$taler_only" != yes; then
  1068. AS_IF([test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305],
  1069. [AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])])
  1070. fi
  1071. AC_CHECK_HEADERS([unistr.h],
  1072. ,
  1073. AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed]))
  1074. # restore LIBS
  1075. LIBS=$SAVE_LIBS
  1076. # Checks for standard header files.
  1077. AC_HEADER_DIRENT
  1078. AC_HEADER_STDC
  1079. # Check for headers that are ALWAYS required
  1080. AC_CHECK_HEADERS([fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h],,AC_MSG_ERROR([Compiling GNUnet requires standard UNIX headers files: fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h]))
  1081. # Checks for headers that are only required on some systems or
  1082. # opional (and where we do NOT abort if they are not there)
  1083. AC_CHECK_HEADERS([stdatomic.h malloc.h malloc/malloc.h malloc/malloc_np.h langinfo.h sys/param.h sys/mount.h sys/statvfs.h sys/select.h sockLib.h sys/mman.h sys/msg.h sys/vfs.h arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h sys/ioctl.h sys/socket.h sys/time.h unistd.h kstat.h sys/sysinfo.h kvm.h sys/file.h sys/resource.h ifaddrs.h mach/mach.h stddef.h sys/timeb.h argz.h ucred.h sys/ucred.h endian.h sys/endian.h execinfo.h byteswap.h])
  1084. # FreeBSD requires this for netinet/in_systm.h and netinet/ip.h
  1085. AC_CHECK_HEADERS([sys/types.h netinet/in_systm.h netinet/in.h netinet/ip.h],,,
  1086. [#ifdef HAVE_SYS_TYPES_H
  1087. #include <sys/types.h>
  1088. #endif
  1089. #ifdef HAVE_NETINET_IN_SYSTM_H
  1090. #include <netinet/in_systm.h>
  1091. #endif
  1092. #ifdef HAVE_NETINET_IN_H
  1093. #include <netinet/in.h>
  1094. #endif
  1095. ])
  1096. SAVE_LDFLAGS=$LDFLAGS
  1097. SAVE_CPPFLAGS=$CPPFLAGS
  1098. # test for sqlite
  1099. sqlite=false
  1100. AC_MSG_CHECKING(for SQLite)
  1101. AC_ARG_WITH(sqlite,
  1102. [ --with-sqlite=PFX base of SQLite installation],
  1103. [AC_MSG_RESULT("$with_sqlite")
  1104. AS_CASE([$with_sqlite],
  1105. [no],[],
  1106. [yes],[
  1107. AC_CHECK_HEADERS(sqlite3.h,
  1108. sqlite=true)],
  1109. [
  1110. LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
  1111. CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
  1112. AC_CHECK_HEADERS(sqlite3.h,
  1113. EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
  1114. SQLITE_LDFLAGS="-L$with_sqlite/lib"
  1115. SQLITE_CPPFLAGS="-I$with_sqlite/include"
  1116. sqlite=true)
  1117. LDFLAGS=$SAVE_LDFLAGS
  1118. CPPFLAGS=$SAVE_CPPFLAGS
  1119. ])
  1120. ],
  1121. [AC_MSG_RESULT([--with-sqlite not specified])
  1122. AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
  1123. AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
  1124. AC_SUBST(SQLITE_CPPFLAGS)
  1125. AC_SUBST(SQLITE_LDFLAGS)
  1126. LDFLAGS=$SAVE_LDFLAGS
  1127. CPPFLAGS=$SAVE_CPPFLAGS
  1128. # test for postgres:
  1129. postgres=false
  1130. # even running the check for postgres breaks emscripten
  1131. AS_IF([test "$taler_only" != yes],
  1132. [AX_LIB_POSTGRESQL([9.5],
  1133. [CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS"
  1134. AC_CHECK_HEADERS([libpq-fe.h],
  1135. postgres=true)
  1136. ],
  1137. [AC_MSG_RESULT([no postgres])])])
  1138. AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue)
  1139. AS_IF([test "x$postgres" = xtrue],
  1140. [AC_DEFINE([HAVE_POSTGRESQL],[1],[Have PostgreSQL])],
  1141. [AC_DEFINE([HAVE_POSTGRESQL],[0],[Lacking PostgreSQL])])
  1142. LDFLAGS=$SAVE_LDFLAGS
  1143. CPPFLAGS=$SAVE_CPPFLAGS
  1144. # mysql & windows
  1145. AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
  1146. AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
  1147. # test for mysql
  1148. mysql=false
  1149. mysqlfail=false
  1150. SAVE_LDFLAGS=$LDFLAGS
  1151. SAVE_CPPFLAGS=$CPPFLAGS
  1152. AC_MSG_CHECKING(for mysql)
  1153. AC_ARG_WITH(mysql,
  1154. [ --with-mysql=PFX base of MySQL installation],
  1155. [AC_MSG_RESULT([$with_mysql])
  1156. AS_CASE([$with_mysql],
  1157. [no],[],
  1158. [yes|""],[
  1159. AC_CHECK_HEADERS(mysql/mysql.h,
  1160. AC_CHECK_LIB(mysqlclient, mysql_init,
  1161. mysql=true), [], [])
  1162. ],[
  1163. LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
  1164. CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
  1165. AC_CHECK_HEADERS(mysql/mysql.h,
  1166. AC_CHECK_LIB(mysqlclient, mysql_init,
  1167. MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
  1168. MYSQL_CPPFLAGS="-I$with_mysql/include"
  1169. mysql=true), [], [])
  1170. ])
  1171. ],
  1172. [AC_MSG_RESULT([--with-mysql not specified])
  1173. if test -d "/usr/lib64/mysql"; then
  1174. MYSQL_LIBDIR="/usr/lib64/mysql"
  1175. elif test -d "/usr/lib/mysql"; then
  1176. MYSQL_LIBDIR="/usr/lib/mysql"
  1177. else
  1178. MYSQL_LIBDIR="/usr/lib"
  1179. fi
  1180. LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
  1181. AC_CHECK_LIB(mysqlclient, mysql_init,
  1182. [AC_CHECK_HEADERS(mysql/mysql.h,
  1183. MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
  1184. mysql=true
  1185. , [], [])])
  1186. ])
  1187. AC_SUBST(MYSQL_LDFLAGS)
  1188. AC_SUBST(MYSQL_CPPFLAGS)
  1189. # additional version check for mysql
  1190. AC_ARG_ENABLE(mysql-version-check, [ --disable-mysql-version-check do not check MySQL version],, enable_mysql_version_check=yes)
  1191. AS_IF([test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"],
  1192. [
  1193. AC_MSG_CHECKING(mysql version)
  1194. AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
  1195. [[
  1196. #include <mysql/mysql.h>]],
  1197. [[
  1198. #if (MYSQL_VERSION_ID < 40100)
  1199. #error needs at least version >= 4.1
  1200. #endif
  1201. int main () { return 0; }
  1202. ]])
  1203. ],mysql=true,mysql=false)
  1204. AS_IF([test "$mysql" = "false"],
  1205. [
  1206. mysqlfail=true
  1207. AC_MSG_RESULT([fail, >= 4.1 required])
  1208. ],[
  1209. AC_MSG_RESULT(ok)
  1210. ])
  1211. ])
  1212. AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
  1213. AM_CONDITIONAL(HAVE_MYSQLE, false)
  1214. # restore LIBS
  1215. LIBS=$SAVE_LIBS
  1216. LDFLAGS=$SAVE_LDFLAGS
  1217. CPPFLAGS=$SAVE_CPPFLAGS
  1218. # TODO: should this test for "or" not "and"?
  1219. # TODO: Add postgres?
  1220. AS_IF([test "$sqlite" = 0 -a "$mysql" = 0],
  1221. [
  1222. AC_MSG_ERROR([GNUnet requires SQLite or MySQL / MariaDB.])
  1223. ])
  1224. # libmicrohttpd
  1225. lmhd=0
  1226. m4_define([MHD_MODULE], [libmicrohttpd >= 0.9.63])
  1227. AC_ARG_WITH(microhttpd,
  1228. [AS_HELP_STRING([--with-microhttpd[[=PFX]]],
  1229. [base of libmicrohttpd installation])],
  1230. [],
  1231. [with_microhttpd=check])
  1232. AS_CASE([$with_microhttpd],
  1233. [no], [],
  1234. [yes], [PKG_CHECK_MODULES([MHD], [MHD_MODULE], [lmhd=1])],
  1235. [check], [PKG_CHECK_MODULES([MHD], [MHD_MODULE],
  1236. [lmhd=1],
  1237. [AC_MSG_WARN([Building without libmicrohttpd])])],
  1238. [SAVE_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
  1239. PKG_CONFIG_PATH=$with_microhttpd/lib/pkgconfig
  1240. export PKG_CONFIG_PATH
  1241. PKG_CHECK_MODULES([MHD], [MHD_MODULE], [lmhd=1])
  1242. PKG_CONFIG_PATH=$SAVE_PKG_CONFIG_PATH])
  1243. AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
  1244. AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
  1245. AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
  1246. # restore LIBS
  1247. LIBS=$SAVE_LIBS
  1248. # check for gettext
  1249. AM_GNU_GETTEXT([external])
  1250. AM_GNU_GETTEXT_VERSION([0.18.1])
  1251. # Checks for standard typedefs, structures, and compiler characteristics.
  1252. AC_TYPE_PID_T
  1253. AC_TYPE_SIZE_T
  1254. AC_TYPE_MODE_T
  1255. AC_HEADER_TIME
  1256. AC_HEADER_STAT
  1257. AC_HEADER_STDBOOL
  1258. AC_STRUCT_TM
  1259. AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
  1260. [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
  1261. ],
  1262. [],
  1263. [
  1264. #include <sys/types.h>
  1265. #include <sys/socket.h>
  1266. #include <netinet/in.h>
  1267. ])
  1268. AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
  1269. [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN,
  1270. 1,
  1271. [Do we have sockaddr_un.sun_len?])],
  1272. [],
  1273. [
  1274. #include <sys/types.h>
  1275. #include <sys/socket.h>
  1276. #include <sys/un.h>
  1277. ])
  1278. # Checks for library functions.
  1279. AC_FUNC_CLOSEDIR_VOID
  1280. AC_FUNC_FORK
  1281. AC_PROG_GCC_TRADITIONAL
  1282. AC_FUNC_MEMCMP
  1283. AC_FUNC_SELECT_ARGTYPES
  1284. AC_FUNC_CHOWN
  1285. AC_TYPE_SIGNAL
  1286. AC_FUNC_STAT
  1287. AC_FUNC_STRFTIME
  1288. AC_FUNC_VPRINTF
  1289. AC_HEADER_SYS_WAIT
  1290. AC_TYPE_OFF_T
  1291. AC_TYPE_UID_T
  1292. AC_CHECK_FUNCS([atoll stat64 strnlen mremap getrlimit setrlimit sysconf initgroups strndup gethostbyname2 getpeerucred getpeereid setresuid $funcstocheck getifaddrs freeifaddrs getresgid mallinfo malloc_size malloc_usable_size getrusage random srandom stat statfs statvfs wait4])
  1293. # restore LIBS
  1294. LIBS=$SAVE_LIBS
  1295. GN_INTLINCL=""
  1296. GN_LIBINTL="$LTLIBINTL"
  1297. AC_ARG_ENABLE(framework,
  1298. [AS_HELP_STRING([--enable-framework],[enable Mac OS X framework build helpers])],
  1299. enable_framework_build=$enableval)
  1300. AM_CONDITIONAL(WANT_FRAMEWORK,
  1301. test x$enable_framework_build = xyes)
  1302. AS_IF([test x$enable_framework_build = xyes],
  1303. [AC_DEFINE([FRAMEWORK_BUILD],
  1304. 1,
  1305. [Build a Mac OS X Framework])
  1306. GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
  1307. GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
  1308. AC_LIB_APPENDTOVAR([CPPFLAGS],
  1309. [$GN_INTLINCL])])
  1310. GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
  1311. GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
  1312. AC_SUBST(GN_LIB_LDFLAGS)
  1313. AC_SUBST(GN_PLUGIN_LDFLAGS)
  1314. AC_SUBST(GN_INTLINCL)
  1315. AC_SUBST(GN_LIBINTL)
  1316. AC_SUBST(CPPFLAGS)
  1317. AC_SUBST(LIBS)
  1318. AC_SUBST(LDFLAGS)
  1319. AC_SUBST(EXT_LIB_PATH)
  1320. AC_SUBST(EXT_LIBS)
  1321. AC_SUBST(LIBPREFIX)
  1322. AC_SUBST(DLLDIR)
  1323. AC_SUBST(EXT_LIB_PATH)
  1324. DATAROOTDIR=$datarootdir
  1325. AC_SUBST(DATAROOTDIR)
  1326. # test for sudo
  1327. AC_MSG_CHECKING(for sudo)
  1328. #AC_CHECK_PROGS(SUDO_BINARY, [sudo], false)
  1329. #AM_CONDITIONAL(HAVE_SUDO, test x$SUDO_BINARY != xfalse)
  1330. AC_ARG_WITH(sudo,
  1331. [ --with-sudo=PATH path to sudo binary (or just yes)],
  1332. [AC_MSG_RESULT("$with_sudo")
  1333. AS_CASE([$with_sudo],
  1334. [no],[SUDO_BINARY=],
  1335. [yes],[SUDO_BINARY=sudo],
  1336. [SUDO_BINARY=$with_sudo])],
  1337. [AC_MSG_RESULT([no])])
  1338. AC_SUBST(SUDO_BINARY)
  1339. AM_CONDITIONAL([HAVE_SUDO],
  1340. [test "x$SUDO_BINARY" != "x" -o -w /])
  1341. # test for doas
  1342. AC_MSG_CHECKING(for doas)
  1343. AC_CHECK_PROGS(DOAS_BINARY, [doas], false)
  1344. AM_CONDITIONAL(HAVE_DOAS_BINARY, test x$DOAS_BINARY != xfalse)
  1345. # test for gnunetdns group name
  1346. GNUNETDNS_GROUP=gnunetdns
  1347. AC_MSG_CHECKING(for gnunetdns group name)
  1348. AC_ARG_WITH(gnunetdns,
  1349. [ --with-gnunetdns=GRPNAME name for gnunetdns group],
  1350. [AC_MSG_RESULT("$with_gnunetdns")
  1351. AS_CASE([$with_gnunetdns],
  1352. [no],[GNUNETDNS_GROUP=gnunet],
  1353. [yes],[GNUNETDNS_GROUP=gnunetdns],
  1354. [GNUNETDNS_GROUP=$with_gnunetdns])],
  1355. [AC_MSG_RESULT([gnunetdns])])
  1356. AC_SUBST(GNUNETDNS_GROUP)
  1357. # gnutls
  1358. gnutls=0
  1359. gnutls_dane=0
  1360. AC_MSG_CHECKING(for gnutls)
  1361. AC_ARG_WITH(gnutls,
  1362. [ --with-gnutls=PFX base of gnutls installation],
  1363. [AC_MSG_RESULT([$with_gnutls])
  1364. AS_CASE([$with_gnutls],
  1365. [no],[],
  1366. [yes],
  1367. [AC_CHECK_HEADERS([gnutls/abstract.h],
  1368. AC_CHECK_LIB([gnutls],
  1369. [gnutls_priority_set],
  1370. gnutls=true))
  1371. AC_CHECK_HEADERS([gnutls/dane.h],
  1372. AC_CHECK_LIB([gnutls-dane],
  1373. [dane_verify_crt_raw],
  1374. gnutls_dane=1))],
  1375. [LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
  1376. CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
  1377. AC_CHECK_HEADERS([gnutls/abstract.h],
  1378. AC_CHECK_LIB([gnutls], [gnutls_priority_set],
  1379. EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
  1380. gnutls=true))
  1381. AC_CHECK_HEADERS([gnutls/dane.h],
  1382. AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
  1383. gnutls_dane=1))
  1384. ])
  1385. ],
  1386. [AC_MSG_RESULT([--with-gnutls not specified])
  1387. AC_CHECK_HEADERS([gnutls/abstract.h],
  1388. AC_CHECK_LIB([gnutls], [gnutls_priority_set],
  1389. gnutls=true))
  1390. AC_CHECK_HEADERS([gnutls/dane.h],
  1391. AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
  1392. gnutls_dane=1))
  1393. ])
  1394. AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
  1395. AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have GnuTLS])
  1396. AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1)
  1397. AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support])
  1398. # Test if we are building for superMUC
  1399. AC_MSG_CHECKING(if GNUnet is being configured to run on the SuperMUC)
  1400. AC_ARG_ENABLE([supermuc],
  1401. [AS_HELP_STRING([--enable-supermuc],
  1402. [build GNUnet with support to run on the SuperMUC (default is NO)])],
  1403. [AS_IF([test "x$enable_supermuc" = "xno"],
  1404. [supermuc=0],
  1405. [supermuc=1])],
  1406. [supermuc=0
  1407. enable_supermuc=no])
  1408. AC_MSG_RESULT($enable_SUPERMUC)
  1409. AM_CONDITIONAL([ENABLE_SUPERMUC], [test "x$supermuc" = "x1"])
  1410. AC_DEFINE_UNQUOTED([ENABLE_SUPERMUC], [$supermuc], [Build with support for SuperMUC])
  1411. # Check if NSE has to send timestamp information to testbed logger for
  1412. # generating histogram of messages received
  1413. AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
  1414. AC_ARG_ENABLE([nse-histogram],
  1415. [AS_HELP_STRING([--enable-nse-histogram],
  1416. [have NSE send timestamp information to testbed logger for generating
  1417. histogram of received messages. NOT useful for production (default is
  1418. NO)])],
  1419. [AS_IF([test "x$enableval" = "xno"],
  1420. [nse_histogram=0],
  1421. [nse_histogram=1])],
  1422. [nse_histogram=0
  1423. enable_nse_histogram=no])
  1424. AC_MSG_RESULT($enable_nse_histogram)
  1425. AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
  1426. AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
  1427. [have NSE send timestamp information to testbed logger])
  1428. # should 'make check' run tests?
  1429. AC_MSG_CHECKING(whether to run tests)
  1430. AC_ARG_ENABLE([testruns],
  1431. [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
  1432. [enable_tests_run=${enableval}],
  1433. [enable_tests_run=yes])
  1434. AC_MSG_RESULT($enable_test_run)
  1435. AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
  1436. AC_MSG_CHECKING([whether to compile in benchmarks (currently for http and crypto)])
  1437. AC_ARG_ENABLE([benchmark],
  1438. [AS_HELP_STRING([--enable-benchmark], [enable benchmarking])],
  1439. [enable_benchmark=${enableval}],
  1440. [enable_benchmark=no])
  1441. AC_MSG_RESULT($enable_benchmark)
  1442. AS_IF([test "x$enable_benchmark" = "xyes"],
  1443. [AC_DEFINE_UNQUOTED(ENABLE_BENCHMARK,1,[Benchmarks are enabled])])
  1444. AM_CONDITIONAL([ENABLE_BENCHMARK], [test "x$enable_benchmark" = "xyes"])
  1445. # should expensive tests be run?
  1446. AC_MSG_CHECKING(whether to run expensive tests)
  1447. AC_ARG_ENABLE([expensivetests],
  1448. [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
  1449. [enable_expensive=${enableval}],
  1450. [enable_expensive=no])
  1451. AC_MSG_RESULT($enable_expensive)
  1452. AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
  1453. # should ports be open for Java services?
  1454. AC_MSG_CHECKING(whether to enable ports for gnunet-java)
  1455. AC_ARG_ENABLE([javaports],
  1456. [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
  1457. [enable_java_ports=${enableval}],
  1458. [enable_java_ports=no])
  1459. AC_MSG_RESULT($enable_java_ports)
  1460. AS_IF([test "x$enable_java_ports" = "xyes"],
  1461. [JAVAPORT=""],
  1462. [JAVAPORT="$UNIXONLY"])
  1463. AC_SUBST(JAVAPORT)
  1464. # should benchmarks be run?
  1465. AC_MSG_CHECKING(whether to run benchmarks during make check)
  1466. AC_ARG_ENABLE([benchmarks],
  1467. [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
  1468. [enable_benchmarks=${enableval}],
  1469. [enable_benchmarks=no])
  1470. AC_MSG_RESULT($enable_benchmarks)
  1471. AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
  1472. # should gnunet-testing be compiled
  1473. AC_MSG_CHECKING(whether to compile gnunet-testing)
  1474. AC_ARG_ENABLE([testing],
  1475. [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])],
  1476. [enable_testing=${enableval}],
  1477. [enable_testing=yes])
  1478. AC_MSG_RESULT($enable_testing)
  1479. AM_CONDITIONAL([HAVE_TESTING], [test "x$enable_testing" = "xyes"])
  1480. # should experimental code be compiled (code that may not yet compile)?
  1481. AC_MSG_CHECKING(whether to compile experimental code)
  1482. AC_ARG_ENABLE([experimental],
  1483. [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
  1484. [enable_experimental=${enableval}],
  1485. [enable_experimental=no])
  1486. AC_MSG_RESULT($enable_experimental)
  1487. AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
  1488. # should malicious code be compiled (should only be used for testing)?
  1489. AC_MSG_CHECKING(whether to compile malicious code)
  1490. AC_ARG_ENABLE([malicious],
  1491. [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code])],
  1492. [AS_IF([test "x$enableval" = "xno"],
  1493. [malicious=0],
  1494. [malicious=1])],
  1495. [malicious=0
  1496. enable_malicious=no])
  1497. AC_MSG_RESULT($enable_malicious)
  1498. AM_CONDITIONAL([ENABLE_MALICIOUS], [test 1=$malicious])
  1499. AC_DEFINE_UNQUOTED([ENABLE_MALICIOUS], [$malicious],
  1500. [enable compilation of malicious code])
  1501. # should services be started on demand when needed?
  1502. # Some services may choose to never start by default
  1503. # and it is up to the service/module developer to decide
  1504. # by having "START_ON_DEMAND = NO" instead of
  1505. # "START_ON_DEMAND = @START_ON_DEMAND@"
  1506. # in the service/module's conf.in file.
  1507. # See also IMMEDIATE_START for an unconditional immediate start.
  1508. START_ON_DEMAND="YES"
  1509. AC_MSG_CHECKING(whether to start peer's services on demand by default)
  1510. AC_ARG_ENABLE([autostart],
  1511. [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])],
  1512. [enable_autostart=${enableval}
  1513. AS_IF([test "x$enable_autostart" = "xno"],
  1514. [START_ON_DEMAND="NO"])
  1515. ],
  1516. [enable_autostart=yes])
  1517. AC_MSG_RESULT($enable_autostart)
  1518. #AM_CONDITIONAL([HAVE_START_ON_DEMAND], [test "x$enable_autostart" = "xyes"])
  1519. AC_SUBST(START_ON_DEMAND)
  1520. # should memory statistics be kept (very expensive CPU-wise!)
  1521. AC_MSG_CHECKING(whether to create expensive statistics on memory use)
  1522. AC_ARG_ENABLE([heapstats],
  1523. [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
  1524. [enable_heapstats=1],
  1525. [enable_heapstats=0])
  1526. AC_MSG_RESULT($enable_heapstats)
  1527. AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
  1528. # Check if the __thread storage class for
  1529. # thread-local storage is available.
  1530. AC_MSG_CHECKING(whether __thread is supported)
  1531. AC_LINK_IFELSE(
  1532. [AC_LANG_PROGRAM([#include <stdlib.h>
  1533. #undef __thread
  1534. static __thread int a = 1;],
  1535. [exit(a-1);])],
  1536. [have_thread_local_gcc=1],[have_thread_local_gcc=0])
  1537. AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL_GCC],$have_thread_local_gcc,[Define this if __thread is supported])
  1538. AS_IF([test "x$have_thread_local_gcc" = "x1"],
  1539. [AC_MSG_RESULT(yes)],
  1540. [AC_MSG_RESULT(no)])
  1541. # gcov compilation
  1542. AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
  1543. AC_ARG_ENABLE([coverage],
  1544. AS_HELP_STRING([--enable-coverage],
  1545. [compile the library with code coverage support]),
  1546. [use_gcov=${enableval}],
  1547. [use_gcov=no])
  1548. AC_MSG_RESULT($use_gcov)
  1549. AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
  1550. # version info
  1551. # TODO: git blame says this predates our switch to git.
  1552. # git-svn should be adjusted to simply git, or
  1553. # an external script that does the job.
  1554. AC_PATH_PROG(svnversioncommand, svnversion)
  1555. AC_PATH_PROG(gitcommand, git)
  1556. AC_MSG_CHECKING(for source being under a VCS)
  1557. # version info
  1558. AC_PATH_PROG(gitcommand, git)
  1559. AC_MSG_CHECKING(for source being under a VCS)
  1560. git_version=
  1561. AS_IF([test ! "X$gitcommand" = "X"],
  1562. [
  1563. git_version=$(cd $srcdir ; git rev-list --full-history --all --abbrev-commit | head -n 1 2>/dev/null)
  1564. ])
  1565. AS_IF([test "X$git_version" = "X"],
  1566. [
  1567. vcs_name="no"
  1568. vcs_version="\"release\""
  1569. ],
  1570. [
  1571. vcs_name="yes, git-svn"
  1572. vcs_version="\"git-$git_version\""
  1573. ])
  1574. AC_MSG_RESULT($vcs_name)
  1575. AC_MSG_CHECKING(VCS version)
  1576. AC_MSG_RESULT($vcs_version)
  1577. AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball version])
  1578. AC_CONFIG_FILES([
  1579. Makefile
  1580. contrib/Makefile
  1581. contrib/hellos/Makefile
  1582. contrib/services/Makefile
  1583. contrib/services/openrc/Makefile
  1584. contrib/services/systemd/Makefile
  1585. contrib/scripts/Makefile
  1586. contrib/scripts/gnunet-logread/Makefile
  1587. doc/Makefile
  1588. doc/man/Makefile
  1589. doc/doxygen/Makefile
  1590. doc/handbook/Makefile
  1591. doc/tutorial/Makefile
  1592. m4/Makefile
  1593. po/Makefile.in
  1594. src/Makefile
  1595. src/arm/Makefile
  1596. src/arm/arm.conf
  1597. src/ats/Makefile
  1598. src/ats/ats.conf
  1599. src/ats-tool/Makefile
  1600. src/ats-tests/Makefile
  1601. src/auction/Makefile
  1602. src/block/Makefile
  1603. src/cadet/Makefile
  1604. src/cadet/cadet.conf
  1605. src/core/Makefile
  1606. src/core/core.conf
  1607. src/consensus/Makefile
  1608. src/consensus/consensus.conf
  1609. src/conversation/Makefile
  1610. src/conversation/conversation.conf
  1611. src/curl/Makefile
  1612. src/datacache/Makefile
  1613. src/datastore/Makefile
  1614. src/datastore/datastore.conf
  1615. src/dht/Makefile
  1616. src/dht/dht.conf
  1617. src/dns/Makefile
  1618. src/dns/dns.conf
  1619. src/exit/Makefile
  1620. src/fragmentation/Makefile
  1621. src/fs/Makefile
  1622. src/fs/fs.conf
  1623. src/gns/Makefile
  1624. src/gns/gns.conf
  1625. src/gns/nss/Makefile
  1626. src/gnsrecord/Makefile
  1627. src/hello/Makefile
  1628. src/identity/Makefile
  1629. src/identity/identity.conf
  1630. src/abd/Makefile
  1631. src/abd/abd.conf
  1632. src/include/Makefile
  1633. src/integration-tests/Makefile
  1634. src/json/Makefile
  1635. src/hostlist/Makefile
  1636. src/my/Makefile
  1637. src/mysql/Makefile
  1638. src/namecache/Makefile
  1639. src/namecache/namecache.conf
  1640. src/namestore/Makefile
  1641. src/namestore/namestore.conf
  1642. src/nat/Makefile
  1643. src/nat/nat.conf
  1644. src/nat-auto/Makefile
  1645. src/nat-auto/nat-auto.conf
  1646. src/nse/Makefile
  1647. src/nse/nse.conf
  1648. src/nt/Makefile
  1649. src/peerinfo/Makefile
  1650. src/peerinfo/peerinfo.conf
  1651. src/peerinfo-tool/Makefile
  1652. src/peerstore/Makefile
  1653. src/peerstore/peerstore.conf
  1654. src/pq/Makefile
  1655. src/pt/Makefile
  1656. src/regex/Makefile
  1657. src/regex/regex.conf
  1658. src/revocation/Makefile
  1659. src/revocation/revocation.conf
  1660. src/rps/Makefile
  1661. src/rps/rps.conf
  1662. src/secretsharing/Makefile
  1663. src/secretsharing/secretsharing.conf
  1664. src/scalarproduct/Makefile
  1665. src/scalarproduct/scalarproduct.conf
  1666. src/set/Makefile
  1667. src/set/set.conf
  1668. src/sq/Makefile
  1669. src/statistics/Makefile
  1670. src/statistics/statistics.conf
  1671. src/template/Makefile
  1672. src/testbed/Makefile
  1673. src/testbed/testbed.conf
  1674. src/testbed-logger/Makefile
  1675. src/testbed-logger/testbed-logger.conf
  1676. src/testing/Makefile
  1677. src/topology/Makefile
  1678. src/transport/Makefile
  1679. src/transport/transport.conf
  1680. src/util/Makefile
  1681. src/util/resolver.conf
  1682. src/vpn/Makefile
  1683. src/vpn/vpn.conf
  1684. src/zonemaster/Makefile
  1685. src/zonemaster/zonemaster.conf
  1686. src/rest/Makefile
  1687. src/abe/Makefile
  1688. src/reclaim-attribute/Makefile
  1689. src/reclaim/Makefile
  1690. pkgconfig/Makefile
  1691. pkgconfig/gnunetarm.pc
  1692. pkgconfig/gnunetats.pc
  1693. pkgconfig/gnunetblock.pc
  1694. pkgconfig/gnunetcadet.pc
  1695. pkgconfig/gnunetconsensus.pc
  1696. pkgconfig/gnunetconversation.pc
  1697. pkgconfig/gnunetcore.pc
  1698. pkgconfig/gnunetdatacache.pc
  1699. pkgconfig/gnunetdatastore.pc
  1700. pkgconfig/gnunetdht.pc
  1701. pkgconfig/gnunetdns.pc
  1702. pkgconfig/gnunetenv.pc
  1703. pkgconfig/gnunetfragmentation.pc
  1704. pkgconfig/gnunetfs.pc
  1705. pkgconfig/gnunetgns.pc
  1706. pkgconfig/gnunethello.pc
  1707. pkgconfig/gnunetidentity.pc
  1708. pkgconfig/gnunetmicrophone.pc
  1709. pkgconfig/gnunetmysql.pc
  1710. pkgconfig/gnunetnamestore.pc
  1711. pkgconfig/gnunetnat.pc
  1712. pkgconfig/gnunetnse.pc
  1713. pkgconfig/gnunetpeerinfo.pc
  1714. pkgconfig/gnunetpq.pc
  1715. pkgconfig/gnunetregex.pc
  1716. pkgconfig/gnunetrevocation.pc
  1717. pkgconfig/gnunetrps.pc
  1718. pkgconfig/gnunetscalarproduct.pc
  1719. pkgconfig/gnunetset.pc
  1720. pkgconfig/gnunetspeaker.pc
  1721. pkgconfig/gnunetstatistics.pc
  1722. pkgconfig/gnunettestbed.pc
  1723. pkgconfig/gnunettesting.pc
  1724. pkgconfig/gnunettransport.pc
  1725. pkgconfig/gnunetutil.pc
  1726. pkgconfig/gnunetvpn.pc
  1727. ])
  1728. AC_OUTPUT
  1729. # FIXME: `some modules' -> be more specific which exact modules.
  1730. # java ports
  1731. AS_IF([test "x$enable_java_ports" = "xyes"],
  1732. [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])])
  1733. ####
  1734. #### Lasciate ogne speranza, voi ch'intrate
  1735. ####
  1736. #### This could be moved to the checks above,
  1737. #### but for now let's keep it here.
  1738. ####
  1739. # TODO: We use "WARNING" too often, we need to clarify what
  1740. # TODO: constitutes a WARNING, an ERROR, and a NOTICE, and
  1741. # TODO: other message levels.
  1742. # -- print message regarding enabled experimental features
  1743. AS_IF([test "x$enable_experimental" = "xyes"],
  1744. [experimental_msg="experimental features enabled"])
  1745. # -- OSX Framework
  1746. AS_IF([test "$enable_framework_build" = "yes"],
  1747. [macosx_framework_msg="yes"],
  1748. [macosx_framework_msg="no"])
  1749. # -- libidn 2
  1750. AS_IF([test "x$working_libidn2" = x1],
  1751. [libidn2_msg="libidn2"])
  1752. # -- libidn 1
  1753. AS_IF([test "x$working_libidn1" = x1],
  1754. [libidn1_msg="libidn1"])
  1755. # -- texi2mdoc-generation
  1756. AS_IF([test "x$texi2mdoc_generation" = "xyes"],
  1757. [mdocml_msg="yes"],
  1758. [mdocml_msg="no"])
  1759. # -- texi2mdoc
  1760. AS_IF([test "x$TEXI2MDOC_BINARY" = "false"],
  1761. [AC_MSG_NOTICE([WARNING: optional texi2mdoc binary not found])
  1762. texi2mdoc_msg="no (optional)"],
  1763. [texi2mdoc_msg="yes"])
  1764. # -- mandoc
  1765. AS_IF([test "x$MANDOC_BINARY" = "false"],
  1766. [AC_MSG_NOTICE([WARNING: optional mandoc binary not found])
  1767. mandoc_msg="no"],
  1768. [mandoc_msg="yes"])
  1769. # -- texinfo
  1770. AS_IF([test "x$makeinfo" != "x1"],
  1771. [texinfo_msg="no"],
  1772. [texinfo_msg="yes"])
  1773. # -- conversation
  1774. AS_IF([test "x$conversation_backend" = "xnone"],
  1775. [AS_IF([test "x$pulse" != "x1"],
  1776. [AC_MSG_NOTICE([WARNING: libpulse(audio) not found (required to build conversation against it).])
  1777. libpulse_msg="no"],
  1778. [libpulse_msg="yes"])
  1779. AS_IF([test "x$opus" != "x1"],
  1780. [AC_MSG_NOTICE([WARNING: libopus not found (conversation)])
  1781. libopus_msg="no"],
  1782. [libopus_msg="yes"])
  1783. AS_IF([test "x$gst" != "x1"],
  1784. [AC_MSG_NOTICE([WARNING: GStreamer not found (required to build conversation against it).])
  1785. gstreamer_msg="no"],
  1786. [gstreamer_msg="yes"])],
  1787. [features_msg="$features_msg conversation"])
  1788. # -- interface
  1789. interface_msg=`echo $DEFAULT_INTERFACE | tr -d \"`
  1790. # -- libmicrohttpd
  1791. AS_IF([test "x$lmhd" != "x1"],
  1792. [libmicrohttpd_msg="no (optional)"],
  1793. [libmicrohttpd_msg="yes"])
  1794. # -- jansson
  1795. AS_IF([test "x$jansson" = "x0"],
  1796. [jansson_msg="no (optional)"],
  1797. [jansson_msg="yes"])
  1798. # -- libextractor
  1799. AS_IF([test "$extractor" != 1],
  1800. [AC_MSG_WARN([WARNING: libextractor not found, but various file-sharing functions require it])],
  1801. [libextractor_msg="yes"])
  1802. # -- libzbar
  1803. AS_IF([test "x$zbar" = "x1"],
  1804. [libzbar_msg="yes"
  1805. features_msg="$features_msg gnunet-qr"],
  1806. [AC_MSG_NOTICE([WARNING: zbar not found, gnunet-qr will not be built.])
  1807. libzbar_msg="no"])
  1808. # -- libgnurl
  1809. AS_IF([test "$gnurl" = "0"],
  1810. [AS_IF([test "x$curl" = "xfalse"],
  1811. [AC_MSG_NOTICE([WARNING: libgnurl not found. http client support will not be compiled.])
  1812. AC_MSG_WARN([ERROR: libgnurl not found. hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])
  1813. curl_msg="no"],
  1814. [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])
  1815. curl_msg="yes"])],
  1816. [gnurl_msg="yes"])
  1817. # -- ifconfig
  1818. AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"],
  1819. [AC_MSG_NOTICE([WARNING: optional ifconfig not found])
  1820. ifconfig_msg="no (optional)"],
  1821. [ifconfig_msg="yes"])
  1822. # -- upnpc
  1823. AS_IF([test "$VAR_UPNPC_BINARY" = "false"],
  1824. [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])
  1825. upnpc_msg="no (optional)"],
  1826. [upnpc_msg="yes"])
  1827. # -- iptables
  1828. AS_IF([test "$VAR_IPTABLES_BINARY" = "false"],
  1829. [AC_MSG_NOTICE([WARNING: optional iptables not found])
  1830. iptables_msg="no (optional)"],
  1831. [iptables_msg="yes"])
  1832. # -- bluetooth
  1833. AS_IF([test "x$bluetooth" = "x0"],
  1834. [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])
  1835. bluetooth_msg="no (optional)"],
  1836. [bluetooth_msg="yes"])
  1837. # -- gnutls
  1838. AS_IF([test x$gnutls != xtrue],
  1839. [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])
  1840. gnutls_msg="no"],
  1841. [AS_IF([test "x$gnutls_dane" != "x1"],
  1842. [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])
  1843. gnutls_msg="yes (without DANE support)"],
  1844. [gnutls_msg="yes (with DANE support)"])])
  1845. # -- databases
  1846. # TODO: this always returns true, the check might
  1847. # TODO: not be working as intended (for msqlfail).
  1848. AS_IF([test x$mysqlfail = "true"]
  1849. [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])])
  1850. AS_IF([test "$mysql" = true],
  1851. [features_msg="$features_msg mysql"
  1852. mysql_msg="yes"],
  1853. [mysql_msg="no"])
  1854. AS_IF([test "$sqlite" = true],
  1855. [features_msg="$features_msg sqlite"
  1856. sqlite_msg="yes"],
  1857. [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])
  1858. sqlite_msg="no"])
  1859. AS_IF([test "$postgres" = true],
  1860. [features_msg="$features_msg postgres"
  1861. postgres_msg="yes"],
  1862. [postgres_msg="no"])
  1863. # -- features
  1864. # ---- 1. replace spaces with newlines,
  1865. # ---- 2. sort the lines,
  1866. # ---- 3. replace the newlines with spaces.
  1867. features_msg=`echo $features_msg | tr ' ' '\012' | sort | tr '\012' ' '`
  1868. AC_SUBST(features_msg)
  1869. # The summary
  1870. # TODO: reduce the length of the last message block, following "IMPORTANT".
  1871. AC_MSG_NOTICE([
  1872. GNUnet Configuration
  1873. gnunet version: ${VERSION}
  1874. Host setup: ${host}
  1875. Install prefix: ${prefix}
  1876. Compiler: ${CC}
  1877. CFLAGS: ${CFLAGS}
  1878. CPPFLAGS: ${CPPFLAGS}
  1879. LDFLAGS: ${LDFLAGS}
  1880. LIBS: ${LIBS}
  1881. Build Target: $build_target
  1882. Mac OSX framework build: ${macosx_framework_msg}
  1883. Default Interface: ${interface_msg}
  1884. MySQL: ${mysql_msg}
  1885. PostgreSQL: ${postgres_msg}
  1886. sqlite3: ${sqlite_msg}
  1887. gnurl: ${gnurl_msg}
  1888. curl: ${curl_msg}
  1889. bluetooth: ${bluetooth_msg}
  1890. jansson: ${jansson_msg}
  1891. iptables: ${iptables_msg}
  1892. ifconfig: ${ifconfig_msg}
  1893. upnpc: ${upnpc_msg}
  1894. gnutls: ${gnutls_msg}
  1895. libzbar: ${libzbar_msg}
  1896. java: ${java_msg}
  1897. libmicrohttpd: ${libmicrohttpd_msg}
  1898. libidn: ${libidn1_msg}${libidn2_msg}
  1899. libopus: ${libopus_msg}
  1900. gstreamer: ${gstreamer_msg}
  1901. libpulse: ${libpulse_msg}
  1902. libextractor: ${libextractor_msg}
  1903. texi2mdoc: ${texi2mdoc_msg}
  1904. mandoc: ${mandoc_msg}
  1905. texinfo manual: ${texinfo_msg}
  1906. transpiled mdocml manual: ${mdocml_msg}
  1907. features: ${features_msg}
  1908. experimental: ${experimental_msg}
  1909. IMPORTANT:
  1910. Please make sure NOW that you have created a user and group 'gnunet'
  1911. and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux,
  1912. type:
  1913. addgroup gnunetdns
  1914. adduser --system --group --disabled-login --home /var/lib/gnunet gnunet
  1915. Make sure that '/var/lib/gnunet' is owned (and writable) by user
  1916. 'gnunet'. Then, you can compile GNUnet with
  1917. make
  1918. After that, run (if necessary as 'root')
  1919. make install
  1920. to install everything.
  1921. Each GNUnet user should be added to the 'gnunet' group (may
  1922. require fresh login to come into effect):
  1923. adduser USERNAME gnunet
  1924. (run the above command as root once for each of your users, replacing
  1925. "USERNAME" with the respective login names). If you have a global IP
  1926. address, no further configuration is required.
  1927. For more detailed setup instructions, see https://docs.gnunet.org/
  1928. Optionally, download and compile gnunet-gtk to get a GUI for
  1929. file-sharing and configuration. This is particularly recommended
  1930. if your network setup is non-trivial, as gnunet-setup can be
  1931. used to test in the GUI if your network configuration is working.
  1932. gnunet-setup should be run as the "gnunet" user under X. As it
  1933. does very little with the network, running it as "root" is likely
  1934. also harmless. You can also run it as a normal user, but then
  1935. you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
  1936. home directory in the end.
  1937. Once you have configured your peer, run (as the 'gnunet' user)
  1938. gnunet-arm -s
  1939. to start the peer. You can then run the various GNUnet-tools as
  1940. your "normal" user (who should only be in the group 'gnunet').
  1941. ])