新增專案至 WrapDB

運作方式

新的 wrap 必須以可運作的子專案形式提交至 wrapdb 儲存庫

WrapDB 上有兩種 wrap 類型 - 常規 wrap 和帶有 Meson 建置定義修補程式的 wrap。

帶有 Meson 建置定義修補程式的 wrap 其運作方式與 Debian 非常相似:我們採用未修改的上游原始碼套件,並以修補程式的形式為其新增建置系統。這些建置系統會儲存在 subprojects/packagefiles/ 的子目錄中。它們僅包含建置定義檔案。您也可以將它們視為上游原始碼的覆蓋層。

不帶有 Meson 建置定義修補程式的 wrap 僅包含描述如何獲取專案的 wrap 元數據。

每當新的版本被推送到 wrapdb 時,就會產生一個遞增版本號的新標籤,並且一個新的版本會被新增到 wrapdb API 清單中。所有舊版本保持不變。新的提交總是透過 GitHub 合併請求完成,並且必須由提交者以外的人員審查。

請注意,您的包含 wrap 的 Git 儲存庫不得包含原始碼發布的子目錄。該目錄由服務自動新增。您也不得將原始 tarball 中的任何原始碼提交到 wrap 儲存庫。

選擇 wrap 名稱

被 wrap 的子專案的使用方式與外部相依性非常相似。因此,它們應該與上游專案的名稱相同。

注意:Wrap 名稱必須完全符合此正規表示式:[a-z0-9._]+

如果專案提供 pkg-config 檔案,則 wrap 名稱應與 pkg-config 名稱相同。通常這是專案的名稱,例如 libpng。但是,有時會略有不同。例如,libogg 專案選擇的 pkg-config 名稱是 ogg 而不是 libogg,這就是為什麼 wrap 被命名為簡單的 ogg

如果沒有 pkg-config 檔案,則應使用專案使用/推廣的名稱,僅限小寫 (Catch2 -> catch2)。

如果專案名稱太過通用或含糊不清(例如 benchmark),請考慮使用 組織-專案 命名格式(例如 google-benchmark)。

如何貢獻新的 wrap

如果專案已使用 Meson 建置系統,則僅需提供 wrap 檔案 project.wrap。在其他情況下,還應提供 Meson 建置定義修補程式 - 一組 meson.build 檔案。

建立 wrap 內容

新的發布分支需要 project.wrap 檔案,因此如果需要,請建立一個。

${EDITOR} upstream.wrap

檔案格式很簡單,請參閱任何現有的 wrapdb 子專案以獲取內容。校驗和是 SHA-256,可以使用大多數類 Unix 作業系統上的以下命令計算

sha256sum path/to/libfoo-1.0.0.tar.gz

在 macOS 下,命令如下

shasum -a 256 path/to/libfoo-1.0.0.tar.gz

接下來,您需要新增定義目前專案提供的相依性的條目。這很重要,因為這是讓 Meson 的自動相依性解析器運作的原因。方法是在 upstream.wrap 檔案的末尾新增 provide 條目。以 Ogg 函式庫為例,它看起來會像這樣

[provide]
ogg = ogg_dep

左邊的 ogg 部分是指相依性名稱,它應該與其 Pkg-Config 名稱相同。右邊的 ogg_dep 是指建置定義中提供相依性的變數。它最常保存 declare_dependency 呼叫的結果。如果沒有定義該名稱的變數,Meson 將會出現嚴重錯誤並退出。有關詳細資訊,請參閱主要的 Wrap 手冊

現在您可以建立建置檔案(如果上游專案沒有任何檔案),並進行處理,直到專案正確建置為止。請記住,所有檔案都位於 subprojects/packagefiles/<專案名稱> 目錄中。

${EDITOR} meson.build meson.options

為了將本機新增的建置檔案應用到上游發布 tarball,wrap-file 區段必須包含一個 patch_directory 屬性,指定 subprojects/packagefiles/ 中包含建置檔案的子目錄,因為這是 wrapdb 的運作核心。wrapdb meson.build 會使用它,並且在建立發布時,此目錄中的檔案將被轉換為封存,並且一個 patch_url 將被新增到 wrap 檔案中。

當您對結果感到滿意時,請將建置檔案新增到 Git,按照 README.md 中的說明更新 releases.json,然後將結果推送到 GitHub。

<verify that your project builds and runs>
git add releases.json subprojects/project.wrap subprojects/packagefiles/project/
git commit -a -m 'Add wrap files for libfoo-1.0.0'
git push -u origin libfoo

現在您應該在 GitHub 上建立一個提取請求。

如果封裝審查要求您進行變更,請使用 commit--amend 引數,以便您的分支只有一次提交。

${EDITOR} meson.build
git commit -u --amend
git push --force

變更原始碼

wrap 的重點是以盡可能少的變更來提供上游專案。大多數專案不應包含比幾個 Meson 定義檔案更多的內容。有時可能需要新增範本標頭檔案或類似的東西。這些應保持在最低限度。

尤其應該注意的是,不得對功能進行任何修補。所有此類變更都必須提交給上游。如果您願意,也可以使用變更託管您自己的 Git 儲存庫。Wrap 系統原生支援 Git 子專案。

通過自動驗證

每個提交的 wrap 都會經過自動的正確性審查,並且通過它是合併的必要條件。因此,強烈建議您自己執行驗證檢查,以便更快地解決任何問題。

您可以使用以下命令測試 wrap 本身

meson subprojects purge --confirm
meson setup builddir/ -Dwraps=<project-name>

第一個命令是為了確保從最新的 packagefiles 正確擷取 wrap。第二個命令設定 meson 並選擇一組要啟用的子專案。

GitHub 專案包含在推送時自動執行 CI 以執行專案並檢查元數據中是否有明顯錯誤。這可以在您提交 PR 之前從您的 fork 檢查。

搜尋結果為