pkg++

packages builder

Flattr this
Warning: This section is to be completed very soon. Also, some parts of it refer to the unstable branch of pkg++.

Easy, simple, intuitive

Simple, plain shell recipes

name=ohyeah
version=3.1.4.1.5
release=42
source=(niak)

build() {
	cd $name-$version
	make DESTDIR=$PKG build install
}

Our recipes are simple, and that’s what they are meant to be. We try to keep their syntax as intuitive, simple and clear as possible, to allow both easy maintaining and new ports creation.

Reusable code, libraries, and includes

In pkg++, there is no need to copy monstrous bunches of code from a recipe into another one, because we have another approach. Instead of copying content, we decided it’d be best to put it in a special place, where every single package could use it without massively generating duplicates. :)

Automated fetch

No need to manually call curl, or wget, or for those who download more, axel. We have a $source variable, and everything in it is downloaded using the available tools, and, what more, those the builder wants to use.

Our $source can also contain the URLs of versionned repositories, like git, hg or svn repositories.

Many current packages building tools require you to download the sources externally. In pkg++, such downloads are automated using $source.

Maintain your recipes, keep them up to date

pkg++ provides several tools to help you detect buggy or outdated recipes.

$lastver

pkg++ -cp

Package things your way

Experienced users may often feel limited by the tools they use, or forced to make ugly hacks to solve simple problems.

pkg++ tries to provide solutions to such problems without using hacks, with documentation, class, and hope wonderful recipes will be written using them.

Working out-of-the-box, and yet over-configurable

Global configuration

pkg++, as any good software possesses a system-wide configuration file. But, also, it possesses several directories in which you can add configuration to be read before or after your recipe is parsed.

Seems pretty useless at first, eh? But what about providing additional configuration for a distribution in a separate file, defining package-based behavior, or even adding new kind of automatic tests at build-time.

User-configuration

Each user can define configuration for himself to build packages for his userdir, for any other alternate prefix, for any kind of non-root build or whatsoever.

Such configuration can also be called to cross-build or build for a specific project, with the -cf option.

Profiles

Predefined configuration for particular cases, which you may want to use only at some moments, can also be written, and be rendered system-wide.

Use flags, or how to allow the builder to configure

Such a flag is a keyword that embodies support and dependency-information for a certain concept.

Gentoo handbook

pkg++ is one of the few packages builder to support use flags.

User-configured splits

Some distributions split packages, or at least allow it. But, what if a user wants to split a particular way, instead of the way the packager did it? This is where autosplits (automatic splits) come in.

Automatic splits are the way users define how they want their packages to be split, allowing to separate manual pages, documentation, libraries, headers, or anything else from the main package. As they are used-defined or configuration-defined, they can also be used to be more compliant with the rules of your distribution.

Multi-versions ports

Package anywhere, any time

Recognising distributions

Package splits

Have class(es)!

Modules, modules