Nginx · 자동 스 크 립 트 편 정독 (4) 도구 형 스 크 립 트 시리즈
11099 단어 nginx
Author: Poechant
Blog: blog.CSDN.net/Poechant
Email: zhongchao.ustc#gmail.com (#->@)
Date: March 12th, 2012
Copyright © 류 대 · Poechant 목차
auto / have 자동 설정 헤더 파일 에 매크로 정의 추가 (
objs/ngx_auto_config.h
) auto / nohave 자동 설정 헤더 파일 에 매크로 정의 사용 불가 (objs/ngx_auto_config.h
) 추가auto / define 은 자동 설정 스 크 립 트 에 K - V 매크로 정의 (
objs/ngx_auto_config.h
) 를 추가 하여 "K 를 설 정 했 습 니 다. 그 값 은 V 입 니 다" 을 표시 합 니 다.auto/have_headers 자동 헤더 파일 (
objs/ngx_auto_header.h
) auto/feature auto / type / sizeof 테스트 프로그램 생 성 및 지정 한 형식의 크기 검출
auto/types/typedef
auto/types/value
1 auto/have
주요 기능: 자동 설정 헤더 파일 에 지정 한 매개 변 수 를 표시 하 는 매크로 정의.
처리 변수:
$have
역할 개체:역할 대상:
$NGX_AUTO_CONFIG_H
변수 가 표시 하 는 자동 생 성 헤더 파일. 기본 대상:
objs/ngx_auto_config.h
cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $have
#define $have 1
#endif
END
예시:
have
값 이 SOME_FLAG
이면 이 스 크 립 트 를 참조 하여 실 행 된 후 objs/ngx_auto_config.h
에 다음 과 같은 내용 을 추가 합 니 다.#ifndef SOME_FLAG
#define SOME_FLAG 1
#endif
2 auto/nohave
auto/have
스 크 립 트 와 유사 합 니 다.주요 기능: 자동 설정 헤더 파일 에 지정 한 인자 가 없 는 매크로 정 의 를 표시 합 니 다.
처리 변수:
$have
역할 개체:역할 대상:
$NGX_AUTO_CONFIG_H
변수 가 표시 하 는 자동 생 성 헤더 파일. 기본 대상:
objs/ngx_auto_config.h
cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $have
#define $have 0
#endif
END
예시:
have
값 이 SOME_FLAG
이면 이 스 크 립 트 를 참조 하여 실 행 된 후 objs/ngx_auto_config.h
에 다음 과 같은 내용 을 추가 합 니 다.#ifndef SOME_FLAG
#define SOME_FLAG 0
#endif
3 auto/define
주요 기능: 자동 설정 헤더 파일 에 지정 한 매개 변 수 를 표시 하 는 값 처리 변수:
have
과 value
역할 개체:역할 대상:
$NGX_AUTO_CONFIG_H
변수 가 표시 하 는 자동 생 성 헤더 파일. 기본 대상:
objs/ngx_auto_config.h
cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $have
#define $have $value
#endif
END
예시:
have
값 이 SOME_FLAG
이 고 value
값 이 1234
이면 이 스 크 립 트 를 참조 하여 실 행 된 후 objs/ngx_auto_config.h
에 다음 과 같은 내용 을 추가 합 니 다.#ifndef SOME_FLAG
#define SOME_FLAG 1234
#endif
4 auto/have_headers
주요 기능: 자동 헤더 파일 에 지정 한 매개 변 수 를 표시 합 니 다 처리 변수:
have
과 value
역할 개체:역할 대상:
$NGX_AUTO_HEADERS_H
변수 가 표시 하 는 자동 생 성 헤더 파일. 기본 대상:
objs/ngx_auto_headers.h
cat << END >> $NGX_AUTO_HEADERS_H
#ifndef $have
#define $have 1
#endif
END
주의:
auto/have_headers
은 auto/have
과 달리 전 자 는 objs/ngx_auto_config.h
에 쓰 고 후 자 는 objs/ngx_auto_headers.h
에 쓴다. 5 auto/feature
주요 기능: 처리 변수:
$ngx_n
$ngx_feature
$ngx_c
ngx_feature_name
$ngx_feature_path
$ngx_feature_inc_path
$ngx_temp
$ngx_feature_incs
$ngx_feature_test
$ngx_feature_libs
$ngx_have_feature
역할 개체:
역할 대상: 기본 대상:
5.1 출력 검사 알림
< Nginx 소스 코드 정독 · 자동 스 크 립 트 편 (2) 초기 변수 스 크 립 트 auto / init 설정 > 문 에서
ngx_n
과 ngx_c
두 변수 에 관 한 것 을 기억 하 십 니까?auto/feature
에서 첫 번 째 문장 은:echo $ngx_n "checking for $ngx_feature ...$ngx_c"
echo
한 마디 checking for $ngx_feature
을 하고 줄 을 바 꾸 는 것 이다.물론 ngx_n
과 ngx_c
이 모두 비어 있 는 경우 가 있 는데 이 때 는 정말 주동 적 으로 줄 을 바 꾸 지 않 았 다.그리고
NGX_AUTOCONF_ERR
에 표 시 된 파일 에 자동 설정 오류 정 보 를 추가 합 니 다.이 파일 은 auto/init
파일 에서 초기 화 되 었 습 니 다 (< Nginx 소스 코드 정독 · 자동 스 크 립 트 편 (2) 초기 변수 스 크 립 트 auto / init 설정 > 참조). 그 값 은 NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err
이 고 기본 값 은 objs/autoconf.err
입 니 다.5.2
ngx_found
초기 화ngx_found=no
5.3 초기 화
ngx_have_feature
if test -n "$ngx_feature_name"; then
ngx_have_feature=`echo $ngx_feature_name \
| tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
fi
test -n
은 매개 변수의 길이 가 0 인지 시험 하 는 것 이다.그렇다면 ngx_feature_name
이 비어 있 으 면 if
내 문 구 를 실행 하지 않 고 ngx_have_feature
을 ngx_feature_name
이 라 고 명명 한 대문자 판 (tr
명령 은 소문 자 를 모두 대문자 로 바 꿉 니 다).5.4
ngx_feature_inc_path
초기 화if test -n "$ngx_feature_path"; then
for ngx_temp in $ngx_feature_path; do
ngx_feature_inc_path="$ngx_feature_inc_path -I $ngx_temp"
done
fi
test -n
은 매개 변수의 길이 가 0 인지 시험 하 는 것 이다.ngx_feature_path
이 /path/to/one /path/to/two /path/to/three
이면 ngx_feature_inc_path
은 -I /path/to/one -I /path/to/two -I /path/to/three
으로 설치 된다.5.5 자동 테스트 프로그램 생 성
자동 테스트 원본 파일 은
auto/init
스 크 립 트 에서 $NGX_OBJS/autotest
으로 초기 화 되 었 으 며, 기본 값 은 objs/autotest
입 니 다.접미사 명 을 합치 면 objs/autotest.c
입 니 다.cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
$NGX_INCLUDE_UNISTD_H
$ngx_feature_incs
int main() {
$ngx_feature_test;
return 0;
}
END
그 중에서
ngx_feature_incs
과 ngx_feature_test
은 auto/feature
스 크 립 트 의 매개 변수 라 고 할 수 있 습 니 다.5.6 컴 파일 자동 테스트 프로그램
CC
은 스 크 립 트 auto/options
에서 초기 화 되 었 고 CC=${CC:-gcc}
입 니 다.이 단락 코드 의 기능 은 컴 파일 명령 을 생 성 하 는 것 이다.ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS $ngx_feature_inc_path \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_TEST_LD_OPT $ngx_feature_libs"
ngx_feature_inc_path=
테스트 프로그램 을 실행 하 다.
eval "/bin/sh -c \"$ngx_test\" >> $NGX_AUTOCONF_ERR 2>&1"
5.7
ngx_feature_run
에 따라 처리이 단락 은 약간 길 고 다음은 점차적으로 설명 한다.
Bash 프로 그래 밍 의 모든 불 표현 식 은 괄호 로 묶 여 있 습 니 다.
-x
매개 변 수 는 Test if file exists and is executable
을 나타 낸다.따라서 NGX_AUTOTEST
이 표시 한 파일 이 존재 한다 면 then
을 실행 합 니 다.if [ -x $NGX_AUTOTEST ]; then
case "$ngx_feature_run" in
ngx_feature_run
의 값 이 yes
이면 -c
으로 인해 NGX_AUTOTEST
파일 의 내용 을 명령 으로 실행 하고 표준 출력 과 오류 출력 결 과 는 모두 NGX_AUTOCONF_ERR
으로 재 설정 된다. yes)
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
echo " found"
ngx_found=yes
ngx_feature_name
길이 가 0 이 아니라면 have
은 $ngx_have_feature
의 값 으로 설정 하고 auto/have
스 크 립 트 를 참조 하여 objs/ngx_auto_config.h
에 매크로 정 의 를 기록 합 니 다. if test -n "$ngx_feature_name"; then
have=$ngx_have_feature . auto/have
fi
NGX_AUTOTEST
이 표시 하 는 값 이 비어 있 거나 표시 하 는 명령 의 실행 오류 가 발생 하면 else
을 실행 합 니 다. else
echo " found but is not working"
fi
;;
ngx_feature_run
의 값 이 value
이면 NGX_AUTOTEST
이 표시 한 명령 을 집행 한다. value)
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
echo " found"
ngx_found=yes
objs/ngx_auto_config.h
파일 을 쓰 고 싶 습 니 다: cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $ngx_feature_name
#define $ngx_feature_name `$NGX_AUTOTEST`
#endif
END
else
echo " found but is not working"
fi
;;
ngx_feature_run
이 bug
이 라면 이전 상황 과 유사 하 다. bug)
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
echo " not found"
else
echo " found"
ngx_found=yes
if test -n "$ngx_feature_name"; then
have=$ngx_have_feature . auto/have
fi
fi
;;
다른 경우 라면
ngx_feature_name
이 비어 있 지 않 으 면 ngx_have_feature
과 관련 된 매크로 를 objs/ngx_auto_config.h
직원 에 게 기록 합 니 다. *)
echo " found"
ngx_found=yes
if test -n "$ngx_feature_name"; then
have=$ngx_have_feature . auto/have
fi
;;
esac
만약 에
NGX_AUTOTEST
이 표시 한 파일 이 존재 하지 않 거나 실행 할 수 없다 면 아래 의 else
중의 몇 마디 echo
을 집행 한다.else
echo " not found"
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
fi
5.8
NGX_AUTOSET
테스트 프로그램 실행 가능 파일 삭제rm $NGX_AUTOTEST*
-
전재
-
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.