在 nginx 的自動指令碼中,auto/cc
目錄下的所有指令碼都是用於編譯器相關配置使用的。nginx
的出色跨平台性(linux、darwin、solaris、win32 等)就有這些指令碼的貢獻。該目錄下包含如下指令碼:
link
變數為:
link="\$(cc)"
有 include、編譯、輸出目標檔案、輸出可執行檔案。
ngx_include_opt="-i "
ngx_compile_opt="-c"
ngx_objout="-o "
ngx_binout="-o "
opt
表示option
,obj
表示object
,bin
表示binary
。
目標副檔名、可執行副檔名。
ngx_objext="o"
ngx_binext=
ext
表示extension
。
ngx_long_start=
ngx_long_end=
這兩個變數是在編譯選項中使用的,與平台相關。在這裡做初始化。
4.4.1 ngx_long_start
4.4.2 ngx_long_end
ngx_regex_dirsep="\/"
ngx_dirsep='/'
dir
表示directory
,sep
表示seperator
,regex
表示regular expression
。
ngx_regex_cont=' \\\
'ngx_cont=' \
'ngx_tab=' \
'ngx_spacer=
ngx_long_regex_cont=$ngx_regex_cont
ngx_long_cont=$ngx_cont
. auto/cc/name
if test -n "$cflags"; then
cc_test_flags="$cflags $ngx_cc_opt"
case $ngx_cc_name in
ccc)
# compaq c v6.5-207
ngx_include_opt="-i"
;;esac
else
case $ngx_cc_name in
gcc)
# gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
# 3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
# 4.0.0, 4.0.1, 4.1.0
. auto/cc/gcc
;;icc)
# intel c++ compiler 7.1, 8.0, 8.1
. auto/cc/icc
;;sunc)
# sun c 5.7 patch 117837-04 2005/05/11
. auto/cc/sunc
;;ccc)
# compaq c v6.5-207
. auto/cc/ccc
;;acc)
# acc: hp ansi c++ b3910b a.03.55.02
. auto/cc/acc
;;msvc*)
# msvc++ 6.0 sp2, msvc++ toolkit 2003
. auto/cc/msvc
;;owc)
# open watcom c 1.0, 1.2
. auto/cc/owc
;;bcc)
# borland c++ 5.5
. auto/cc/bcc
;;esac
cc_test_flags="$cc_test_flags $ngx_cc_opt"
fi
auto/feature
指令碼,已經在《精讀 nginx·自動指令碼篇(4)工具型指令碼系列》中介紹了。所以feature
相關的**很容易理解。
if test -n "$ngx_ld_opt"; then
ngx_feature=--with-ld-opt=\"$ngx_ld_opt\"
ngx_feature_name=
ngx_feature_run=no
ngx_feature_incs=
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test=
. auto/feature
if [ $ngx_found = no ]; then
echo $0: error: the invalid value in --with-ld-opt=\"$ngx_ld_opt\"
echo
exit 1
fifi
在執行configure
的時候,--with-ld-opt
指定了ngx_ld_opt
,然後設定feature
相關變數。其他一些feature
設定如下。
4.8.1 gcc builtin atomic operations 相關 feature
ngx_feature="gcc builtin atomic operations"
ngx_feature_name=ngx_h**e_gcc_atomic
ngx_feature_run=yes
ngx_feature_incs=
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="long n = 0;
if (!__sync_bool_compare_and_swap(&n, 0, 1))
return 1;
if (__sync_fetch_and_add(&n, 1) != 1)
return 1;
if (n != 2)
return 1;
__sync_synchronize();"
. auto/feature
4.8.2 c99 variadic macros 相關 featureif [ "$ngx_cc_name" = "ccc" ]; then
echo "checking for c99 variadic macros ... disabled"
else
ngx_feature="c99 variadic macros"
ngx_feature_name="ngx_h**e_c99_variadic_macros"
ngx_feature_run=yes
ngx_feature_incs="#include #define var(dummy, ...) sprintf(__va_args__)"
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="char buf[30]; buf[0] = '0';
var(0, buf, \"%d\", 1);
if (buf[0] != '1') return 1"
. auto/feature
fi
4.8.3 gcc variadic macros 相關 featurengx_feature="gcc variadic macros"
ngx_feature_name="ngx_h**e_gcc_variadic_macros"
ngx_feature_run=yes
ngx_feature_incs="#include #define var(dummy, args...) sprintf(args)"
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="char buf[30]; buf[0] = '0';
var(0, buf, \"%d\", 1);
if (buf[0] != '1') return 1"
. auto/feature
- 解剖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 end1.2 生成計算n...
nginx開機自動啟動指令碼
把以下指令碼儲存為nginx檔案放入 etc init.d nginx 然後可以通過 etc init.d nginx start 命令啟動nginx etc init.d nginx stop 命令停止nginx etc init.d nginx restart 命令重啟nginx 開機自動啟動n...
nginx開機自動啟動指令碼
把以下指令碼儲存為nginx檔案放入 etc init.d nginx 然後可以通過 etc init.d nginx start 命令啟動nginx etc init.d nginx stop 命令停止nginx etc init.d nginx restart 命令重啟nginx 開機自動啟動n...