Ok...事實上並不太可能這麼簡單,port 方面可能需要作些修改才能正常使用。 因此, 本節將一步一步來介紹如何修改上一章的樣本以正常使用。
首先,先介紹一下在你所作的 port 目錄內打 make
時,所會作哪些事情的順序吧。
你可以另開一窗來看 bsd.port.mk
內容,以便瞭解我們下面在講什麼。
但別太擔心是否完全看懂
bsd.port.mk
在做啥,很多人都還沒完全看完...
:->
首先,進行 fetch
階段。
fetch
是確認 tarball 檔有沒有已在
DISTDIR
內了?若 fetch
在 DISTDIR
找不到的話,它會搜尋 Makefile
內的 MASTER_SITES
URL
,或者是主 FTP 站專門放備份 distfiles 的目錄 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/
。 假設都找不到的話,但是網路有接上 Internet 的話,它會試著用
FETCH
來抓所指定的檔案。
抓到之後,它會把檔案存到 DISTDIR
以便開始使用或日後運用。
其次,進行 extract
階段,它會從
DISTDIR
內找出該 port 所需的檔案(通常是 gzip
格式的 tarball),然後解壓縮到 WRKDIR
所設定的臨時目錄名稱(預設是 work
目錄)內
。
之後,進行 patch
階段,
一開始會先套用 PATCHFILES
所指定的任何 patch
檔。 接著是 PATCHDIR
(預設是
files
子目錄) 內的檔名為
patch-*
之類的檔案,會以字母順序而逐一套用 patch。
接著是 configure
階段,可以照 port
的類型來作各種不同設定以調整,比如:
若有放 scripts/configure
的話,
那麼就會跑裡面的設定。
若有設 HAS_CONFIGURE
或是
GNU_CONFIGURE
的話,那麼就會跑
WRKSRC/configure
若有設 USE_IMAKE
的話,那麼就會跑
XMKMF
(預設是 xmkmf
-a
) 。
最後是 build
階段,它會在該
port 的 working directory(由 WRKSRC
所設定)
內開始編譯。 若有設 USE_GMAKE
的話,
那麼就會改用 GNU make
來編譯,
否則就用系統本身的 make
來編譯。
上面講的都是打 make
時的預設階段。
此外,還可以設定各階段之前、之後要作的事情:透過定義
pre-
或
something
post-
,
或者把這些檔名的 script 丟到 something
scripts
子目錄去,
這樣子它們就會在各預設階段的之前、之後進行囉。
舉例來說,若在 Makefile
內設定
post-extract
,而且在
scripts
子目錄內又有
pre-build
檔的話,那麼在作解壓縮之後,就會開始
post-extract
階段以進行解壓縮後的後續動作,
而在跑 build 階段之前,就會先執行 pre-build
這隻 script 作先期準備。 通常較簡單的修改動作,建議直接放在
Makefile
內就好了,
因為這樣會比較方便加上這些原本沒有的階段,同時也方便他人協助除錯
。
預設的各階段動作都是照 bsd.port.mk
內的
do-
之類所定義的。 舉例:something
do-extract
就是定義怎麼把檔案解壓縮的。
若對預設方式覺得不妥的話,都可以在該 port 的
Makefile
重新定義。
The “main” targets (e.g.,
extract
,
configure
, etc.) do nothing more than
make sure all the stages up to that one are completed and call
the real targets or scripts, and they are not intended to be
changed. If you want to fix the extraction, fix
do-extract
, but never ever change
the way extract
operates!
現在,你已經知道打 make
到底會作些什麼事囉,
接下來會教你如何作更完美的 port。
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。