在 port 的準備過程中,新增或變更過的檔案,
可以利用 diff(1) 將這些變動列出,
以便後續讓 patch(1) 使用。
所有你想套用的 patch 都應該命名為
patch-
,其中
*
*
表示要 patch 檔案的路徑及檔名名稱,
例如 patch-Imakefile
或
patch-src-config.h
。
這些檔案都應該儲存在 PATCHDIR
(通常是 files/
,放在其內的檔案都會自動被套用。
所有 patch 檔路徑都是相對於
WRKSRC
(通常會將 port 的 tarball 解壓到裡面,
port 的建置也會在這裡完成)。
為了能讓修正和更新更順利,你應該避免多個 patch 修正同一個檔案
(舉例來說,patch-file
和
patch-file2
同時更動
)。WRKSRC
/foobar.c
請只使用 [-+._a-zA-Z0-9]
這些字元來命名
patch 檔,不要使用這些字元以外的字元。
千萬不要將你的 patch 檔命名成 patch-aa
或是
patch-ab
等名稱,
請使用路徑和名稱相關的命名。
不要將 RCS 字串放進你的 patch 檔。CVS 會在這些檔案送入
ports tree 的時候弄亂檔案內容,而且在將它們重新 check out
出來後,會因檔案內容的差異造成 patch 失敗。
RCS 字串是以錢字號 ($
) 括起來的,
通常以 $Id
或
$RCS
為開頭。
你可以使用 diff(1) 搭配 recurse (-r
) 選項
來產生 patch 檔,但請再次檢視產生出的 patch 檔,確保你沒有產生
任何不必要的垃圾資訊在裡面。特別是對那些經由
Imake
或 GNU configure
所產生的 Makefile
檔產生 patch,
都是不必要的,這類的 patch 檔都應該被刪除。假如你必須透過修改
configure.in
再執行
autoconf
來重新產生
configure
,不要對
configure
產生 patch 檔 (這往往會長成數千行!);
請定義 USE_AUTOTOOLS=autoconf:261
並對
configure.in
產生 patch 檔。
請儘量不要對無用的 whitespace 作修改,因為在 Open Source 界各個 project 都會使用很多相同的 code base,這些可能卻是採用不同的編排方式 、coding style。 若要試圖改變這些編排風格的話,請小心: 這些只會是徒勞無功的更改。 此外不僅會造成 CVS repository 空間浪費, 也會讓人難以找出真正問題癥結所在,以及分辨不出這段 patch 到底在作什麼 。
假如你必須刪除一個檔案,那麼你可以在
post-extract
階段做這件事,
而不是在 patch 階段。
你可以直接在 port 的
Makefile
中完成簡單的置換工作,只需使用
sed(1) 的 in-place mode 即可。這在只需 patch 一個變數的值時相當有用。
例如:
在移植軟體時,特別是那些在 Windows® 平台開發的軟體,
時常會遇到一種情況,就是在大部份的 source file 中,
使用 CR/LF 做為斷行。這會影響往後的 patching、compiler warnings、以及
scripts execution (找不到 /bin/sh^M
的情況) 等。
為了快速轉換 CR/LF 為 LF,可以把
USE_DOS2UNIX=yes
加到 port 的
Makefile
檔中。
你也可以設定成只針對指定的檔案做轉換:
若想要轉換所有子目錄內的某類別檔案,可以使用
DOS2UNIX_REGEX
。 它的參數是
find
相容的正規表達式。 相關格式可參閱
re_format(7)。 對於所指定副檔名的檔案之轉換而言,這相當好用,
舉例來說,只動所有原始碼部分而不改 binary 檔案:
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。