1dnl 2dnl Check if flush should be called explicitly after buffered io 3dnl 4AC_CACHE_CHECK([whether flush should be called explicitly after a buffered io], ac_cv_flush_io,[ 5AC_RUN_IFELSE([AC_LANG_SOURCE([[ 6#include <stdio.h> 7#include <stdlib.h> 8#ifdef HAVE_UNISTD_H 9#include <unistd.h> 10#endif 11#include <string.h> 12 13int main(int argc, char **argv) 14{ 15 char *filename = tmpnam(NULL); 16 char buffer[64]; 17 int result = 0; 18 19 FILE *fp = fopen(filename, "wb"); 20 if (NULL == fp) 21 return 0; 22 fputs("line 1\n", fp); 23 fputs("line 2\n", fp); 24 fclose(fp); 25 26 fp = fopen(filename, "rb+"); 27 if (NULL == fp) 28 return 0; 29 fgets(buffer, sizeof(buffer), fp); 30 fputs("line 3\n", fp); 31 rewind(fp); 32 fgets(buffer, sizeof(buffer), fp); 33 if (0 != strcmp(buffer, "line 1\n")) 34 result = 1; 35 fgets(buffer, sizeof(buffer), fp); 36 if (0 != strcmp(buffer, "line 3\n")) 37 result = 1; 38 fclose(fp); 39 unlink(filename); 40 41 exit(result); 42} 43]])],[ 44 ac_cv_flush_io=no 45],[ 46 ac_cv_flush_io=yes 47],[ 48 ac_cv_flush_io=no 49])]) 50if test "$ac_cv_flush_io" = "yes"; then 51 AC_DEFINE(HAVE_FLUSHIO, 1, [Define if flush should be called explicitly after a buffered io.]) 52fi 53 54PHP_ARG_WITH([external-libcrypt], 55 [for external libcrypt or libxcrypt], 56 [AS_HELP_STRING([--with-external-libcrypt], 57 [Use external libcrypt or libxcrypt])], 58 [no], 59 [no]) 60 61if test "$PHP_EXTERNAL_LIBCRYPT" != "no"; then 62 PHP_CHECK_FUNC(crypt, crypt) 63 PHP_CHECK_FUNC(crypt_r, crypt) 64 AC_CHECK_HEADERS(crypt.h) 65 if test "$ac_cv_func_crypt_r" = "yes"; then 66 PHP_CRYPT_R_STYLE 67 fi 68 69 AC_CACHE_CHECK(for standard DES crypt, ac_cv_crypt_des,[ 70 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 71#if HAVE_UNISTD_H 72#include <unistd.h> 73#endif 74 75#if HAVE_CRYPT_H 76#include <crypt.h> 77#endif 78 79#include <stdlib.h> 80#include <string.h> 81 82int main(void) { 83#if HAVE_CRYPT 84 char *encrypted = crypt("rasmuslerdorf","rl"); 85 return !encrypted || strcmp(encrypted,"rl.3StKT.4T8M"); 86#else 87 return 1; 88#endif 89}]])],[ 90 ac_cv_crypt_des=yes 91],[ 92 ac_cv_crypt_des=no 93],[ 94 ac_cv_crypt_des=yes 95])]) 96 97 AC_CACHE_CHECK(for extended DES crypt, ac_cv_crypt_ext_des,[ 98 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 99#if HAVE_UNISTD_H 100#include <unistd.h> 101#endif 102 103#if HAVE_CRYPT_H 104#include <crypt.h> 105#endif 106 107#include <stdlib.h> 108#include <string.h> 109 110int main(void) { 111#if HAVE_CRYPT 112 char *encrypted = crypt("rasmuslerdorf","_J9..rasm"); 113 return !encrypted || strcmp(encrypted,"_J9..rasmBYk8r9AiWNc"); 114#else 115 return 1; 116#endif 117}]])],[ 118 ac_cv_crypt_ext_des=yes 119 ],[ 120 ac_cv_crypt_ext_des=no 121 ],[ 122 ac_cv_crypt_ext_des=no 123 ])]) 124 125 AC_CACHE_CHECK(for MD5 crypt, ac_cv_crypt_md5,[ 126 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 127#if HAVE_UNISTD_H 128#include <unistd.h> 129#endif 130 131#if HAVE_CRYPT_H 132#include <crypt.h> 133#endif 134 135#include <stdlib.h> 136#include <string.h> 137 138int main(void) { 139#if HAVE_CRYPT 140 char salt[15], answer[40]; 141 char *encrypted; 142 143 salt[0]='$'; salt[1]='1'; salt[2]='$'; 144 salt[3]='r'; salt[4]='a'; salt[5]='s'; 145 salt[6]='m'; salt[7]='u'; salt[8]='s'; 146 salt[9]='l'; salt[10]='e'; salt[11]='$'; 147 salt[12]='\0'; 148 strcpy(answer,salt); 149 strcat(answer,"rISCgZzpwk3UhDidwXvin0"); 150 encrypted = crypt("rasmuslerdorf",salt); 151 return !encrypted || strcmp(encrypted,answer); 152#else 153 return 1; 154#endif 155}]])],[ 156 ac_cv_crypt_md5=yes 157 ],[ 158 ac_cv_crypt_md5=no 159 ],[ 160 ac_cv_crypt_md5=no 161 ])]) 162 163 AC_CACHE_CHECK(for Blowfish crypt, ac_cv_crypt_blowfish,[ 164 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 165#if HAVE_UNISTD_H 166#include <unistd.h> 167#endif 168 169#if HAVE_CRYPT_H 170#include <crypt.h> 171#endif 172 173#include <stdlib.h> 174#include <string.h> 175 176int main(void) { 177#if HAVE_CRYPT 178 char salt[30], answer[70]; 179 char *encrypted; 180 181 salt[0]='$'; salt[1]='2'; salt[2]='a'; salt[3]='$'; salt[4]='0'; salt[5]='7'; salt[6]='$'; salt[7]='\0'; 182 strcat(salt,"rasmuslerd............"); 183 strcpy(answer,salt); 184 strcpy(&answer[29],"nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra"); 185 encrypted = crypt("rasmuslerdorf",salt); 186 return !encrypted || strcmp(encrypted,answer); 187#else 188 return 1; 189#endif 190}]])],[ 191 ac_cv_crypt_blowfish=yes 192 ],[ 193 ac_cv_crypt_blowfish=no 194 ],[ 195 ac_cv_crypt_blowfish=no 196 ])]) 197 198 AC_CACHE_CHECK(for SHA512 crypt, ac_cv_crypt_sha512,[ 199 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 200#if HAVE_UNISTD_H 201#include <unistd.h> 202#endif 203 204#if HAVE_CRYPT_H 205#include <crypt.h> 206#endif 207 208#include <stdlib.h> 209#include <string.h> 210 211int main(void) { 212#if HAVE_CRYPT 213 char salt[21], answer[21+86]; 214 char *encrypted; 215 216 strcpy(salt,"\$6\$rasmuslerdorf\$"); 217 strcpy(answer, salt); 218 strcat(answer, "EeHCRjm0bljalWuALHSTs1NB9ipEiLEXLhYeXdOpx22gmlmVejnVXFhd84cEKbYxCo.XuUTrW.RLraeEnsvWs/"); 219 encrypted = crypt("rasmuslerdorf",salt); 220 return !encrypted || strcmp(encrypted,answer); 221#else 222 return 1; 223#endif 224 }]])],[ 225 ac_cv_crypt_sha512=yes 226 ],[ 227 ac_cv_crypt_sha512=no 228 ],[ 229 ac_cv_crypt_sha512=no 230 ])]) 231 232 AC_CACHE_CHECK(for SHA256 crypt, ac_cv_crypt_sha256,[ 233 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 234#if HAVE_UNISTD_H 235#include <unistd.h> 236#endif 237 238#if HAVE_CRYPT_H 239#include <crypt.h> 240#endif 241 242#include <stdlib.h> 243#include <string.h> 244 245int main(void) { 246#if HAVE_CRYPT 247 char salt[21], answer[21+43]; 248 char *encrypted; 249 250 strcpy(salt,"\$5\$rasmuslerdorf\$"); 251 strcpy(answer, salt); 252 strcat(answer, "cFAm2puLCujQ9t.0CxiFIIvFi4JyQx5UncCt/xRIX23"); 253 encrypted = crypt("rasmuslerdorf",salt); 254 return !encrypted || strcmp(encrypted,answer); 255#else 256 return 1; 257#endif 258}]])],[ 259 ac_cv_crypt_sha256=yes 260 ],[ 261 ac_cv_crypt_sha256=no 262 ],[ 263 ac_cv_crypt_sha256=no 264 ])]) 265 266 267 if test "$ac_cv_crypt_blowfish" = "no" || test "$ac_cv_crypt_des" = "no" || test "$ac_cv_crypt_ext_des" = "no" || test "$ac_cv_crypt_md5" = "no" || test "$ac_cv_crypt_sha512" = "no" || test "$ac_cv_crypt_sha256" = "no" || test "$ac_cv_func_crypt_r" != "yes"; then 268 AC_MSG_ERROR([Cannot use external libcrypt as some algo are missing]) 269 fi 270 271 AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 0, [Whether PHP has to use its own crypt_r]) 272else 273 AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 1, [Whether PHP has to use its own crypt_r]) 274 275 PHP_ADD_SOURCES(PHP_EXT_DIR(standard), crypt_freesec.c crypt_blowfish.c crypt_sha512.c crypt_sha256.c php_crypt_r.c) 276fi 277 278dnl 279dnl Check for __attribute__ ((__aligned__)) support in the compiler 280dnl 281AC_CACHE_CHECK(whether the compiler supports aligned attribute, ac_cv_attribute_aligned,[ 282AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 283]],[[ 284 unsigned char test[32] __attribute__ ((__aligned__ (__alignof__ (int)))); 285]])],[ 286 ac_cv_attribute_aligned=yes 287],[ 288 ac_cv_attribute_aligned=no 289])]) 290if test "$ac_cv_attribute_aligned" = "yes"; then 291 AC_DEFINE([HAVE_ATTRIBUTE_ALIGNED], 1, [whether the compiler supports __attribute__ ((__aligned__))]) 292fi 293 294if test "$cross_compiling" = yes ; then 295 case $host_alias in 296 *linux*) 297 AC_DEFINE([HAVE_FNMATCH], 1, 298 [Define to 1 if your system has a working POSIX `fnmatch' 299 function.]) 300 ;; 301 esac 302else 303 AC_FUNC_FNMATCH 304fi 305 306dnl 307dnl Check if there is a support means of creating a new process and defining 308dnl which handles it receives 309dnl 310AC_CHECK_FUNCS(fork CreateProcess, [ 311 php_can_support_proc_open=yes 312 break 313],[ 314 php_can_support_proc_open=no 315]) 316AC_MSG_CHECKING([if your OS can spawn processes with inherited handles]) 317if test "$php_can_support_proc_open" = "yes"; then 318 AC_MSG_RESULT(yes) 319 AC_DEFINE(PHP_CAN_SUPPORT_PROC_OPEN,1, [Define if your system has fork/vfork/CreateProcess]) 320else 321 AC_MSG_RESULT(no) 322fi 323 324PHP_ENABLE_CHROOT_FUNC=no 325case "$PHP_SAPI" in 326 embed) 327 PHP_ENABLE_CHROOT_FUNC=yes 328 ;; 329 330 none) 331 for PROG in $PHP_BINARIES; do 332 case "$PROG" in 333 cgi|cli|phpdbg) 334 PHP_ENABLE_CHROOT_FUNC=yes 335 ;; 336 337 *) 338 PHP_ENABLE_CHROOT_FUNC=no 339 break 340 ;; 341 esac 342 done 343 ;; 344esac 345 346if test "$PHP_ENABLE_CHROOT_FUNC" = "yes"; then 347 AC_DEFINE(ENABLE_CHROOT_FUNC, 1, [Whether to enable chroot() function]) 348fi 349 350dnl 351dnl Detect library functions needed by php dns_xxx functions 352dnl ext/standard/php_dns.h will collect these in a single define 353dnl HAVE_FULL_DNS_FUNCS 354dnl 355PHP_CHECK_FUNC(res_nsearch, resolv, socket) 356PHP_CHECK_FUNC(res_ndestroy, resolv, socket) 357PHP_CHECK_FUNC(dns_search, resolv, socket) 358PHP_CHECK_FUNC(dn_expand, resolv, socket) 359PHP_CHECK_FUNC(dn_skipname, resolv, socket) 360 361dnl 362dnl These are old deprecated functions 363dnl 364 365PHP_CHECK_FUNC(res_search, resolv, socket) 366 367AC_CHECK_FUNCS([posix_spawn_file_actions_addchdir_np]) 368 369dnl 370dnl Check for strptime() 371dnl 372AC_CACHE_CHECK(whether strptime() declaration fails, ac_cv_strptime_decl_fails,[ 373AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 374#include <time.h> 375]],[[ 376#ifndef HAVE_STRPTIME 377#error no strptime() on this platform 378#else 379/* use invalid strptime() declaration to see if it fails to compile */ 380int strptime(const char *s, const char *format, struct tm *tm); 381#endif 382]])],[ 383 ac_cv_strptime_decl_fails=no 384],[ 385 ac_cv_strptime_decl_fails=yes 386])]) 387if test "$ac_cv_strptime_decl_fails" = "yes"; then 388 AC_DEFINE([HAVE_STRPTIME_DECL_FAILS], 1, [whether strptime() declaration fails]) 389fi 390 391dnl 392dnl Check for argon2 393dnl 394PHP_ARG_WITH([password-argon2], 395 [for Argon2 support], 396 [AS_HELP_STRING([[--with-password-argon2]], 397 [Include Argon2 support in password_*])]) 398 399if test "$PHP_PASSWORD_ARGON2" != "no"; then 400 PKG_CHECK_MODULES([ARGON2], [libargon2]) 401 PHP_EVAL_INCLINE($ARGON2_CFLAGS) 402 PHP_EVAL_LIBLINE($ARGON2_LIBS) 403 404 AC_DEFINE(HAVE_ARGON2LIB, 1, [ ]) 405fi 406 407dnl 408dnl Check net/if.h for net_get_interfaces. Darwin and BSD-like systems need 409dnl sys/socket.h to be included with net/if.h. 410dnl 411AC_CHECK_HEADERS([net/if.h],[], [], 412[ 413 #ifdef HAVE_SYS_SOCKET_H 414 #include <sys/socket.h> 415 #endif 416]) 417 418AC_MSG_CHECKING([for usable getifaddrs]) 419AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 420 #include <sys/types.h> 421 #include <ifaddrs.h> 422]],[[ 423 struct ifaddrs *interfaces; 424 if (!getifaddrs(&interfaces)) { 425 freeifaddrs(interfaces); 426 } 427]])], [ac_have_getifaddrs=yes], [ac_have_getifaddrs=no]) 428if test "$ac_have_getifaddrs" = "yes" ; then 429 AC_DEFINE(HAVE_GETIFADDRS, 1, [whether getifaddrs is present and usable]) 430 AC_MSG_RESULT(yes) 431else 432 AC_MSG_RESULT(no) 433fi 434 435dnl 436dnl Setup extension sources 437dnl 438PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c crypt.c \ 439 datetime.c dir.c dl.c dns.c exec.c file.c filestat.c \ 440 flock_compat.c formatted_print.c fsock.c head.c html.c image.c \ 441 info.c iptc.c link.c mail.c math.c md5.c metaphone.c \ 442 microtime.c pack.c pageinfo.c quot_print.c \ 443 soundex.c string.c scanf.c syslog.c type.c uniqid.c url.c \ 444 var.c versioning.c assert.c strnatcmp.c levenshtein.c \ 445 incomplete_class.c url_scanner_ex.c ftp_fopen_wrapper.c \ 446 http_fopen_wrapper.c php_fopen_wrapper.c credits.c css.c \ 447 var_unserializer.c ftok.c sha1.c user_filters.c uuencode.c \ 448 filters.c proc_open.c streamsfuncs.c http.c password.c \ 449 net.c hrtime.c crc32_x86.c libavifinfo/avifinfo.c,,, 450 -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) 451 452PHP_ADD_BUILD_DIR($ext_builddir/libavifinfo) 453 454PHP_ADD_MAKEFILE_FRAGMENT 455PHP_INSTALL_HEADERS([ext/standard/]) 456