编译nginx执行./configure编译源码分析

configure文件详解

主要围绕auto文件夹进行分析

. auto/options

. auto/init

. 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这个宏进行定义 

# enable namespace

if [ $NGX_NAMESPACE = YES ]; then

    have=CONFIG_NGX_NS . auto/have

fi

而这个yes是来自于编译过程中的options脚本,

--with-namespace)                NGX_NAMESPACE=YES          ;;

./objs/ngx_auto_config.h

#ifndef CONFIG_NGX_NS

#define CONFIG_NGX_NS  1

#endif

VPC_SUP宏定义

options:

NGX_VPC_SUP=NO

--with-http_vpc_support)         NGX_VPC_SUP=YES            ;;

os/linux:

# enable vpc support

if [ $NGX_VPC_SUP = YES ]; then

    have=NGX_VPC_SUP . auto/have

fi

./configure  --with-http_vpc_support

objs/ngx_auto_config.h:

#ifndef NGX_VPC_SUP                                                                                                                                                                                           

#define NGX_VPC_SUP  1

#endif

success

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值