nginx ./configure详解及源码分析

configure文件详解

 

先从auto文件夹说起

auto/init

auto/options

auto/sources

auto/options

1. 设置选项对应的shell变量以及他们的初始值

help=no

NGX_PREFIX=

NGX_SBIN_PATH=

NGX_CONF_PREFIX=

NGX_CONF_PATH=

NGX_ERROR_LOG_PATH=

NGX_PID_PATH=

NGX_LOCK_PATH=

NGX_USER=

NGX_GROUP=





# 得到此选项的value部分

 case "$option" in

     -*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;

         *) value="" ;;

 esac



 # 根据option内容进行匹配,并设置相应的选项

 case "$option" in

     --help)                          help=yes                   ;;

     --prefix=)                       NGX_PREFIX="!"             ;;

     --prefix=*)                      NGX_PREFIX="$value"        ;;

     --sbin-path=*)                   NGX_SBIN_PATH="$value"     ;;

     --conf-path=*)                   NGX_CONF_PATH="$value"     ;;

     --error-log-path=*)              NGX_ERROR_LOG_PATH="$value";;

     --pid-path=*)                    NGX_PID_PATH="$value"      ;;

     --lock-path=*)                   NGX_LOCK_PATH="$value"     ;;

     --user=*)                        NGX_USER="$value"          ;;

     --group=*)                       NGX_GROUP="$value"         ;;



     ...



     *)

         # 没有找到的对应选项

         echo "$0: error: invalid option \"$option\""

         exit 1

     ;;

 esac





默认文件路径

NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}

NGX_CONF_PREFIX=dirname $NGX_CONF_PATH

NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}

NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}

auto/init

ngx_auto_config.h文件是最终要生成使用的宏的地方

# 生成最终执行编译的makefile文件路径

NGX_MAKEFILE=$NGX_OBJS/Makefile

# 动态生成nginx模块列表的路径,由于nginx的的一些模块是可以选择编译的,而且可以添加自己的模块,所以模块列表是动态生成的

NGX_MODULES_C=$NGX_OBJS/ngx_modules.c



NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h

NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h



# 自动测试目录与日志输出文件

NGX_AUTOTEST=$NGX_OBJS/autotest

# 如果configure出错,可用来查找出错的原因

NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err



NGX_ERR=$NGX_OBJS/autoconf.err

MAKEFILE=$NGX_OBJS/Makefile





NGX_PCH=

NGX_USE_PCH=





# 检查echo是否支持-n或\c



# check the echo's "-n" option and "\c" capability



if echo "test\c" | grep c >/dev/null; then



    # 不支持-c的方式,检查是否支持-n的方式



    if echo -n test | grep n >/dev/null; then

        ngx_n=

        ngx_c=



    else

        ngx_n=-n

        ngx_c=

    fi



else

    ngx_n=

    ngx_c='\c'

fi



# 创建最初始的makefile文件

# default表示目前编译对象

# clean表示执行clean工作时,需要删除makefile文件以及objs目录

# 整个过程中只会生成makefile文件以及objs目录,其它所有临时文件都在objs目录之下,所以执行clean后,整个目录还原到初始状态

# 要再次执行编译,需要重新执行configure命令



# create Makefile



cat << END > Makefile



default:    build



clean:

    rm -rf Makefile $NGX_OBJS

END

auto/sources

CORE_SRCS="src/core/nginx.c \

           src/core/ngx_log.c \

           src/core/ngx_palloc.c \

           src/core/ngx_array.c \

           src/core/ngx_list.c \

           src/core/ngx_hash.c \

           src/core/ngx_buf.c \

           src/core/ngx_queue.c \

           src/core/ngx_output_chain.c \

           src/core/ngx_string.c \

           src/core/ngx_parse.c \

           src/core/ngx_inet.c \

           src/core/ngx_file.c \

           src/core/ngx_crc32.c \

           src/core/ngx_murmurhash.c \

           src/core/ngx_md5.c \

           src/core/ngx_rbtree.c \

           src/core/ngx_trie.c

           src/core/ngx_segment_tree.c \

           src/core/ngx_radix_tree.c \

           src/core/ngx_slab.c \

           src/core/ngx_times.c \

           src/core/ngx_shmtx.c \

           src/core/ngx_connection.c \

           src/core/ngx_cycle.c \

           src/core/ngx_spinlock.c \

           src/core/ngx_cpuinfo.c \

           src/core/ngx_conf_file.c \

           src/core/ngx_resolver.c \

           src/core/ngx_open_file_cache.c \

           src/core/ngx_crypt.c \

           src/core/ngx_proxy_protocol.c \

           src/core/ngx_syslog.c"

auto/have

个工具的作用是,将$have变量的值,宏定义为1,并输出到auto_config文件中

# Copyright (C) Igor Sysoev

# Copyright (C) Nginx, Inc.





cat << END >> $NGX_AUTO_CONFIG_H



#ifndef $have

#define $have  1

#endif



END

auto/os/conf 

操作系统配置检测,linux系统会选择对应的linux脚本

# Copyright (C) Igor Sysoev

# Copyright (C) Nginx, Inc.





NGX_SOEXT=".so"



echo "checking for $NGX_SYSTEM specific features"



case "$NGX_PLATFORM" in



    FreeBSD:*)

        . auto/os/freebsd

    ;; 



    Linux:*)

        . auto/os/linux

    ;; 



    SunOS:*)

        . auto/os/solaris

    ;; 



    Darwin:*)

        . auto/os/darwin

    ;; 



    win32)

        . auto/os/win32

    ;;

auto/os/linux

判断NGX_NAMESPACE参数是否设置为yes,是的话将CONFIG_NGX_NS这个宏进行定义,yes是来自于编译过程中的options脚本。

# enable namespace

if [ $NGX_NAMESPACE = YES ]; then

    have=CONFIG_NGX_NS . auto/have

fi
--with-namespace)                NGX_NAMESPACE=YES          ;;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值