# Kama recipe format # # A package is a plain POSIX shell script that describes how to compile and # install one piece of software. The syntax is split into two tiers: # # EASY - declare three variables, fill in build + install, done. # The common case for 90% of packages (autotools/cmake/meson). # # ADVANCED - full control when you need it: custom fetch/extract, staging # layout, packaging hooks, multi-arch, verification, etc. # Everything the easy tier does is just sugar over this. # # In both tiers, Kama sources the recipe and runs the functions you define. # # # ========================================================================= # EASY TIER — most packages only need this # ========================================================================= # # name=busybox # version=1.36.1 # url=https://busybox.net/downloads/busybox-1.36.1.tar.bz2 # deps=() # build-time deps, purged after (AUR-style) # # build() { # configure + compile # make defconfig # make # } # # install() { # install into $pkgdir (staging), not $ROOT # make install CONFIG_PREFIX="$pkgdir" # } # # That's it. Kama supplies the conventional pkg_fetch (download + extract -- # auto-detects tar.xz/.gz/.bz2/.zip, strips the top dir) and pkg_clean. # # # ========================================================================= # ADVANCED TIER — override any step, add packaging control # ========================================================================= # # name=busybox # version=1.36.1 # url=https://busybox.net/downloads/busybox-1.36.1.tar.bz2 # deps=(gcc musl-headers) # temp build deps (AUR-style) # runtime_deps=(musl) # stays installed # license=(GPL-2.0) # provides=(sh) # capability this package provides # conflicts=(dash) # mutual exclusion # arch=(x86_64) # if non-empty, restrict to archs # noextract=() # URLs to download but NOT auto-extract # # # override auto extract (e.g. patching before configure) # pkg_fetch() { # default_fetch # run the easy-tier default # cd "$src" # patch -p1 < ../my.patch # } # # build() { ./configure --prefix=/usr "$@" && make; } # install() { make install DESTDIR="$pkgdir"; } # # # split headers/binary into separate sub-package stage (advanced) # pkg_split() { ... } # # # run after install, before purge (e.g. generate ldconfig cache) # pkg_post() { msg "post-install hook"; } # # # ========================================================================= # FULL FUNCTION REFERENCE # ========================================================================= # # Variables (easy tier): # name, version, url, deps # # Variables (advanced, all optional): # runtime_deps, license, provides, conflicts, arch, noextract # # Functions: # build() - configure + compile into $src (also callable `pkg_build`) # install() - install into $pkgdir (also callable `pkg_install`) # pkg_fetch - override download/extract (call `default_fetch` for the # easy-tier default) # pkg_clean - override cleanup # pkg_post - run after install, before temp deps are purged # pkg_split - split staging into multiple sub-packages (advanced) # # Easy-tier aliases: `build` and `install` are sugar; if you define them, # Kama maps them to pkg_build / pkg_install automatically. Defining the # pkg_* forms directly also works (that IS the advanced way). # # Provided by Kama (do not redefine): # $src - build dir (cannot be changed) # $pkg - pkg dir alt alias for $pkgdir # $pkgdir - staging dir; Kama moves $pkgdir/* into $ROOT after success # $CACHEDIR, $ROOT, $CFLAGS, ... from make.conf # msg() warn() die() # default_fetch - the easy-tier fetch/extract implementation # ---- easy-tier defaults (override as needed) ---------------------------- name= version= url= deps=() # ---- advanced overrides (all optional) ---------------------------------- runtime_deps=() license=() provides=() conflicts=() arch=() noextract=() # ---- functions ----------------------------------------------------------- build() { :; } # or pkg_build install() { :; } # or pkg_install pkg_fetch() { :; } pkg_clean() { :; } pkg_post() { :; } pkg_split() { :; }