Nginx · 자동 스 크 립 트 편 정독 (4) 도구 형 스 크 립 트 시리즈

11099 단어 nginx
Nginx · 자동 스 크 립 트 편 정독 (4) 도구 형 스 크 립 트 시리즈
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
주요 기능: 자동 설정 헤더 파일 에 지정 한 매개 변 수 를 표시 하 는 값 처리 변수: havevalue 역할 개체:
역할 대상: $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
주요 기능: 자동 헤더 파일 에 지정 한 매개 변 수 를 표시 합 니 다 처리 변수: havevalue 역할 개체:
역할 대상: $NGX_AUTO_HEADERS_H 변수 가 표시 하 는 자동 생 성 헤더 파일.
기본 대상: objs/ngx_auto_headers.h
  cat << END >> $NGX_AUTO_HEADERS_H
  #ifndef $have
  #define $have  1
  #endif
  END

주의: auto/have_headersauto/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_nngx_c 두 변수 에 관 한 것 을 기억 하 십 니까?auto/feature 에서 첫 번 째 문장 은:
echo $ngx_n "checking for $ngx_feature ...$ngx_c"
echo 한 마디 checking for $ngx_feature 을 하고 줄 을 바 꾸 는 것 이다.물론 ngx_nngx_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_featurengx_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_incsngx_feature_testauto/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_runbug 이 라면 이전 상황 과 유사 하 다.
        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*

-
전재
-

좋은 웹페이지 즐겨찾기