Panduan Template
Dokumen ini menjelaskan cara menulis file template untuk paket di VUR. Template VUR mengikuti format yang sama dengan xbps-src dari void-packages.
Struktur Direktori Paket
<kategori>/
└── <nama-paket>/
├── template # Wajib — definisi build paket
├── patches/ # Opsional — patch yang diterapkan ke source
│ └── fix-foo.patch
└── files/ # Opsional — file tambahan yang dikopi saat install
└── foo.conf
Struktur Template
# =============================================================================
# Metadata Paket
# =============================================================================
pkgname=nama-paket
version=1.0.0
revision=1
short_desc="Deskripsi singkat paket maksimal 72 karakter"
maintainer="Nama Kamu <email@example.com>"
license="MIT"
homepage="https://upstream.example.com"
# =============================================================================
# Source
# =============================================================================
distfiles="https://upstream.example.com/nama-paket-${version}.tar.gz"
checksum="sha256sum-64-karakter-dari-file-source"
# =============================================================================
# Dependensi (opsional)
# =============================================================================
hostmakedepends="cmake pkg-config"
makedepends="libfoo-devel libbar-devel"
depends="libfoo libbar"
# =============================================================================
# Build Style (opsional — jika tidak pakai do_build/do_install manual)
# =============================================================================
build_style=cmake
# =============================================================================
# Fungsi Build (jika tidak menggunakan build_style)
# =============================================================================
do_build() {
make ${makejobs}
}
do_install() {
make DESTDIR="${DESTDIR}" install
}
Field Wajib
| Field | Keterangan |
|---|---|
pkgname | Nama paket — huruf kecil, pisah kata dengan -, sama dengan nama direktori |
version | Versi upstream tanpa suffix |
revision | Revisi template, mulai dari 1, reset ke 1 setiap update version |
short_desc | Deskripsi singkat, maksimal 72 karakter, tidak diawali huruf kapital |
maintainer | Format Nama <email> yang valid |
license | Lisensi SPDX upstream (contoh: MIT, GPL-2.0-only, Apache-2.0) |
homepage | URL halaman resmi upstream |
distfiles | URL direct download source — gunakan ${version} bukan hardcode versi |
checksum | SHA256 hash dari file distfiles — wajib diisi, tidak boleh kosong |
Field Dependensi
| Field | Keterangan |
|---|---|
hostmakedepends | Tool yang dibutuhkan di host saat build (contoh: cmake, meson, go) |
makedepends | Library header yang dibutuhkan saat kompilasi (contoh: libfoo-devel) |
depends | Paket runtime yang dibutuhkan saat paket dijalankan |
checkdepends | Dependensi tambahan yang hanya diperlukan saat menjalankan test |
Build Style
build_style adalah shortcut yang menggantikan fungsi do_build() dan do_install() dengan perilaku default yang sudah terdefinisi. Jika digunakan, kedua fungsi tersebut tidak perlu ditulis secara manual kecuali perlu di-override.
| Build Style | Digunakan untuk |
|---|---|
cmake | Proyek yang menggunakan CMake |
meson | Proyek yang menggunakan Meson + Ninja |
gnu-configure | Proyek dengan ./configure (autotools) |
gnu-makefile | Proyek dengan Makefile GNU standar |
go | Proyek Go |
cargo | Proyek Rust (Cargo) |
python3-module | Modul Python 3 dengan setup.py |
python3-pep517 | Modul Python 3 dengan pyproject.toml |
perl-module | Modul Perl (ExtUtils::MakeMaker) |
perl-ModuleBuild | Modul Perl (Module::Build) |
qmake | Proyek Qt (qmake) |
gem | Ruby gem |
gemspec | Ruby gem via gemspec |
cabal | Proyek Haskell (Cabal) |
haskell-stack | Proyek Haskell (Stack) |
r-cran | Paket R dari CRAN |
raku-dist | Distribusi Raku |
fetch | Hanya unduh file tanpa build (untuk biner prebuilt) |
Dokumentasi per build style tersedia di: vdokumentasi/build-style/
Variabel Penting dalam do_build / do_install
| Variabel | Nilai | Keterangan |
|---|---|---|
$DESTDIR | Path install sementara di dalam masterdir | Semua file harus diinstall ke sini |
$makejobs | -jN sesuai setting XBPS_MAKEJOBS | Gunakan ini di make untuk build paralel |
$wrksrc | Direktori source yang sudah diekstrak | Working directory saat build berlangsung |
$CFLAGS | Flag compiler C dari environment | Jangan hardcode, gunakan variabel ini |
$CXXFLAGS | Flag compiler C++ dari environment | |
$LDFLAGS | Flag linker dari environment | |
$pkgname | Nama paket dari field pkgname | Bisa digunakan di dalam fungsi |
$version | Versi dari field version |
Fungsi Hook Opsional
Selain do_build() dan do_install(), ada fungsi hook yang bisa digunakan:
| Fungsi | Dipanggil kapan |
|---|---|
pre_configure() | Sebelum fase configure |
post_configure() | Setelah fase configure |
pre_build() | Sebelum fase build |
post_build() | Setelah fase build |
pre_install() | Sebelum fase install |
post_install() | Setelah fase install — umum digunakan untuk chmod, symlink, dll. |
do_check() | Menjalankan test suite |
Mendapatkan Checksum
# Download file source dulu
curl -LO "https://upstream.example.com/paket-1.0.0.tar.gz"
# Hitung SHA256
sha256sum paket-1.0.0.tar.gz
Salin output hash 64 karakter ke field checksum.
Contoh Template Lengkap
Template sederhana untuk program C dengan CMake:
pkgname=myapp
version=2.1.0
revision=1
short_desc="A simple application written in C"
maintainer="Upi <gh0st4n@example.com>"
license="MIT"
homepage="https://github.com/example/myapp"
distfiles="https://github.com/example/myapp/archive/v${version}.tar.gz"
checksum="abc123...64karakter...def456"
hostmakedepends="cmake pkg-config"
makedepends="libfoo-devel"
depends="libfoo"
build_style=cmake
post_install() {
# Contoh: install file konfigurasi default
vinstall ${FILESDIR}/myapp.conf 644 etc/myapp
}
Checklist Sebelum Submit
pkgnamesama dengan nama direktoridistfilesmenggunakan${version}, bukan hardcodechecksumsudah diisi dengan hash yang benarmaintainermenggunakan formatNama <email>short_desctidak lebih dari 72 karakterlicensesesuai lisensi upstream yang sebenarnya- Build lokal berhasil tanpa error
revisiondimulai dari1