acinclude.m4 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663
  1. #***************************************************************************
  2. # _ _ ____ _
  3. # Project ___| | | | _ \| |
  4. # / __| | | | |_) | |
  5. # | (__| |_| | _ <| |___
  6. # \___|\___/|_| \_\_____|
  7. #
  8. # Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
  9. #
  10. # This software is licensed as described in the file COPYING, which
  11. # you should have received as part of this distribution. The terms
  12. # are also available at https://curl.se/docs/copyright.html.
  13. #
  14. # You may opt to use, copy, modify, merge, publish, distribute and/or sell
  15. # copies of the Software, and permit persons to whom the Software is
  16. # furnished to do so, under the terms of the COPYING file.
  17. #
  18. # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
  19. # KIND, either express or implied.
  20. #
  21. # SPDX-License-Identifier: curl
  22. #
  23. #***************************************************************************
  24. dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
  25. dnl -------------------------------------------------
  26. dnl Use the C preprocessor to find out if the given object-style symbol
  27. dnl is defined and get its expansion. This macro will not use default
  28. dnl includes even if no INCLUDES argument is given. This macro will run
  29. dnl silently when invoked with three arguments. If the expansion would
  30. dnl result in a set of double-quoted strings the returned expansion will
  31. dnl actually be a single double-quoted string concatenating all them.
  32. AC_DEFUN([CURL_CHECK_DEF], [
  33. AC_REQUIRE([CURL_CPP_P])dnl
  34. OLDCPPFLAGS=$CPPFLAGS
  35. # CPPPFLAG comes from CURL_CPP_P
  36. CPPFLAGS="$CPPFLAGS $CPPPFLAG"
  37. AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
  38. AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
  39. if test -z "$SED"; then
  40. AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
  41. fi
  42. if test -z "$GREP"; then
  43. AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
  44. fi
  45. ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
  46. tmp_exp=""
  47. AC_PREPROC_IFELSE([
  48. AC_LANG_SOURCE(
  49. ifelse($2,,,[$2])[[
  50. #ifdef $1
  51. CURL_DEF_TOKEN $1
  52. #endif
  53. ]])
  54. ],[
  55. tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
  56. "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
  57. "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \
  58. "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
  59. if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
  60. tmp_exp=""
  61. fi
  62. ])
  63. if test -z "$tmp_exp"; then
  64. AS_VAR_SET(ac_HaveDef, no)
  65. ifelse($3,,[AC_MSG_RESULT([no])])
  66. else
  67. AS_VAR_SET(ac_HaveDef, yes)
  68. AS_VAR_SET(ac_Def, $tmp_exp)
  69. ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
  70. fi
  71. AS_VAR_POPDEF([ac_Def])dnl
  72. AS_VAR_POPDEF([ac_HaveDef])dnl
  73. CPPFLAGS=$OLDCPPFLAGS
  74. ])
  75. dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
  76. dnl -------------------------------------------------
  77. dnl Use the C compiler to find out only if the given symbol is defined
  78. dnl or not, this can not find out its expansion. This macro will not use
  79. dnl default includes even if no INCLUDES argument is given. This macro
  80. dnl will run silently when invoked with three arguments.
  81. AC_DEFUN([CURL_CHECK_DEF_CC], [
  82. AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
  83. ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
  84. AC_COMPILE_IFELSE([
  85. AC_LANG_SOURCE(
  86. ifelse($2,,,[$2])[[
  87. int main (void)
  88. {
  89. #ifdef $1
  90. return 0;
  91. #else
  92. force compilation error
  93. #endif
  94. }
  95. ]])
  96. ],[
  97. tst_symbol_defined="yes"
  98. ],[
  99. tst_symbol_defined="no"
  100. ])
  101. if test "$tst_symbol_defined" = "yes"; then
  102. AS_VAR_SET(ac_HaveDef, yes)
  103. ifelse($3,,[AC_MSG_RESULT([yes])])
  104. else
  105. AS_VAR_SET(ac_HaveDef, no)
  106. ifelse($3,,[AC_MSG_RESULT([no])])
  107. fi
  108. AS_VAR_POPDEF([ac_HaveDef])dnl
  109. ])
  110. dnl CURL_CHECK_LIB_XNET
  111. dnl -------------------------------------------------
  112. dnl Verify if X/Open network library is required.
  113. AC_DEFUN([CURL_CHECK_LIB_XNET], [
  114. AC_MSG_CHECKING([if X/Open network library is required])
  115. tst_lib_xnet_required="no"
  116. AC_COMPILE_IFELSE([
  117. AC_LANG_SOURCE([[
  118. int main (void)
  119. {
  120. #if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
  121. return 0;
  122. #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
  123. return 0;
  124. #else
  125. force compilation error
  126. #endif
  127. }
  128. ]])
  129. ],[
  130. tst_lib_xnet_required="yes"
  131. LIBS="-lxnet $LIBS"
  132. ])
  133. AC_MSG_RESULT([$tst_lib_xnet_required])
  134. ])
  135. dnl CURL_CHECK_AIX_ALL_SOURCE
  136. dnl -------------------------------------------------
  137. dnl Provides a replacement of traditional AC_AIX with
  138. dnl an uniform behavior across all autoconf versions,
  139. dnl and with our own placement rules.
  140. AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
  141. AH_VERBATIM([_ALL_SOURCE],
  142. [/* Define to 1 if OS is AIX. */
  143. #ifndef _ALL_SOURCE
  144. # undef _ALL_SOURCE
  145. #endif])
  146. AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
  147. AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
  148. AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
  149. AC_EGREP_CPP([yes_this_is_aix],[
  150. #ifdef _AIX
  151. yes_this_is_aix
  152. #endif
  153. ],[
  154. AC_MSG_RESULT([yes])
  155. AC_DEFINE(_ALL_SOURCE)
  156. ],[
  157. AC_MSG_RESULT([no])
  158. ])
  159. ])
  160. dnl CURL_CHECK_NATIVE_WINDOWS
  161. dnl -------------------------------------------------
  162. dnl Check if building a native Windows target
  163. AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
  164. AC_CACHE_CHECK([whether build target is a native Windows one], [curl_cv_native_windows], [
  165. AC_COMPILE_IFELSE([
  166. AC_LANG_PROGRAM([[
  167. ]],[[
  168. #ifdef _WIN32
  169. int dummy=1;
  170. #else
  171. Not a native Windows build target.
  172. #endif
  173. ]])
  174. ],[
  175. curl_cv_native_windows="yes"
  176. ],[
  177. curl_cv_native_windows="no"
  178. ])
  179. ])
  180. AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$curl_cv_native_windows" = xyes)
  181. ])
  182. dnl CURL_CHECK_HEADER_LBER
  183. dnl -------------------------------------------------
  184. dnl Check for compilable and valid lber.h header,
  185. dnl and check if it is needed even with ldap.h
  186. AC_DEFUN([CURL_CHECK_HEADER_LBER], [
  187. AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
  188. AC_CACHE_CHECK([for lber.h], [curl_cv_header_lber_h], [
  189. AC_COMPILE_IFELSE([
  190. AC_LANG_PROGRAM([[
  191. #undef inline
  192. #ifdef _WIN32
  193. #ifndef WIN32_LEAN_AND_MEAN
  194. #define WIN32_LEAN_AND_MEAN
  195. #endif
  196. #include <windows.h>
  197. #else
  198. #ifdef HAVE_SYS_TYPES_H
  199. #include <sys/types.h>
  200. #endif
  201. #endif
  202. #ifndef NULL
  203. #define NULL (void *)0
  204. #endif
  205. #include <lber.h>
  206. ]],[[
  207. BerValue *bvp = NULL;
  208. BerElement *bep = ber_init(bvp);
  209. ber_free(bep, 1);
  210. ]])
  211. ],[
  212. curl_cv_header_lber_h="yes"
  213. ],[
  214. curl_cv_header_lber_h="no"
  215. ])
  216. ])
  217. if test "$curl_cv_header_lber_h" = "yes"; then
  218. AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
  219. [Define to 1 if you have the lber.h header file.])
  220. #
  221. AC_COMPILE_IFELSE([
  222. AC_LANG_PROGRAM([[
  223. #undef inline
  224. #ifdef _WIN32
  225. #ifndef WIN32_LEAN_AND_MEAN
  226. #define WIN32_LEAN_AND_MEAN
  227. #endif
  228. #include <windows.h>
  229. #else
  230. #ifdef HAVE_SYS_TYPES_H
  231. #include <sys/types.h>
  232. #endif
  233. #endif
  234. #ifndef NULL
  235. #define NULL (void *)0
  236. #endif
  237. #ifndef LDAP_DEPRECATED
  238. #define LDAP_DEPRECATED 1
  239. #endif
  240. #include <ldap.h>
  241. ]],[[
  242. BerValue *bvp = NULL;
  243. BerElement *bep = ber_init(bvp);
  244. ber_free(bep, 1);
  245. ]])
  246. ],[
  247. curl_cv_need_header_lber_h="no"
  248. ],[
  249. curl_cv_need_header_lber_h="yes"
  250. ])
  251. #
  252. case "$curl_cv_need_header_lber_h" in
  253. yes)
  254. AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
  255. [Define to 1 if you need the lber.h header file even with ldap.h])
  256. ;;
  257. esac
  258. fi
  259. ])
  260. dnl CURL_CHECK_HEADER_LDAP
  261. dnl -------------------------------------------------
  262. dnl Check for compilable and valid ldap.h header
  263. AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
  264. AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
  265. AC_CACHE_CHECK([for ldap.h], [curl_cv_header_ldap_h], [
  266. AC_COMPILE_IFELSE([
  267. AC_LANG_PROGRAM([[
  268. #undef inline
  269. #ifdef _WIN32
  270. #ifndef WIN32_LEAN_AND_MEAN
  271. #define WIN32_LEAN_AND_MEAN
  272. #endif
  273. #include <windows.h>
  274. #else
  275. #ifdef HAVE_SYS_TYPES_H
  276. #include <sys/types.h>
  277. #endif
  278. #endif
  279. #ifndef LDAP_DEPRECATED
  280. #define LDAP_DEPRECATED 1
  281. #endif
  282. #ifdef NEED_LBER_H
  283. #include <lber.h>
  284. #endif
  285. #include <ldap.h>
  286. ]],[[
  287. LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
  288. int res = ldap_unbind(ldp);
  289. ]])
  290. ],[
  291. curl_cv_header_ldap_h="yes"
  292. ],[
  293. curl_cv_header_ldap_h="no"
  294. ])
  295. ])
  296. case "$curl_cv_header_ldap_h" in
  297. yes)
  298. AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
  299. [Define to 1 if you have the ldap.h header file.])
  300. ;;
  301. esac
  302. ])
  303. dnl CURL_CHECK_HEADER_LDAP_SSL
  304. dnl -------------------------------------------------
  305. dnl Check for compilable and valid ldap_ssl.h header
  306. AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
  307. AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
  308. AC_CACHE_CHECK([for ldap_ssl.h], [curl_cv_header_ldap_ssl_h], [
  309. AC_COMPILE_IFELSE([
  310. AC_LANG_PROGRAM([[
  311. #undef inline
  312. #ifdef _WIN32
  313. #ifndef WIN32_LEAN_AND_MEAN
  314. #define WIN32_LEAN_AND_MEAN
  315. #endif
  316. #include <windows.h>
  317. #else
  318. #ifdef HAVE_SYS_TYPES_H
  319. #include <sys/types.h>
  320. #endif
  321. #endif
  322. #ifndef LDAP_DEPRECATED
  323. #define LDAP_DEPRECATED 1
  324. #endif
  325. #ifdef NEED_LBER_H
  326. #include <lber.h>
  327. #endif
  328. #ifdef HAVE_LDAP_H
  329. #include <ldap.h>
  330. #endif
  331. #include <ldap_ssl.h>
  332. ]],[[
  333. LDAP *ldp = ldapssl_init("0.0.0.0", LDAPS_PORT, 1);
  334. ]])
  335. ],[
  336. curl_cv_header_ldap_ssl_h="yes"
  337. ],[
  338. curl_cv_header_ldap_ssl_h="no"
  339. ])
  340. ])
  341. case "$curl_cv_header_ldap_ssl_h" in
  342. yes)
  343. AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
  344. [Define to 1 if you have the ldap_ssl.h header file.])
  345. ;;
  346. esac
  347. ])
  348. dnl CURL_CHECK_LIBS_WINLDAP
  349. dnl -------------------------------------------------
  350. dnl Check for libraries needed for WINLDAP support,
  351. dnl and prepended to LIBS any needed libraries.
  352. dnl This macro can take an optional parameter with a
  353. dnl whitespace separated list of libraries to check
  354. dnl before the WINLDAP default ones.
  355. AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
  356. AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
  357. #
  358. AC_MSG_CHECKING([for WINLDAP libraries])
  359. #
  360. u_libs=""
  361. #
  362. ifelse($1,,,[
  363. for x_lib in $1; do
  364. case "$x_lib" in
  365. -l*)
  366. l_lib="$x_lib"
  367. ;;
  368. *)
  369. l_lib="-l$x_lib"
  370. ;;
  371. esac
  372. if test -z "$u_libs"; then
  373. u_libs="$l_lib"
  374. else
  375. u_libs="$u_libs $l_lib"
  376. fi
  377. done
  378. ])
  379. #
  380. curl_cv_save_LIBS="$LIBS"
  381. curl_cv_ldap_LIBS="unknown"
  382. #
  383. for x_nlibs in '' "$u_libs" \
  384. '-lwldap32' ; do
  385. if test "$curl_cv_ldap_LIBS" = "unknown"; then
  386. if test -z "$x_nlibs"; then
  387. LIBS="$curl_cv_save_LIBS"
  388. else
  389. LIBS="$x_nlibs $curl_cv_save_LIBS"
  390. fi
  391. AC_LINK_IFELSE([
  392. AC_LANG_PROGRAM([[
  393. #undef inline
  394. #ifdef _WIN32
  395. #ifndef WIN32_LEAN_AND_MEAN
  396. #define WIN32_LEAN_AND_MEAN
  397. #endif
  398. #include <windows.h>
  399. #include <winldap.h>
  400. #ifdef HAVE_WINBER_H
  401. #include <winber.h>
  402. #endif
  403. #endif
  404. ]],[[
  405. BERVAL *bvp = NULL;
  406. BerElement *bep = ber_init(bvp);
  407. LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
  408. ULONG res = ldap_unbind(ldp);
  409. ber_free(bep, 1);
  410. ]])
  411. ],[
  412. curl_cv_ldap_LIBS="$x_nlibs"
  413. ])
  414. fi
  415. done
  416. #
  417. LIBS="$curl_cv_save_LIBS"
  418. #
  419. case X-"$curl_cv_ldap_LIBS" in
  420. X-unknown)
  421. AC_MSG_RESULT([cannot find WINLDAP libraries])
  422. ;;
  423. X-)
  424. AC_MSG_RESULT([no additional lib required])
  425. ;;
  426. *)
  427. if test -z "$curl_cv_save_LIBS"; then
  428. LIBS="$curl_cv_ldap_LIBS"
  429. else
  430. LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
  431. fi
  432. AC_MSG_RESULT([$curl_cv_ldap_LIBS])
  433. ;;
  434. esac
  435. #
  436. ])
  437. dnl CURL_CHECK_LIBS_LDAP
  438. dnl -------------------------------------------------
  439. dnl Check for libraries needed for LDAP support,
  440. dnl and prepended to LIBS any needed libraries.
  441. dnl This macro can take an optional parameter with a
  442. dnl whitespace separated list of libraries to check
  443. dnl before the default ones.
  444. AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
  445. AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
  446. #
  447. AC_MSG_CHECKING([for LDAP libraries])
  448. #
  449. u_libs=""
  450. #
  451. ifelse($1,,,[
  452. for x_lib in $1; do
  453. case "$x_lib" in
  454. -l*)
  455. l_lib="$x_lib"
  456. ;;
  457. *)
  458. l_lib="-l$x_lib"
  459. ;;
  460. esac
  461. if test -z "$u_libs"; then
  462. u_libs="$l_lib"
  463. else
  464. u_libs="$u_libs $l_lib"
  465. fi
  466. done
  467. ])
  468. #
  469. curl_cv_save_LIBS="$LIBS"
  470. curl_cv_ldap_LIBS="unknown"
  471. #
  472. for x_nlibs in '' "$u_libs" \
  473. '-lldap' \
  474. '-lldap -llber' \
  475. '-llber -lldap' \
  476. '-lldapssl -lldapx -lldapsdk' \
  477. '-lldapsdk -lldapx -lldapssl' \
  478. '-lldap -llber -lssl -lcrypto' ; do
  479. if test "$curl_cv_ldap_LIBS" = "unknown"; then
  480. if test -z "$x_nlibs"; then
  481. LIBS="$curl_cv_save_LIBS"
  482. else
  483. LIBS="$x_nlibs $curl_cv_save_LIBS"
  484. fi
  485. AC_LINK_IFELSE([
  486. AC_LANG_PROGRAM([[
  487. #undef inline
  488. #ifdef _WIN32
  489. #ifndef WIN32_LEAN_AND_MEAN
  490. #define WIN32_LEAN_AND_MEAN
  491. #endif
  492. #include <windows.h>
  493. #else
  494. #ifdef HAVE_SYS_TYPES_H
  495. #include <sys/types.h>
  496. #endif
  497. #endif
  498. #ifndef NULL
  499. #define NULL (void *)0
  500. #endif
  501. #ifndef LDAP_DEPRECATED
  502. #define LDAP_DEPRECATED 1
  503. #endif
  504. #ifdef NEED_LBER_H
  505. #include <lber.h>
  506. #endif
  507. #ifdef HAVE_LDAP_H
  508. #include <ldap.h>
  509. #endif
  510. ]],[[
  511. BerValue *bvp = NULL;
  512. BerElement *bep = ber_init(bvp);
  513. LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
  514. int res = ldap_unbind(ldp);
  515. ber_free(bep, 1);
  516. ]])
  517. ],[
  518. curl_cv_ldap_LIBS="$x_nlibs"
  519. ])
  520. fi
  521. done
  522. #
  523. LIBS="$curl_cv_save_LIBS"
  524. #
  525. case X-"$curl_cv_ldap_LIBS" in
  526. X-unknown)
  527. AC_MSG_RESULT([cannot find LDAP libraries])
  528. ;;
  529. X-)
  530. AC_MSG_RESULT([no additional lib required])
  531. ;;
  532. *)
  533. if test -z "$curl_cv_save_LIBS"; then
  534. LIBS="$curl_cv_ldap_LIBS"
  535. else
  536. LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
  537. fi
  538. AC_MSG_RESULT([$curl_cv_ldap_LIBS])
  539. ;;
  540. esac
  541. #
  542. ])
  543. dnl TYPE_SOCKADDR_STORAGE
  544. dnl -------------------------------------------------
  545. dnl Check for struct sockaddr_storage. Most IPv6-enabled
  546. dnl hosts have it, but AIX 4.3 is one known exception.
  547. AC_DEFUN([TYPE_SOCKADDR_STORAGE],
  548. [
  549. AC_CHECK_TYPE([struct sockaddr_storage],
  550. AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
  551. [if struct sockaddr_storage is defined]), ,
  552. [
  553. #undef inline
  554. #ifdef _WIN32
  555. #ifndef WIN32_LEAN_AND_MEAN
  556. #define WIN32_LEAN_AND_MEAN
  557. #endif
  558. #include <winsock2.h>
  559. #else
  560. #ifdef HAVE_SYS_TYPES_H
  561. #include <sys/types.h>
  562. #endif
  563. #ifdef HAVE_SYS_SOCKET_H
  564. #include <sys/socket.h>
  565. #endif
  566. #ifdef HAVE_NETINET_IN_H
  567. #include <netinet/in.h>
  568. #endif
  569. #ifdef HAVE_ARPA_INET_H
  570. #include <arpa/inet.h>
  571. #endif
  572. #endif
  573. ])
  574. ])
  575. dnl CURL_CHECK_FUNC_RECV
  576. dnl -------------------------------------------------
  577. dnl Test if the socket recv() function is available,
  578. AC_DEFUN([CURL_CHECK_FUNC_RECV], [
  579. AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
  580. AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
  581. AC_CHECK_HEADERS(sys/types.h sys/socket.h)
  582. #
  583. AC_MSG_CHECKING([for recv])
  584. AC_LINK_IFELSE([
  585. AC_LANG_PROGRAM([[
  586. #undef inline
  587. #ifdef _WIN32
  588. #ifndef WIN32_LEAN_AND_MEAN
  589. #define WIN32_LEAN_AND_MEAN
  590. #endif
  591. #include <winsock2.h>
  592. #else
  593. $curl_includes_bsdsocket
  594. #ifdef HAVE_SYS_TYPES_H
  595. #include <sys/types.h>
  596. #endif
  597. #ifdef HAVE_SYS_SOCKET_H
  598. #include <sys/socket.h>
  599. #endif
  600. #endif
  601. ]],[[
  602. recv(0, 0, 0, 0);
  603. ]])
  604. ],[
  605. AC_MSG_RESULT([yes])
  606. curl_cv_recv="yes"
  607. ],[
  608. AC_MSG_RESULT([no])
  609. curl_cv_recv="no"
  610. ])
  611. #
  612. if test "$curl_cv_recv" = "yes"; then
  613. AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
  614. [Define to 1 if you have the recv function.])
  615. curl_cv_func_recv="yes"
  616. else
  617. AC_MSG_ERROR([Unable to link function recv])
  618. fi
  619. ])
  620. dnl CURL_CHECK_FUNC_SEND
  621. dnl -------------------------------------------------
  622. dnl Test if the socket send() function is available,
  623. AC_DEFUN([CURL_CHECK_FUNC_SEND], [
  624. AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
  625. AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
  626. AC_CHECK_HEADERS(sys/types.h sys/socket.h)
  627. #
  628. AC_MSG_CHECKING([for send])
  629. AC_LINK_IFELSE([
  630. AC_LANG_PROGRAM([[
  631. #undef inline
  632. #ifdef _WIN32
  633. #ifndef WIN32_LEAN_AND_MEAN
  634. #define WIN32_LEAN_AND_MEAN
  635. #endif
  636. #include <winsock2.h>
  637. #else
  638. $curl_includes_bsdsocket
  639. #ifdef HAVE_SYS_TYPES_H
  640. #include <sys/types.h>
  641. #endif
  642. #ifdef HAVE_SYS_SOCKET_H
  643. #include <sys/socket.h>
  644. #endif
  645. #endif
  646. ]],[[
  647. send(0, 0, 0, 0);
  648. ]])
  649. ],[
  650. AC_MSG_RESULT([yes])
  651. curl_cv_send="yes"
  652. ],[
  653. AC_MSG_RESULT([no])
  654. curl_cv_send="no"
  655. ])
  656. #
  657. if test "$curl_cv_send" = "yes"; then
  658. AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
  659. [Define to 1 if you have the send function.])
  660. curl_cv_func_send="yes"
  661. else
  662. AC_MSG_ERROR([Unable to link function send])
  663. fi
  664. ])
  665. dnl CURL_CHECK_MSG_NOSIGNAL
  666. dnl -------------------------------------------------
  667. dnl Check for MSG_NOSIGNAL
  668. AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
  669. AC_CHECK_HEADERS(sys/types.h sys/socket.h)
  670. AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [
  671. AC_COMPILE_IFELSE([
  672. AC_LANG_PROGRAM([[
  673. #undef inline
  674. #ifdef _WIN32
  675. #ifndef WIN32_LEAN_AND_MEAN
  676. #define WIN32_LEAN_AND_MEAN
  677. #endif
  678. #include <winsock2.h>
  679. #else
  680. #ifdef HAVE_SYS_TYPES_H
  681. #include <sys/types.h>
  682. #endif
  683. #ifdef HAVE_SYS_SOCKET_H
  684. #include <sys/socket.h>
  685. #endif
  686. #endif
  687. ]],[[
  688. int flag=MSG_NOSIGNAL;
  689. ]])
  690. ],[
  691. curl_cv_msg_nosignal="yes"
  692. ],[
  693. curl_cv_msg_nosignal="no"
  694. ])
  695. ])
  696. case "$curl_cv_msg_nosignal" in
  697. yes)
  698. AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
  699. [Define to 1 if you have the MSG_NOSIGNAL flag.])
  700. ;;
  701. esac
  702. ])
  703. dnl CURL_CHECK_STRUCT_TIMEVAL
  704. dnl -------------------------------------------------
  705. dnl Check for timeval struct
  706. AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
  707. AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
  708. AC_CHECK_HEADERS(sys/types.h sys/time.h sys/socket.h)
  709. AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [
  710. AC_COMPILE_IFELSE([
  711. AC_LANG_PROGRAM([[
  712. #undef inline
  713. #ifdef _WIN32
  714. #ifndef WIN32_LEAN_AND_MEAN
  715. #define WIN32_LEAN_AND_MEAN
  716. #endif
  717. #include <winsock2.h>
  718. #endif
  719. #ifdef HAVE_SYS_TYPES_H
  720. #include <sys/types.h>
  721. #endif
  722. #ifdef HAVE_SYS_TIME_H
  723. #include <sys/time.h>
  724. #endif
  725. #include <time.h>
  726. #ifdef HAVE_SYS_SOCKET_H
  727. #include <sys/socket.h>
  728. #endif
  729. ]],[[
  730. struct timeval ts;
  731. ts.tv_sec = 0;
  732. ts.tv_usec = 0;
  733. ]])
  734. ],[
  735. curl_cv_struct_timeval="yes"
  736. ],[
  737. curl_cv_struct_timeval="no"
  738. ])
  739. ])
  740. case "$curl_cv_struct_timeval" in
  741. yes)
  742. AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
  743. [Define to 1 if you have the timeval struct.])
  744. ;;
  745. esac
  746. ])
  747. dnl TYPE_IN_ADDR_T
  748. dnl -------------------------------------------------
  749. dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
  750. dnl and a few other things.
  751. AC_DEFUN([TYPE_IN_ADDR_T], [
  752. AC_CHECK_TYPE([in_addr_t], ,[
  753. dnl in_addr_t not available
  754. AC_CACHE_CHECK([for in_addr_t equivalent],
  755. [curl_cv_in_addr_t_equiv], [
  756. curl_cv_in_addr_t_equiv="unknown"
  757. for t in "unsigned long" int size_t unsigned long; do
  758. if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
  759. AC_LINK_IFELSE([
  760. AC_LANG_PROGRAM([[
  761. #undef inline
  762. #ifdef _WIN32
  763. #ifndef WIN32_LEAN_AND_MEAN
  764. #define WIN32_LEAN_AND_MEAN
  765. #endif
  766. #include <winsock2.h>
  767. #else
  768. #ifdef HAVE_SYS_TYPES_H
  769. #include <sys/types.h>
  770. #endif
  771. #ifdef HAVE_SYS_SOCKET_H
  772. #include <sys/socket.h>
  773. #endif
  774. #ifdef HAVE_NETINET_IN_H
  775. #include <netinet/in.h>
  776. #endif
  777. #ifdef HAVE_ARPA_INET_H
  778. #include <arpa/inet.h>
  779. #endif
  780. #endif
  781. ]],[[
  782. $t data = inet_addr ("1.2.3.4");
  783. ]])
  784. ],[
  785. curl_cv_in_addr_t_equiv="$t"
  786. ])
  787. fi
  788. done
  789. ])
  790. case "$curl_cv_in_addr_t_equiv" in
  791. unknown)
  792. AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
  793. ;;
  794. *)
  795. AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
  796. [Type to use in place of in_addr_t when system does not provide it.])
  797. ;;
  798. esac
  799. ],[
  800. #undef inline
  801. #ifdef _WIN32
  802. #ifndef WIN32_LEAN_AND_MEAN
  803. #define WIN32_LEAN_AND_MEAN
  804. #endif
  805. #include <winsock2.h>
  806. #else
  807. #ifdef HAVE_SYS_TYPES_H
  808. #include <sys/types.h>
  809. #endif
  810. #ifdef HAVE_SYS_SOCKET_H
  811. #include <sys/socket.h>
  812. #endif
  813. #ifdef HAVE_NETINET_IN_H
  814. #include <netinet/in.h>
  815. #endif
  816. #ifdef HAVE_ARPA_INET_H
  817. #include <arpa/inet.h>
  818. #endif
  819. #endif
  820. ])
  821. ])
  822. dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
  823. dnl -------------------------------------------------
  824. dnl Check if monotonic clock_gettime is available.
  825. AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
  826. AC_CHECK_HEADERS(sys/types.h sys/time.h)
  827. AC_MSG_CHECKING([for monotonic clock_gettime])
  828. #
  829. if test "x$dontwant_rt" = "xno" ; then
  830. AC_COMPILE_IFELSE([
  831. AC_LANG_PROGRAM([[
  832. #ifdef HAVE_SYS_TYPES_H
  833. #include <sys/types.h>
  834. #endif
  835. #ifdef HAVE_SYS_TIME_H
  836. #include <sys/time.h>
  837. #endif
  838. #include <time.h>
  839. ]],[[
  840. struct timespec ts;
  841. (void)clock_gettime(CLOCK_MONOTONIC, &ts);
  842. ]])
  843. ],[
  844. AC_MSG_RESULT([yes])
  845. curl_func_clock_gettime="yes"
  846. ],[
  847. AC_MSG_RESULT([no])
  848. curl_func_clock_gettime="no"
  849. ])
  850. fi
  851. dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
  852. dnl until library linking and run-time checks for clock_gettime succeed.
  853. ])
  854. dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC_RAW
  855. dnl -------------------------------------------------
  856. dnl Check if monotonic clock_gettime is available.
  857. AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC_RAW], [
  858. AC_CHECK_HEADERS(sys/types.h sys/time.h)
  859. AC_MSG_CHECKING([for raw monotonic clock_gettime])
  860. #
  861. if test "x$dontwant_rt" = "xno" ; then
  862. AC_COMPILE_IFELSE([
  863. AC_LANG_PROGRAM([[
  864. #ifdef HAVE_SYS_TYPES_H
  865. #include <sys/types.h>
  866. #endif
  867. #ifdef HAVE_SYS_TIME_H
  868. #include <sys/time.h>
  869. #endif
  870. #include <time.h>
  871. ]],[[
  872. struct timespec ts;
  873. (void)clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
  874. ]])
  875. ],[
  876. AC_MSG_RESULT([yes])
  877. AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC_RAW, 1,
  878. [Define to 1 if you have the clock_gettime function and raw monotonic timer.])
  879. ],[
  880. AC_MSG_RESULT([no])
  881. ])
  882. fi
  883. ])
  884. dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
  885. dnl -------------------------------------------------
  886. dnl If monotonic clock_gettime is available then,
  887. dnl check and prepended to LIBS any needed libraries.
  888. AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
  889. AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
  890. #
  891. if test "$curl_func_clock_gettime" = "yes"; then
  892. #
  893. AC_MSG_CHECKING([for clock_gettime in libraries])
  894. #
  895. curl_cv_save_LIBS="$LIBS"
  896. curl_cv_gclk_LIBS="unknown"
  897. #
  898. for x_xlibs in '' '-lrt' '-lposix4' ; do
  899. if test "$curl_cv_gclk_LIBS" = "unknown"; then
  900. if test -z "$x_xlibs"; then
  901. LIBS="$curl_cv_save_LIBS"
  902. else
  903. LIBS="$x_xlibs $curl_cv_save_LIBS"
  904. fi
  905. AC_LINK_IFELSE([
  906. AC_LANG_PROGRAM([[
  907. #ifdef HAVE_SYS_TYPES_H
  908. #include <sys/types.h>
  909. #endif
  910. #ifdef HAVE_SYS_TIME_H
  911. #include <sys/time.h>
  912. #endif
  913. #include <time.h>
  914. ]],[[
  915. struct timespec ts;
  916. (void)clock_gettime(CLOCK_MONOTONIC, &ts);
  917. ]])
  918. ],[
  919. curl_cv_gclk_LIBS="$x_xlibs"
  920. ])
  921. fi
  922. done
  923. #
  924. LIBS="$curl_cv_save_LIBS"
  925. #
  926. case X-"$curl_cv_gclk_LIBS" in
  927. X-unknown)
  928. AC_MSG_RESULT([cannot find clock_gettime])
  929. AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
  930. curl_func_clock_gettime="no"
  931. ;;
  932. X-)
  933. AC_MSG_RESULT([no additional lib required])
  934. curl_func_clock_gettime="yes"
  935. ;;
  936. *)
  937. if test -z "$curl_cv_save_LIBS"; then
  938. LIBS="$curl_cv_gclk_LIBS"
  939. else
  940. LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
  941. fi
  942. AC_MSG_RESULT([$curl_cv_gclk_LIBS])
  943. curl_func_clock_gettime="yes"
  944. ;;
  945. esac
  946. #
  947. dnl only do runtime verification when not cross-compiling
  948. if test "x$cross_compiling" != "xyes" &&
  949. test "$curl_func_clock_gettime" = "yes"; then
  950. AC_MSG_CHECKING([if monotonic clock_gettime works])
  951. CURL_RUN_IFELSE([
  952. AC_LANG_PROGRAM([[
  953. #include <stdlib.h>
  954. #ifdef HAVE_SYS_TYPES_H
  955. #include <sys/types.h>
  956. #endif
  957. #ifdef HAVE_SYS_TIME_H
  958. #include <sys/time.h>
  959. #endif
  960. #include <time.h>
  961. ]],[[
  962. struct timespec ts;
  963. if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
  964. exit(0);
  965. else
  966. exit(1);
  967. ]])
  968. ],[
  969. AC_MSG_RESULT([yes])
  970. ],[
  971. AC_MSG_RESULT([no])
  972. AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
  973. curl_func_clock_gettime="no"
  974. LIBS="$curl_cv_save_LIBS"
  975. ])
  976. fi
  977. #
  978. case "$curl_func_clock_gettime" in
  979. yes)
  980. AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
  981. [Define to 1 if you have the clock_gettime function and monotonic timer.])
  982. ;;
  983. esac
  984. #
  985. fi
  986. #
  987. ])
  988. dnl CURL_CHECK_LIBS_CONNECT
  989. dnl -------------------------------------------------
  990. dnl Verify if network connect function is already available
  991. dnl using current libraries or if another one is required.
  992. AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
  993. AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
  994. AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
  995. AC_MSG_CHECKING([for connect in libraries])
  996. tst_connect_save_LIBS="$LIBS"
  997. tst_connect_need_LIBS="unknown"
  998. for tst_lib in '' '-lsocket' ; do
  999. if test "$tst_connect_need_LIBS" = "unknown"; then
  1000. LIBS="$tst_lib $tst_connect_save_LIBS"
  1001. AC_LINK_IFELSE([
  1002. AC_LANG_PROGRAM([[
  1003. $curl_includes_winsock2
  1004. $curl_includes_bsdsocket
  1005. #if !defined(_WIN32) && !defined(HAVE_PROTO_BSDSOCKET_H)
  1006. int connect(int, void*, int);
  1007. #endif
  1008. ]],[[
  1009. if(0 != connect(0, 0, 0))
  1010. return 1;
  1011. ]])
  1012. ],[
  1013. tst_connect_need_LIBS="$tst_lib"
  1014. ])
  1015. fi
  1016. done
  1017. LIBS="$tst_connect_save_LIBS"
  1018. #
  1019. case X-"$tst_connect_need_LIBS" in
  1020. X-unknown)
  1021. AC_MSG_RESULT([cannot find connect])
  1022. AC_MSG_ERROR([cannot find connect function in libraries.])
  1023. ;;
  1024. X-)
  1025. AC_MSG_RESULT([yes])
  1026. ;;
  1027. *)
  1028. AC_MSG_RESULT([$tst_connect_need_LIBS])
  1029. LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
  1030. ;;
  1031. esac
  1032. ])
  1033. dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
  1034. dnl -------------------------------------------------
  1035. dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
  1036. dnl symbol that can be further used in custom template configuration
  1037. dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
  1038. dnl argument for the description. Symbol definitions done with this
  1039. dnl macro are intended to be exclusively used in handcrafted *.h.in
  1040. dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
  1041. dnl prevents autoheader generation and insertion of symbol template
  1042. dnl stub and definition into the first configuration header file. Do
  1043. dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
  1044. dnl one serves different functional needs.
  1045. AC_DEFUN([CURL_DEFINE_UNQUOTED], [
  1046. cat >>confdefs.h <<_EOF
  1047. [@%:@define] $1 ifelse($#, 2, [$2], 1)
  1048. _EOF
  1049. ])
  1050. dnl CURL_CHECK_FUNC_SELECT
  1051. dnl -------------------------------------------------
  1052. dnl Test if the socket select() function is available.
  1053. AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
  1054. AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
  1055. AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
  1056. AC_CHECK_HEADERS(sys/select.h sys/socket.h)
  1057. #
  1058. AC_MSG_CHECKING([for select])
  1059. AC_LINK_IFELSE([
  1060. AC_LANG_PROGRAM([[
  1061. #undef inline
  1062. #ifdef _WIN32
  1063. #ifndef WIN32_LEAN_AND_MEAN
  1064. #define WIN32_LEAN_AND_MEAN
  1065. #endif
  1066. #include <winsock2.h>
  1067. #endif
  1068. #ifdef HAVE_SYS_TYPES_H
  1069. #include <sys/types.h>
  1070. #endif
  1071. #ifdef HAVE_SYS_TIME_H
  1072. #include <sys/time.h>
  1073. #endif
  1074. #include <time.h>
  1075. #ifndef _WIN32
  1076. #ifdef HAVE_SYS_SELECT_H
  1077. #include <sys/select.h>
  1078. #elif defined(HAVE_UNISTD_H)
  1079. #include <unistd.h>
  1080. #endif
  1081. #ifdef HAVE_SYS_SOCKET_H
  1082. #include <sys/socket.h>
  1083. #endif
  1084. $curl_includes_bsdsocket
  1085. #endif
  1086. ]],[[
  1087. select(0, 0, 0, 0, 0);
  1088. ]])
  1089. ],[
  1090. AC_MSG_RESULT([yes])
  1091. curl_cv_select="yes"
  1092. ],[
  1093. AC_MSG_RESULT([no])
  1094. curl_cv_select="no"
  1095. ])
  1096. #
  1097. if test "$curl_cv_select" = "yes"; then
  1098. AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
  1099. [Define to 1 if you have the select function.])
  1100. curl_cv_func_select="yes"
  1101. fi
  1102. ])
  1103. dnl CURL_VERIFY_RUNTIMELIBS
  1104. dnl -------------------------------------------------
  1105. dnl Verify that the shared libs found so far can be used when running
  1106. dnl programs, since otherwise the situation will create odd configure errors
  1107. dnl that are misleading people.
  1108. dnl
  1109. dnl Make sure this test is run BEFORE the first test in the script that
  1110. dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
  1111. dnl macro. It must also run AFTER all lib-checking macros are complete.
  1112. AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
  1113. dnl this test is of course not sensible if we are cross-compiling!
  1114. if test "x$cross_compiling" != xyes; then
  1115. dnl just run a program to verify that the libs checked for previous to this
  1116. dnl point also is available run-time!
  1117. AC_MSG_CHECKING([run-time libs availability])
  1118. CURL_RUN_IFELSE([
  1119. int main()
  1120. {
  1121. return 0;
  1122. }
  1123. ],
  1124. AC_MSG_RESULT([fine]),
  1125. AC_MSG_RESULT([failed])
  1126. AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
  1127. )
  1128. dnl if this test fails, configure has already stopped
  1129. fi
  1130. ])
  1131. dnl CURL_CHECK_CA_BUNDLE
  1132. dnl -------------------------------------------------
  1133. dnl Check if a default ca-bundle should be used
  1134. dnl
  1135. dnl regarding the paths this will scan:
  1136. dnl /etc/ssl/certs/ca-certificates.crt Debian systems
  1137. dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
  1138. dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
  1139. dnl /usr/local/share/certs/ca-root-nss.crt MidnightBSD
  1140. dnl /etc/ssl/cert.pem OpenBSD, MidnightBSD (symlink)
  1141. dnl /etc/ssl/certs (CA path) SUSE, FreeBSD
  1142. AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
  1143. AC_MSG_CHECKING([default CA cert bundle/path])
  1144. AC_ARG_WITH(ca-bundle,
  1145. AS_HELP_STRING([--with-ca-bundle=FILE],
  1146. [Path to a file containing CA certificates (example: /etc/ca-bundle.crt)])
  1147. AS_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
  1148. [
  1149. want_ca="$withval"
  1150. if test "x$want_ca" = "xyes"; then
  1151. AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
  1152. fi
  1153. ],
  1154. [ want_ca="unset" ])
  1155. AC_ARG_WITH(ca-path,
  1156. AS_HELP_STRING([--with-ca-path=DIRECTORY],
  1157. [Path to a directory containing CA certificates stored individually, with \
  1158. their filenames in a hash format. This option can be used with the OpenSSL, \
  1159. GnuTLS, mbedTLS and wolfSSL backends. Refer to OpenSSL c_rehash for details. \
  1160. (example: /etc/certificates)])
  1161. AS_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
  1162. [
  1163. want_capath="$withval"
  1164. if test "x$want_capath" = "xyes"; then
  1165. AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
  1166. fi
  1167. ],
  1168. [ want_capath="unset"])
  1169. ca_warning=" (warning: certs not found)"
  1170. capath_warning=" (warning: certs not found)"
  1171. check_capath=""
  1172. if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
  1173. "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
  1174. dnl both given
  1175. ca="$want_ca"
  1176. capath="$want_capath"
  1177. elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
  1178. dnl --with-ca-bundle given
  1179. ca="$want_ca"
  1180. capath="no"
  1181. elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
  1182. dnl --with-ca-path given
  1183. if test "x$OPENSSL_ENABLED" != "x1" -a \
  1184. "x$GNUTLS_ENABLED" != "x1" -a \
  1185. "x$MBEDTLS_ENABLED" != "x1" -a \
  1186. "x$WOLFSSL_ENABLED" != "x1"; then
  1187. AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS, mbedTLS or wolfSSL])
  1188. fi
  1189. capath="$want_capath"
  1190. ca="no"
  1191. else
  1192. dnl first try autodetecting a CA bundle , then a CA path
  1193. dnl both autodetections can be skipped by --without-ca-*
  1194. ca="no"
  1195. capath="no"
  1196. if test "x$cross_compiling" != "xyes"; then
  1197. dnl NOT cross-compiling and...
  1198. dnl neither of the --with-ca-* options are provided
  1199. if test "x$want_ca" = "xunset"; then
  1200. dnl the path we previously would have installed the curl ca bundle
  1201. dnl to, and thus we now check for an already existing cert in that
  1202. dnl place in case we find no other
  1203. if test "x$prefix" != xNONE; then
  1204. cac="${prefix}/share/curl/curl-ca-bundle.crt"
  1205. else
  1206. cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
  1207. fi
  1208. for a in /etc/ssl/certs/ca-certificates.crt \
  1209. /etc/pki/tls/certs/ca-bundle.crt \
  1210. /usr/share/ssl/certs/ca-bundle.crt \
  1211. /usr/local/share/certs/ca-root-nss.crt \
  1212. /etc/ssl/cert.pem \
  1213. "$cac"; do
  1214. if test -f "$a"; then
  1215. ca="$a"
  1216. break
  1217. fi
  1218. done
  1219. fi
  1220. AC_MSG_NOTICE([want $want_capath ca $ca])
  1221. if test "x$want_capath" = "xunset"; then
  1222. if test "x$OPENSSL_ENABLED" = "x1" -o \
  1223. "x$GNUTLS_ENABLED" = "x1" -o \
  1224. "x$MBEDTLS_ENABLED" = "x1" -o \
  1225. "x$WOLFSSL_ENABLED" = "x1"; then
  1226. check_capath="/etc/ssl/certs"
  1227. fi
  1228. fi
  1229. else
  1230. dnl no option given and cross-compiling
  1231. AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling])
  1232. fi
  1233. fi
  1234. if test "x$ca" = "xno" || test -f "$ca"; then
  1235. ca_warning=""
  1236. fi
  1237. if test "x$capath" != "xno"; then
  1238. check_capath="$capath"
  1239. fi
  1240. if test ! -z "$check_capath"; then
  1241. for a in "$check_capath"; do
  1242. if test -d "$a" && ls "$a"/[[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]].0 >/dev/null 2>/dev/null; then
  1243. if test "x$capath" = "xno"; then
  1244. capath="$a"
  1245. fi
  1246. capath_warning=""
  1247. break
  1248. fi
  1249. done
  1250. fi
  1251. if test "x$capath" = "xno"; then
  1252. capath_warning=""
  1253. fi
  1254. if test "x$ca" != "xno"; then
  1255. CURL_CA_BUNDLE='"'$ca'"'
  1256. AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
  1257. AC_SUBST(CURL_CA_BUNDLE)
  1258. AC_MSG_RESULT([$ca])
  1259. fi
  1260. if test "x$capath" != "xno"; then
  1261. CURL_CA_PATH="\"$capath\""
  1262. AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
  1263. AC_MSG_RESULT([$capath (capath)])
  1264. fi
  1265. if test "x$ca" = "xno" && test "x$capath" = "xno"; then
  1266. AC_MSG_RESULT([no])
  1267. fi
  1268. AC_MSG_CHECKING([whether to use builtin CA store of SSL library])
  1269. AC_ARG_WITH(ca-fallback,
  1270. AS_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library])
  1271. AS_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]),
  1272. [
  1273. if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then
  1274. AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter])
  1275. fi
  1276. ],
  1277. [ with_ca_fallback="no"])
  1278. AC_MSG_RESULT([$with_ca_fallback])
  1279. if test "x$with_ca_fallback" = "xyes"; then
  1280. if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then
  1281. AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS])
  1282. fi
  1283. AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ])
  1284. fi
  1285. ])
  1286. dnl CURL_CHECK_WIN32_LARGEFILE
  1287. dnl -------------------------------------------------
  1288. dnl Check if curl's WIN32 large file will be used
  1289. AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
  1290. AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
  1291. AC_MSG_CHECKING([whether build target supports WIN32 file API])
  1292. curl_win32_file_api="no"
  1293. if test "$curl_cv_native_windows" = "yes"; then
  1294. if test x"$enable_largefile" != "xno"; then
  1295. AC_COMPILE_IFELSE([
  1296. AC_LANG_PROGRAM([[
  1297. ]],[[
  1298. #if !defined(_WIN32_WCE) && (defined(__MINGW32__) || defined(_MSC_VER))
  1299. int dummy=1;
  1300. #else
  1301. WIN32 large file API not supported.
  1302. #endif
  1303. ]])
  1304. ],[
  1305. curl_win32_file_api="win32_large_files"
  1306. ])
  1307. fi
  1308. if test "$curl_win32_file_api" = "no"; then
  1309. AC_COMPILE_IFELSE([
  1310. AC_LANG_PROGRAM([[
  1311. ]],[[
  1312. #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
  1313. int dummy=1;
  1314. #else
  1315. WIN32 small file API not supported.
  1316. #endif
  1317. ]])
  1318. ],[
  1319. curl_win32_file_api="win32_small_files"
  1320. ])
  1321. fi
  1322. fi
  1323. case "$curl_win32_file_api" in
  1324. win32_large_files)
  1325. AC_MSG_RESULT([yes (large file enabled)])
  1326. AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
  1327. [Define to 1 if you are building a Windows target with large file support.])
  1328. AC_SUBST(USE_WIN32_LARGE_FILES, [1])
  1329. ;;
  1330. win32_small_files)
  1331. AC_MSG_RESULT([yes (large file disabled)])
  1332. AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1,
  1333. [Define to 1 if you are building a Windows target without large file support.])
  1334. AC_SUBST(USE_WIN32_SMALL_FILES, [1])
  1335. ;;
  1336. *)
  1337. AC_MSG_RESULT([no])
  1338. ;;
  1339. esac
  1340. ])
  1341. dnl CURL_CHECK_WIN32_CRYPTO
  1342. dnl -------------------------------------------------
  1343. dnl Check if curl's WIN32 crypto lib can be used
  1344. AC_DEFUN([CURL_CHECK_WIN32_CRYPTO], [
  1345. AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
  1346. AC_MSG_CHECKING([whether build target supports WIN32 crypto API])
  1347. curl_win32_crypto_api="no"
  1348. if test "$curl_cv_native_windows" = "yes"; then
  1349. AC_COMPILE_IFELSE([
  1350. AC_LANG_PROGRAM([[
  1351. #undef inline
  1352. #ifndef WIN32_LEAN_AND_MEAN
  1353. #define WIN32_LEAN_AND_MEAN
  1354. #endif
  1355. #include <windows.h>
  1356. #include <wincrypt.h>
  1357. ]],[[
  1358. HCRYPTPROV hCryptProv;
  1359. if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL,
  1360. CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
  1361. CryptReleaseContext(hCryptProv, 0);
  1362. }
  1363. ]])
  1364. ],[
  1365. curl_win32_crypto_api="yes"
  1366. ])
  1367. fi
  1368. case "$curl_win32_crypto_api" in
  1369. yes)
  1370. AC_MSG_RESULT([yes])
  1371. AC_DEFINE_UNQUOTED(USE_WIN32_CRYPTO, 1,
  1372. [Define to 1 if you are building a Windows target with crypto API support.])
  1373. AC_SUBST(USE_WIN32_CRYPTO, [1])
  1374. ;;
  1375. *)
  1376. AC_MSG_RESULT([no])
  1377. ;;
  1378. esac
  1379. ])
  1380. dnl CURL_EXPORT_PCDIR ($pcdir)
  1381. dnl ------------------------
  1382. dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export
  1383. dnl
  1384. dnl we need this macro since pkg-config distinguishes among empty and unset
  1385. dnl variable while checking PKG_CONFIG_LIBDIR
  1386. dnl
  1387. AC_DEFUN([CURL_EXPORT_PCDIR], [
  1388. if test -n "$1"; then
  1389. PKG_CONFIG_LIBDIR="$1"
  1390. export PKG_CONFIG_LIBDIR
  1391. fi
  1392. ])
  1393. dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir])
  1394. dnl ------------------------
  1395. dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the
  1396. dnl path to it, or 'no' if not found/present.
  1397. dnl
  1398. dnl If pkg-config is present, check that it has info about the $module or
  1399. dnl return "no" anyway!
  1400. dnl
  1401. dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
  1402. dnl
  1403. AC_DEFUN([CURL_CHECK_PKGCONFIG], [
  1404. if test -n "$PKG_CONFIG"; then
  1405. PKGCONFIG="$PKG_CONFIG"
  1406. else
  1407. AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no],
  1408. [$PATH:/usr/bin:/usr/local/bin])
  1409. fi
  1410. if test "x$PKGCONFIG" != "xno"; then
  1411. AC_MSG_CHECKING([for $1 options with pkg-config])
  1412. dnl ask pkg-config about $1
  1413. itexists=`CURL_EXPORT_PCDIR([$2]) dnl
  1414. $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1`
  1415. if test -z "$itexists"; then
  1416. dnl pkg-config does not have info about the given module! set the
  1417. dnl variable to 'no'
  1418. PKGCONFIG="no"
  1419. AC_MSG_RESULT([no])
  1420. else
  1421. AC_MSG_RESULT([found])
  1422. fi
  1423. fi
  1424. ])
  1425. dnl CURL_GENERATE_CONFIGUREHELP_PM
  1426. dnl -------------------------------------------------
  1427. dnl Generate test harness configurehelp.pm module, defining and
  1428. dnl initializing some perl variables with values which are known
  1429. dnl when the configure script runs. For portability reasons, test
  1430. dnl harness needs information on how to run the C preprocessor.
  1431. AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [
  1432. AC_REQUIRE([AC_PROG_CPP])dnl
  1433. tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null`
  1434. if test -z "$tmp_cpp"; then
  1435. tmp_cpp='cpp'
  1436. fi
  1437. cat >./tests/configurehelp.pm <<_EOF
  1438. [@%:@] This is a generated file. Do not edit.
  1439. package configurehelp;
  1440. use strict;
  1441. use warnings;
  1442. use Exporter;
  1443. use vars qw(
  1444. @ISA
  1445. @EXPORT_OK
  1446. \$Cpreprocessor
  1447. );
  1448. @ISA = qw(Exporter);
  1449. @EXPORT_OK = qw(
  1450. \$Cpreprocessor
  1451. );
  1452. \$Cpreprocessor = '$tmp_cpp';
  1453. 1;
  1454. _EOF
  1455. ])
  1456. dnl CURL_CPP_P
  1457. dnl
  1458. dnl Check if $cpp -P should be used for extract define values due to gcc 5
  1459. dnl splitting up strings and defines between line outputs. gcc by default
  1460. dnl (without -P) will show TEST EINVAL TEST as
  1461. dnl
  1462. dnl # 13 "conftest.c"
  1463. dnl TEST
  1464. dnl # 13 "conftest.c" 3 4
  1465. dnl 22
  1466. dnl # 13 "conftest.c"
  1467. dnl TEST
  1468. AC_DEFUN([CURL_CPP_P], [
  1469. AC_MSG_CHECKING([if cpp -P is needed])
  1470. AC_EGREP_CPP([TEST.*TEST], [
  1471. #include <errno.h>
  1472. TEST EINVAL TEST
  1473. ], [cpp=no], [cpp=yes])
  1474. AC_MSG_RESULT([$cpp])
  1475. dnl we need cpp -P so check if it works then
  1476. if test "x$cpp" = "xyes"; then
  1477. AC_MSG_CHECKING([if cpp -P works])
  1478. OLDCPPFLAGS=$CPPFLAGS
  1479. CPPFLAGS="$CPPFLAGS -P"
  1480. AC_EGREP_CPP([TEST.*TEST], [
  1481. #include <errno.h>
  1482. TEST EINVAL TEST
  1483. ], [cpp_p=yes], [cpp_p=no])
  1484. AC_MSG_RESULT([$cpp_p])
  1485. if test "x$cpp_p" = "xno"; then
  1486. AC_MSG_WARN([failed to figure out cpp -P alternative])
  1487. # without -P
  1488. CPPPFLAG=""
  1489. else
  1490. # with -P
  1491. CPPPFLAG="-P"
  1492. fi
  1493. dnl restore CPPFLAGS
  1494. CPPFLAGS=$OLDCPPFLAGS
  1495. else
  1496. # without -P
  1497. CPPPFLAG=""
  1498. fi
  1499. ])
  1500. dnl CURL_DARWIN_CFLAGS
  1501. dnl
  1502. dnl Set -Werror=partial-availability to detect possible breaking code
  1503. dnl with very low deployment targets.
  1504. dnl
  1505. AC_DEFUN([CURL_DARWIN_CFLAGS], [
  1506. tst_cflags="no"
  1507. case $host_os in
  1508. darwin*)
  1509. tst_cflags="yes"
  1510. ;;
  1511. esac
  1512. AC_MSG_CHECKING([for good-to-use Darwin CFLAGS])
  1513. AC_MSG_RESULT([$tst_cflags]);
  1514. if test "$tst_cflags" = "yes"; then
  1515. old_CFLAGS=$CFLAGS
  1516. CFLAGS="$CFLAGS -Werror=partial-availability"
  1517. AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
  1518. AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
  1519. [AC_MSG_RESULT([yes])],
  1520. [AC_MSG_RESULT([no])
  1521. CFLAGS=$old_CFLAGS])
  1522. fi
  1523. ])
  1524. dnl CURL_SUPPORTS_BUILTIN_AVAILABLE
  1525. dnl
  1526. dnl Check to see if the compiler supports __builtin_available. This built-in
  1527. dnl compiler function first appeared in Apple LLVM 9.0.0. It's so new that, at
  1528. dnl the time this macro was written, the function was not yet documented. Its
  1529. dnl purpose is to return true if the code is running under a certain OS version
  1530. dnl or later.
  1531. AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [
  1532. AC_MSG_CHECKING([to see if the compiler supports __builtin_available()])
  1533. AC_COMPILE_IFELSE([
  1534. AC_LANG_PROGRAM([[
  1535. #include <stdlib.h>
  1536. ]],[[
  1537. if (__builtin_available(macOS 10.8, iOS 5.0, *)) {}
  1538. ]])
  1539. ],[
  1540. AC_MSG_RESULT([yes])
  1541. AC_DEFINE_UNQUOTED(HAVE_BUILTIN_AVAILABLE, 1,
  1542. [Define to 1 if you have the __builtin_available function.])
  1543. ],[
  1544. AC_MSG_RESULT([no])
  1545. ])
  1546. ])