分析环境:
nginx的源码版本: 1.5.6,
linux CentOS kernel 2.6.32-431.el6.i686
开源软件,编译及安装的一般三部曲即:
- configure
- make
- install
nginx的configure很有特点,其提供了很多复杂功能。该configure是shell脚本文件,完成如下功能:
参数解析及处理;
操作系统检测以及所依赖库的检测;
中间目录及文件的产生,会产生c源文件、Makefile文件等;
特别是在检查 系统支持哪些特性是,非常有特色,值得学习。
比如检查是否支持 epoll ,就是 通过 feature 脚本,生成一个NGX_AUTOTEST.c,编译并运行,然后检测是否有错。
configure 内容如下:
点击(此处)折叠或打开
- #!/bin/sh
-
- # Copyright (C) Igor Sysoev
- # Copyright (C) Nginx,
-
-
- LC_ALL=C
- export LC_ALL
-
- # 处理命令行选项
- . auto/options
- #
- . auto/init
- . auto/sources
-
- test -d $NGX_OBJS || mkdir $NGX_OBJS
-
- echo > $NGX_AUTO_HEADERS_H
- echo > $NGX_AUTOCONF_ERR
-
- echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H
-
-
- if [ $NGX_DEBUG = YES ]; then
- have=NGX_DEBUG . auto/have
- fi
-
-
- 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
-
- if [ "$NGX_PLATFORM" != win32 ]; then
- . auto/headers
- fi
-
- . auto/os/conf
-
- if [ "$NGX_PLATFORM" != win32 ]; then
- . auto/unix
- fi
-
- . auto/modules
- . auto/lib/conf
-
- 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
-
- 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
-
- . auto/make
- . auto/lib/make
- . auto/install
-
- # STUB
- . auto/stubs
-
- have=NGX_USER value="\"$NGX_USER\"" . auto/define
- have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define
-
- . auto/summary