
# Copyright (C) Igor Sysoev


CC_WARN=$CC
ngx_fmt_collect=yes

# C types

ngx_type="int"; . auto/types/sizeof
ngx_formats="%d"; . auto/fmt/fmt

ngx_type="long"; . auto/types/sizeof
ngx_formats="%ld"; . auto/fmt/fmt

ngx_type="long long"; . auto/types/sizeof
ngx_formats="%lld %qd"; . auto/fmt/fmt

ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
ngx_fmt_name=PTR_FMT;
eval ngx_formats=\${ngx_${ngx_ptr_size}_fmt}; . auto/fmt/ptrfmt


# POSIX types

NGX_AUTO_CONFIG="#include \"../$NGX_AUTO_CONFIG_H\""

ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef

ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
. auto/types/sizeof
ngx_param=SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value

ngx_type="socklen_t"; ngx_types="uint32_t"; . auto/types/typedef

ngx_type="in_addr_t"; ngx_types="uint32_t"; . auto/types/typedef

ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef

ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef

. auto/types/uintptr_t

. auto/endianess


# printf() formats

CC_WARN=$CC_STRONG
ngx_fmt_collect=no

ngx_fmt_name=OFF_T_FMT; ngx_type="off_t"; . auto/types/sizeof
ngx_param=OFF_T_MAX_VALUE; ngx_value=$ngx_max_value; . auto/types/value
eval ngx_formats=\${ngx_${ngx_size}_fmt}; . auto/fmt/fmt

ngx_fmt_name=TIME_T_FMT; ngx_type="time_t"; . auto/types/sizeof
ngx_param=TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
ngx_param=TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
eval ngx_formats=\${ngx_${ngx_size}_fmt}; . auto/fmt/fmt

ngx_fmt_name=SIZE_T_FMT; ngx_type="size_t"; . auto/types/sizeof
eval ngx_formats=\${ngx_${ngx_size}_fmt}; . auto/fmt/fmt

ngx_fmt_name=SIZE_T_X_FMT; . auto/fmt/xfmt

ngx_fmt_name=PID_T_FMT; ngx_type="pid_t"; . auto/types/sizeof
eval ngx_formats=\${ngx_${ngx_size}_fmt}; . auto/fmt/fmt

ngx_fmt_name=RLIM_T_FMT; ngx_type="rlim_t"; . auto/types/sizeof
eval ngx_formats=\${ngx_${ngx_size}_fmt}; . auto/fmt/fmt


# syscalls, libc calls and some features

ngx_feature_libs=
ngx_func_libs=


ngx_func="pread()"
ngx_func_inc=
ngx_func_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0)"
. auto/func


ngx_func="pwrite()"
ngx_func_inc=
ngx_func_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0)"
. auto/func


#ngx_func="strsignal()"
#ngx_func_inc="#include <string.h>"
#ngx_func_test="char *s = strsignal(1)"
#. auto/func


ngx_func="strerror_r()"
ngx_func_inc="#include <string.h>"
ngx_func_test="char buf[20]; int n; n = strerror_r(1, buf, 20)"
. auto/func


ngx_func="gnu_strerror_r()"
ngx_func_inc="#include <string.h>"
ngx_func_test="char buf[20], *str; str = strerror_r(1, buf, 20)"
. auto/func


ngx_func="localtime_r()"
ngx_func_inc="#include <time.h>"
ngx_func_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
. auto/func


ngx_func="posix_memalign()"
ngx_func_inc="#include <stdlib.h>"
ngx_func_test="void *p; int n; n = posix_memalign(&p, 4096, 4096)"
. auto/func


ngx_func="memalign()"
ngx_func_inc="#include <stdlib.h>"
ngx_func_test="void *p; p = memalign(4096, 4096)"
. auto/func



ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
ngx_feature_name="MAP_ANON"
ngx_feature_inc="#include <sys/mman.h>"
ngx_feature_test="void *p;
                  p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
                           MAP_ANON|MAP_SHARED, -1, 0);
                  if (p == MAP_FAILED) return 1;"
ngx_feature_run=yes
. auto/feature


ngx_feature='mmap("/dev/zero", MAP_SHARED)'
ngx_feature_name="MAP_DEVZERO"
ngx_feature_inc="#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>"
ngx_feature_test='void *p; int  fd;
                  fd = open("/dev/zero", O_RDWR);
                  p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
                  if (p == MAP_FAILED) return 1;'
. auto/feature


ngx_feature="System V shared memory"
ngx_feature_name="SYSVSHM"
ngx_feature_inc="#include <sys/ipc.h>
#include <sys/shm.h>"
ngx_feature_test="int  id;
                  id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
                  if (id == -1) return 1;
                  shmctl(id, IPC_RMID, NULL);"
. auto/feature



ngx_feature="struct sockaddr_in.sin_len"
ngx_feature_name="sin_len"
ngx_feature_inc="#include <sys/socket.h>
#include <netinet/in.h>"
ngx_feature_test="struct sockaddr_in sa; sa.sin_len = 5"
ngx_feature_run=no
. auto/feature


ngx_feature="struct msghdr.msg_control"
ngx_feature_name="msghdr_msg_control"
ngx_feature_inc="#include <sys/socket.h>"
ngx_feature_test="struct msghdr  msg; msg.msg_control = NULL"
. auto/feature


case $PLATFORM in
    Linux:*)
        ngx_feature_inc="#include <sys/ioctl.h>"
    ;;

    *)
        ngx_feature_inc="#include <sys/filio.h>"
    ;;
esac

ngx_feature="ioctl(FIONBIO)"
ngx_feature_name="FIONBIO"
ngx_feature_test="int i; i = FIONBIO"
. auto/feature


ngx_feature="struct tm.tm_gmtoff"
ngx_feature_name="gmtoff"
ngx_feature_inc="#include <time.h>"
ngx_feature_test="struct tm  tm; tm.tm_gmtoff = 0"
. auto/feature
