0.12 (2022-05-02)

Support package variable overrides using the command line

Package variables can now be overridden from the command line. Consider the following site example:

LIBFOO_SITE = 'git@example.com:base/libfoo.git'

This Git-sourced package will cache the repository found at git@example.com:base/libfoo.git before extracting the configured revision into the package’s build output directory. If a developer wanted to temporarily override this option for a build, the following shows how a developer can override the site variable:

releng-tool LIBFOO_SITE=https://example.com/libfoo.git

Note that complex package variables may not be able to be overridden from the command line.

Support environment variable injection using the command line

Environment variables can now be injected into the releng-tool process from the command line. While users can use either export/set variables in their environments, or (on Unix) prefix a command call with variable assignments; the ways to do this is not consistent. A desire was to allow users to be able to inject environment options in a way similar to how Makefile calls can perform variable assignments through the command line. For example:

make TEST=1

This new feature enables such a capability by scanning the argument options of a releng-tool invoke and applying key-value pair entries into the working environment. Before, users would have to perform something such as the following:

(*nix)
MY_CUSTOM_ENV=testing releng-tool
(*nix; alternative)
export MY_CUSTOM_ENV=testing
releng-tool
(windows)
set MY_CUSTOM_ENV=testing
releng-tool

With this change, the following will work for any environment:

releng-tool MY_CUSTOM_ENV=testing

Package-specific command line execution

Developer now have an easy way to issue raw commands inside a package’s prepared build directory. For example, developing/testing with an autotools project, a developer can issue a manual configuration request to test/sanity check options:

releng-tool libfoo-exec "./configure --help"

This is to help developers try out alternative commands/actions without manually editing their package’s definition; as well as avoiding the need to navigate to an output directory, manually preparing environment variables and issuing raw commands in an output directory.

New environment/script variables

This release includes a series of new environment/script variables to help developers better tailor their package definitions.

The PKG_BUILD_BASE_DIR has been introduced, providing a way for a package to reference the root of a package’s extracted folder. In most cases, the PKG_BUILD_DIR variable can be used to serve this purpose; however, if a package defines LIBFOO_BUILD_SUBDIR, the build directory will be resolved to the subdirectory location in the extracted folder. If a package utilizes the subdirectory configuration and still wishes to somehow reference extracted content from the root of the extracted package, this “base” directory can be used.

Several prefixed-related directories are also defined. These can be used to allow a developer to reference specific include or library paths for the host, staging or target areas. The following lists the newly added prefixed-related variables:

  • HOST_INCLUDE_DIR (e.g. <host-dir>/usr/include)

  • HOST_LIB_DIR (e.g. <host-dir>/usr/lib)

  • PREFIXED_HOST_DIR (e.g. <host-dir>/usr)

  • PREFIXED_STAGING_DIR (e.g. <staging-dir>/usr)

  • PREFIXED_TARGET_DIR (e.g. <target-dir>/usr)

  • STAGING_INCLUDE_DIR (e.g. <staging-dir>/usr/include)

  • STAGING_LIB_DIR (e.g. <staging-dir>/usr/lib)

  • TARGET_INCLUDE_DIR (e.g. <target-dir>/usr/include)

  • TARGET_LIB_DIR (e.g. <target-dir>/usr/lib)

New include script function

The releng_include helper function has been added to allow releng-tool script to load scripts alongside a given script – providing a way to split up a script across multiple files. For example, a script-based package with a libfoo-build build script can split various build operations across multiple files and include them in their build script:

[package/libfoo/libfoo-build]

# perform various tasks
releng_include('build-task-a')
releng_include('build-task-b')

[package/libfoo/build-task-a]

note('performing task a')
...

[package/libfoo/build-task-b]

note('performing task b')
...

Correct Git cache management with branch updates

For VCS-based sites, the revision field can accept a branch value for the respective VCS-type. In this case, specifying the branch of a Git repository as the version or revision value will fetch the branch from the configured site before attempting to extract/build the package. For example:

LIBFOO_REVISION = 'my-feature-branch'

With releng-tool, once a package is fetched, it will not be fetched again. For branch-based references, this may not be ideal if the branch is expected to update over time. Users could build from a clean environment, but this can add additional build time where many packages are used and each one needs to re-download/re-build their sources. For a user to perform a rebuild of a VCS-type project, the following steps should be supported:

releng-tool libfoo-fetch    # fetch the new version of a branch
releng-tool libfoo-clean    # remove any previously extracted files
releng-tool libfoo          # build the package again

An issue with releng-tool’s Git extraction process would incorrectly extract the contents of the previously cached revision of a branch the first time it has been extracted from an updated fetch. This release includes corrections to this process to always use the most recently updated revision for a branch is used after performing a fresh fetch/clean with cached content.