Nginx · 자동 스 크 립 트 편 해부 (7) 유형 관련 스 크 립 트 시리즈
이 스 크 립 트 의 기능 은 테스트 프로그램 을 통 해 주어진
ngx_type
의 크기 를 알 수 있 습 니 다.1.1 알림 정보 표시
echo $ngx_n "checking for $ngx_type size ...$ngx_c"
cat << END >> $NGX_AUTOCONF_ERR
----------------------------------------
checking for $ngx_type size
END
1.2 계산
ngx_type
을 생 성 하 는 테스트 프로그램cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
#include <sys/time.h>
$NGX_INCLUDE_UNISTD_H
#include <signal.h>
#include <sys/resource.h>
$NGX_INCLUDE_INTTYPES_H
$NGX_INCLUDE_AUTO_CONFIG_H
int main() {
printf("%d", sizeof($ngx_type));
return 0;
}
END
1.3 컴 파일 테스트 프로그램
우선 컴 파일 된 명령 을 생 성 합 니 다.
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
주의
-o $NGX_AUTOTEST
는 실행 가능 한 파일 을 만 들 고 컴 파일 을 실행 하 는 것 입 니 다.eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
1.4 테스트 프로그램 실행, 획득
ngx_size
NGX_AUTOTEST
파일 이 존재 하고 실행 가능 하 다 면 ngx_size
크기 를 설정 합 니 다.ngx_size=
if [ -x $NGX_AUTOTEST ]; then
ngx_size=`$NGX_AUTOTEST`
echo " $ngx_size bytes"
fi
1.5 삭제
NGX_AUTOTEST
테스트 프로그램 실행 가능 한 파일rm -f $NGX_AUTOTEST
1.6 정수 최대 치 설정
각각 32 비트 시스템 의 데이터 크기 와 64 비트 시스템 의 데이터 크기 를 처리 하고 정수 최대 치 를 설정 합 니 다.기타 상황 은 잘못 처리 되 었 다.
case $ngx_size in
4)
if [ "$ngx_type"="long" ]; then
ngx_max_value=2147483647L
else
ngx_max_value=2147483647
fi
ngx_max_len='(sizeof("-2147483648") - 1)'
;;
8)
if [ "$ngx_type"="long long" ]; then
ngx_max_value=9223372036854775807LL
else
ngx_max_value=9223372036854775807L
fi
ngx_max_len='(sizeof("-9223372036854775808") - 1)'
;;
*)
echo
echo "$0: error: can not detect $ngx_type size"
echo "----------" >> $NGX_AUTOCONF_ERR
cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
echo $ngx_test >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
exit 1
esac
2 auto/types/typedef
두 순환 을 통 해 각각 처리
ngx_type
와 ngx_types
.objs/ngx_auto_config.h
파일 에 쓰기 typedef
정의.2.1 테스트 프로그램 생 성
cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
#include <signal.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <netinet/in.h>
$NGX_INCLUDE_INTTYPES_H
int main() {
$ngx_try i = 0;
return 0;
}
END
2.2 컴 파일 테스트 프로그램
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
2.3 설정
ngx_found
값if [ -x $NGX_AUTOTEST ]; then
if [ $ngx_try = $ngx_type ]; then
echo " found"
ngx_found=yes
else
echo ", $ngx_try used"
ngx_found=$ngx_try
fi
fi
2.4 테스트 프로그램 실행 가능 한 파일 삭제
rm -f $NGX_AUTOTEST
2.5 이상 상황
if [ $ngx_found = no ]; then
echo $ngx_n " $ngx_try not found$ngx_c"
echo "----------" >> $NGX_AUTOCONF_ERR
cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
echo $ngx_test >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
else
break
fi
여기 서 순환 이 끝 났 습 니 다.그리고:
if [ $ngx_found = no ]; then
echo
echo "$0: error: can not define $ngx_type"
exit 1
fi
2.6
typedef
문 구 를 쓰기 objs/ngx_auto_config.h
ngx_found
는 원래 유형 이 고 ngx_type
는 별명 유형 이다.if [ $ngx_found != yes ]; then
echo "typedef $ngx_found $ngx_type;" >> $NGX_AUTO_CONFIG_H
fi
3 auto/types/value
이 는
auto/define
와 다소 유사 하지만 auto/define
'K 값 을 설 정 했 고 그 값 은 V' 로 'K 값 을 설정 하지 않 았 음' 과 상대 적 이다.auto/types/value
는 임의의 매개 변수 와 값 을 설정 합 니 다.cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $ngx_param
#define $ngx_param $ngx_value
#endif
END
4 auto/types/uintptr_t
4.1 알림
echo $ngx_n "checking for uintptr_t ...$ngx_c"
echo >> $NGX_ERR
echo "checking for uintptr_t" >> $NGX_ERR
4.2 테스트 프로그램 생 성
cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
$NGX_INTTYPES_H
int main() {
uintptr_t i = 0;
return 0;
}
END
4.3 컴 파일 테스트 프로그램
found=no
eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
if [ -x $NGX_AUTOTEST ]; then
echo " uintptr_t found"
found=yes
else
echo $ngx_n " uintptr_t not found" $ngx_c
fi
4.4 테스트 프로그램 실행 파일 삭제
rm $NGX_AUTOTEST*
4.5 실행 가능 한 파일 이 없 을 때의 처리
if [ $found = no ]; then
found="uint`expr 8 \* $ngx_ptr_size`_t"
echo ", $found used"
echo "typedef $found uintptr_t;" >> $NGX_AUTO_CONFIG_H
echo "typedef $found intptr_t;" | sed -e 's/u//g' >> $NGX_AUTO_CONFIG_H
fi
-
"유 대 · Poechant 의 CSDN 블 로그": blog. CSDN. net / Poechant
-
원본 링크:http://blog.csdn.net/poechant/article/details/7359170
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.