Environment variables

小技巧

Avoid using external environment variables for a project to configure package options such as compiler flags or interpreters. Managing these options inside a releng-tool project configuration or package definitions can improve configuration management.

Common

When configuration, package definitions or various scripts are invoked by releng-tool, the following environment variables are available:

BUILD_DIR

The build directory. By default, this will be a folder build found inside the configured output directory. For example:

<root-dir>/output/build

CACHE_DIR

The cache directory. By default, this will be a folder cache found inside the configured root directory. For example:

<root-dir>/cache

DL_DIR

The download directory. By default, this will be a folder dl found inside the configured root directory. For example:

<root-dir>/dl

HOST_BIN_DIR

The host directory's prefixed bin directory. For example:

<root-dir>/output/build

HOST_DIR

The host directory. By default, this will be a folder host found inside the configured output directory. For example:

<root-dir>/output/host

HOST_INCLUDE_DIR

The host directory's prefixed include directory.

HOST_LIB_DIR

The host directory's prefixed library directory.

IMAGES_DIR

The images directory. By default, this will be a folder images found inside the configured output directory. For example:

<root-dir>/output/images

LICENSE_DIR

The licenses directory. By default, this will be a folder licenses found inside the configured output directory. For example:

<root-dir>/output/licenses

See also licenses.

NJOBS

Number of calculated jobs to allow at a given time. Unless explicitly set by a system builder on the command line, the calculated number of jobs should be equal to the number of physical cores on the host. When building a specific package and the package overrides the number of jobs to use, the package-defined count will be used instead. This configuration will always be a value of at least one (1).

NJOBSCONF

Number of jobs to allow at a given time. Unlike NJOBS, NJOBSCONF provides the requested configured number of jobs to use. The value may be set to zero (0) to indicate an automatic detection of jobs to use. This can be useful for tools which have their own automatic job count implementation and do not want to rely on the value defined by NJOBS. When building a specific package and the package overrides the number of jobs to use, the package-defined count will be used instead.

OUTPUT_DIR

The output directory. By default, this will be a folder output found inside the configured root directory. For example:

<root-dir>/output

PKG_BUILD_BASE_DIR

The directory for a specific package's base directory for buildable content. In most cases, this value will be the same as PKG_BUILD_DIR. However, if LIBFOO_BUILD_SUBDIR is configured, PKG_BUILD_DIR will also include the configured sub-directory. The value of LIBFOO_BUILD_SUBDIR does not adjust the value of PKG_BUILD_BASE_DIR.

See also PKG_BUILD_DIR.

PKG_BUILD_DIR

The directory for a specific package's buildable content.

See also PKG_BUILD_BASE_DIR and PKG_BUILD_OUTPUT_DIR.

PKG_BUILD_OUTPUT_DIR

The directory for where a package's build output will be stored.

See also PKG_BUILD_DIR.

PKG_CACHE_DIR

The location of the cache directory for a package. If a package defines a fetch from a repository which can be locally cached, this cache directory represents the location where the local cache of content will be held. For example, if a provide defines a Git-based site, a local cache of the Git repository will be stored in this location. Typically, packages should not need to operate on the cache directory except for advanced cases.

PKG_CACHE_FILE

The location of the cache file for a package. If a package defines a fetch of an archive from a remote source, after the fetch stage is completed, the archive can be found in this location.

For example, if a package defines a site https://www.example.com/test.tgz, the resulting cache file may be <root>/output/dl/test-1.0.tgz.

PKG_DEFDIR

The package's definition directory.

For example, for a package test, the definition directory would be <root>/package/test.

PKG_DEVMODE

Whether the package is configured for development mode. If a package is configured for development mode, the environment variable will be set to a value of one (i.e. PKG_DEVMODE=1).

See also development mode.

PKG_INTERNAL

Whether or not the package is considered "internal". If internal, the environment variable will be set to a value of one (i.e. PKG_INTERNAL=1).

See also internal and external packages.

PKG_LOCALSRCS

Whether the package is configured for local-sources mode. If a package is configured for local-sources, the environment variable will be set to a value of one (i.e. PKG_LOCALSRCS=1).

See also local-sources mode.

PKG_NAME

The name of the package.

PKG_REVISION

The site revision of the package.

See also LIBFOO_REVISION.

PKG_SITE

The site of the package.

See also LIBFOO_SITE.

PKG_VERSION

The version of the package.

See also LIBFOO_VERSION.

PREFIX

The sysroot prefix for the package. By default, this value is configured to /usr; with the exception of Windows builds where this value is empty by default.

PREFIXED_HOST_DIR

The host directory with the prefix applied. An example prefixed directory may be as follows:

<root-dir>/output/host/usr

PREFIXED_STAGING_DIR

The staging area directory with the prefix applied. An example prefixed directory may be as follows:

<root-dir>/output/staging/usr

PREFIXED_TARGET_DIR

The target area directory with the prefix applied. An example prefixed directory may be as follows:

<root-dir>/output/target/usr

RELENG_CLEAN

