Function detect [src]

Prototype

pub fn detect( arena: Allocator, zig_lib_dir: []const u8, target: std.Target, is_native_abi: bool, link_libc: bool, libc_installation: ?*const LibCInstallation, ) !LibCDirs

Parameters

arena: Allocatorzig_lib_dir: []const u8target: std.Targetis_native_abi: boollink_libc: boollibc_installation: ?*const LibCInstallation

Source

pub fn detect( arena: Allocator, zig_lib_dir: []const u8, target: std.Target, is_native_abi: bool, link_libc: bool, libc_installation: ?*const LibCInstallation, ) !LibCDirs { if (!link_libc) { return .{ .libc_include_dir_list = &[0][]u8{}, .libc_installation = null, .libc_framework_dir_list = &.{}, .sysroot = null, .darwin_sdk_layout = null, }; } if (libc_installation) |lci| { return detectFromInstallation(arena, target, lci); } // If linking system libraries and targeting the native abi, default to // using the system libc installation. if (is_native_abi and !target.isMinGW()) { const libc = try arena.create(LibCInstallation); libc.* = LibCInstallation.findNative(.{ .allocator = arena, .target = target }) catch |err| switch (err) { error.CCompilerExitCode, error.CCompilerCrashed, error.CCompilerCannotFindHeaders, error.UnableToSpawnCCompiler, error.DarwinSdkNotFound, => |e| { // We tried to integrate with the native system C compiler, // however, it is not installed. So we must rely on our bundled // libc files. if (std.zig.target.canBuildLibC(target)) { return detectFromBuilding(arena, zig_lib_dir, target); } return e; }, else => |e| return e, }; return detectFromInstallation(arena, target, libc); } // If not linking system libraries, build and provide our own libc by // default if possible. if (std.zig.target.canBuildLibC(target)) { return detectFromBuilding(arena, zig_lib_dir, target); } // If zig can't build the libc for the target and we are targeting the // native abi, fall back to using the system libc installation. // On windows, instead of the native (mingw) abi, we want to check // for the MSVC abi as a fallback. const use_system_abi = if (builtin.os.tag == .windows) target.abi == .msvc or target.abi == .itanium else is_native_abi; if (use_system_abi) { const libc = try arena.create(LibCInstallation); libc.* = try LibCInstallation.findNative(.{ .allocator = arena, .verbose = true, .target = target }); return detectFromInstallation(arena, target, libc); } return .{ .libc_include_dir_list = &[0][]u8{}, .libc_installation = null, .libc_framework_dir_list = &.{}, .sysroot = null, .darwin_sdk_layout = null, }; }