DoxigAlpha

lazyImport

In a build.zig file, this function is to @import what lazyDependency is to dependency. If the dependency is lazy and has not yet been fetched, it instructs the parent process to fetch that dependency after the build script has finished running, then returns null. If the dependency is lazy but has already been fetched, or if it is eager, it returns the build.zig struct of that dependency, just like a regular @import.

Function parameters

Parameters

#
b:*Build
asking_build_zig:type
The build.zig struct of the package importing the dependency.
dep_name:[]const u8

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 inline fn lazyImport(
    b: *Build,
    /// The build.zig struct of the package importing the dependency.
    /// When calling this function from the `build` function of a build.zig file's, you normally
    /// pass `@This()`.
    comptime asking_build_zig: type,
    comptime dep_name: []const u8,
) ?type {
    const build_runner = @import("root");
    const deps = build_runner.dependencies;
    const pkg_hash = findImportPkgHashOrFatal(b, asking_build_zig, dep_name);

    inline for (@typeInfo(deps.packages).@"struct".decls) |decl| {
        if (comptime 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 if (@hasDecl(pkg, "build_zig"))
                pkg.build_zig
            else
                @compileError("dependency '" ++ dep_name ++ "' does not have a build.zig");
        }
    }

    comptime unreachable; // Bad @dependencies source
}