nginx的configure脚本分析

#!/bin/sh

# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.


LC_ALL=C
export LC_ALL

#options处理命令行选项,并根据选项值和默认值设置全局变量
. auto/options
#获取makefile,ngx_modules.c以及其他编译时需要用到的文件路径
. auto/init
#获取nginx默认编译的模块以及模块源码名称和路径
. auto/sources

#测试objs目录是否存在,目录名默认是objs
test -d $NGX_OBJS || mkdir -p $NGX_OBJS

#清空ngx_auto_headers.h和ngx_autoconf_err文件
echo > $NGX_AUTO_HEADERS_H
echo > $NGX_AUTOCONF_ERR

#将configure命令行参数写入ngx_auto_config.h头部
echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H

if [ $NGX_DEBUG = YES ]; then
    have=NGX_DEBUG . auto/have
fi

#获取平台信息。若没有指定交叉编译平台(--crossbuild),就获取当前机器的平台
if test -z "$NGX_PLATFORM"; then
    echo "checking for OS"

    NGX_SYSTEM=`uname -s 2>/dev/null`
    NGX_RELEASE=`uname -r 2>/dev/null`
    NGX_MACHINE=`uname -m 2>/dev/null`

    echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"

    NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";

    case "$NGX_SYSTEM" in
        MINGW32_*)
            NGX_PLATFORM=win32
        ;;
    esac

else
    echo "building for $NGX_PLATFORM"
    NGX_SYSTEM=$NGX_PLATFORM
fi

#获取编译器及编译选项
. auto/cc/conf

#检查nginx需要使用的linux系统调用头文件是否存在
if [ "$NGX_PLATFORM" != win32 ]; then
    . auto/headers
fi

#检查感兴趣的特性在当前平台是否支持
. auto/os/conf

#检查指定特性在当前平台是否支持
if [ "$NGX_PLATFORM" != win32 ]; then
    . auto/unix
fi

#检查是否支持pthread线程库
. auto/threads

#获取nginx默认编译的模块名称,路径,依赖,将相关宏定义写入ngx_auto_config.h,并生成ngx_modules.c文件
. auto/modules

#检查依赖的库是否存在(pcre,openssl,zlib,perl等)
. auto/lib/conf

#将前缀,各个文件的路径写入ngx_auto_config.h
#------------------------------------------------------------------
case ".$NGX_PREFIX" in
    .)
        NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}
        have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
    ;;

    .!)
        NGX_PREFIX=
    ;;

    *)
        have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
    ;;
esac
s
if [ ".$NGX_CONF_PREFIX" != "." ]; then
    have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
fi

have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define

have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""
. auto/define
have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\""
. auto/define
have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""
. auto/define
#--------------------------------------------------------------------

#生成objs/Mafile文件
. auto/make

#为依赖库指定编译指令,并写入Makefile中
. auto/lib/make

#获取安装内容和配置(make install)
. auto/install

# STUB
. auto/stubs

#将配置好的user,group写入ngx_auto_config.h中
have=NGX_USER value="\"$NGX_USER\"" . auto/define
have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define

if [ ".$NGX_BUILD" != "." ]; then
    have=NGX_BUILD value="\"$NGX_BUILD\"" . auto/define
fi

#打印配置摘要
. auto/summary
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值