DoxigAlpha

lazyDependency

When this function is called, it means that the current build does, in fact, require this dependency. If the dependency is already fetched, it proceeds in the same manner as dependency. However if the dependency was not fetched, then when the build script is finished running, the build will not proceed to the make phase. Instead, the parent process will additionally fetch all the lazy dependencies that were actually required by running the build script, rebuild the build script, and then run it again. In other words, if this function returns null it means that the only purpose of completing the configure phase is to find out all the other lazy dependencies that are also required. It is allowed to use this function for non-lazy dependencies, in which case it will never return null. This allows toggling laziness via build.zig.zon without changing build.zig logic.

Function parameters

Parameters

#
b:*Build
name:[]const u8
args:anytype

Type definitions in this namespace

Types

#
Graph
Shared state among all Build instances.
GeneratedFile
A file that is generated by a build step.
LazyPath
A reference to an existing or future path.
ResolvedTarget
A pair of target query and fully resolved target.

Functions in this namespace

Functions

#
resolveInstallPrefix
This function is intended to be called by lib/build_runner.zig, not a build.zig file.
addOptions
Create a set of key-value pairs that can be converted into a Zig source
addTest
Creates an executable containing unit tests.
addModule
This function creates a module and adds it to the package's module set, making
createModule
This function creates a private module, to be used by the current package,
addSystemCommand
Initializes a `Step.Run` with argv, which must at least have the path to the
addRunArtifact
Creates a `Step.Run` with an executable built with `addExecutable`.
addConfigHeader
Using the `values` provided, produces a C header file, possibly based on a
dupe
Allocator.dupe without the need to handle out of memory.
dupeStrings
Duplicates an array of strings without the need to handle out of memory.
dupePath
Duplicates a path and converts all slashes to the OS's canonical path separator.
option
Creates a configuration option to be passed to the build.zig script.
standardTargetOptions
Exposes standard `zig build` options for choosing a target and additionally
parseTargetQuery
Obtain a target query from a string, reporting diagnostics to stderr if the
standardTargetOptionsQueryOnly
Exposes standard `zig build` options for choosing a target.
installArtifact
This creates the install step and adds it to the dependencies of the
addInstallArtifact
This merely creates the step; it does not add it to the dependencies of the
installFile
`dest_rel_path` is relative to prefix path
installBinFile
`dest_rel_path` is relative to bin path
installLibFile
`dest_rel_path` is relative to lib path
addInstallFile
`dest_rel_path` is relative to install prefix path
addInstallBinFile
`dest_rel_path` is relative to bin path
addInstallLibFile
`dest_rel_path` is relative to lib path
addInstallHeaderFile
`dest_rel_path` is relative to header path
path
References a file or directory relative to the source root.
pathFromRoot
This is low-level implementation details of the build system, not meant to
run
This is a helper function to be called from build.zig scripts, *not* from
lazyDependency
When this function is called, it means that the current build does, in
lazyImport
In a build.zig file, this function is to `@import` what `lazyDependency` is to `dependency`.
dumpBadGetPathHelp
In this function the stderr mutex has already been locked.
makeTempPath
This function is intended to be called in the `configure` phase only.
resolveTargetQuery
Converts a target query into a fully resolved target that can be passed to

Error sets in this namespace

Error Sets

#

Source

Implementation

#
pub fn lazyDependency(b: *Build, name: []const u8, args: anytype) ?*Dependency {
    const build_runner = @import("root");
    const deps = build_runner.dependencies;
    const pkg_hash = findPkgHashOrFatal(b, name);

    inline for (@typeInfo(deps.packages).@"struct".decls) |decl| {
        if (mem.eql(u8, decl.name, pkg_hash)) {
            const pkg = @field(deps.packages, decl.name);
            const available = !@hasDecl(pkg, "available") or pkg.available;
            if (!available) {
                markNeededLazyDep(b, pkg_hash);
                return null;
            }
            return dependencyInner(b, name, pkg.build_root, if (@hasDecl(pkg, "build_zig")) pkg.build_zig else null, pkg_hash, pkg.deps, args);
        }
    }

    unreachable; // Bad @dependencies source
}