解剖Nginx 自動指令碼篇(5)編譯器相關主指令碼

2022-09-06 18:03:07 字數 4416 閱讀 3378

在 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表示optionobj表示objectbin表示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表示directorysep表示seperatorregex表示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 相關 feature
if [ "$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 相關 feature
ngx_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...