新增專案至 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 檢查。
搜尋結果為