10Sigor@sysoev.ru 20Sigor@sysoev.ru# Copyright (C) Igor Sysoev 30Sigor@sysoev.ru# Copyright (C) NGINX, Inc. 40Sigor@sysoev.ru 50Sigor@sysoev.ru 60Sigor@sysoev.ru# C language features. 70Sigor@sysoev.ru 80Sigor@sysoev.ru 90Sigor@sysoev.runxt_feature="C99 variadic macro" 100Sigor@sysoev.runxt_feature_name=NXT_HAVE_C99_VARIADIC_MACRO 110Sigor@sysoev.runxt_feature_run=yes 120Sigor@sysoev.runxt_feature_path= 130Sigor@sysoev.runxt_feature_libs= 140Sigor@sysoev.runxt_feature_test="#include <stdio.h> 150Sigor@sysoev.ru #define set(dummy, ...) sprintf(__VA_ARGS__) 160Sigor@sysoev.ru 170Sigor@sysoev.ru int main() { 180Sigor@sysoev.ru char buf[4]; 190Sigor@sysoev.ru 200Sigor@sysoev.ru buf[0] = '0'; 210Sigor@sysoev.ru set(0, buf, \"%d\", 1); 220Sigor@sysoev.ru 230Sigor@sysoev.ru if (buf[0] == '1') 240Sigor@sysoev.ru return 0; 250Sigor@sysoev.ru return 1; 260Sigor@sysoev.ru }" 270Sigor@sysoev.ru. auto/feature 280Sigor@sysoev.ru 290Sigor@sysoev.ru 300Sigor@sysoev.ruif [ $nxt_found = no ]; then 310Sigor@sysoev.ru 320Sigor@sysoev.ru nxt_feature="GCC variadic macro" 330Sigor@sysoev.ru nxt_feature_name=NXT_HAVE_GCC_VARIADIC_MACRO 340Sigor@sysoev.ru nxt_feature_run=yes 350Sigor@sysoev.ru nxt_feature_path= 360Sigor@sysoev.ru nxt_feature_libs= 370Sigor@sysoev.ru nxt_feature_test="#include <stdio.h> 380Sigor@sysoev.ru #define set(dummy, args...) sprintf(args) 390Sigor@sysoev.ru 400Sigor@sysoev.ru int main() { 410Sigor@sysoev.ru char buf[4]; 420Sigor@sysoev.ru 430Sigor@sysoev.ru buf[0] = '0'; 440Sigor@sysoev.ru set(0, buf, \"%d\", 1); 450Sigor@sysoev.ru 460Sigor@sysoev.ru if (buf[0] == '1') 470Sigor@sysoev.ru return 0; 480Sigor@sysoev.ru return 1; 490Sigor@sysoev.ru }" 500Sigor@sysoev.ru . auto/feature 510Sigor@sysoev.rufi 520Sigor@sysoev.ru 530Sigor@sysoev.ru 540Sigor@sysoev.runxt_feature="GCC __builtin_expect()" 550Sigor@sysoev.runxt_feature_name=NXT_HAVE_BUILTIN_EXPECT 560Sigor@sysoev.runxt_feature_run=no 570Sigor@sysoev.runxt_feature_incs= 580Sigor@sysoev.runxt_feature_libs= 590Sigor@sysoev.runxt_feature_test="int main(int argc, char *const *argv) { 600Sigor@sysoev.ru if ((__typeof__(argc == 0)) 610Sigor@sysoev.ru __builtin_expect((argc == 0), 0)) 620Sigor@sysoev.ru return 0; 630Sigor@sysoev.ru return 1; 640Sigor@sysoev.ru }" 650Sigor@sysoev.ru. auto/feature 660Sigor@sysoev.ru 670Sigor@sysoev.ru 680Sigor@sysoev.runxt_feature="GCC __builtin_unreachable()" 690Sigor@sysoev.runxt_feature_name=NXT_HAVE_BUILTIN_UNREACHABLE 700Sigor@sysoev.runxt_feature_run=no 710Sigor@sysoev.runxt_feature_incs= 720Sigor@sysoev.runxt_feature_libs= 730Sigor@sysoev.runxt_feature_test="int main() { 740Sigor@sysoev.ru __builtin_unreachable(); 750Sigor@sysoev.ru }" 760Sigor@sysoev.ru. auto/feature 770Sigor@sysoev.ru 780Sigor@sysoev.ru 790Sigor@sysoev.runxt_feature="GCC __builtin_prefetch()" 800Sigor@sysoev.runxt_feature_name=NXT_HAVE_BUILTIN_PREFETCH 810Sigor@sysoev.runxt_feature_run=no 820Sigor@sysoev.runxt_feature_incs= 830Sigor@sysoev.runxt_feature_libs= 840Sigor@sysoev.runxt_feature_test="int main() { 850Sigor@sysoev.ru __builtin_prefetch(0); 860Sigor@sysoev.ru }" 870Sigor@sysoev.ru. auto/feature 880Sigor@sysoev.ru 890Sigor@sysoev.ru 90*93Smax.romanov@nginx.comnxt_feature="GCC __builtin_clz()" 91*93Smax.romanov@nginx.comnxt_feature_name=NXT_HAVE_BUILTIN_CLZ 92*93Smax.romanov@nginx.comnxt_feature_run= 93*93Smax.romanov@nginx.comnxt_feature_incs= 94*93Smax.romanov@nginx.comnxt_feature_libs= 95*93Smax.romanov@nginx.comnxt_feature_test="int main() { 96*93Smax.romanov@nginx.com if (__builtin_clz(1) == 31) 97*93Smax.romanov@nginx.com return 0; 98*93Smax.romanov@nginx.com return 1; 99*93Smax.romanov@nginx.com }" 100*93Smax.romanov@nginx.com. auto/feature 101*93Smax.romanov@nginx.com 102*93Smax.romanov@nginx.com 1030Sigor@sysoev.runxt_feature="GCC __attribute__ visibility" 1040Sigor@sysoev.runxt_feature_name=NXT_HAVE_GCC_ATTRIBUTE_VISIBILITY 1050Sigor@sysoev.runxt_feature_run= 1060Sigor@sysoev.runxt_feature_path= 1070Sigor@sysoev.runxt_feature_libs= 1080Sigor@sysoev.runxt_feature_test="int n __attribute__ ((visibility(\"default\"))); 1090Sigor@sysoev.ru 1100Sigor@sysoev.ru int main() { 1110Sigor@sysoev.ru return 1; 1120Sigor@sysoev.ru }" 1130Sigor@sysoev.ru. auto/feature 1140Sigor@sysoev.ru 1150Sigor@sysoev.ru 1160Sigor@sysoev.runxt_feature="GCC __attribute__ aligned" 1170Sigor@sysoev.runxt_feature_name=NXT_HAVE_GCC_ATTRIBUTE_ALIGNED 1180Sigor@sysoev.runxt_feature_run= 1190Sigor@sysoev.runxt_feature_path= 1200Sigor@sysoev.runxt_feature_libs= 1210Sigor@sysoev.runxt_feature_test="int n __attribute__ ((aligned(64))); 1220Sigor@sysoev.ru 1230Sigor@sysoev.ru int main() { 1240Sigor@sysoev.ru return 1; 1250Sigor@sysoev.ru }" 1260Sigor@sysoev.ru. auto/feature 1270Sigor@sysoev.ru 1280Sigor@sysoev.ru 1290Sigor@sysoev.runxt_feature="GCC __attribute__ malloc" 1300Sigor@sysoev.runxt_feature_name=NXT_HAVE_GCC_ATTRIBUTE_MALLOC 1310Sigor@sysoev.runxt_feature_run= 1320Sigor@sysoev.runxt_feature_path= 1330Sigor@sysoev.runxt_feature_libs= 1340Sigor@sysoev.runxt_feature_test="#include <stdlib.h> 1350Sigor@sysoev.ru 1360Sigor@sysoev.ru void *f(void) __attribute__ ((__malloc__)); 1370Sigor@sysoev.ru 1380Sigor@sysoev.ru void *f(void) { 1390Sigor@sysoev.ru return malloc(1); 1400Sigor@sysoev.ru } 1410Sigor@sysoev.ru 1420Sigor@sysoev.ru int main() { 1430Sigor@sysoev.ru if (f() != NULL) { 1440Sigor@sysoev.ru return 1; 1450Sigor@sysoev.ru } 1460Sigor@sysoev.ru return 0; 1470Sigor@sysoev.ru }" 1480Sigor@sysoev.ru. auto/feature 149