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

FieldKeterangan
pkgnameNama paket — huruf kecil, pisah kata dengan -, sama dengan nama direktori
versionVersi upstream tanpa suffix
revisionRevisi template, mulai dari 1, reset ke 1 setiap update version
short_descDeskripsi singkat, maksimal 72 karakter, tidak diawali huruf kapital
maintainerFormat Nama <email> yang valid
licenseLisensi SPDX upstream (contoh: MIT, GPL-2.0-only, Apache-2.0)
homepageURL halaman resmi upstream
distfilesURL direct download source — gunakan ${version} bukan hardcode versi
checksumSHA256 hash dari file distfiles — wajib diisi, tidak boleh kosong

Field Dependensi

FieldKeterangan
hostmakedependsTool yang dibutuhkan di host saat build (contoh: cmake, meson, go)
makedependsLibrary header yang dibutuhkan saat kompilasi (contoh: libfoo-devel)
dependsPaket runtime yang dibutuhkan saat paket dijalankan
checkdependsDependensi 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 StyleDigunakan untuk
cmakeProyek yang menggunakan CMake
mesonProyek yang menggunakan Meson + Ninja
gnu-configureProyek dengan ./configure (autotools)
gnu-makefileProyek dengan Makefile GNU standar
goProyek Go
cargoProyek Rust (Cargo)
python3-moduleModul Python 3 dengan setup.py
python3-pep517Modul Python 3 dengan pyproject.toml
perl-moduleModul Perl (ExtUtils::MakeMaker)
perl-ModuleBuildModul Perl (Module::Build)
qmakeProyek Qt (qmake)
gemRuby gem
gemspecRuby gem via gemspec
cabalProyek Haskell (Cabal)
haskell-stackProyek Haskell (Stack)
r-cranPaket R dari CRAN
raku-distDistribusi Raku
fetchHanya unduh file tanpa build (untuk biner prebuilt)

Dokumentasi per build style tersedia di: vdokumentasi/build-style/

Variabel Penting dalam do_build / do_install

VariabelNilaiKeterangan
$DESTDIRPath install sementara di dalam masterdirSemua file harus diinstall ke sini
$makejobs-jN sesuai setting XBPS_MAKEJOBSGunakan ini di make untuk build paralel
$wrksrcDirektori source yang sudah diekstrakWorking directory saat build berlangsung
$CFLAGSFlag compiler C dari environmentJangan hardcode, gunakan variabel ini
$CXXFLAGSFlag compiler C++ dari environment
$LDFLAGSFlag linker dari environment
$pkgnameNama paket dari field pkgnameBisa digunakan di dalam fungsi
$versionVersi dari field version

Fungsi Hook Opsional

Selain do_build() dan do_install(), ada fungsi hook yang bisa digunakan:

FungsiDipanggil 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

  • pkgname sama dengan nama direktori
  • distfiles menggunakan ${version}, bukan hardcode
  • checksum sudah diisi dengan hash yang benar
  • maintainer menggunakan format Nama <email>
  • short_desc tidak lebih dari 72 karakter
  • license sesuai lisensi upstream yang sebenarnya
  • Build lokal berhasil tanpa error
  • revision dimulai dari 1

Referensi


@T4n-Labs · @Gh0sT4n