Flag set if performing a clean request.

RELENG_DEBUG

Flag set if debug-related information should be shown.

RELENG_DEVMODE

The development mode or flag set if in development mode.

RELENG_DISTCLEAN

Flag set if performing an extreme pristine clean request.

RELENG_FORCE

Flag set if performing a forced request from the command line.

RELENG_LOCALSRCS

Flag set if in local-sources mode.

RELENG_MRPROPER

Flag set if performing a pristine clean request.

RELENG_REBUILD

Flag set if performing a re-build request.

RELENG_RECONFIGURE

Flag set if performing a re-configuration request.

RELENG_REINSTALL

Flag set if performing a re-install request.

RELENG_SCRIPT

The path of the script currently being executed.

RELENG_SCRIPT_DIR

The path of the directory holding the script currently being executed.

RELENG_TARGET_PKG

The name of the target package (if any) provided by the command line.

RELENG_VERBOSE

Flag set if verbose-related information should be shown.

RELENG_VERSION

The version of releng-tool.

ROOT_DIR

The root directory.

STAGING_BIN_DIR

The staging area directory's prefixed bin directory. An example binary directory may be as follows:

<root-dir>/output/staging/usr/bin

STAGING_DIR

The staging area directory. By default, this will be a folder staging found inside the configured output directory. For example:

<root-dir>/output/staging

STAGING_INCLUDE_DIR

The staging area directory's prefixed include directory. An example include directory may be as follows:

<root-dir>/output/staging/usr/include

STAGING_LIB_DIR

The staging area directory's prefixed library directory. An example library directory may be as follows:

<root-dir>/output/staging/usr/lib

SYMBOLS_DIR

The symbols area directory. By default, this will be a folder symbols found inside the configured output directory. For example:

<root-dir>/output/symbols

TARGET_BIN_DIR

The target area directory's prefixed bin directory. An example binary directory may be as follows:

<root-dir>/output/target/usr/bin

TARGET_DIR

The target area directory. By default, this will be a folder target found inside the configured output directory. For example:

<root-dir>/output/target

TARGET_INCLUDE_DIR

The target area directory's prefixed include directory. An example include directory may be as follows:

<root-dir>/output/target/usr/include

TARGET_LIB_DIR

The target area directory's prefixed library directory. An example library directory may be as follows:

<root-dir>/output/target/usr/lib

Package-specific variables

Package-specific environment variables are also available if another package or script needs to rely on the (generated) configuration of another package. For example, if a package LIBFOO existed with a package definition:

LIBFOO_VERSION = '1.0.0'

The environment variable LIBFOO_VERSION with a value of 1.0.0 can be used in other configurations and script files. The following package-specific environment variables are available for use, where <PKG> translates to a releng-tool's determined package key:

<PKG>_BUILD_DIR

The directory for a defined package's buildable content.

For most packages, this path will match the value specified in <PKG>_BUILD_OUTPUT_DIR. For package types that do not support in-tree building (e.g. CMake), this path may be the parent of the value specified in <PKG>_BUILD_OUTPUT_DIR:

└── my-releng-tool-project/
    ├── output/
    │   └── build/
    │       └── libfoo-1.0.0          <---- LIBFOO_BUILD_DIR
    │           └── releng-output     <---- LIBFOO_BUILD_OUTPUT_DIR
    │               └── ...
    ├── package/
    │   └── libfoo/
    │       └── libfoo.py
    ├── releng
    ...

For cases where a package uses local sources, this path may change to point to the specified local source path. For example, when configured for local-sources mode, the build directory may exist out of the root directory:

└── libfoo/                           <---- LIBFOO_BUILD_DIR
│   └── ...
└── my-releng-tool-project/
    ├── output/
    │   └── build/
    │       └── libfoo-1.0.0          <---- LIBFOO_BUILD_OUTPUT_DIR
    │           └── ...
    ├── package/
    │   └── libfoo/
    │       └── libfoo.py
    ├── releng
    ...

Or, when using a local VCS type, the path may be set for a folder inside the package's definition directory:

└── my-releng-tool-project/
    ├── output/
    │   └── build/
    │       └── libfoo-1.0.0          <---- LIBFOO_BUILD_OUTPUT_DIR
    │           └── ...
    ├── package/
    │   └── libfoo/
    │       └── local/                <---- LIBFOO_BUILD_DIR
    │           └── ...
    │       └── libfoo.py
    ├── releng
    ...

<PKG>_BUILD_OUTPUT_DIR

The directory for where a defined package's build output will be stored.

This location is a path is a folder inside the project's output/build directory. The name is typically a combination of the package's name and version (e.g. libfoo-1.0.0):

└── my-releng-tool-project/
    ├── output/
    │   └── build/
    │       └── libfoo-1.0.0          <---- LIBFOO_BUILD_OUTPUT_DIR
    │           └── ...
    ├── package/
    │   └── libfoo/
    │       └── libfoo.py
    ├── releng
    ...

However, if no version is specified for a package, the folder name may just be libfoo:

