解剖Nginx·自动脚本篇(2)设置初始变量脚本 auto/init

configure中运行完auto/options脚本后,接着运行auto/init脚本,其中所做的工作如下。

1 Makefile文件名变量

默认情况下是:

  • objs/Makefile

代码如下:

NGX_MAKEFILE=$NGX_OBJS/Makefile

2 源文件名变量

默认情况下是:

  • objs/ngx_modules.c

代码如下:

NGX_MODULES_C=$NGX_OBJS/ngx_modules.c

3 头文件名变量

默认情况下是:

  • objs/ngx_auto_headers.h
  • objs/ngx_auto_config.h

代码如下:

NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h
NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h

4 自动测试文件名与配置错误文件名变量

默认情况下是:

  • objs/autotest
  • objs/autoconf.err

代码如下:

NGX_AUTOTEST=$NGX_OBJS/autotest
NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err

5 STUBS 相关变量

默认情况下是:

  • objs/autoconf.err
  • objs/Makefile

代码如下:

# STUBs
NGX_ERR=$NGX_OBJS/autoconf.err
MAKEFILE=$NGX_OBJS/Makefile

6 PCH 相关变量

代码如下:

NGX_PCH=
NGX_USE_PCH=

7 测试所在环境下"\c"和"-n"

由于 Nginx 支持多种操作系统,比如 Mac OS、Linux、Solaris 等。不同的系统下的 Shell 也小有差别。所以在auto/init脚本中有如下两个变量:

  • ngx_n
  • ngx_c

代码如下:

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

if echo "test\c" | grep c >/dev/null; then
    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

8 创建并写入 Makefile

还有两个 targets,default 执行 build,clean 执行rm -rf Makefile $NGX_OBJS

# create Makefile

cat << END > Makefile

default:    build
clean:
    rm -rf Makefile $NGX_OBJS
时间: 2024-07-31 00:21:31

解剖Nginx·自动脚本篇(2)设置初始变量脚本 auto/init的相关文章

解剖Nginx&#183;自动脚本篇(4)工具型脚本系列

目录 auto/have 向自动配置头文件追加可用宏定义(objs/ngx_auto_config.h) auto/nohave 向自动配置头文件追加不可用宏定义(objs/ngx_auto_config.h) auto/define 向自动配置脚本追加 K-V 宏定义(objs/ngx_auto_config.h),表示“设置了 K,其值为 V” auto/have_headers 向自动头头文件(objs/ngx_auto_header.h) auto/feature auto/types/

解剖Nginx&#183;自动脚本篇(5)编译器相关主脚本

在 Nginx 的自动脚本中,auto/cc目录下的所有脚本都是用于编译器相关配置使用的.Nginx的出色跨平台性(Linux.Darwin.Solaris.Win32 等)就有这些脚本的贡献.该目录下包含如下脚本: 目录 conf:主脚本,配置编译器的基本属性,并根据系统的编译器环境引用不同的脚本. name:与编译器名称相关的处理逻辑在该脚本中. gcc:GNU C 编译器的 Specified 配置. sunc:Sun C 编译器的 Specified 配置. acc:HP ANSI C+

解剖Nginx&#183;自动脚本篇(1)解析配置选项脚本 auto/options

在安装Nginx之前(即运行make脚本之前),首先是进行安装的配置准备,包括环境检查及生成文件.这些工作是由自动脚本完成的.和绝大多数软件一样,Nginx的自动脚本的入口,同样是名为configure的文件. 除了configure,其他的自动脚本都在auto目录下.通过分析configure脚本源码,我们可以看到,configure首先运行了auto目录下的几个自动脚本,如下: . auto/options . auto/init . auto/sources 其中通过运行auto/opti

解剖Nginx&#183;自动脚本篇(3)源码相关变量脚本 auto/sources

在configure脚本中,运行完auto/options和auto/init脚本后,接下来就运行auto/soures脚本.这个脚本是为编译做准备的. 目录 核心模块 事件模块 OpenSSL 模块相关变量 事件驱动模块 操作系统相关项 HTTP 模块 邮件模块 Google PerfTools 模块 C++ 测试模块 1 核心模块 1.1 核心模块名称 CORE_MODULES CORE_MODULES变量记录 Nginx 的核心模块,默认包括ngx_core_module.ngx_errl

解剖Nginx&#183;自动脚本篇(6)编译器名称变量脚本 auto/cc/name

回顾变量 CC 最初是在auto/options脚本中初始化的: CC=${CC:-gcc} 1 C Compiler 的 feature Windows 平台的编译器叫做MSVC,其他平台的都统称为C Compiler. 1.1 获取编译器参数 该脚本并不复杂,首先通过NGX_PLATFORM变量来判断是否是win32(该变量是在auto/options中初始化的),如果是,则: ngx_feature="C compiler" ngx_feature_name= ngx_featu

解剖Nginx&#183;自动脚本篇(7)类型相关脚本系列

1 auto/types/sizeof 该脚本的功能,是通过测试程序获知给定的ngx_type的大小. 1.1 显示提示信息 echo $ngx_n "checking for $ngx_type size ...$ngx_c" cat << END >> $NGX_AUTOCONF_ERR ---------------------------------------- checking for $ngx_type size END 1.2 生成计算ngx_t

解剖Nginx&#183;模块开发篇(3)ngx_http_hello_world_module 模块的基本函数实现

还记得我们定义过一个结构体如下吗? typedef struct { ngx_str_t output_words; } ngx_http_hello_world_loc_conf_t; 它就是 HelloWorld 的 location 组件配置,其中有一个字符串成员 output_words. 1 create location 用于 ngx_http_hello_world_module_ctx 中的 location 创建函数: static void* ngx_http_hello_w

解剖Nginx&#183;模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义

elloWorld 是一个典型的 location 模块.什么是 location 模块?在 Nginx 中,根据作用域,有 main 模块.server 模块.location 模块. 1 模块定义 在 HelloWorld 模块中有一个 ngx_http_hello_world_module 变量,用于定义模块.它是 ngx_module_t 类型.ngx_module_t 是 ngx_module_s 的别名,其定义如下: struct ngx_module_s { ngx_uint_t

解剖Nginx&#183;模块开发篇(5)解读内置非默认模块 ngx_http_stub_status_module

1 Background ngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息.默认情况下这个模块是不被编译进来的,所以在编译 Nginx 时要指定加载该模块: --with-http_stub_status_module 当然了,如果你是重新编译,仅仅-s reload是不够的,可能需要用到平滑升级:<高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx>. 为什么拿它做例子?因为它也