acinclude.m4 46 KB

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