└── my-releng-tool-project/
    ├── output/
    │   └── build/
    │       └── libfoo                <---- LIBFOO_BUILD_OUTPUT_DIR
    │           └── ...
    ├── package/
    │   └── libfoo/
    │       └── libfoo.py
    ├── releng
    ...

Note for some package types, the build output directory may be changed to have an additional path (e.g. output/build/libfoo-1.0.0/releng-output) for package types like CMake. For example:

└── my-releng-tool-project/
    ├── output/
    │   └── build/
    │       └── libfoo-1.0.0
    │           └── releng-output     <---- LIBFOO_BUILD_OUTPUT_DIR
    │               └── ...
    ├── package/
    │   └── libfoo/
    │       └── libfoo.py
    ├── releng
    ...

<PKG>_DEFDIR

The directory where a defined package's definition is stored.

For example, if a package libfoo exists, the LIBFOO_DEFDIR environment variable will contain a directory path matching the path seen below:

└── my-releng-tool-project/
    ├── package/
    │   └── libfoo/                   <---- LIBFOO_DEFDIR
    │       └── libfoo.py
    ├── releng
    ...

<PKG>_NAME

The name of the package.

For example, if a package libfoo exists, the LIBFOO_NAME environment variable will have a value of libfoo.

<PKG>_REVISION

The revision of a defined package. If a package does not define a revision, the value used will match the version value (if set). If no version value exists, this variable may be empty.

<PKG>_VERSION

The version of a defined package. If a package does not define a version, the value used will match the revision value (if set). If no revision value exists, this variable may be empty.

Script-only variables

A series a script-only variables are also available at certain stages of releng-tool.

RELENG_GENERATED_LICENSES

Defines a list of generated license files at the end of package processing that is available for post-processing actions to use.

RELENG_GENERATED_SBOMS

Defines a list of generated software build of materials (SBOM) files at the end of package processing that is available for post-processing actions to use.

Other variables

releng-tool also accepts environment variables for configuring specific features of the releng-tool process. The following environment variables are accepted:

RELENG_ASSETS_DIR=<dir>

The asset directory to use. The asset directory is the container directory to use for both cache and download content. By default, no asset directory is configured. If a user does not override an asset directory using the --assets-dir argument, the RELENG_ASSETS_DIR can be used as the container directory override for both cache and download content.

RELENG_CACHE_DIR=<dir>

The cache directory to use. By default, the cache directory used is configured to <root>/cache. If a user does not override a cache directory using the --cache-dir argument, the RELENG_CACHE_DIR option can be used to override this location.

RELENG_DL_DIR=<dir>

The download directory to use. By default, the download directory used is configured to <root>/dl. If a user does not override a download directory using the --dl-dir argument, the RELENG_DL_DIR option can be used to override this location.

RELENG_GLOBAL_OUTPUT_CONTAINER_DIR=<dir>

备注

This environment variable is always ignored when either the --out-dir argument or RELENG_OUTPUT_DIR environment variable is used.

Configures a "global" container directory used to hold the output contents of releng-tool projects. Projects will typically generate output contents inside a project's <root-dir>/output directory. This can be overridden using the --out-dir argument or RELENG_OUTPUT_DIR environment variable, if a user wishes to generate a build on a different path/partition. While these overrides can help, users managing multiple releng-tool projects will need to tailor a specific output directory value for each project they wish to build. This may be less than ideal if projects typically build in an output folder in a common directory. To help avoid this, this environment variable can be used.

When configuring this option, the default output folder for projects will be set to the provided container directory along with a project's root directory name:

$RELENG_GLOBAL_OUTPUT_CONTAINER_DIR/<root-directory-name>

This allows a user to build multiple releng-tool projects with output data placed inside a common directory path without needing to explicitly configure a specific output directory each project's build.

For example, if a user stores multiple projects inside a ~/projects/ path and configures this option to the path /mnt/extern-disk:

export RELENG_GLOBAL_OUTPUT_CONTAINER_DIR=/mnt/extern-disk

The following folder structure should be expected:

├── usr/
│   └── home/
│       └── myuser/
│           └── projects/
│               ├── my-project-a/
│               │   ├── ...
│               │   └── releng.py
│               └── my-project-b/
│                   ├── ...
│                   └── releng.py
└── mnt/
    └── extern-disk/
        ├── my-project-a/
        │   └── ...
        └── my-project-b/
            └── ...

RELENG_IGNORE_RUNNING_AS_ROOT=1

Suppress the warning generated when running releng-tool with an elevated user.

RELENG_IGNORE_UNKNOWN_ARGS=1

Suppress the warning/error generated when running releng-tool with unknown arguments.

See also the --relaxed-args argument.

RELENG_OUTPUT_DIR=<dir>

The output directory to use. By default, the output directory used is configured to <root>/output. If a user does not override an output directory using the --out-dir argument, the RELENG_OUTPUT_DIR option can be used to override this location.

See also RELENG_GLOBAL_OUTPUT_CONTAINER_DIR.