nginx源碼分析(3)- 自動腳本

nginx的自動腳本指的是configure腳本程序和auto子目錄下面的腳本程序。自動腳本完成兩件事情,其一是檢查環境,其二是生成文件。生成的文件有兩類,一類是編譯代碼需要的Makefile文件,一類是根據環境檢查結果生成的c代碼。生成的Makefile很乾淨,也很容易閱讀。生成的c代碼有三個文件,ngx_auto_config.h是根據環境檢查的結果聲明的一些宏定義,這個頭文件被include進ngx_core.h中,所以會被所有的源碼引用到,這確保了源碼是可移植的;ngx_auto_headers.h中也是一些宏定義,不過是關於系統頭文件存在性的聲明;ngx_modules.c是默認被包含進系統中的模塊的聲明,如果想去掉一些模塊,只要修改這個文件即可。

configure是自動腳本的總驅動,它通過組合auto目錄下不同功能的腳本程序完成環境檢查和生成文件的任務。環境檢查主要是三個部分:編譯器版本及支持特性、操作系統版本及支持特性、第三方庫支持,檢查的腳本程序分別存放在auto/cc、auto/os、auto/lib三個子目錄中。檢查的方法很有趣,通過自動編譯用於檢查某個特性的代碼片段,根據編譯器的輸出情況判定是否支持該種特性。根據檢查的情況,如果環境足以支持運行一個簡單版本的nginx,就會生成Makefile和c代碼,這些文件會存放在新創建的objs目錄下。當然,也可能會失敗,假如系統不支持pcre和ssh,如果沒有屏蔽掉相關的模塊,自動腳本就會失敗。

auto目錄下的腳本職能劃分非常清晰,有檢查環境的,有檢查模塊的,有提供幫助信息的(./configure --help),有處理腳本參數的,也有一些腳本純粹是爲了模塊化自動腳本而設計出來的,比如feature腳本是用於檢查單一特性的,其他的環境檢查腳本都會調用這個腳本去檢查某個特性。還有一些腳本是用來輸出信息到生成文件的,比如have、nohave、make、install等。

之所以要在源碼分析中專門談及自動腳本,是因爲nginx的自動腳本不是用autoconf之類的工具生成的,而是作者手工編寫的,並且包含一定的設計成分,對於需要編寫自動腳本的人來說,有很高的參考價值。這裏也僅僅是粗略的介紹一下,需要詳細瞭解最好是讀一下這些腳本,這些腳本並沒有使用多少生僻的語法,可讀性是不錯的。

btw,後面開始進入真正的源碼分析階段,nginx的源碼中有非常多的結構體,這些結構體之間引用也很頻繁,很難用文字表述清楚之間的關係,覺得用圖表是最好的方式,因此需要掌握一種高效靈活的作圖方法,我選擇的是graphviz,這是at&t貢獻的跨平臺的圖形生成工具,通過寫一種稱爲“the dot language”的腳本語言,然後用dot命令就可以直接生成指定格式的圖,很方便。

發佈了30 篇原創文章 · 獲贊 1 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章