Nginx编译配置脚本篇- 源码相关变量脚本auto/sources

Posted 彼方丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx编译配置脚本篇- 源码相关变量脚本auto/sources相关的知识,希望对你有一定的参考价值。

1、相关文章

由于学习本文需要Nginx源码及搭建相关的编译环境,且本文与前面的文章有先后呼应关系,所以建议大家按以下文章顺序阅读

2、前言

configure运行完auto/init脚本后,接着就是运行auto/sources脚本了,这个脚本是objs/Makefile文件里的重要组成部分,接下来介绍auto/sources里面的内容
configure文件将在最后一篇关于Nginx脚本配置文件的文章中讲解)

3、auto/sources文件内容详解

3.1、核心模块

3.1.1、核心模块名称(CORE_MODULES)

CORE_MODULES变量存储了Nginx的核心模块,默认有ngx_core_modulengx_errlog_modulengx_conf_module,代码如下:

CORE_MODULES="ngx_core_module ngx_errlog_module ngx_conf_module"

3.1.2、核心模块头文件所在目录(CORE_INCS)

这个变量存储了Nginx核心模块头文件的所在目录,如果读者有了解过gcc编译规则的话,可以很容易猜到这是给后续编写Makefile时指定头文件查找目录用的,比如-I src/core表示先去src/core目录查找头文件。代码如下:

CORE_INCS="src/core"

3.1.3、核心模块头文件(CORE_DEPS)

这个变量存储了Nginx核心模块头文件的路径(相对路径),代码如下(有所省略):

CORE_DEPS="src/core/nginx.h \\
           src/core/ngx_config.h \\
           src/core/ngx_core.h \\
           ...
           src/core/ngx_syslog.h"

3.1.4、核心模块源文件(CORE_SRCS)

这个变量存储了Nginx核心模块源文件的路径(相对路径),代码如下(有所省略):

CORE_SRCS="src/core/nginx.c \\
           src/core/ngx_log.c \\
           src/core/ngx_palloc.c \\
           ...
           src/core/ngx_syslog.c"

3.2、事件模块

3.2.1、事件模块名称(EVENT_MODULES)

EVENT_MODULES变量存储了Nginx的事件模块,默认有ngx_events_modulengx_event_core_module,代码如下:

EVENT_MODULES="ngx_events_module ngx_event_core_module"

3.2.2、事件模块头文件所在目录(EVENT_INCS)

这个变量存储了Nginx事件模块头文件的所在目录,代码如下:

EVENT_INCS="src/event src/event/modules"

3.2.3、事件模块头文件(EVENT_DEPS)

这个变量存储了Nginx事件模块头文件的路径(相对路径),代码如下:

EVENT_DEPS="src/event/ngx_event.h \\
            src/event/ngx_event_timer.h \\
            src/event/ngx_event_posted.h \\
            src/event/ngx_event_connect.h \\
            src/event/ngx_event_pipe.h"

3.2.4、事件模块源文件(CORE_SRCS)

这个变量存储了Nginx事件模块源文件的路径(相对路径),代码如下:

EVENT_SRCS="src/event/ngx_event.c \\
            src/event/ngx_event_timer.c \\
            src/event/ngx_event_posted.c \\
            src/event/ngx_event_accept.c \\
            src/event/ngx_event_udp.c \\
            src/event/ngx_event_connect.c \\
            src/event/ngx_event_pipe.c"

3.3、事件驱动模块

Nginx事件驱动模型包括selectpollkqueuedevpolleventportepolliocpaio。本文不讨论这些事件驱动模型的原理和异同。

3.3.1、select模块

SELECT_MODULE=ngx_select_module
SELECT_SRCS=src/event/modules/ngx_select_module.c
WIN32_SELECT_SRCS=src/event/modules/ngx_win32_select_module.c

3.3.2、poll模块

POLL_MODULE=ngx_poll_module
POLL_SRCS=src/event/modules/ngx_poll_module.c
WIN32_POLL_SRCS=src/event/modules/ngx_win32_poll_module.c

3.3.3、kqueue模块

KQUEUE_MODULE=ngx_kqueue_module
KQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c

3.3.4、devpoll模块

DEVPOLL_MODULE=ngx_devpoll_module
DEVPOLL_SRCS=src/event/modules/ngx_devpoll_module.c

3.3.5、eventport模块

EVENTPORT_MODULE=ngx_eventport_module
EVENTPORT_SRCS=src/event/modules/ngx_eventport_module.c

3.3.6、epoll模块

EPOLL_MODULE=ngx_epoll_module
EPOLL_SRCS=src/event/modules/ngx_epoll_module.c

3.3.7、iocp模块

IOCP_MODULE=ngx_iocp_module
IOCP_SRCS=src/event/modules/ngx_iocp_module.c

3.3.8、aio模块

FILE_AIO_SRCS="src/os/unix/ngx_file_aio_read.c"
LINUX_AIO_SRCS="src/os/unix/ngx_linux_aio_read.c"

3.4、操作系统相关项

3.4.1、UNIX相关

  • 头文件所在目录(UNIX_INCS)
UNIX_INCS="$CORE_INCS $EVENT_INCS src/os/unix"
  • 头文件(UNIX_DEPS)
UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \\
            src/os/unix/ngx_time.h \\
            src/os/unix/ngx_errno.h \\
            ...
            src/os/unix/ngx_process_cycle.h"
  • 源文件(UNIX_SRCS)
UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \\
            src/os/unix/ngx_time.c \\
            src/os/unix/ngx_errno.c \\
            ...
            src/os/unix/ngx_process_cycle.c"

3.4.2、POSIX相关

  • 头文件(POSIX_DEPS)
POSIX_DEPS=src/os/unix/ngx_posix_config.h

3.4.3、线程池相关

  • 模块(THREAD_POOL_MODULE)
THREAD_POOL_MODULE=ngx_thread_pool_module
  • 头文件(THREAD_POOL_DEPS)
THREAD_POOL_DEPS=src/core/ngx_thread_pool.h
  • 源文件(THREAD_POOL_SRCS)
THREAD_POOL_SRCS="src/core/ngx_thread_pool.c
                  src/os/unix/ngx_thread_cond.c
                  src/os/unix/ngx_thread_mutex.c
                  src/os/unix/ngx_thread_id.c"

3.4.4、FreeBSD相关

  • 头文件(FREEBSD_DEPS)
FREEBSD_DEPS="src/os/unix/ngx_freebsd_config.h src/os/unix/ngx_freebsd.h"
  • 源文件(FREEBSD_SRCS)
FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c
  • 有关sendfile机制的源文件(FREEBSD_SENDFILE_SRCS)
FREEBSD_SENDFILE_SRCS=src/os/unix/ngx_freebsd_sendfile_chain.c

3.4.5、Linux相关

  • 头文件(LINUX_DEPS)
LINUX_DEPS="src/os/unix/ngx_linux_config.h src/os/unix/ngx_linux.h"
  • 源文件(LINUX_SRCS)
LINUX_SRCS=src/os/unix/ngx_linux_init.c
  • 有关sendfile机制的源文件(LINUX_SENDFILE_SRCS)
LINUX_SENDFILE_SRCS=src/os/unix/ngx_linux_sendfile_chain.c

3.4.6、Solaris相关

  • 头文件(SOLARIS_DEPS)
SOLARIS_DEPS="src/os/unix/ngx_solaris_config.h src/os/unix/ngx_solaris.h"
  • 源文件(SOLARIS_SRCS)
SOLARIS_SRCS=src/os/unix/ngx_solaris_init.c
  • 有关sendfile机制的源文件(SOLARIS_SENDFILEV_SRCS)
SOLARIS_SENDFILEV_SRCS=src/os/unix/ngx_solaris_sendfilev_chain.c

3.4.7、Darwin相关

  • 头文件(DARWIN_DEPS)
DARWIN_DEPS="src/os/unix/ngx_darwin_config.h src/os/unix/ngx_darwin.h"
  • 源文件(DARWIN_SRCS)
DARWIN_SRCS=src/os/unix/ngx_darwin_init.c
  • 有关sendfile机制的源文件(DARWIN_SENDFILE_SRCS)
DARWIN_SENDFILE_SRCS=src/os/unix/ngx_darwin_sendfile_chain.c

3.4.8、Win32相关

  • 头文件所在目录(WIN32_INCS)
WIN32_INCS="$CORE_INCS $EVENT_INCS src/os/win32"
  • 头文件(WIN32_DEPS)
WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \\
            src/os/win32/ngx_win32_config.h \\
            src/os/win32/ngx_time.h \\
            ...
            src/os/win32/ngx_process_cycle.h"
  • 配置相关头文件(WIN32_CONFIG)
WIN32_CONFIG=src/os/win32/ngx_win32_config.h
  • 源文件(WIN32_SRCS)
WIN32_SRCS="$CORE_SRCS $EVENT_SRCS \\
            src/os/win32/ngx_errno.c \\
            src/os/win32/ngx_alloc.c \\
            ...
            src/event/ngx_event_acceptex.c"
  • Nginx用于Win32的图标文件(NGX_WIN32_ICONS)
NGX_WIN32_ICONS="src/os/win32/nginx.ico"
  • Run Commands相关(NGX_WIN32_RC)
NGX_WIN32_RC="src/os/win32/nginx.rc"

3.5、HTTP相关

  • HTTp文件处理核心源文件(HTTP_FILE_CACHE_SRCS)
HTTP_FILE_CACHE_SRCS=src/http/ngx_http_file_cache.c

4、总结

auto/sources脚本的内容是objs/Makefile的重要组成部分,通过运行auto/sources脚本,我们将源代码文件相关内容给写入原封不动写入到了configure文件中,目前看不出来在哪里使用,后续的文章会再进一步地进行分析。

以上是关于Nginx编译配置脚本篇- 源码相关变量脚本auto/sources的主要内容,如果未能解决你的问题,请参考以下文章

Nginx编译配置脚本篇- 编译器相关脚本

Nginx编译配置脚本篇- 动态库配置脚本auto/lib/conf

Nginx编译配置脚本最终篇 - configure脚本

Nginx编译配置脚本篇- 工具型脚本系列

Nginx编译配置脚本篇(10)- Makefile相关脚本

Nginx编译配置脚本篇- 系统环境相关脚本