
# Copyright (C) Igor Sysoev
# Copyright (C) NGINX, Inc.


# Sizes of C types.

# "-Wall -Werror" or similar constraints in default CFLAGS may require
# to use "%zu" format to printf() result of sizeof().  But "%zu" may
# be unavailable, so the "(int)" cast is a simple and portable solution:
#     printf("%d", (int) sizeof(TYPE));


njs_feature="sizeof(int)"
njs_feature_name=NJS_INT_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#include <stdio.h>

                  int main() {
                      printf(\"%d\", (int) sizeof(int));
                      return 0;
                  }"
. auto/feature


njs_feature="sizeof(u_int)"
njs_feature_name=NJS_UINT_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#include <sys/types.h>
                  #include <stdio.h>

                  int main() {
                      printf(\"%d\", (int) sizeof(u_int));
                      return 0;
                  }"
. auto/feature


njs_feature="sizeof(void *)"
njs_feature_name=NJS_PTR_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#include <stdio.h>

                  int main() {
                      printf(\"%d\", (int) sizeof(void *));
                      return 0;
                  }"
. auto/feature


njs_feature="sizeof(uintptr_t)"
njs_feature_name=NJS_UINTPTR_T_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#include <stdint.h>
                  #include <stdio.h>

                  int main() {
                      printf(\"%d\", (int) sizeof(uintptr_t));
                      return 0;
                  }"
. auto/feature


case "$njs_feature_value" in
    8) NJS_64BIT=1 ;;
    *) NJS_64BIT=0 ;;
esac


njs_feature="sizeof(size_t)"
njs_feature_name=NJS_SIZE_T_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#include <stdio.h>

                  int main() {
                      printf(\"%d\", (int) sizeof(size_t));
                      return 0;
                  }"
. auto/feature


njs_feature="sizeof(off_t)"
njs_feature_name=NJS_OFF_T_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#define _FILE_OFFSET_BITS  64
                  #include <unistd.h>
                  #include <stdio.h>

                  int main() {
                      printf(\"%d\", (int) sizeof(off_t));
                      return 0;
                  }"
. auto/feature


njs_feature="sizeof(time_t)"
njs_feature_name=NJS_TIME_T_SIZE
njs_feature_run=value
njs_feature_incs=
njs_feature_libs=
njs_feature_test="#include <time.h>
                  #include <stdio.h>

                  int main(void) {
                      printf(\"%d\", (int) sizeof(time_t));
                      return 0;
                  }"
. auto/feature


# Ensuring that double type is always evaluated at standard
# precision required by njs_diyfp_t


case $NJS_CC_NAME in

    gcc)
        NJS_CFLAGS="$NJS_CFLAGS -fexcess-precision=standard"
    ;;

    clang)

        njs_found=no

        njs_feature="flag -ffp-eval-method=double"
        njs_feature_name=NJS_HAVE_FP_EVAL_METHOD
        njs_feature_run=no
        njs_feature_incs="-ffp-eval-method=double"
        njs_feature_libs=
        njs_feature_test="int main(void) {
                             return 0;
                         }"

        . auto/feature

        if [ $njs_found = yes ]; then
            NJS_CFLAGS="$NJS_CFLAGS -ffp-eval-method=double"
        fi

    ;;

    SunC)

        njs_found=no

        njs_feature="flag -xarch=sse2"
        njs_feature_name=NJS_HAVE_XARCH_SSE2
        njs_feature_run=no
        njs_feature_incs="-xarch=sse2"
        njs_feature_libs=
        njs_feature_test="int main(void) {
                             return 0;
                         }"

        . auto/feature

        if [ $njs_found = yes ]; then
            NJS_CFLAGS="$NJS_CFLAGS -xarch=sse2"
        fi
    ;;

esac
