var data = {lines:[ {"lineNum":" 1","line":"const std = @import(\"std.zig\");"}, {"lineNum":" 2","line":"const builtin = std.builtin;"}, {"lineNum":" 3","line":"const io = std.io;"}, {"lineNum":" 4","line":"const fs = std.fs;"}, {"lineNum":" 5","line":"const mem = std.mem;"}, {"lineNum":" 6","line":"const debug = std.debug;"}, {"lineNum":" 7","line":"const panic = std.debug.panic;"}, {"lineNum":" 8","line":"const assert = debug.assert;"}, {"lineNum":" 9","line":"const warn = std.debug.warn;"}, {"lineNum":" 10","line":"const ArrayList = std.ArrayList;"}, {"lineNum":" 11","line":"const StringHashMap = std.StringHashMap;"}, {"lineNum":" 12","line":"const Allocator = mem.Allocator;"}, {"lineNum":" 13","line":"const process = std.process;"}, {"lineNum":" 14","line":"const BufSet = std.BufSet;"}, {"lineNum":" 15","line":"const BufMap = std.BufMap;"}, {"lineNum":" 16","line":"const fmt_lib = std.fmt;"}, {"lineNum":" 17","line":"const File = std.fs.File;"}, {"lineNum":" 18","line":"const CrossTarget = std.zig.CrossTarget;"}, {"lineNum":" 19","line":""}, {"lineNum":" 20","line":"pub const FmtStep = @import(\"build/fmt.zig\").FmtStep;"}, {"lineNum":" 21","line":"pub const TranslateCStep = @import(\"build/translate_c.zig\").TranslateCStep;"}, {"lineNum":" 22","line":"pub const WriteFileStep = @import(\"build/write_file.zig\").WriteFileStep;"}, {"lineNum":" 23","line":"pub const RunStep = @import(\"build/run.zig\").RunStep;"}, {"lineNum":" 24","line":"pub const CheckFileStep = @import(\"build/check_file.zig\").CheckFileStep;"}, {"lineNum":" 25","line":"pub const InstallRawStep = @import(\"build/emit_raw.zig\").InstallRawStep;"}, {"lineNum":" 26","line":""}, {"lineNum":" 27","line":"pub const Builder = struct {"}, {"lineNum":" 28","line":" install_tls: TopLevelStep,"}, {"lineNum":" 29","line":" uninstall_tls: TopLevelStep,"}, {"lineNum":" 30","line":" allocator: *Allocator,"}, {"lineNum":" 31","line":" user_input_options: UserInputOptionsMap,"}, {"lineNum":" 32","line":" available_options_map: AvailableOptionsMap,"}, {"lineNum":" 33","line":" available_options_list: ArrayList(AvailableOption),"}, {"lineNum":" 34","line":" verbose: bool,"}, {"lineNum":" 35","line":" verbose_tokenize: bool,"}, {"lineNum":" 36","line":" verbose_ast: bool,"}, {"lineNum":" 37","line":" verbose_link: bool,"}, {"lineNum":" 38","line":" verbose_cc: bool,"}, {"lineNum":" 39","line":" verbose_ir: bool,"}, {"lineNum":" 40","line":" verbose_llvm_ir: bool,"}, {"lineNum":" 41","line":" verbose_cimport: bool,"}, {"lineNum":" 42","line":" verbose_llvm_cpu_features: bool,"}, {"lineNum":" 43","line":" invalid_user_input: bool,"}, {"lineNum":" 44","line":" zig_exe: []const u8,"}, {"lineNum":" 45","line":" default_step: *Step,"}, {"lineNum":" 46","line":" env_map: *BufMap,"}, {"lineNum":" 47","line":" top_level_steps: ArrayList(*TopLevelStep),"}, {"lineNum":" 48","line":" install_prefix: ?[]const u8,"}, {"lineNum":" 49","line":" dest_dir: ?[]const u8,"}, {"lineNum":" 50","line":" lib_dir: []const u8,"}, {"lineNum":" 51","line":" exe_dir: []const u8,"}, {"lineNum":" 52","line":" h_dir: []const u8,"}, {"lineNum":" 53","line":" install_path: []const u8,"}, {"lineNum":" 54","line":" search_prefixes: ArrayList([]const u8),"}, {"lineNum":" 55","line":" installed_files: ArrayList(InstalledFile),"}, {"lineNum":" 56","line":" build_root: []const u8,"}, {"lineNum":" 57","line":" cache_root: []const u8,"}, {"lineNum":" 58","line":" release_mode: ?builtin.Mode,"}, {"lineNum":" 59","line":" is_release: bool,"}, {"lineNum":" 60","line":" override_lib_dir: ?[]const u8,"}, {"lineNum":" 61","line":" vcpkg_root: VcpkgRoot,"}, {"lineNum":" 62","line":" pkg_config_pkg_list: ?(PkgConfigError![]const PkgConfigPkg) = null,"}, {"lineNum":" 63","line":" args: ?[][]const u8 = null,"}, {"lineNum":" 64","line":""}, {"lineNum":" 65","line":" const PkgConfigError = error{"}, {"lineNum":" 66","line":" PkgConfigCrashed,"}, {"lineNum":" 67","line":" PkgConfigFailed,"}, {"lineNum":" 68","line":" PkgConfigNotInstalled,"}, {"lineNum":" 69","line":" PkgConfigInvalidOutput,"}, {"lineNum":" 70","line":" };"}, {"lineNum":" 71","line":""}, {"lineNum":" 72","line":" pub const PkgConfigPkg = struct {"}, {"lineNum":" 73","line":" name: []const u8,"}, {"lineNum":" 74","line":" desc: []const u8,"}, {"lineNum":" 75","line":" };"}, {"lineNum":" 76","line":""}, {"lineNum":" 77","line":" pub const CStd = enum {"}, {"lineNum":" 78","line":" C89,"}, {"lineNum":" 79","line":" C99,"}, {"lineNum":" 80","line":" C11,"}, {"lineNum":" 81","line":" };"}, {"lineNum":" 82","line":""}, {"lineNum":" 83","line":" const UserInputOptionsMap = StringHashMap(UserInputOption);"}, {"lineNum":" 84","line":" const AvailableOptionsMap = StringHashMap(AvailableOption);"}, {"lineNum":" 85","line":""}, {"lineNum":" 86","line":" const AvailableOption = struct {"}, {"lineNum":" 87","line":" name: []const u8,"}, {"lineNum":" 88","line":" type_id: TypeId,"}, {"lineNum":" 89","line":" description: []const u8,"}, {"lineNum":" 90","line":" };"}, {"lineNum":" 91","line":""}, {"lineNum":" 92","line":" const UserInputOption = struct {"}, {"lineNum":" 93","line":" name: []const u8,"}, {"lineNum":" 94","line":" value: UserValue,"}, {"lineNum":" 95","line":" used: bool,"}, {"lineNum":" 96","line":" };"}, {"lineNum":" 97","line":""}, {"lineNum":" 98","line":" const UserValue = union(enum) {"}, {"lineNum":" 99","line":" Flag: void,"}, {"lineNum":" 100","line":" Scalar: []const u8,"}, {"lineNum":" 101","line":" List: ArrayList([]const u8),"}, {"lineNum":" 102","line":" };"}, {"lineNum":" 103","line":""}, {"lineNum":" 104","line":" const TypeId = enum {"}, {"lineNum":" 105","line":" Bool,"}, {"lineNum":" 106","line":" Int,"}, {"lineNum":" 107","line":" Float,"}, {"lineNum":" 108","line":" Enum,"}, {"lineNum":" 109","line":" String,"}, {"lineNum":" 110","line":" List,"}, {"lineNum":" 111","line":" };"}, {"lineNum":" 112","line":""}, {"lineNum":" 113","line":" const TopLevelStep = struct {"}, {"lineNum":" 114","line":" step: Step,"}, {"lineNum":" 115","line":" description: []const u8,"}, {"lineNum":" 116","line":" };"}, {"lineNum":" 117","line":""}, {"lineNum":" 118","line":" pub fn create(","class":"lineCov","hits":"1","order":"4205","possible_hits":"1",}, {"lineNum":" 119","line":" allocator: *Allocator,"}, {"lineNum":" 120","line":" zig_exe: []const u8,"}, {"lineNum":" 121","line":" build_root: []const u8,"}, {"lineNum":" 122","line":" cache_root: []const u8,"}, {"lineNum":" 123","line":" ) !*Builder {"}, {"lineNum":" 124","line":" const env_map = try allocator.create(BufMap);","class":"lineCov","hits":"1","order":"4206","possible_hits":"1",}, {"lineNum":" 125","line":" env_map.* = try process.getEnvMap(allocator);","class":"lineCov","hits":"1","order":"4220","possible_hits":"1",}, {"lineNum":" 126","line":""}, {"lineNum":" 127","line":" const self = try allocator.create(Builder);","class":"lineCov","hits":"1","order":"4329","possible_hits":"1",}, {"lineNum":" 128","line":" self.* = Builder{","class":"lineCov","hits":"2","order":"4330","possible_hits":"2",}, {"lineNum":" 129","line":" .zig_exe = zig_exe,","class":"lineCov","hits":"1","order":"4331","possible_hits":"1",}, {"lineNum":" 130","line":" .build_root = build_root,","class":"lineCov","hits":"1","order":"4332","possible_hits":"1",}, {"lineNum":" 131","line":" .cache_root = try fs.path.relative(allocator, build_root, cache_root),","class":"lineCov","hits":"1","order":"4333","possible_hits":"1",}, {"lineNum":" 132","line":" .verbose = false,","class":"lineCov","hits":"1","order":"4393","possible_hits":"1",}, {"lineNum":" 133","line":" .verbose_tokenize = false,","class":"lineCov","hits":"1","order":"4394","possible_hits":"1",}, {"lineNum":" 134","line":" .verbose_ast = false,","class":"lineCov","hits":"1","order":"4395","possible_hits":"1",}, {"lineNum":" 135","line":" .verbose_link = false,","class":"lineCov","hits":"1","order":"4396","possible_hits":"1",}, {"lineNum":" 136","line":" .verbose_cc = false,","class":"lineCov","hits":"1","order":"4397","possible_hits":"1",}, {"lineNum":" 137","line":" .verbose_ir = false,","class":"lineCov","hits":"1","order":"4398","possible_hits":"1",}, {"lineNum":" 138","line":" .verbose_llvm_ir = false,","class":"lineCov","hits":"1","order":"4399","possible_hits":"1",}, {"lineNum":" 139","line":" .verbose_cimport = false,","class":"lineCov","hits":"1","order":"4400","possible_hits":"1",}, {"lineNum":" 140","line":" .verbose_llvm_cpu_features = false,","class":"lineCov","hits":"1","order":"4401","possible_hits":"1",}, {"lineNum":" 141","line":" .invalid_user_input = false,","class":"lineCov","hits":"1","order":"4402","possible_hits":"1",}, {"lineNum":" 142","line":" .allocator = allocator,","class":"lineCov","hits":"1","order":"4403","possible_hits":"1",}, {"lineNum":" 143","line":" .user_input_options = UserInputOptionsMap.init(allocator),","class":"lineCov","hits":"1","order":"4404","possible_hits":"1",}, {"lineNum":" 144","line":" .available_options_map = AvailableOptionsMap.init(allocator),","class":"lineCov","hits":"1","order":"4405","possible_hits":"1",}, {"lineNum":" 145","line":" .available_options_list = ArrayList(AvailableOption).init(allocator),","class":"lineCov","hits":"1","order":"4406","possible_hits":"1",}, {"lineNum":" 146","line":" .top_level_steps = ArrayList(*TopLevelStep).init(allocator),","class":"lineCov","hits":"1","order":"4407","possible_hits":"1",}, {"lineNum":" 147","line":" .default_step = undefined,","class":"lineCov","hits":"1","order":"4408","possible_hits":"1",}, {"lineNum":" 148","line":" .env_map = env_map,","class":"lineCov","hits":"1","order":"4409","possible_hits":"1",}, {"lineNum":" 149","line":" .search_prefixes = ArrayList([]const u8).init(allocator),","class":"lineCov","hits":"1","order":"4410","possible_hits":"1",}, {"lineNum":" 150","line":" .install_prefix = null,","class":"lineCov","hits":"1","order":"4411","possible_hits":"1",}, {"lineNum":" 151","line":" .lib_dir = undefined,","class":"lineCov","hits":"1","order":"4412","possible_hits":"1",}, {"lineNum":" 152","line":" .exe_dir = undefined,","class":"lineCov","hits":"1","order":"4413","possible_hits":"1",}, {"lineNum":" 153","line":" .h_dir = undefined,","class":"lineCov","hits":"1","order":"4414","possible_hits":"1",}, {"lineNum":" 154","line":" .dest_dir = env_map.get(\"DESTDIR\"),","class":"lineCov","hits":"1","order":"4415","possible_hits":"1",}, {"lineNum":" 155","line":" .installed_files = ArrayList(InstalledFile).init(allocator),","class":"lineCov","hits":"1","order":"4418","possible_hits":"1",}, {"lineNum":" 156","line":" .install_tls = TopLevelStep{"}, {"lineNum":" 157","line":" .step = Step.initNoOp(\"install\", allocator),","class":"lineCov","hits":"1","order":"4419","possible_hits":"1",}, {"lineNum":" 158","line":" .description = \"Copy build artifacts to prefix path\",","class":"lineCov","hits":"1","order":"4429","possible_hits":"1",}, {"lineNum":" 159","line":" },"}, {"lineNum":" 160","line":" .uninstall_tls = TopLevelStep{","class":"lineCov","hits":"1","order":"4430","possible_hits":"1",}, {"lineNum":" 161","line":" .step = Step.init(\"uninstall\", allocator, makeUninstall),","class":"lineCov","hits":"1","order":"4431","possible_hits":"1",}, {"lineNum":" 162","line":" .description = \"Remove build artifacts from prefix path\",","class":"lineCov","hits":"1","order":"4432","possible_hits":"1",}, {"lineNum":" 163","line":" },"}, {"lineNum":" 164","line":" .release_mode = null,","class":"lineCov","hits":"1","order":"4433","possible_hits":"1",}, {"lineNum":" 165","line":" .is_release = false,","class":"lineCov","hits":"1","order":"4434","possible_hits":"1",}, {"lineNum":" 166","line":" .override_lib_dir = null,","class":"lineCov","hits":"1","order":"4435","possible_hits":"1",}, {"lineNum":" 167","line":" .install_path = undefined,","class":"lineCov","hits":"1","order":"4436","possible_hits":"1",}, {"lineNum":" 168","line":" .vcpkg_root = VcpkgRoot{ .Unattempted = {} },","class":"lineCov","hits":"1","order":"4437","possible_hits":"1",}, {"lineNum":" 169","line":" .args = null,","class":"lineCov","hits":"1","order":"4438","possible_hits":"1",}, {"lineNum":" 170","line":" };"}, {"lineNum":" 171","line":" try self.top_level_steps.append(&self.install_tls);","class":"lineCov","hits":"1","order":"4439","possible_hits":"1",}, {"lineNum":" 172","line":" try self.top_level_steps.append(&self.uninstall_tls);","class":"lineCov","hits":"1","order":"4440","possible_hits":"1",}, {"lineNum":" 173","line":" self.default_step = &self.install_tls.step;","class":"lineCov","hits":"1","order":"4441","possible_hits":"1",}, {"lineNum":" 174","line":" return self;","class":"lineCov","hits":"1","order":"4442","possible_hits":"1",}, {"lineNum":" 175","line":" }"}, {"lineNum":" 176","line":""}, {"lineNum":" 177","line":" pub fn destroy(self: *Builder) void {","class":"lineCov","hits":"2","order":"4466","possible_hits":"2",}, {"lineNum":" 178","line":" self.env_map.deinit();","class":"lineCov","hits":"1","order":"4467","possible_hits":"1",}, {"lineNum":" 179","line":" self.top_level_steps.deinit();","class":"lineCov","hits":"1","order":"4477","possible_hits":"1",}, {"lineNum":" 180","line":" self.allocator.destroy(self);","class":"lineCov","hits":"1","order":"4478","possible_hits":"1",}, {"lineNum":" 181","line":" }"}, {"lineNum":" 182","line":""}, {"lineNum":" 183","line":" /// This function is intended to be called by std/special/build_runner.zig, not a build.zig file."}, {"lineNum":" 184","line":" pub fn setInstallPrefix(self: *Builder, optional_prefix: ?[]const u8) void {"}, {"lineNum":" 185","line":" self.install_prefix = optional_prefix;"}, {"lineNum":" 186","line":" }"}, {"lineNum":" 187","line":""}, {"lineNum":" 188","line":" /// This function is intended to be called by std/special/build_runner.zig, not a build.zig file."}, {"lineNum":" 189","line":" pub fn resolveInstallPrefix(self: *Builder) void {"}, {"lineNum":" 190","line":" if (self.dest_dir) |dest_dir| {"}, {"lineNum":" 191","line":" const install_prefix = self.install_prefix orelse \"/usr\";"}, {"lineNum":" 192","line":" self.install_path = fs.path.join(self.allocator, &[_][]const u8{ dest_dir, install_prefix }) catch unreachable;"}, {"lineNum":" 193","line":" } else {"}, {"lineNum":" 194","line":" const install_prefix = self.install_prefix orelse blk: {"}, {"lineNum":" 195","line":" const p = self.cache_root;"}, {"lineNum":" 196","line":" self.install_prefix = p;"}, {"lineNum":" 197","line":" break :blk p;"}, {"lineNum":" 198","line":" };"}, {"lineNum":" 199","line":" self.install_path = install_prefix;"}, {"lineNum":" 200","line":" }"}, {"lineNum":" 201","line":" self.lib_dir = fs.path.join(self.allocator, &[_][]const u8{ self.install_path, \"lib\" }) catch unreachable;"}, {"lineNum":" 202","line":" self.exe_dir = fs.path.join(self.allocator, &[_][]const u8{ self.install_path, \"bin\" }) catch unreachable;"}, {"lineNum":" 203","line":" self.h_dir = fs.path.join(self.allocator, &[_][]const u8{ self.install_path, \"include\" }) catch unreachable;"}, {"lineNum":" 204","line":" }"}, {"lineNum":" 205","line":""}, {"lineNum":" 206","line":" pub fn addExecutable(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {"}, {"lineNum":" 207","line":" return LibExeObjStep.createExecutable("}, {"lineNum":" 208","line":" self,"}, {"lineNum":" 209","line":" name,"}, {"lineNum":" 210","line":" if (root_src) |p| FileSource{ .path = p } else null,"}, {"lineNum":" 211","line":" false,"}, {"lineNum":" 212","line":" );"}, {"lineNum":" 213","line":" }"}, {"lineNum":" 214","line":""}, {"lineNum":" 215","line":" pub fn addExecutableFromWriteFileStep("}, {"lineNum":" 216","line":" self: *Builder,"}, {"lineNum":" 217","line":" name: []const u8,"}, {"lineNum":" 218","line":" wfs: *WriteFileStep,"}, {"lineNum":" 219","line":" basename: []const u8,"}, {"lineNum":" 220","line":" ) *LibExeObjStep {"}, {"lineNum":" 221","line":" return LibExeObjStep.createExecutable(self, name, @as(FileSource, .{"}, {"lineNum":" 222","line":" .write_file = .{"}, {"lineNum":" 223","line":" .step = wfs,"}, {"lineNum":" 224","line":" .basename = basename,"}, {"lineNum":" 225","line":" },"}, {"lineNum":" 226","line":" }), false);"}, {"lineNum":" 227","line":" }"}, {"lineNum":" 228","line":""}, {"lineNum":" 229","line":" pub fn addExecutableSource("}, {"lineNum":" 230","line":" self: *Builder,"}, {"lineNum":" 231","line":" name: []const u8,"}, {"lineNum":" 232","line":" root_src: ?FileSource,"}, {"lineNum":" 233","line":" ) *LibExeObjStep {"}, {"lineNum":" 234","line":" return LibExeObjStep.createExecutable(self, name, root_src, false);"}, {"lineNum":" 235","line":" }"}, {"lineNum":" 236","line":""}, {"lineNum":" 237","line":" pub fn addObject(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {"}, {"lineNum":" 238","line":" const root_src_param = if (root_src) |p| @as(FileSource, .{ .path = p }) else null;"}, {"lineNum":" 239","line":" return LibExeObjStep.createObject(self, name, root_src_param);"}, {"lineNum":" 240","line":" }"}, {"lineNum":" 241","line":""}, {"lineNum":" 242","line":" pub fn addObjectFromWriteFileStep("}, {"lineNum":" 243","line":" self: *Builder,"}, {"lineNum":" 244","line":" name: []const u8,"}, {"lineNum":" 245","line":" wfs: *WriteFileStep,"}, {"lineNum":" 246","line":" basename: []const u8,"}, {"lineNum":" 247","line":" ) *LibExeObjStep {"}, {"lineNum":" 248","line":" return LibExeObjStep.createObject(self, name, @as(FileSource, .{"}, {"lineNum":" 249","line":" .write_file = .{"}, {"lineNum":" 250","line":" .step = wfs,"}, {"lineNum":" 251","line":" .basename = basename,"}, {"lineNum":" 252","line":" },"}, {"lineNum":" 253","line":" }));"}, {"lineNum":" 254","line":" }"}, {"lineNum":" 255","line":""}, {"lineNum":" 256","line":" pub fn addSharedLibrary(self: *Builder, name: []const u8, root_src: ?[]const u8, ver: Version) *LibExeObjStep {"}, {"lineNum":" 257","line":" const root_src_param = if (root_src) |p| @as(FileSource, .{ .path = p }) else null;"}, {"lineNum":" 258","line":" return LibExeObjStep.createSharedLibrary(self, name, root_src_param, ver);"}, {"lineNum":" 259","line":" }"}, {"lineNum":" 260","line":""}, {"lineNum":" 261","line":" pub fn addStaticLibrary(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {"}, {"lineNum":" 262","line":" const root_src_param = if (root_src) |p| @as(FileSource, .{ .path = p }) else null;"}, {"lineNum":" 263","line":" return LibExeObjStep.createStaticLibrary(self, name, root_src_param);"}, {"lineNum":" 264","line":" }"}, {"lineNum":" 265","line":""}, {"lineNum":" 266","line":" pub fn addTest(self: *Builder, root_src: []const u8) *LibExeObjStep {"}, {"lineNum":" 267","line":" return LibExeObjStep.createTest(self, \"test\", .{ .path = root_src });"}, {"lineNum":" 268","line":" }"}, {"lineNum":" 269","line":""}, {"lineNum":" 270","line":" pub fn addAssemble(self: *Builder, name: []const u8, src: []const u8) *LibExeObjStep {"}, {"lineNum":" 271","line":" const obj_step = LibExeObjStep.createObject(self, name, null);"}, {"lineNum":" 272","line":" obj_step.addAssemblyFile(src);"}, {"lineNum":" 273","line":" return obj_step;"}, {"lineNum":" 274","line":" }"}, {"lineNum":" 275","line":""}, {"lineNum":" 276","line":" /// Initializes a RunStep with argv, which must at least have the path to the"}, {"lineNum":" 277","line":" /// executable. More command line arguments can be added with `addArg`,"}, {"lineNum":" 278","line":" /// `addArgs`, and `addArtifactArg`."}, {"lineNum":" 279","line":" /// Be careful using this function, as it introduces a system dependency."}, {"lineNum":" 280","line":" /// To run an executable built with zig build, see `LibExeObjStep.run`."}, {"lineNum":" 281","line":" pub fn addSystemCommand(self: *Builder, argv: []const []const u8) *RunStep {"}, {"lineNum":" 282","line":" assert(argv.len >= 1);"}, {"lineNum":" 283","line":" const run_step = RunStep.create(self, self.fmt(\"run {}\", .{argv[0]}));"}, {"lineNum":" 284","line":" run_step.addArgs(argv);"}, {"lineNum":" 285","line":" return run_step;"}, {"lineNum":" 286","line":" }"}, {"lineNum":" 287","line":""}, {"lineNum":" 288","line":" pub fn dupe(self: *Builder, bytes: []const u8) []u8 {"}, {"lineNum":" 289","line":" return mem.dupe(self.allocator, u8, bytes) catch unreachable;"}, {"lineNum":" 290","line":" }"}, {"lineNum":" 291","line":""}, {"lineNum":" 292","line":" pub fn dupePath(self: *Builder, bytes: []const u8) []u8 {"}, {"lineNum":" 293","line":" const the_copy = self.dupe(bytes);"}, {"lineNum":" 294","line":" for (the_copy) |*byte| {"}, {"lineNum":" 295","line":" switch (byte.*) {"}, {"lineNum":" 296","line":" \'/\', \'\\\\\' => byte.* = fs.path.sep,"}, {"lineNum":" 297","line":" else => {},"}, {"lineNum":" 298","line":" }"}, {"lineNum":" 299","line":" }"}, {"lineNum":" 300","line":" return the_copy;"}, {"lineNum":" 301","line":" }"}, {"lineNum":" 302","line":""}, {"lineNum":" 303","line":" pub fn addWriteFile(self: *Builder, file_path: []const u8, data: []const u8) *WriteFileStep {"}, {"lineNum":" 304","line":" const write_file_step = self.addWriteFiles();"}, {"lineNum":" 305","line":" write_file_step.add(file_path, data);"}, {"lineNum":" 306","line":" return write_file_step;"}, {"lineNum":" 307","line":" }"}, {"lineNum":" 308","line":""}, {"lineNum":" 309","line":" pub fn addWriteFiles(self: *Builder) *WriteFileStep {"}, {"lineNum":" 310","line":" const write_file_step = self.allocator.create(WriteFileStep) catch unreachable;"}, {"lineNum":" 311","line":" write_file_step.* = WriteFileStep.init(self);"}, {"lineNum":" 312","line":" return write_file_step;"}, {"lineNum":" 313","line":" }"}, {"lineNum":" 314","line":""}, {"lineNum":" 315","line":" pub fn addLog(self: *Builder, comptime format: []const u8, args: var) *LogStep {"}, {"lineNum":" 316","line":" const data = self.fmt(format, args);"}, {"lineNum":" 317","line":" const log_step = self.allocator.create(LogStep) catch unreachable;"}, {"lineNum":" 318","line":" log_step.* = LogStep.init(self, data);"}, {"lineNum":" 319","line":" return log_step;"}, {"lineNum":" 320","line":" }"}, {"lineNum":" 321","line":""}, {"lineNum":" 322","line":" pub fn addRemoveDirTree(self: *Builder, dir_path: []const u8) *RemoveDirStep {"}, {"lineNum":" 323","line":" const remove_dir_step = self.allocator.create(RemoveDirStep) catch unreachable;"}, {"lineNum":" 324","line":" remove_dir_step.* = RemoveDirStep.init(self, dir_path);"}, {"lineNum":" 325","line":" return remove_dir_step;"}, {"lineNum":" 326","line":" }"}, {"lineNum":" 327","line":""}, {"lineNum":" 328","line":" pub fn addFmt(self: *Builder, paths: []const []const u8) *FmtStep {"}, {"lineNum":" 329","line":" return FmtStep.create(self, paths);"}, {"lineNum":" 330","line":" }"}, {"lineNum":" 331","line":""}, {"lineNum":" 332","line":" pub fn addTranslateC(self: *Builder, source: FileSource) *TranslateCStep {"}, {"lineNum":" 333","line":" return TranslateCStep.create(self, source);"}, {"lineNum":" 334","line":" }"}, {"lineNum":" 335","line":""}, {"lineNum":" 336","line":" pub fn version(self: *const Builder, major: u32, minor: u32, patch: u32) Version {"}, {"lineNum":" 337","line":" return Version{"}, {"lineNum":" 338","line":" .major = major,"}, {"lineNum":" 339","line":" .minor = minor,"}, {"lineNum":" 340","line":" .patch = patch,"}, {"lineNum":" 341","line":" };"}, {"lineNum":" 342","line":" }"}, {"lineNum":" 343","line":""}, {"lineNum":" 344","line":" pub fn make(self: *Builder, step_names: []const []const u8) !void {"}, {"lineNum":" 345","line":" try self.makePath(self.cache_root);"}, {"lineNum":" 346","line":""}, {"lineNum":" 347","line":" var wanted_steps = ArrayList(*Step).init(self.allocator);"}, {"lineNum":" 348","line":" defer wanted_steps.deinit();"}, {"lineNum":" 349","line":""}, {"lineNum":" 350","line":" if (step_names.len == 0) {"}, {"lineNum":" 351","line":" try wanted_steps.append(self.default_step);"}, {"lineNum":" 352","line":" } else {"}, {"lineNum":" 353","line":" for (step_names) |step_name| {"}, {"lineNum":" 354","line":" const s = try self.getTopLevelStepByName(step_name);"}, {"lineNum":" 355","line":" try wanted_steps.append(s);"}, {"lineNum":" 356","line":" }"}, {"lineNum":" 357","line":" }"}, {"lineNum":" 358","line":""}, {"lineNum":" 359","line":" for (wanted_steps.span()) |s| {"}, {"lineNum":" 360","line":" try self.makeOneStep(s);"}, {"lineNum":" 361","line":" }"}, {"lineNum":" 362","line":" }"}, {"lineNum":" 363","line":""}, {"lineNum":" 364","line":" pub fn getInstallStep(self: *Builder) *Step {"}, {"lineNum":" 365","line":" return &self.install_tls.step;"}, {"lineNum":" 366","line":" }"}, {"lineNum":" 367","line":""}, {"lineNum":" 368","line":" pub fn getUninstallStep(self: *Builder) *Step {"}, {"lineNum":" 369","line":" return &self.uninstall_tls.step;"}, {"lineNum":" 370","line":" }"}, {"lineNum":" 371","line":""}, {"lineNum":" 372","line":" fn makeUninstall(uninstall_step: *Step) anyerror!void {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 373","line":" const uninstall_tls = @fieldParentPtr(TopLevelStep, \"step\", uninstall_step);","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 374","line":" const self = @fieldParentPtr(Builder, \"uninstall_tls\", uninstall_tls);","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 375","line":""}, {"lineNum":" 376","line":" for (self.installed_files.span()) |installed_file| {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 377","line":" const full_path = self.getInstallPath(installed_file.dir, installed_file.path);","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 378","line":" if (self.verbose) {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 379","line":" warn(\"rm {}\\n\", .{full_path});","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 380","line":" }"}, {"lineNum":" 381","line":" fs.cwd().deleteTree(full_path) catch {};","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 382","line":" }"}, {"lineNum":" 383","line":""}, {"lineNum":" 384","line":" // TODO remove empty directories"}, {"lineNum":" 385","line":" }"}, {"lineNum":" 386","line":""}, {"lineNum":" 387","line":" fn makeOneStep(self: *Builder, s: *Step) anyerror!void {"}, {"lineNum":" 388","line":" if (s.loop_flag) {"}, {"lineNum":" 389","line":" warn(\"Dependency loop detected:\\n {}\\n\", .{s.name});"}, {"lineNum":" 390","line":" return error.DependencyLoopDetected;"}, {"lineNum":" 391","line":" }"}, {"lineNum":" 392","line":" s.loop_flag = true;"}, {"lineNum":" 393","line":""}, {"lineNum":" 394","line":" for (s.dependencies.span()) |dep| {"}, {"lineNum":" 395","line":" self.makeOneStep(dep) catch |err| {"}, {"lineNum":" 396","line":" if (err == error.DependencyLoopDetected) {"}, {"lineNum":" 397","line":" warn(\" {}\\n\", .{s.name});"}, {"lineNum":" 398","line":" }"}, {"lineNum":" 399","line":" return err;"}, {"lineNum":" 400","line":" };"}, {"lineNum":" 401","line":" }"}, {"lineNum":" 402","line":""}, {"lineNum":" 403","line":" s.loop_flag = false;"}, {"lineNum":" 404","line":""}, {"lineNum":" 405","line":" try s.make();"}, {"lineNum":" 406","line":" }"}, {"lineNum":" 407","line":""}, {"lineNum":" 408","line":" fn getTopLevelStepByName(self: *Builder, name: []const u8) !*Step {"}, {"lineNum":" 409","line":" for (self.top_level_steps.span()) |top_level_step| {"}, {"lineNum":" 410","line":" if (mem.eql(u8, top_level_step.step.name, name)) {"}, {"lineNum":" 411","line":" return &top_level_step.step;"}, {"lineNum":" 412","line":" }"}, {"lineNum":" 413","line":" }"}, {"lineNum":" 414","line":" warn(\"Cannot run step \'{}\' because it does not exist\\n\", .{name});"}, {"lineNum":" 415","line":" return error.InvalidStepName;"}, {"lineNum":" 416","line":" }"}, {"lineNum":" 417","line":""}, {"lineNum":" 418","line":" pub fn option(self: *Builder, comptime T: type, name: []const u8, description: []const u8) ?T {"}, {"lineNum":" 419","line":" const type_id = comptime typeToEnum(T);"}, {"lineNum":" 420","line":" const available_option = AvailableOption{"}, {"lineNum":" 421","line":" .name = name,"}, {"lineNum":" 422","line":" .type_id = type_id,"}, {"lineNum":" 423","line":" .description = description,"}, {"lineNum":" 424","line":" };"}, {"lineNum":" 425","line":" if ((self.available_options_map.put(name, available_option) catch unreachable) != null) {"}, {"lineNum":" 426","line":" panic(\"Option \'{}\' declared twice\", .{name});"}, {"lineNum":" 427","line":" }"}, {"lineNum":" 428","line":" self.available_options_list.append(available_option) catch unreachable;"}, {"lineNum":" 429","line":""}, {"lineNum":" 430","line":" const entry = self.user_input_options.get(name) orelse return null;"}, {"lineNum":" 431","line":" entry.value.used = true;"}, {"lineNum":" 432","line":" switch (type_id) {"}, {"lineNum":" 433","line":" TypeId.Bool => switch (entry.value.value) {"}, {"lineNum":" 434","line":" UserValue.Flag => return true,"}, {"lineNum":" 435","line":" UserValue.Scalar => |s| {"}, {"lineNum":" 436","line":" if (mem.eql(u8, s, \"true\")) {"}, {"lineNum":" 437","line":" return true;"}, {"lineNum":" 438","line":" } else if (mem.eql(u8, s, \"false\")) {"}, {"lineNum":" 439","line":" return false;"}, {"lineNum":" 440","line":" } else {"}, {"lineNum":" 441","line":" warn(\"Expected -D{} to be a boolean, but received \'{}\'\\n\", .{ name, s });"}, {"lineNum":" 442","line":" self.markInvalidUserInput();"}, {"lineNum":" 443","line":" return null;"}, {"lineNum":" 444","line":" }"}, {"lineNum":" 445","line":" },"}, {"lineNum":" 446","line":" UserValue.List => {"}, {"lineNum":" 447","line":" warn(\"Expected -D{} to be a boolean, but received a list.\\n\", .{name});"}, {"lineNum":" 448","line":" self.markInvalidUserInput();"}, {"lineNum":" 449","line":" return null;"}, {"lineNum":" 450","line":" },"}, {"lineNum":" 451","line":" },"}, {"lineNum":" 452","line":" TypeId.Int => panic(\"TODO integer options to build script\", .{}),"}, {"lineNum":" 453","line":" TypeId.Float => panic(\"TODO float options to build script\", .{}),"}, {"lineNum":" 454","line":" TypeId.Enum => switch (entry.value.value) {"}, {"lineNum":" 455","line":" UserValue.Flag => {"}, {"lineNum":" 456","line":" warn(\"Expected -D{} to be a string, but received a boolean.\\n\", .{name});"}, {"lineNum":" 457","line":" self.markInvalidUserInput();"}, {"lineNum":" 458","line":" return null;"}, {"lineNum":" 459","line":" },"}, {"lineNum":" 460","line":" UserValue.Scalar => |s| {"}, {"lineNum":" 461","line":" if (std.meta.stringToEnum(T, s)) |enum_lit| {"}, {"lineNum":" 462","line":" return enum_lit;"}, {"lineNum":" 463","line":" } else {"}, {"lineNum":" 464","line":" warn(\"Expected -D{} to be of type {}.\\n\", .{ name, @typeName(T) });"}, {"lineNum":" 465","line":" self.markInvalidUserInput();"}, {"lineNum":" 466","line":" return null;"}, {"lineNum":" 467","line":" }"}, {"lineNum":" 468","line":" },"}, {"lineNum":" 469","line":" UserValue.List => {"}, {"lineNum":" 470","line":" warn(\"Expected -D{} to be a string, but received a list.\\n\", .{name});"}, {"lineNum":" 471","line":" self.markInvalidUserInput();"}, {"lineNum":" 472","line":" return null;"}, {"lineNum":" 473","line":" },"}, {"lineNum":" 474","line":" },"}, {"lineNum":" 475","line":" TypeId.String => switch (entry.value.value) {"}, {"lineNum":" 476","line":" UserValue.Flag => {"}, {"lineNum":" 477","line":" warn(\"Expected -D{} to be a string, but received a boolean.\\n\", .{name});"}, {"lineNum":" 478","line":" self.markInvalidUserInput();"}, {"lineNum":" 479","line":" return null;"}, {"lineNum":" 480","line":" },"}, {"lineNum":" 481","line":" UserValue.List => {"}, {"lineNum":" 482","line":" warn(\"Expected -D{} to be a string, but received a list.\\n\", .{name});"}, {"lineNum":" 483","line":" self.markInvalidUserInput();"}, {"lineNum":" 484","line":" return null;"}, {"lineNum":" 485","line":" },"}, {"lineNum":" 486","line":" UserValue.Scalar => |s| return s,"}, {"lineNum":" 487","line":" },"}, {"lineNum":" 488","line":" TypeId.List => switch (entry.value.value) {"}, {"lineNum":" 489","line":" UserValue.Flag => {"}, {"lineNum":" 490","line":" warn(\"Expected -D{} to be a list, but received a boolean.\\n\", .{name});"}, {"lineNum":" 491","line":" self.markInvalidUserInput();"}, {"lineNum":" 492","line":" return null;"}, {"lineNum":" 493","line":" },"}, {"lineNum":" 494","line":" UserValue.Scalar => |s| return &[_][]const u8{s},"}, {"lineNum":" 495","line":" UserValue.List => |lst| return lst.span(),"}, {"lineNum":" 496","line":" },"}, {"lineNum":" 497","line":" }"}, {"lineNum":" 498","line":" }"}, {"lineNum":" 499","line":""}, {"lineNum":" 500","line":" pub fn step(self: *Builder, name: []const u8, description: []const u8) *Step {"}, {"lineNum":" 501","line":" const step_info = self.allocator.create(TopLevelStep) catch unreachable;"}, {"lineNum":" 502","line":" step_info.* = TopLevelStep{"}, {"lineNum":" 503","line":" .step = Step.initNoOp(name, self.allocator),"}, {"lineNum":" 504","line":" .description = description,"}, {"lineNum":" 505","line":" };"}, {"lineNum":" 506","line":" self.top_level_steps.append(step_info) catch unreachable;"}, {"lineNum":" 507","line":" return &step_info.step;"}, {"lineNum":" 508","line":" }"}, {"lineNum":" 509","line":""}, {"lineNum":" 510","line":" /// This provides the -Drelease option to the build user and does not give them the choice."}, {"lineNum":" 511","line":" pub fn setPreferredReleaseMode(self: *Builder, mode: builtin.Mode) void {"}, {"lineNum":" 512","line":" if (self.release_mode != null) {"}, {"lineNum":" 513","line":" @panic(\"setPreferredReleaseMode must be called before standardReleaseOptions and may not be called twice\");"}, {"lineNum":" 514","line":" }"}, {"lineNum":" 515","line":" const description = self.fmt(\"create a release build ({})\", .{@tagName(mode)});"}, {"lineNum":" 516","line":" self.is_release = self.option(bool, \"release\", description) orelse false;"}, {"lineNum":" 517","line":" self.release_mode = if (self.is_release) mode else builtin.Mode.Debug;"}, {"lineNum":" 518","line":" }"}, {"lineNum":" 519","line":""}, {"lineNum":" 520","line":" /// If you call this without first calling `setPreferredReleaseMode` then it gives the build user"}, {"lineNum":" 521","line":" /// the choice of what kind of release."}, {"lineNum":" 522","line":" pub fn standardReleaseOptions(self: *Builder) builtin.Mode {"}, {"lineNum":" 523","line":" if (self.release_mode) |mode| return mode;"}, {"lineNum":" 524","line":""}, {"lineNum":" 525","line":" const release_safe = self.option(bool, \"release-safe\", \"optimizations on and safety on\") orelse false;"}, {"lineNum":" 526","line":" const release_fast = self.option(bool, \"release-fast\", \"optimizations on and safety off\") orelse false;"}, {"lineNum":" 527","line":" const release_small = self.option(bool, \"release-small\", \"size optimizations on and safety off\") orelse false;"}, {"lineNum":" 528","line":""}, {"lineNum":" 529","line":" const mode = if (release_safe and !release_fast and !release_small)"}, {"lineNum":" 530","line":" builtin.Mode.ReleaseSafe"}, {"lineNum":" 531","line":" else if (release_fast and !release_safe and !release_small)"}, {"lineNum":" 532","line":" builtin.Mode.ReleaseFast"}, {"lineNum":" 533","line":" else if (release_small and !release_fast and !release_safe)"}, {"lineNum":" 534","line":" builtin.Mode.ReleaseSmall"}, {"lineNum":" 535","line":" else if (!release_fast and !release_safe and !release_small)"}, {"lineNum":" 536","line":" builtin.Mode.Debug"}, {"lineNum":" 537","line":" else x: {"}, {"lineNum":" 538","line":" warn(\"Multiple release modes (of -Drelease-safe, -Drelease-fast and -Drelease-small)\", .{});"}, {"lineNum":" 539","line":" self.markInvalidUserInput();"}, {"lineNum":" 540","line":" break :x builtin.Mode.Debug;"}, {"lineNum":" 541","line":" };"}, {"lineNum":" 542","line":" self.is_release = mode != .Debug;"}, {"lineNum":" 543","line":" self.release_mode = mode;"}, {"lineNum":" 544","line":" return mode;"}, {"lineNum":" 545","line":" }"}, {"lineNum":" 546","line":""}, {"lineNum":" 547","line":" pub const StandardTargetOptionsArgs = struct {"}, {"lineNum":" 548","line":" whitelist: ?[]const CrossTarget = null,"}, {"lineNum":" 549","line":""}, {"lineNum":" 550","line":" default_target: CrossTarget = CrossTarget{},"}, {"lineNum":" 551","line":" };"}, {"lineNum":" 552","line":""}, {"lineNum":" 553","line":" /// Exposes standard `zig build` options for choosing a target."}, {"lineNum":" 554","line":" pub fn standardTargetOptions(self: *Builder, args: StandardTargetOptionsArgs) CrossTarget {"}, {"lineNum":" 555","line":" const triple = self.option("}, {"lineNum":" 556","line":" []const u8,"}, {"lineNum":" 557","line":" \"target\","}, {"lineNum":" 558","line":" \"The CPU architecture, OS, and ABI to build for.\","}, {"lineNum":" 559","line":" ) orelse return args.default_target;"}, {"lineNum":" 560","line":""}, {"lineNum":" 561","line":" // TODO add cpu and features as part of the target triple"}, {"lineNum":" 562","line":""}, {"lineNum":" 563","line":" var diags: CrossTarget.ParseOptions.Diagnostics = .{};"}, {"lineNum":" 564","line":" const selected_target = CrossTarget.parse(.{"}, {"lineNum":" 565","line":" .arch_os_abi = triple,"}, {"lineNum":" 566","line":" .diagnostics = &diags,"}, {"lineNum":" 567","line":" }) catch |err| switch (err) {"}, {"lineNum":" 568","line":" error.UnknownCpuModel => {"}, {"lineNum":" 569","line":" std.debug.warn(\"Unknown CPU: \'{}\'\\nAvailable CPUs for architecture \'{}\':\\n\", .{"}, {"lineNum":" 570","line":" diags.cpu_name.?,"}, {"lineNum":" 571","line":" @tagName(diags.arch.?),"}, {"lineNum":" 572","line":" });"}, {"lineNum":" 573","line":" for (diags.arch.?.allCpuModels()) |cpu| {"}, {"lineNum":" 574","line":" std.debug.warn(\" {}\\n\", .{cpu.name});"}, {"lineNum":" 575","line":" }"}, {"lineNum":" 576","line":" process.exit(1);"}, {"lineNum":" 577","line":" },"}, {"lineNum":" 578","line":" error.UnknownCpuFeature => {"}, {"lineNum":" 579","line":" std.debug.warn("}, {"lineNum":" 580","line":" \\\\Unknown CPU feature: \'{}\'"}, {"lineNum":" 581","line":" \\\\Available CPU features for architecture \'{}\':"}, {"lineNum":" 582","line":" \\\\"}, {"lineNum":" 583","line":" , .{"}, {"lineNum":" 584","line":" diags.unknown_feature_name,"}, {"lineNum":" 585","line":" @tagName(diags.arch.?),"}, {"lineNum":" 586","line":" });"}, {"lineNum":" 587","line":" for (diags.arch.?.allFeaturesList()) |feature| {"}, {"lineNum":" 588","line":" std.debug.warn(\" {}: {}\\n\", .{ feature.name, feature.description });"}, {"lineNum":" 589","line":" }"}, {"lineNum":" 590","line":" process.exit(1);"}, {"lineNum":" 591","line":" },"}, {"lineNum":" 592","line":" error.UnknownOperatingSystem => {"}, {"lineNum":" 593","line":" std.debug.warn("}, {"lineNum":" 594","line":" \\\\Unknown OS: \'{}\'"}, {"lineNum":" 595","line":" \\\\Available operating systems:"}, {"lineNum":" 596","line":" \\\\"}, {"lineNum":" 597","line":" , .{diags.os_name});"}, {"lineNum":" 598","line":" inline for (std.meta.fields(std.Target.Os.Tag)) |field| {"}, {"lineNum":" 599","line":" std.debug.warn(\" {}\\n\", .{field.name});"}, {"lineNum":" 600","line":" }"}, {"lineNum":" 601","line":" process.exit(1);"}, {"lineNum":" 602","line":" },"}, {"lineNum":" 603","line":" else => |e| {"}, {"lineNum":" 604","line":" std.debug.warn(\"Unable to parse target \'{}\': {}\\n\", .{ triple, @errorName(e) });"}, {"lineNum":" 605","line":" process.exit(1);"}, {"lineNum":" 606","line":" },"}, {"lineNum":" 607","line":" };"}, {"lineNum":" 608","line":""}, {"lineNum":" 609","line":" const selected_canonicalized_triple = selected_target.zigTriple(self.allocator) catch unreachable;"}, {"lineNum":" 610","line":""}, {"lineNum":" 611","line":" if (args.whitelist) |list| whitelist_check: {"}, {"lineNum":" 612","line":" // Make sure it\'s a match of one of the list."}, {"lineNum":" 613","line":" for (list) |t| {"}, {"lineNum":" 614","line":" const t_triple = t.zigTriple(self.allocator) catch unreachable;"}, {"lineNum":" 615","line":" if (mem.eql(u8, t_triple, selected_canonicalized_triple)) {"}, {"lineNum":" 616","line":" break :whitelist_check;"}, {"lineNum":" 617","line":" }"}, {"lineNum":" 618","line":" }"}, {"lineNum":" 619","line":" std.debug.warn(\"Chosen target \'{}\' does not match one of the supported targets:\\n\", .{"}, {"lineNum":" 620","line":" selected_canonicalized_triple,"}, {"lineNum":" 621","line":" });"}, {"lineNum":" 622","line":" for (list) |t| {"}, {"lineNum":" 623","line":" const t_triple = t.zigTriple(self.allocator) catch unreachable;"}, {"lineNum":" 624","line":" std.debug.warn(\" {}\\n\", .{t_triple});"}, {"lineNum":" 625","line":" }"}, {"lineNum":" 626","line":" // TODO instead of process exit, return error and have a zig build flag implemented by"}, {"lineNum":" 627","line":" // the build runner that turns process exits into error return traces"}, {"lineNum":" 628","line":" process.exit(1);"}, {"lineNum":" 629","line":" }"}, {"lineNum":" 630","line":""}, {"lineNum":" 631","line":" return selected_target;"}, {"lineNum":" 632","line":" }"}, {"lineNum":" 633","line":""}, {"lineNum":" 634","line":" pub fn addUserInputOption(self: *Builder, name: []const u8, value: []const u8) !bool {"}, {"lineNum":" 635","line":" const gop = try self.user_input_options.getOrPut(name);"}, {"lineNum":" 636","line":" if (!gop.found_existing) {"}, {"lineNum":" 637","line":" gop.kv.value = UserInputOption{"}, {"lineNum":" 638","line":" .name = name,"}, {"lineNum":" 639","line":" .value = UserValue{ .Scalar = value },"}, {"lineNum":" 640","line":" .used = false,"}, {"lineNum":" 641","line":" };"}, {"lineNum":" 642","line":" return false;"}, {"lineNum":" 643","line":" }"}, {"lineNum":" 644","line":""}, {"lineNum":" 645","line":" // option already exists"}, {"lineNum":" 646","line":" switch (gop.kv.value.value) {"}, {"lineNum":" 647","line":" UserValue.Scalar => |s| {"}, {"lineNum":" 648","line":" // turn it into a list"}, {"lineNum":" 649","line":" var list = ArrayList([]const u8).init(self.allocator);"}, {"lineNum":" 650","line":" list.append(s) catch unreachable;"}, {"lineNum":" 651","line":" list.append(value) catch unreachable;"}, {"lineNum":" 652","line":" _ = self.user_input_options.put(name, UserInputOption{"}, {"lineNum":" 653","line":" .name = name,"}, {"lineNum":" 654","line":" .value = UserValue{ .List = list },"}, {"lineNum":" 655","line":" .used = false,"}, {"lineNum":" 656","line":" }) catch unreachable;"}, {"lineNum":" 657","line":" },"}, {"lineNum":" 658","line":" UserValue.List => |*list| {"}, {"lineNum":" 659","line":" // append to the list"}, {"lineNum":" 660","line":" list.append(value) catch unreachable;"}, {"lineNum":" 661","line":" _ = self.user_input_options.put(name, UserInputOption{"}, {"lineNum":" 662","line":" .name = name,"}, {"lineNum":" 663","line":" .value = UserValue{ .List = list.* },"}, {"lineNum":" 664","line":" .used = false,"}, {"lineNum":" 665","line":" }) catch unreachable;"}, {"lineNum":" 666","line":" },"}, {"lineNum":" 667","line":" UserValue.Flag => {"}, {"lineNum":" 668","line":" warn(\"Option \'-D{}={}\' conflicts with flag \'-D{}\'.\\n\", .{ name, value, name });"}, {"lineNum":" 669","line":" return true;"}, {"lineNum":" 670","line":" },"}, {"lineNum":" 671","line":" }"}, {"lineNum":" 672","line":" return false;"}, {"lineNum":" 673","line":" }"}, {"lineNum":" 674","line":""}, {"lineNum":" 675","line":" pub fn addUserInputFlag(self: *Builder, name: []const u8) !bool {"}, {"lineNum":" 676","line":" const gop = try self.user_input_options.getOrPut(name);"}, {"lineNum":" 677","line":" if (!gop.found_existing) {"}, {"lineNum":" 678","line":" gop.kv.value = UserInputOption{"}, {"lineNum":" 679","line":" .name = name,"}, {"lineNum":" 680","line":" .value = UserValue{ .Flag = {} },"}, {"lineNum":" 681","line":" .used = false,"}, {"lineNum":" 682","line":" };"}, {"lineNum":" 683","line":" return false;"}, {"lineNum":" 684","line":" }"}, {"lineNum":" 685","line":""}, {"lineNum":" 686","line":" // option already exists"}, {"lineNum":" 687","line":" switch (gop.kv.value.value) {"}, {"lineNum":" 688","line":" UserValue.Scalar => |s| {"}, {"lineNum":" 689","line":" warn(\"Flag \'-D{}\' conflicts with option \'-D{}={}\'.\\n\", .{ name, name, s });"}, {"lineNum":" 690","line":" return true;"}, {"lineNum":" 691","line":" },"}, {"lineNum":" 692","line":" UserValue.List => {"}, {"lineNum":" 693","line":" warn(\"Flag \'-D{}\' conflicts with multiple options of the same name.\\n\", .{name});"}, {"lineNum":" 694","line":" return true;"}, {"lineNum":" 695","line":" },"}, {"lineNum":" 696","line":" UserValue.Flag => {},"}, {"lineNum":" 697","line":" }"}, {"lineNum":" 698","line":" return false;"}, {"lineNum":" 699","line":" }"}, {"lineNum":" 700","line":""}, {"lineNum":" 701","line":" fn typeToEnum(comptime T: type) TypeId {"}, {"lineNum":" 702","line":" return switch (@typeInfo(T)) {"}, {"lineNum":" 703","line":" .Int => .Int,"}, {"lineNum":" 704","line":" .Float => .Float,"}, {"lineNum":" 705","line":" .Bool => .Bool,"}, {"lineNum":" 706","line":" .Enum => .Enum,"}, {"lineNum":" 707","line":" else => switch (T) {"}, {"lineNum":" 708","line":" []const u8 => .String,"}, {"lineNum":" 709","line":" []const []const u8 => .List,"}, {"lineNum":" 710","line":" else => @compileError(\"Unsupported type: \" ++ @typeName(T)),"}, {"lineNum":" 711","line":" },"}, {"lineNum":" 712","line":" };"}, {"lineNum":" 713","line":" }"}, {"lineNum":" 714","line":""}, {"lineNum":" 715","line":" fn markInvalidUserInput(self: *Builder) void {"}, {"lineNum":" 716","line":" self.invalid_user_input = true;"}, {"lineNum":" 717","line":" }"}, {"lineNum":" 718","line":""}, {"lineNum":" 719","line":" pub fn typeIdName(id: TypeId) []const u8 {"}, {"lineNum":" 720","line":" return switch (id) {"}, {"lineNum":" 721","line":" .Bool => \"bool\","}, {"lineNum":" 722","line":" .Int => \"int\","}, {"lineNum":" 723","line":" .Float => \"float\","}, {"lineNum":" 724","line":" .Enum => \"enum\","}, {"lineNum":" 725","line":" .String => \"string\","}, {"lineNum":" 726","line":" .List => \"list\","}, {"lineNum":" 727","line":" };"}, {"lineNum":" 728","line":" }"}, {"lineNum":" 729","line":""}, {"lineNum":" 730","line":" pub fn validateUserInputDidItFail(self: *Builder) bool {"}, {"lineNum":" 731","line":" // make sure all args are used"}, {"lineNum":" 732","line":" var it = self.user_input_options.iterator();"}, {"lineNum":" 733","line":" while (true) {"}, {"lineNum":" 734","line":" const entry = it.next() orelse break;"}, {"lineNum":" 735","line":" if (!entry.value.used) {"}, {"lineNum":" 736","line":" warn(\"Invalid option: -D{}\\n\\n\", .{entry.key});"}, {"lineNum":" 737","line":" self.markInvalidUserInput();"}, {"lineNum":" 738","line":" }"}, {"lineNum":" 739","line":" }"}, {"lineNum":" 740","line":""}, {"lineNum":" 741","line":" return self.invalid_user_input;"}, {"lineNum":" 742","line":" }"}, {"lineNum":" 743","line":""}, {"lineNum":" 744","line":" pub fn spawnChild(self: *Builder, argv: []const []const u8) !void {"}, {"lineNum":" 745","line":" return self.spawnChildEnvMap(null, self.env_map, argv);"}, {"lineNum":" 746","line":" }"}, {"lineNum":" 747","line":""}, {"lineNum":" 748","line":" fn printCmd(cwd: ?[]const u8, argv: []const []const u8) void {"}, {"lineNum":" 749","line":" if (cwd) |yes_cwd| warn(\"cd {} && \", .{yes_cwd});"}, {"lineNum":" 750","line":" for (argv) |arg| {"}, {"lineNum":" 751","line":" warn(\"{} \", .{arg});"}, {"lineNum":" 752","line":" }"}, {"lineNum":" 753","line":" warn(\"\\n\", .{});"}, {"lineNum":" 754","line":" }"}, {"lineNum":" 755","line":""}, {"lineNum":" 756","line":" fn spawnChildEnvMap(self: *Builder, cwd: ?[]const u8, env_map: *const BufMap, argv: []const []const u8) !void {"}, {"lineNum":" 757","line":" if (self.verbose) {"}, {"lineNum":" 758","line":" printCmd(cwd, argv);"}, {"lineNum":" 759","line":" }"}, {"lineNum":" 760","line":""}, {"lineNum":" 761","line":" const child = std.ChildProcess.init(argv, self.allocator) catch unreachable;"}, {"lineNum":" 762","line":" defer child.deinit();"}, {"lineNum":" 763","line":""}, {"lineNum":" 764","line":" child.cwd = cwd;"}, {"lineNum":" 765","line":" child.env_map = env_map;"}, {"lineNum":" 766","line":""}, {"lineNum":" 767","line":" const term = child.spawnAndWait() catch |err| {"}, {"lineNum":" 768","line":" warn(\"Unable to spawn {}: {}\\n\", .{ argv[0], @errorName(err) });"}, {"lineNum":" 769","line":" return err;"}, {"lineNum":" 770","line":" };"}, {"lineNum":" 771","line":""}, {"lineNum":" 772","line":" switch (term) {"}, {"lineNum":" 773","line":" .Exited => |code| {"}, {"lineNum":" 774","line":" if (code != 0) {"}, {"lineNum":" 775","line":" warn(\"The following command exited with error code {}:\\n\", .{code});"}, {"lineNum":" 776","line":" printCmd(cwd, argv);"}, {"lineNum":" 777","line":" return error.UncleanExit;"}, {"lineNum":" 778","line":" }"}, {"lineNum":" 779","line":" },"}, {"lineNum":" 780","line":" else => {"}, {"lineNum":" 781","line":" warn(\"The following command terminated unexpectedly:\\n\", .{});"}, {"lineNum":" 782","line":" printCmd(cwd, argv);"}, {"lineNum":" 783","line":""}, {"lineNum":" 784","line":" return error.UncleanExit;"}, {"lineNum":" 785","line":" },"}, {"lineNum":" 786","line":" }"}, {"lineNum":" 787","line":" }"}, {"lineNum":" 788","line":""}, {"lineNum":" 789","line":" pub fn makePath(self: *Builder, path: []const u8) !void {"}, {"lineNum":" 790","line":" fs.cwd().makePath(self.pathFromRoot(path)) catch |err| {"}, {"lineNum":" 791","line":" warn(\"Unable to create path {}: {}\\n\", .{ path, @errorName(err) });"}, {"lineNum":" 792","line":" return err;"}, {"lineNum":" 793","line":" };"}, {"lineNum":" 794","line":" }"}, {"lineNum":" 795","line":""}, {"lineNum":" 796","line":" pub fn installArtifact(self: *Builder, artifact: *LibExeObjStep) void {"}, {"lineNum":" 797","line":" self.getInstallStep().dependOn(&self.addInstallArtifact(artifact).step);"}, {"lineNum":" 798","line":" }"}, {"lineNum":" 799","line":""}, {"lineNum":" 800","line":" pub fn addInstallArtifact(self: *Builder, artifact: *LibExeObjStep) *InstallArtifactStep {"}, {"lineNum":" 801","line":" return InstallArtifactStep.create(self, artifact);"}, {"lineNum":" 802","line":" }"}, {"lineNum":" 803","line":""}, {"lineNum":" 804","line":" ///`dest_rel_path` is relative to prefix path"}, {"lineNum":" 805","line":" pub fn installFile(self: *Builder, src_path: []const u8, dest_rel_path: []const u8) void {"}, {"lineNum":" 806","line":" self.getInstallStep().dependOn(&self.addInstallFileWithDir(src_path, .Prefix, dest_rel_path).step);"}, {"lineNum":" 807","line":" }"}, {"lineNum":" 808","line":""}, {"lineNum":" 809","line":" pub fn installDirectory(self: *Builder, options: InstallDirectoryOptions) void {"}, {"lineNum":" 810","line":" self.getInstallStep().dependOn(&self.addInstallDirectory(options).step);"}, {"lineNum":" 811","line":" }"}, {"lineNum":" 812","line":""}, {"lineNum":" 813","line":" ///`dest_rel_path` is relative to bin path"}, {"lineNum":" 814","line":" pub fn installBinFile(self: *Builder, src_path: []const u8, dest_rel_path: []const u8) void {"}, {"lineNum":" 815","line":" self.getInstallStep().dependOn(&self.addInstallFileWithDir(src_path, .Bin, dest_rel_path).step);"}, {"lineNum":" 816","line":" }"}, {"lineNum":" 817","line":""}, {"lineNum":" 818","line":" ///`dest_rel_path` is relative to lib path"}, {"lineNum":" 819","line":" pub fn installLibFile(self: *Builder, src_path: []const u8, dest_rel_path: []const u8) void {"}, {"lineNum":" 820","line":" self.getInstallStep().dependOn(&self.addInstallFileWithDir(src_path, .Lib, dest_rel_path).step);"}, {"lineNum":" 821","line":" }"}, {"lineNum":" 822","line":""}, {"lineNum":" 823","line":" pub fn installRaw(self: *Builder, artifact: *LibExeObjStep, dest_filename: []const u8) void {"}, {"lineNum":" 824","line":" self.getInstallStep().dependOn(&self.addInstallRaw(artifact, dest_filename).step);"}, {"lineNum":" 825","line":" }"}, {"lineNum":" 826","line":""}, {"lineNum":" 827","line":" ///`dest_rel_path` is relative to install prefix path"}, {"lineNum":" 828","line":" pub fn addInstallFile(self: *Builder, src_path: []const u8, dest_rel_path: []const u8) *InstallFileStep {"}, {"lineNum":" 829","line":" return self.addInstallFileWithDir(src_path, .Prefix, dest_rel_path);"}, {"lineNum":" 830","line":" }"}, {"lineNum":" 831","line":""}, {"lineNum":" 832","line":" ///`dest_rel_path` is relative to bin path"}, {"lineNum":" 833","line":" pub fn addInstallBinFile(self: *Builder, src_path: []const u8, dest_rel_path: []const u8) *InstallFileStep {"}, {"lineNum":" 834","line":" return self.addInstallFileWithDir(src_path, .Bin, dest_rel_path);"}, {"lineNum":" 835","line":" }"}, {"lineNum":" 836","line":""}, {"lineNum":" 837","line":" ///`dest_rel_path` is relative to lib path"}, {"lineNum":" 838","line":" pub fn addInstallLibFile(self: *Builder, src_path: []const u8, dest_rel_path: []const u8) *InstallFileStep {"}, {"lineNum":" 839","line":" return self.addInstallFileWithDir(src_path, .Lib, dest_rel_path);"}, {"lineNum":" 840","line":" }"}, {"lineNum":" 841","line":""}, {"lineNum":" 842","line":" pub fn addInstallRaw(self: *Builder, artifact: *LibExeObjStep, dest_filename: []const u8) *InstallRawStep {"}, {"lineNum":" 843","line":" return InstallRawStep.create(self, artifact, dest_filename);"}, {"lineNum":" 844","line":" }"}, {"lineNum":" 845","line":""}, {"lineNum":" 846","line":" pub fn addInstallFileWithDir("}, {"lineNum":" 847","line":" self: *Builder,"}, {"lineNum":" 848","line":" src_path: []const u8,"}, {"lineNum":" 849","line":" install_dir: InstallDir,"}, {"lineNum":" 850","line":" dest_rel_path: []const u8,"}, {"lineNum":" 851","line":" ) *InstallFileStep {"}, {"lineNum":" 852","line":" const install_step = self.allocator.create(InstallFileStep) catch unreachable;"}, {"lineNum":" 853","line":" install_step.* = InstallFileStep.init(self, src_path, install_dir, dest_rel_path);"}, {"lineNum":" 854","line":" return install_step;"}, {"lineNum":" 855","line":" }"}, {"lineNum":" 856","line":""}, {"lineNum":" 857","line":" pub fn addInstallDirectory(self: *Builder, options: InstallDirectoryOptions) *InstallDirStep {"}, {"lineNum":" 858","line":" const install_step = self.allocator.create(InstallDirStep) catch unreachable;"}, {"lineNum":" 859","line":" install_step.* = InstallDirStep.init(self, options);"}, {"lineNum":" 860","line":" return install_step;"}, {"lineNum":" 861","line":" }"}, {"lineNum":" 862","line":""}, {"lineNum":" 863","line":" pub fn pushInstalledFile(self: *Builder, dir: InstallDir, dest_rel_path: []const u8) void {"}, {"lineNum":" 864","line":" self.installed_files.append(InstalledFile{"}, {"lineNum":" 865","line":" .dir = dir,"}, {"lineNum":" 866","line":" .path = dest_rel_path,"}, {"lineNum":" 867","line":" }) catch unreachable;"}, {"lineNum":" 868","line":" }"}, {"lineNum":" 869","line":""}, {"lineNum":" 870","line":" pub fn updateFile(self: *Builder, source_path: []const u8, dest_path: []const u8) !void {"}, {"lineNum":" 871","line":" if (self.verbose) {"}, {"lineNum":" 872","line":" warn(\"cp {} {} \", .{ source_path, dest_path });"}, {"lineNum":" 873","line":" }"}, {"lineNum":" 874","line":" const cwd = fs.cwd();"}, {"lineNum":" 875","line":" const prev_status = try fs.Dir.updateFile(cwd, source_path, cwd, dest_path, .{});"}, {"lineNum":" 876","line":" if (self.verbose) switch (prev_status) {"}, {"lineNum":" 877","line":" .stale => warn(\"# installed\\n\", .{}),"}, {"lineNum":" 878","line":" .fresh => warn(\"# up-to-date\\n\", .{}),"}, {"lineNum":" 879","line":" };"}, {"lineNum":" 880","line":" }"}, {"lineNum":" 881","line":""}, {"lineNum":" 882","line":" pub fn pathFromRoot(self: *Builder, rel_path: []const u8) []u8 {"}, {"lineNum":" 883","line":" return fs.path.resolve(self.allocator, &[_][]const u8{ self.build_root, rel_path }) catch unreachable;"}, {"lineNum":" 884","line":" }"}, {"lineNum":" 885","line":""}, {"lineNum":" 886","line":" pub fn fmt(self: *Builder, comptime format: []const u8, args: var) []u8 {","class":"lineNoCov","hits":"0","possible_hits":"3",}, {"lineNum":" 887","line":" return fmt_lib.allocPrint(self.allocator, format, args) catch unreachable;","class":"lineNoCov","hits":"0","possible_hits":"3",}, {"lineNum":" 888","line":" }"}, {"lineNum":" 889","line":""}, {"lineNum":" 890","line":" pub fn findProgram(self: *Builder, names: []const []const u8, paths: []const []const u8) ![]const u8 {","class":"lineCov","hits":"1","order":"4444","possible_hits":"1",}, {"lineNum":" 891","line":" // TODO report error for ambiguous situations"}, {"lineNum":" 892","line":" const exe_extension = @as(CrossTarget, .{}).exeFileExt();","class":"lineCov","hits":"1","order":"4445","possible_hits":"1",}, {"lineNum":" 893","line":" for (self.search_prefixes.span()) |search_prefix| {","class":"linePartCov","hits":"1","order":"4459","possible_hits":"2",}, {"lineNum":" 894","line":" for (names) |name| {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 895","line":" if (fs.path.isAbsolute(name)) {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 896","line":" return name;","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 897","line":" }"}, {"lineNum":" 898","line":" const full_path = try fs.path.join(self.allocator, &[_][]const u8{","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 899","line":" search_prefix,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 900","line":" \"bin\",","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 901","line":" self.fmt(\"{}{}\", .{ name, exe_extension }),","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 902","line":" });"}, {"lineNum":" 903","line":" return fs.realpathAlloc(self.allocator, full_path) catch continue;","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 904","line":" }"}, {"lineNum":" 905","line":" }"}, {"lineNum":" 906","line":" if (self.env_map.get(\"PATH\")) |PATH| {","class":"lineCov","hits":"2","order":"4460","possible_hits":"2",}, {"lineNum":" 907","line":" for (names) |name| {","class":"linePartCov","hits":"1","order":"4462","possible_hits":"2",}, {"lineNum":" 908","line":" if (fs.path.isAbsolute(name)) {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 909","line":" return name;","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 910","line":" }"}, {"lineNum":" 911","line":" var it = mem.tokenize(PATH, &[_]u8{fs.path.delimiter});","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 912","line":" while (it.next()) |path| {","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 913","line":" const full_path = try fs.path.join(self.allocator, &[_][]const u8{","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 914","line":" path,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 915","line":" self.fmt(\"{}{}\", .{ name, exe_extension }),","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 916","line":" });"}, {"lineNum":" 917","line":" return fs.realpathAlloc(self.allocator, full_path) catch continue;","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 918","line":" }"}, {"lineNum":" 919","line":" }"}, {"lineNum":" 920","line":" }"}, {"lineNum":" 921","line":" for (names) |name| {","class":"linePartCov","hits":"1","order":"4463","possible_hits":"2",}, {"lineNum":" 922","line":" if (fs.path.isAbsolute(name)) {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 923","line":" return name;","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 924","line":" }"}, {"lineNum":" 925","line":" for (paths) |path| {","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 926","line":" const full_path = try fs.path.join(self.allocator, &[_][]const u8{","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 927","line":" path,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 928","line":" self.fmt(\"{}{}\", .{ name, exe_extension }),","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 929","line":" });"}, {"lineNum":" 930","line":" return fs.realpathAlloc(self.allocator, full_path) catch continue;","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 931","line":" }"}, {"lineNum":" 932","line":" }"}, {"lineNum":" 933","line":" return error.FileNotFound;","class":"lineCov","hits":"1","order":"4464","possible_hits":"1",}, {"lineNum":" 934","line":" }"}, {"lineNum":" 935","line":""}, {"lineNum":" 936","line":" pub fn execAllowFail("}, {"lineNum":" 937","line":" self: *Builder,"}, {"lineNum":" 938","line":" argv: []const []const u8,"}, {"lineNum":" 939","line":" out_code: *u8,"}, {"lineNum":" 940","line":" stderr_behavior: std.ChildProcess.StdIo,"}, {"lineNum":" 941","line":" ) ![]u8 {"}, {"lineNum":" 942","line":" assert(argv.len != 0);"}, {"lineNum":" 943","line":""}, {"lineNum":" 944","line":" const max_output_size = 400 * 1024;"}, {"lineNum":" 945","line":" const child = try std.ChildProcess.init(argv, self.allocator);"}, {"lineNum":" 946","line":" defer child.deinit();"}, {"lineNum":" 947","line":""}, {"lineNum":" 948","line":" child.stdin_behavior = .Ignore;"}, {"lineNum":" 949","line":" child.stdout_behavior = .Pipe;"}, {"lineNum":" 950","line":" child.stderr_behavior = stderr_behavior;"}, {"lineNum":" 951","line":""}, {"lineNum":" 952","line":" try child.spawn();"}, {"lineNum":" 953","line":""}, {"lineNum":" 954","line":" const stdout = try child.stdout.?.inStream().readAllAlloc(self.allocator, max_output_size);"}, {"lineNum":" 955","line":" errdefer self.allocator.free(stdout);"}, {"lineNum":" 956","line":""}, {"lineNum":" 957","line":" const term = try child.wait();"}, {"lineNum":" 958","line":" switch (term) {"}, {"lineNum":" 959","line":" .Exited => |code| {"}, {"lineNum":" 960","line":" if (code != 0) {"}, {"lineNum":" 961","line":" out_code.* = @truncate(u8, code);"}, {"lineNum":" 962","line":" return error.ExitCodeFailure;"}, {"lineNum":" 963","line":" }"}, {"lineNum":" 964","line":" return stdout;"}, {"lineNum":" 965","line":" },"}, {"lineNum":" 966","line":" .Signal, .Stopped, .Unknown => |code| {"}, {"lineNum":" 967","line":" out_code.* = @truncate(u8, code);"}, {"lineNum":" 968","line":" return error.ProcessTerminated;"}, {"lineNum":" 969","line":" },"}, {"lineNum":" 970","line":" }"}, {"lineNum":" 971","line":" }"}, {"lineNum":" 972","line":""}, {"lineNum":" 973","line":" pub fn execFromStep(self: *Builder, argv: []const []const u8, src_step: ?*Step) ![]u8 {"}, {"lineNum":" 974","line":" assert(argv.len != 0);"}, {"lineNum":" 975","line":""}, {"lineNum":" 976","line":" if (self.verbose) {"}, {"lineNum":" 977","line":" printCmd(null, argv);"}, {"lineNum":" 978","line":" }"}, {"lineNum":" 979","line":""}, {"lineNum":" 980","line":" var code: u8 = undefined;"}, {"lineNum":" 981","line":" return self.execAllowFail(argv, &code, .Inherit) catch |err| switch (err) {"}, {"lineNum":" 982","line":" error.FileNotFound => {"}, {"lineNum":" 983","line":" if (src_step) |s| warn(\"{}...\", .{s.name});"}, {"lineNum":" 984","line":" warn(\"Unable to spawn the following command: file not found\\n\", .{});"}, {"lineNum":" 985","line":" printCmd(null, argv);"}, {"lineNum":" 986","line":" std.os.exit(@truncate(u8, code));"}, {"lineNum":" 987","line":" },"}, {"lineNum":" 988","line":" error.ExitCodeFailure => {"}, {"lineNum":" 989","line":" if (src_step) |s| warn(\"{}...\", .{s.name});"}, {"lineNum":" 990","line":" warn(\"The following command exited with error code {}:\\n\", .{code});"}, {"lineNum":" 991","line":" printCmd(null, argv);"}, {"lineNum":" 992","line":" std.os.exit(@truncate(u8, code));"}, {"lineNum":" 993","line":" },"}, {"lineNum":" 994","line":" error.ProcessTerminated => {"}, {"lineNum":" 995","line":" if (src_step) |s| warn(\"{}...\", .{s.name});"}, {"lineNum":" 996","line":" warn(\"The following command terminated unexpectedly:\\n\", .{});"}, {"lineNum":" 997","line":" printCmd(null, argv);"}, {"lineNum":" 998","line":" std.os.exit(@truncate(u8, code));"}, {"lineNum":" 999","line":" },"}, {"lineNum":" 1000","line":" else => |e| return e,"}, {"lineNum":" 1001","line":" };"}, {"lineNum":" 1002","line":" }"}, {"lineNum":" 1003","line":""}, {"lineNum":" 1004","line":" pub fn exec(self: *Builder, argv: []const []const u8) ![]u8 {"}, {"lineNum":" 1005","line":" return self.execFromStep(argv, null);"}, {"lineNum":" 1006","line":" }"}, {"lineNum":" 1007","line":""}, {"lineNum":" 1008","line":" pub fn addSearchPrefix(self: *Builder, search_prefix: []const u8) void {"}, {"lineNum":" 1009","line":" self.search_prefixes.append(search_prefix) catch unreachable;"}, {"lineNum":" 1010","line":" }"}, {"lineNum":" 1011","line":""}, {"lineNum":" 1012","line":" pub fn getInstallPath(self: *Builder, dir: InstallDir, dest_rel_path: []const u8) []const u8 {","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1013","line":" const base_dir = switch (dir) {","class":"lineNoCov","hits":"0","possible_hits":"4",}, {"lineNum":" 1014","line":" .Prefix => self.install_path,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1015","line":" .Bin => self.exe_dir,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1016","line":" .Lib => self.lib_dir,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1017","line":" .Header => self.h_dir,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1018","line":" };"}, {"lineNum":" 1019","line":" return fs.path.resolve(","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 1020","line":" self.allocator,","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1021","line":" &[_][]const u8{ base_dir, dest_rel_path },","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1022","line":" ) catch unreachable;","class":"lineNoCov","hits":"0","possible_hits":"1",}, {"lineNum":" 1023","line":" }"}, {"lineNum":" 1024","line":""}, {"lineNum":" 1025","line":" fn execPkgConfigList(self: *Builder, out_code: *u8) ![]const PkgConfigPkg {"}, {"lineNum":" 1026","line":" const stdout = try self.execAllowFail(&[_][]const u8{ \"pkg-config\", \"--list-all\" }, out_code, .Ignore);"}, {"lineNum":" 1027","line":" var list = ArrayList(PkgConfigPkg).init(self.allocator);"}, {"lineNum":" 1028","line":" var line_it = mem.tokenize(stdout, \"\\r\\n\");"}, {"lineNum":" 1029","line":" while (line_it.next()) |line| {"}, {"lineNum":" 1030","line":" if (mem.trim(u8, line, \" \\t\").len == 0) continue;"}, {"lineNum":" 1031","line":" var tok_it = mem.tokenize(line, \" \\t\");"}, {"lineNum":" 1032","line":" try list.append(PkgConfigPkg{"}, {"lineNum":" 1033","line":" .name = tok_it.next() orelse return error.PkgConfigInvalidOutput,"}, {"lineNum":" 1034","line":" .desc = tok_it.rest(),"}, {"lineNum":" 1035","line":" });"}, {"lineNum":" 1036","line":" }"}, {"lineNum":" 1037","line":" return list.span();"}, {"lineNum":" 1038","line":" }"}, {"lineNum":" 1039","line":""}, {"lineNum":" 1040","line":" fn getPkgConfigList(self: *Builder) ![]const PkgConfigPkg {"}, {"lineNum":" 1041","line":" if (self.pkg_config_pkg_list) |res| {"}, {"lineNum":" 1042","line":" return res;"}, {"lineNum":" 1043","line":" }"}, {"lineNum":" 1044","line":" var code: u8 = undefined;"}, {"lineNum":" 1045","line":" if (self.execPkgConfigList(&code)) |list| {"}, {"lineNum":" 1046","line":" self.pkg_config_pkg_list = list;"}, {"lineNum":" 1047","line":" return list;"}, {"lineNum":" 1048","line":" } else |err| {"}, {"lineNum":" 1049","line":" const result = switch (err) {"}, {"lineNum":" 1050","line":" error.ProcessTerminated => error.PkgConfigCrashed,"}, {"lineNum":" 1051","line":" error.ExitCodeFailure => error.PkgConfigFailed,"}, {"lineNum":" 1052","line":" error.FileNotFound => error.PkgConfigNotInstalled,"}, {"lineNum":" 1053","line":" error.InvalidName => error.PkgConfigNotInstalled,"}, {"lineNum":" 1054","line":" error.PkgConfigInvalidOutput => error.PkgConfigInvalidOutput,"}, {"lineNum":" 1055","line":" else => return err,"}, {"lineNum":" 1056","line":" };"}, {"lineNum":" 1057","line":" self.pkg_config_pkg_list = result;"}, {"lineNum":" 1058","line":" return result;"}, {"lineNum":" 1059","line":" }"}, {"lineNum":" 1060","line":" }"}, {"lineNum":" 1061","line":"};"}, {"lineNum":" 1062","line":""}, {"lineNum":" 1063","line":"test \"builder.findProgram compiles\" {","class":"lineCov","hits":"3","order":"4202","possible_hits":"3",}, {"lineNum":" 1064","line":" if (builtin.os.tag == .wasi) return error.SkipZigTest;"}, {"lineNum":" 1065","line":""}, {"lineNum":" 1066","line":" var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);","class":"lineCov","hits":"1","order":"4203","possible_hits":"1",}, {"lineNum":" 1067","line":" defer arena.deinit();","class":"linePartCov","hits":"1","order":"4479","possible_hits":"2",}, {"lineNum":" 1068","line":""}, {"lineNum":" 1069","line":" const builder = try Builder.create(&arena.allocator, \"zig\", \"zig-cache\", \"zig-cache\");","class":"linePartCov","hits":"1","order":"4204","possible_hits":"2",}, {"lineNum":" 1070","line":" defer builder.destroy();","class":"lineCov","hits":"1","order":"4465","possible_hits":"1",}, {"lineNum":" 1071","line":" _ = builder.findProgram(&[_][]const u8{}, &[_][]const u8{}) catch null;","class":"lineCov","hits":"1","order":"4443","possible_hits":"1",}, {"lineNum":" 1072","line":"}"}, {"lineNum":" 1073","line":""}, {"lineNum":" 1074","line":"/// Deprecated. Use `std.builtin.Version`."}, {"lineNum":" 1075","line":"pub const Version = builtin.Version;"}, {"lineNum":" 1076","line":""}, {"lineNum":" 1077","line":"/// Deprecated. Use `std.zig.CrossTarget`."}, {"lineNum":" 1078","line":"pub const Target = std.zig.CrossTarget;"}, {"lineNum":" 1079","line":""}, {"lineNum":" 1080","line":"pub const Pkg = struct {"}, {"lineNum":" 1081","line":" name: []const u8,"}, {"lineNum":" 1082","line":" path: []const u8,"}, {"lineNum":" 1083","line":" dependencies: ?[]const Pkg = null,"}, {"lineNum":" 1084","line":"};"}, {"lineNum":" 1085","line":""}, {"lineNum":" 1086","line":"const CSourceFile = struct {"}, {"lineNum":" 1087","line":" source: FileSource,"}, {"lineNum":" 1088","line":" args: []const []const u8,"}, {"lineNum":" 1089","line":"};"}, {"lineNum":" 1090","line":""}, {"lineNum":" 1091","line":"fn isLibCLibrary(name: []const u8) bool {"}, {"lineNum":" 1092","line":" const libc_libraries = [_][]const u8{ \"c\", \"m\", \"dl\", \"rt\", \"pthread\" };"}, {"lineNum":" 1093","line":" for (libc_libraries) |libc_lib_name| {"}, {"lineNum":" 1094","line":" if (mem.eql(u8, name, libc_lib_name))"}, {"lineNum":" 1095","line":" return true;"}, {"lineNum":" 1096","line":" }"}, {"lineNum":" 1097","line":" return false;"}, {"lineNum":" 1098","line":"}"}, {"lineNum":" 1099","line":""}, {"lineNum":" 1100","line":"pub const FileSource = union(enum) {"}, {"lineNum":" 1101","line":" /// Relative to build root"}, {"lineNum":" 1102","line":" path: []const u8,"}, {"lineNum":" 1103","line":" write_file: struct {"}, {"lineNum":" 1104","line":" step: *WriteFileStep,"}, {"lineNum":" 1105","line":" basename: []const u8,"}, {"lineNum":" 1106","line":" },"}, {"lineNum":" 1107","line":" translate_c: *TranslateCStep,"}, {"lineNum":" 1108","line":""}, {"lineNum":" 1109","line":" pub fn addStepDependencies(self: FileSource, step: *Step) void {"}, {"lineNum":" 1110","line":" switch (self) {"}, {"lineNum":" 1111","line":" .path => {},"}, {"lineNum":" 1112","line":" .write_file => |wf| step.dependOn(&wf.step.step),"}, {"lineNum":" 1113","line":" .translate_c => |tc| step.dependOn(&tc.step),"}, {"lineNum":" 1114","line":" }"}, {"lineNum":" 1115","line":" }"}, {"lineNum":" 1116","line":""}, {"lineNum":" 1117","line":" /// Should only be called during make()"}, {"lineNum":" 1118","line":" pub fn getPath(self: FileSource, builder: *Builder) []const u8 {"}, {"lineNum":" 1119","line":" return switch (self) {"}, {"lineNum":" 1120","line":" .path => |p| builder.pathFromRoot(p),"}, {"lineNum":" 1121","line":" .write_file => |wf| wf.step.getOutputPath(wf.basename),"}, {"lineNum":" 1122","line":" .translate_c => |tc| tc.getOutputPath(),"}, {"lineNum":" 1123","line":" };"}, {"lineNum":" 1124","line":" }"}, {"lineNum":" 1125","line":"};"}, {"lineNum":" 1126","line":""}, {"lineNum":" 1127","line":"pub const LibExeObjStep = struct {"}, {"lineNum":" 1128","line":" step: Step,"}, {"lineNum":" 1129","line":" builder: *Builder,"}, {"lineNum":" 1130","line":" name: []const u8,"}, {"lineNum":" 1131","line":" target: CrossTarget = CrossTarget{},"}, {"lineNum":" 1132","line":" linker_script: ?[]const u8 = null,"}, {"lineNum":" 1133","line":" version_script: ?[]const u8 = null,"}, {"lineNum":" 1134","line":" out_filename: []const u8,"}, {"lineNum":" 1135","line":" is_dynamic: bool,"}, {"lineNum":" 1136","line":" version: Version,"}, {"lineNum":" 1137","line":" build_mode: builtin.Mode,"}, {"lineNum":" 1138","line":" kind: Kind,"}, {"lineNum":" 1139","line":" major_only_filename: []const u8,"}, {"lineNum":" 1140","line":" name_only_filename: []const u8,"}, {"lineNum":" 1141","line":" strip: bool,"}, {"lineNum":" 1142","line":" lib_paths: ArrayList([]const u8),"}, {"lineNum":" 1143","line":" framework_dirs: ArrayList([]const u8),"}, {"lineNum":" 1144","line":" frameworks: BufSet,"}, {"lineNum":" 1145","line":" verbose_link: bool,"}, {"lineNum":" 1146","line":" verbose_cc: bool,"}, {"lineNum":" 1147","line":" emit_llvm_ir: bool = false,"}, {"lineNum":" 1148","line":" emit_asm: bool = false,"}, {"lineNum":" 1149","line":" emit_bin: bool = true,"}, {"lineNum":" 1150","line":" emit_h: bool = false,"}, {"lineNum":" 1151","line":" bundle_compiler_rt: bool,"}, {"lineNum":" 1152","line":" disable_stack_probing: bool,"}, {"lineNum":" 1153","line":" disable_sanitize_c: bool,"}, {"lineNum":" 1154","line":" c_std: Builder.CStd,"}, {"lineNum":" 1155","line":" override_lib_dir: ?[]const u8,"}, {"lineNum":" 1156","line":" main_pkg_path: ?[]const u8,"}, {"lineNum":" 1157","line":" exec_cmd_args: ?[]const ?[]const u8,"}, {"lineNum":" 1158","line":" name_prefix: []const u8,"}, {"lineNum":" 1159","line":" filter: ?[]const u8,"}, {"lineNum":" 1160","line":" single_threaded: bool,"}, {"lineNum":" 1161","line":" test_evented_io: bool = false,"}, {"lineNum":" 1162","line":" code_model: builtin.CodeModel = .default,"}, {"lineNum":" 1163","line":""}, {"lineNum":" 1164","line":" root_src: ?FileSource,"}, {"lineNum":" 1165","line":" out_h_filename: []const u8,"}, {"lineNum":" 1166","line":" out_lib_filename: []const u8,"}, {"lineNum":" 1167","line":" out_pdb_filename: []const u8,"}, {"lineNum":" 1168","line":" packages: ArrayList(Pkg),"}, {"lineNum":" 1169","line":" build_options_contents: std.ArrayList(u8),"}, {"lineNum":" 1170","line":" system_linker_hack: bool = false,"}, {"lineNum":" 1171","line":""}, {"lineNum":" 1172","line":" object_src: []const u8,"}, {"lineNum":" 1173","line":""}, {"lineNum":" 1174","line":" link_objects: ArrayList(LinkObject),"}, {"lineNum":" 1175","line":" include_dirs: ArrayList(IncludeDir),"}, {"lineNum":" 1176","line":" c_macros: ArrayList([]const u8),"}, {"lineNum":" 1177","line":" output_dir: ?[]const u8,"}, {"lineNum":" 1178","line":" is_linking_libc: bool = false,"}, {"lineNum":" 1179","line":" vcpkg_bin_path: ?[]const u8 = null,"}, {"lineNum":" 1180","line":""}, {"lineNum":" 1181","line":" installed_path: ?[]const u8,"}, {"lineNum":" 1182","line":" install_step: ?*InstallArtifactStep,"}, {"lineNum":" 1183","line":""}, {"lineNum":" 1184","line":" libc_file: ?[]const u8 = null,"}, {"lineNum":" 1185","line":""}, {"lineNum":" 1186","line":" valgrind_support: ?bool = null,"}, {"lineNum":" 1187","line":""}, {"lineNum":" 1188","line":" /// Create a .eh_frame_hdr section and a PT_GNU_EH_FRAME segment in the ELF"}, {"lineNum":" 1189","line":" /// file."}, {"lineNum":" 1190","line":" link_eh_frame_hdr: bool = false,"}, {"lineNum":" 1191","line":""}, {"lineNum":" 1192","line":" /// Place every function in its own section so that unused ones may be"}, {"lineNum":" 1193","line":" /// safely garbage-collected during the linking phase."}, {"lineNum":" 1194","line":" link_function_sections: bool = false,"}, {"lineNum":" 1195","line":""}, {"lineNum":" 1196","line":" /// Uses system Wine installation to run cross compiled Windows build artifacts."}, {"lineNum":" 1197","line":" enable_wine: bool = false,"}, {"lineNum":" 1198","line":""}, {"lineNum":" 1199","line":" /// Uses system QEMU installation to run cross compiled foreign architecture build artifacts."}, {"lineNum":" 1200","line":" enable_qemu: bool = false,"}, {"lineNum":" 1201","line":""}, {"lineNum":" 1202","line":" /// Uses system Wasmtime installation to run cross compiled wasm/wasi build artifacts."}, {"lineNum":" 1203","line":" enable_wasmtime: bool = false,"}, {"lineNum":" 1204","line":""}, {"lineNum":" 1205","line":" /// After following the steps in https://github.com/ziglang/zig/wiki/Updating-libc#glibc,"}, {"lineNum":" 1206","line":" /// this will be the directory $glibc-build-dir/install/glibcs"}, {"lineNum":" 1207","line":" /// Given the example of the aarch64 target, this is the directory"}, {"lineNum":" 1208","line":" /// that contains the path `aarch64-linux-gnu/lib/ld-linux-aarch64.so.1`."}, {"lineNum":" 1209","line":" glibc_multi_install_dir: ?[]const u8 = null,"}, {"lineNum":" 1210","line":""}, {"lineNum":" 1211","line":" /// Position Independent Code"}, {"lineNum":" 1212","line":" force_pic: ?bool = null,"}, {"lineNum":" 1213","line":""}, {"lineNum":" 1214","line":" subsystem: ?builtin.SubSystem = null,"}, {"lineNum":" 1215","line":""}, {"lineNum":" 1216","line":" const LinkObject = union(enum) {"}, {"lineNum":" 1217","line":" StaticPath: []const u8,"}, {"lineNum":" 1218","line":" OtherStep: *LibExeObjStep,"}, {"lineNum":" 1219","line":" SystemLib: []const u8,"}, {"lineNum":" 1220","line":" AssemblyFile: FileSource,"}, {"lineNum":" 1221","line":" CSourceFile: *CSourceFile,"}, {"lineNum":" 1222","line":" };"}, {"lineNum":" 1223","line":""}, {"lineNum":" 1224","line":" const IncludeDir = union(enum) {"}, {"lineNum":" 1225","line":" RawPath: []const u8,"}, {"lineNum":" 1226","line":" RawPathSystem: []const u8,"}, {"lineNum":" 1227","line":" OtherStep: *LibExeObjStep,"}, {"lineNum":" 1228","line":" };"}, {"lineNum":" 1229","line":""}, {"lineNum":" 1230","line":" const Kind = enum {"}, {"lineNum":" 1231","line":" Exe,"}, {"lineNum":" 1232","line":" Lib,"}, {"lineNum":" 1233","line":" Obj,"}, {"lineNum":" 1234","line":" Test,"}, {"lineNum":" 1235","line":" };"}, {"lineNum":" 1236","line":""}, {"lineNum":" 1237","line":" pub fn createSharedLibrary(builder: *Builder, name: []const u8, root_src: ?FileSource, ver: Version) *LibExeObjStep {"}, {"lineNum":" 1238","line":" const self = builder.allocator.create(LibExeObjStep) catch unreachable;"}, {"lineNum":" 1239","line":" self.* = initExtraArgs(builder, name, root_src, Kind.Lib, true, ver);"}, {"lineNum":" 1240","line":" return self;"}, {"lineNum":" 1241","line":" }"}, {"lineNum":" 1242","line":""}, {"lineNum":" 1243","line":" pub fn createStaticLibrary(builder: *Builder, name: []const u8, root_src: ?FileSource) *LibExeObjStep {"}, {"lineNum":" 1244","line":" const self = builder.allocator.create(LibExeObjStep) catch unreachable;"}, {"lineNum":" 1245","line":" self.* = initExtraArgs(builder, name, root_src, Kind.Lib, false, builder.version(0, 0, 0));"}, {"lineNum":" 1246","line":" return self;"}, {"lineNum":" 1247","line":" }"}, {"lineNum":" 1248","line":""}, {"lineNum":" 1249","line":" pub fn createObject(builder: *Builder, name: []const u8, root_src: ?FileSource) *LibExeObjStep {"}, {"lineNum":" 1250","line":" const self = builder.allocator.create(LibExeObjStep) catch unreachable;"}, {"lineNum":" 1251","line":" self.* = initExtraArgs(builder, name, root_src, Kind.Obj, false, builder.version(0, 0, 0));"}, {"lineNum":" 1252","line":" return self;"}, {"lineNum":" 1253","line":" }"}, {"lineNum":" 1254","line":""}, {"lineNum":" 1255","line":" pub fn createExecutable(builder: *Builder, name: []const u8, root_src: ?FileSource, is_dynamic: bool) *LibExeObjStep {"}, {"lineNum":" 1256","line":" const self = builder.allocator.create(LibExeObjStep) catch unreachable;"}, {"lineNum":" 1257","line":" self.* = initExtraArgs(builder, name, root_src, Kind.Exe, is_dynamic, builder.version(0, 0, 0));"}, {"lineNum":" 1258","line":" return self;"}, {"lineNum":" 1259","line":" }"}, {"lineNum":" 1260","line":""}, {"lineNum":" 1261","line":" pub fn createTest(builder: *Builder, name: []const u8, root_src: FileSource) *LibExeObjStep {"}, {"lineNum":" 1262","line":" const self = builder.allocator.create(LibExeObjStep) catch unreachable;"}, {"lineNum":" 1263","line":" self.* = initExtraArgs(builder, name, root_src, Kind.Test, false, builder.version(0, 0, 0));"}, {"lineNum":" 1264","line":" return self;"}, {"lineNum":" 1265","line":" }"}, {"lineNum":" 1266","line":""}, {"lineNum":" 1267","line":" fn initExtraArgs("}, {"lineNum":" 1268","line":" builder: *Builder,"}, {"lineNum":" 1269","line":" name: []const u8,"}, {"lineNum":" 1270","line":" root_src: ?FileSource,"}, {"lineNum":" 1271","line":" kind: Kind,"}, {"lineNum":" 1272","line":" is_dynamic: bool,"}, {"lineNum":" 1273","line":" ver: Version,"}, {"lineNum":" 1274","line":" ) LibExeObjStep {"}, {"lineNum":" 1275","line":" if (mem.indexOf(u8, name, \"/\") != null or mem.indexOf(u8, name, \"\\\\\") != null) {"}, {"lineNum":" 1276","line":" panic(\"invalid name: \'{}\'. It looks like a file path, but it is supposed to be the library or application name.\", .{name});"}, {"lineNum":" 1277","line":" }"}, {"lineNum":" 1278","line":" var self = LibExeObjStep{"}, {"lineNum":" 1279","line":" .strip = false,"}, {"lineNum":" 1280","line":" .builder = builder,"}, {"lineNum":" 1281","line":" .verbose_link = false,"}, {"lineNum":" 1282","line":" .verbose_cc = false,"}, {"lineNum":" 1283","line":" .build_mode = builtin.Mode.Debug,"}, {"lineNum":" 1284","line":" .is_dynamic = is_dynamic,"}, {"lineNum":" 1285","line":" .kind = kind,"}, {"lineNum":" 1286","line":" .root_src = root_src,"}, {"lineNum":" 1287","line":" .name = name,"}, {"lineNum":" 1288","line":" .frameworks = BufSet.init(builder.allocator),"}, {"lineNum":" 1289","line":" .step = Step.init(name, builder.allocator, make),"}, {"lineNum":" 1290","line":" .version = ver,"}, {"lineNum":" 1291","line":" .out_filename = undefined,"}, {"lineNum":" 1292","line":" .out_h_filename = builder.fmt(\"{}.h\", .{name}),"}, {"lineNum":" 1293","line":" .out_lib_filename = undefined,"}, {"lineNum":" 1294","line":" .out_pdb_filename = builder.fmt(\"{}.pdb\", .{name}),"}, {"lineNum":" 1295","line":" .major_only_filename = undefined,"}, {"lineNum":" 1296","line":" .name_only_filename = undefined,"}, {"lineNum":" 1297","line":" .packages = ArrayList(Pkg).init(builder.allocator),"}, {"lineNum":" 1298","line":" .include_dirs = ArrayList(IncludeDir).init(builder.allocator),"}, {"lineNum":" 1299","line":" .link_objects = ArrayList(LinkObject).init(builder.allocator),"}, {"lineNum":" 1300","line":" .c_macros = ArrayList([]const u8).init(builder.allocator),"}, {"lineNum":" 1301","line":" .lib_paths = ArrayList([]const u8).init(builder.allocator),"}, {"lineNum":" 1302","line":" .framework_dirs = ArrayList([]const u8).init(builder.allocator),"}, {"lineNum":" 1303","line":" .object_src = undefined,"}, {"lineNum":" 1304","line":" .build_options_contents = std.ArrayList(u8).init(builder.allocator),"}, {"lineNum":" 1305","line":" .c_std = Builder.CStd.C99,"}, {"lineNum":" 1306","line":" .override_lib_dir = null,"}, {"lineNum":" 1307","line":" .main_pkg_path = null,"}, {"lineNum":" 1308","line":" .exec_cmd_args = null,"}, {"lineNum":" 1309","line":" .name_prefix = \"\","}, {"lineNum":" 1310","line":" .filter = null,"}, {"lineNum":" 1311","line":" .bundle_compiler_rt = false,"}, {"lineNum":" 1312","line":" .disable_stack_probing = false,"}, {"lineNum":" 1313","line":" .disable_sanitize_c = false,"}, {"lineNum":" 1314","line":" .output_dir = null,"}, {"lineNum":" 1315","line":" .single_threaded = false,"}, {"lineNum":" 1316","line":" .installed_path = null,"}, {"lineNum":" 1317","line":" .install_step = null,"}, {"lineNum":" 1318","line":" };"}, {"lineNum":" 1319","line":" self.computeOutFileNames();"}, {"lineNum":" 1320","line":" if (root_src) |rs| rs.addStepDependencies(&self.step);"}, {"lineNum":" 1321","line":" return self;"}, {"lineNum":" 1322","line":" }"}, {"lineNum":" 1323","line":""}, {"lineNum":" 1324","line":" fn computeOutFileNames(self: *LibExeObjStep) void {"}, {"lineNum":" 1325","line":" switch (self.kind) {"}, {"lineNum":" 1326","line":" .Obj => {"}, {"lineNum":" 1327","line":" self.out_filename = self.builder.fmt(\"{}{}\", .{ self.name, self.target.oFileExt() });"}, {"lineNum":" 1328","line":" },"}, {"lineNum":" 1329","line":" .Exe => {"}, {"lineNum":" 1330","line":" self.out_filename = self.builder.fmt(\"{}{}\", .{ self.name, self.target.exeFileExt() });"}, {"lineNum":" 1331","line":" },"}, {"lineNum":" 1332","line":" .Test => {"}, {"lineNum":" 1333","line":" self.out_filename = self.builder.fmt(\"test{}\", .{self.target.exeFileExt()});"}, {"lineNum":" 1334","line":" },"}, {"lineNum":" 1335","line":" .Lib => {"}, {"lineNum":" 1336","line":" if (!self.is_dynamic) {"}, {"lineNum":" 1337","line":" self.out_filename = self.builder.fmt(\"{}{}{}\", .{"}, {"lineNum":" 1338","line":" self.target.libPrefix(),"}, {"lineNum":" 1339","line":" self.name,"}, {"lineNum":" 1340","line":" self.target.staticLibSuffix(),"}, {"lineNum":" 1341","line":" });"}, {"lineNum":" 1342","line":" self.out_lib_filename = self.out_filename;"}, {"lineNum":" 1343","line":" } else {"}, {"lineNum":" 1344","line":" if (self.target.isDarwin()) {"}, {"lineNum":" 1345","line":" self.out_filename = self.builder.fmt(\"lib{}.{d}.{d}.{d}.dylib\", .{"}, {"lineNum":" 1346","line":" self.name,"}, {"lineNum":" 1347","line":" self.version.major,"}, {"lineNum":" 1348","line":" self.version.minor,"}, {"lineNum":" 1349","line":" self.version.patch,"}, {"lineNum":" 1350","line":" });"}, {"lineNum":" 1351","line":" self.major_only_filename = self.builder.fmt(\"lib{}.{d}.dylib\", .{"}, {"lineNum":" 1352","line":" self.name,"}, {"lineNum":" 1353","line":" self.version.major,"}, {"lineNum":" 1354","line":" });"}, {"lineNum":" 1355","line":" self.name_only_filename = self.builder.fmt(\"lib{}.dylib\", .{self.name});"}, {"lineNum":" 1356","line":" self.out_lib_filename = self.out_filename;"}, {"lineNum":" 1357","line":" } else if (self.target.isWindows()) {"}, {"lineNum":" 1358","line":" self.out_filename = self.builder.fmt(\"{}.dll\", .{self.name});"}, {"lineNum":" 1359","line":" self.out_lib_filename = self.builder.fmt(\"{}.lib\", .{self.name});"}, {"lineNum":" 1360","line":" } else {"}, {"lineNum":" 1361","line":" self.out_filename = self.builder.fmt(\"lib{}.so.{d}.{d}.{d}\", .{"}, {"lineNum":" 1362","line":" self.name,"}, {"lineNum":" 1363","line":" self.version.major,"}, {"lineNum":" 1364","line":" self.version.minor,"}, {"lineNum":" 1365","line":" self.version.patch,"}, {"lineNum":" 1366","line":" });"}, {"lineNum":" 1367","line":" self.major_only_filename = self.builder.fmt(\"lib{}.so.{d}\", .{ self.name, self.version.major });"}, {"lineNum":" 1368","line":" self.name_only_filename = self.builder.fmt(\"lib{}.so\", .{self.name});"}, {"lineNum":" 1369","line":" self.out_lib_filename = self.out_filename;"}, {"lineNum":" 1370","line":" }"}, {"lineNum":" 1371","line":" }"}, {"lineNum":" 1372","line":" },"}, {"lineNum":" 1373","line":" }"}, {"lineNum":" 1374","line":" }"}, {"lineNum":" 1375","line":""}, {"lineNum":" 1376","line":" pub fn setTarget(self: *LibExeObjStep, target: CrossTarget) void {"}, {"lineNum":" 1377","line":" self.target = target;"}, {"lineNum":" 1378","line":" self.computeOutFileNames();"}, {"lineNum":" 1379","line":" }"}, {"lineNum":" 1380","line":""}, {"lineNum":" 1381","line":" pub fn setOutputDir(self: *LibExeObjStep, dir: []const u8) void {"}, {"lineNum":" 1382","line":" self.output_dir = self.builder.dupePath(dir);"}, {"lineNum":" 1383","line":" }"}, {"lineNum":" 1384","line":""}, {"lineNum":" 1385","line":" pub fn install(self: *LibExeObjStep) void {"}, {"lineNum":" 1386","line":" self.builder.installArtifact(self);"}, {"lineNum":" 1387","line":" }"}, {"lineNum":" 1388","line":""}, {"lineNum":" 1389","line":" pub fn installRaw(self: *LibExeObjStep, dest_filename: []const u8) void {"}, {"lineNum":" 1390","line":" self.builder.installRaw(self, dest_filename);"}, {"lineNum":" 1391","line":" }"}, {"lineNum":" 1392","line":""}, {"lineNum":" 1393","line":" /// Creates a `RunStep` with an executable built with `addExecutable`."}, {"lineNum":" 1394","line":" /// Add command line arguments with `addArg`."}, {"lineNum":" 1395","line":" pub fn run(exe: *LibExeObjStep) *RunStep {"}, {"lineNum":" 1396","line":" assert(exe.kind == Kind.Exe);"}, {"lineNum":" 1397","line":""}, {"lineNum":" 1398","line":" // It doesn\'t have to be native. We catch that if you actually try to run it."}, {"lineNum":" 1399","line":" // Consider that this is declarative; the run step may not be run unless a user"}, {"lineNum":" 1400","line":" // option is supplied."}, {"lineNum":" 1401","line":" const run_step = RunStep.create(exe.builder, exe.builder.fmt(\"run {}\", .{exe.step.name}));"}, {"lineNum":" 1402","line":" run_step.addArtifactArg(exe);"}, {"lineNum":" 1403","line":""}, {"lineNum":" 1404","line":" if (exe.vcpkg_bin_path) |path| {"}, {"lineNum":" 1405","line":" run_step.addPathDir(path);"}, {"lineNum":" 1406","line":" }"}, {"lineNum":" 1407","line":""}, {"lineNum":" 1408","line":" return run_step;"}, {"lineNum":" 1409","line":" }"}, {"lineNum":" 1410","line":""}, {"lineNum":" 1411","line":" pub fn setLinkerScriptPath(self: *LibExeObjStep, path: []const u8) void {"}, {"lineNum":" 1412","line":" self.linker_script = path;"}, {"lineNum":" 1413","line":" }"}, {"lineNum":" 1414","line":""}, {"lineNum":" 1415","line":" pub fn linkFramework(self: *LibExeObjStep, framework_name: []const u8) void {"}, {"lineNum":" 1416","line":" assert(self.target.isDarwin());"}, {"lineNum":" 1417","line":" self.frameworks.put(framework_name) catch unreachable;"}, {"lineNum":" 1418","line":" }"}, {"lineNum":" 1419","line":""}, {"lineNum":" 1420","line":" /// Returns whether the library, executable, or object depends on a particular system library."}, {"lineNum":" 1421","line":" pub fn dependsOnSystemLibrary(self: LibExeObjStep, name: []const u8) bool {"}, {"lineNum":" 1422","line":" if (isLibCLibrary(name)) {"}, {"lineNum":" 1423","line":" return self.is_linking_libc;"}, {"lineNum":" 1424","line":" }"}, {"lineNum":" 1425","line":" for (self.link_objects.span()) |link_object| {"}, {"lineNum":" 1426","line":" switch (link_object) {"}, {"lineNum":" 1427","line":" LinkObject.SystemLib => |n| if (mem.eql(u8, n, name)) return true,"}, {"lineNum":" 1428","line":" else => continue,"}, {"lineNum":" 1429","line":" }"}, {"lineNum":" 1430","line":" }"}, {"lineNum":" 1431","line":" return false;"}, {"lineNum":" 1432","line":" }"}, {"lineNum":" 1433","line":""}, {"lineNum":" 1434","line":" pub fn linkLibrary(self: *LibExeObjStep, lib: *LibExeObjStep) void {"}, {"lineNum":" 1435","line":" assert(lib.kind == Kind.Lib);"}, {"lineNum":" 1436","line":" self.linkLibraryOrObject(lib);"}, {"lineNum":" 1437","line":" }"}, {"lineNum":" 1438","line":""}, {"lineNum":" 1439","line":" pub fn isDynamicLibrary(self: *LibExeObjStep) bool {"}, {"lineNum":" 1440","line":" return self.kind == Kind.Lib and self.is_dynamic;"}, {"lineNum":" 1441","line":" }"}, {"lineNum":" 1442","line":""}, {"lineNum":" 1443","line":" pub fn producesPdbFile(self: *LibExeObjStep) bool {"}, {"lineNum":" 1444","line":" if (!self.target.isWindows() and !self.target.isUefi()) return false;"}, {"lineNum":" 1445","line":" if (self.strip) return false;"}, {"lineNum":" 1446","line":" return self.isDynamicLibrary() or self.kind == .Exe;"}, {"lineNum":" 1447","line":" }"}, {"lineNum":" 1448","line":""}, {"lineNum":" 1449","line":" pub fn linkLibC(self: *LibExeObjStep) void {"}, {"lineNum":" 1450","line":" if (!self.is_linking_libc) {"}, {"lineNum":" 1451","line":" self.is_linking_libc = true;"}, {"lineNum":" 1452","line":" self.link_objects.append(LinkObject{ .SystemLib = \"c\" }) catch unreachable;"}, {"lineNum":" 1453","line":" }"}, {"lineNum":" 1454","line":" }"}, {"lineNum":" 1455","line":""}, {"lineNum":" 1456","line":" /// name_and_value looks like [name]=[value]. If the value is omitted, it is set to 1."}, {"lineNum":" 1457","line":" pub fn defineCMacro(self: *LibExeObjStep, name_and_value: []const u8) void {"}, {"lineNum":" 1458","line":" self.c_macros.append(self.builder.dupe(name_and_value)) catch unreachable;"}, {"lineNum":" 1459","line":" }"}, {"lineNum":" 1460","line":""}, {"lineNum":" 1461","line":" /// This one has no integration with anything, it just puts -lname on the command line."}, {"lineNum":" 1462","line":" /// Prefer to use `linkSystemLibrary` instead."}, {"lineNum":" 1463","line":" pub fn linkSystemLibraryName(self: *LibExeObjStep, name: []const u8) void {"}, {"lineNum":" 1464","line":" self.link_objects.append(LinkObject{ .SystemLib = self.builder.dupe(name) }) catch unreachable;"}, {"lineNum":" 1465","line":" }"}, {"lineNum":" 1466","line":""}, {"lineNum":" 1467","line":" /// This links against a system library, exclusively using pkg-config to find the library."}, {"lineNum":" 1468","line":" /// Prefer to use `linkSystemLibrary` instead."}, {"lineNum":" 1469","line":" pub fn linkSystemLibraryPkgConfigOnly(self: *LibExeObjStep, lib_name: []const u8) !void {"}, {"lineNum":" 1470","line":" const pkg_name = match: {"}, {"lineNum":" 1471","line":" // First we have to map the library name to pkg config name. Unfortunately,"}, {"lineNum":" 1472","line":" // there are several examples where this is not straightforward:"}, {"lineNum":" 1473","line":" // -lSDL2 -> pkg-config sdl2"}, {"lineNum":" 1474","line":" // -lgdk-3 -> pkg-config gdk-3.0"}, {"lineNum":" 1475","line":" // -latk-1.0 -> pkg-config atk"}, {"lineNum":" 1476","line":" const pkgs = try self.builder.getPkgConfigList();"}, {"lineNum":" 1477","line":""}, {"lineNum":" 1478","line":" // Exact match means instant winner."}, {"lineNum":" 1479","line":" for (pkgs) |pkg| {"}, {"lineNum":" 1480","line":" if (mem.eql(u8, pkg.name, lib_name)) {"}, {"lineNum":" 1481","line":" break :match pkg.name;"}, {"lineNum":" 1482","line":" }"}, {"lineNum":" 1483","line":" }"}, {"lineNum":" 1484","line":""}, {"lineNum":" 1485","line":" // Next we\'ll try ignoring case."}, {"lineNum":" 1486","line":" for (pkgs) |pkg| {"}, {"lineNum":" 1487","line":" if (std.ascii.eqlIgnoreCase(pkg.name, lib_name)) {"}, {"lineNum":" 1488","line":" break :match pkg.name;"}, {"lineNum":" 1489","line":" }"}, {"lineNum":" 1490","line":" }"}, {"lineNum":" 1491","line":""}, {"lineNum":" 1492","line":" // Now try appending \".0\"."}, {"lineNum":" 1493","line":" for (pkgs) |pkg| {"}, {"lineNum":" 1494","line":" if (std.ascii.indexOfIgnoreCase(pkg.name, lib_name)) |pos| {"}, {"lineNum":" 1495","line":" if (pos != 0) continue;"}, {"lineNum":" 1496","line":" if (mem.eql(u8, pkg.name[lib_name.len..], \".0\")) {"}, {"lineNum":" 1497","line":" break :match pkg.name;"}, {"lineNum":" 1498","line":" }"}, {"lineNum":" 1499","line":" }"}, {"lineNum":" 1500","line":" }"}, {"lineNum":" 1501","line":""}, {"lineNum":" 1502","line":" // Trimming \"-1.0\"."}, {"lineNum":" 1503","line":" if (mem.endsWith(u8, lib_name, \"-1.0\")) {"}, {"lineNum":" 1504","line":" const trimmed_lib_name = lib_name[0 .. lib_name.len - \"-1.0\".len];"}, {"lineNum":" 1505","line":" for (pkgs) |pkg| {"}, {"lineNum":" 1506","line":" if (std.ascii.eqlIgnoreCase(pkg.name, trimmed_lib_name)) {"}, {"lineNum":" 1507","line":" break :match pkg.name;"}, {"lineNum":" 1508","line":" }"}, {"lineNum":" 1509","line":" }"}, {"lineNum":" 1510","line":" }"}, {"lineNum":" 1511","line":""}, {"lineNum":" 1512","line":" return error.PackageNotFound;"}, {"lineNum":" 1513","line":" };"}, {"lineNum":" 1514","line":""}, {"lineNum":" 1515","line":" var code: u8 = undefined;"}, {"lineNum":" 1516","line":" const stdout = if (self.builder.execAllowFail(&[_][]const u8{"}, {"lineNum":" 1517","line":" \"pkg-config\","}, {"lineNum":" 1518","line":" pkg_name,"}, {"lineNum":" 1519","line":" \"--cflags\","}, {"lineNum":" 1520","line":" \"--libs\","}, {"lineNum":" 1521","line":" }, &code, .Ignore)) |stdout| stdout else |err| switch (err) {"}, {"lineNum":" 1522","line":" error.ProcessTerminated => return error.PkgConfigCrashed,"}, {"lineNum":" 1523","line":" error.ExitCodeFailure => return error.PkgConfigFailed,"}, {"lineNum":" 1524","line":" error.FileNotFound => return error.PkgConfigNotInstalled,"}, {"lineNum":" 1525","line":" else => return err,"}, {"lineNum":" 1526","line":" };"}, {"lineNum":" 1527","line":" var it = mem.tokenize(stdout, \" \\r\\n\\t\");"}, {"lineNum":" 1528","line":" while (it.next()) |tok| {"}, {"lineNum":" 1529","line":" if (mem.eql(u8, tok, \"-I\")) {"}, {"lineNum":" 1530","line":" const dir = it.next() orelse return error.PkgConfigInvalidOutput;"}, {"lineNum":" 1531","line":" self.addIncludeDir(dir);"}, {"lineNum":" 1532","line":" } else if (mem.startsWith(u8, tok, \"-I\")) {"}, {"lineNum":" 1533","line":" self.addIncludeDir(tok[\"-I\".len..]);"}, {"lineNum":" 1534","line":" } else if (mem.eql(u8, tok, \"-L\")) {"}, {"lineNum":" 1535","line":" const dir = it.next() orelse return error.PkgConfigInvalidOutput;"}, {"lineNum":" 1536","line":" self.addLibPath(dir);"}, {"lineNum":" 1537","line":" } else if (mem.startsWith(u8, tok, \"-L\")) {"}, {"lineNum":" 1538","line":" self.addLibPath(tok[\"-L\".len..]);"}, {"lineNum":" 1539","line":" } else if (mem.eql(u8, tok, \"-l\")) {"}, {"lineNum":" 1540","line":" const lib = it.next() orelse return error.PkgConfigInvalidOutput;"}, {"lineNum":" 1541","line":" self.linkSystemLibraryName(lib);"}, {"lineNum":" 1542","line":" } else if (mem.startsWith(u8, tok, \"-l\")) {"}, {"lineNum":" 1543","line":" self.linkSystemLibraryName(tok[\"-l\".len..]);"}, {"lineNum":" 1544","line":" } else if (mem.eql(u8, tok, \"-D\")) {"}, {"lineNum":" 1545","line":" const macro = it.next() orelse return error.PkgConfigInvalidOutput;"}, {"lineNum":" 1546","line":" self.defineCMacro(macro);"}, {"lineNum":" 1547","line":" } else if (mem.startsWith(u8, tok, \"-D\")) {"}, {"lineNum":" 1548","line":" self.defineCMacro(tok[\"-D\".len..]);"}, {"lineNum":" 1549","line":" } else if (mem.eql(u8, tok, \"-pthread\")) {"}, {"lineNum":" 1550","line":" self.linkLibC();"}, {"lineNum":" 1551","line":" } else if (self.builder.verbose) {"}, {"lineNum":" 1552","line":" warn(\"Ignoring pkg-config flag \'{}\'\\n\", .{tok});"}, {"lineNum":" 1553","line":" }"}, {"lineNum":" 1554","line":" }"}, {"lineNum":" 1555","line":" }"}, {"lineNum":" 1556","line":""}, {"lineNum":" 1557","line":" pub fn linkSystemLibrary(self: *LibExeObjStep, name: []const u8) void {"}, {"lineNum":" 1558","line":" if (isLibCLibrary(name)) {"}, {"lineNum":" 1559","line":" self.linkLibC();"}, {"lineNum":" 1560","line":" return;"}, {"lineNum":" 1561","line":" }"}, {"lineNum":" 1562","line":" if (self.linkSystemLibraryPkgConfigOnly(name)) |_| {"}, {"lineNum":" 1563","line":" // pkg-config worked, so nothing further needed to do."}, {"lineNum":" 1564","line":" return;"}, {"lineNum":" 1565","line":" } else |err| switch (err) {"}, {"lineNum":" 1566","line":" error.PkgConfigInvalidOutput,"}, {"lineNum":" 1567","line":" error.PkgConfigCrashed,"}, {"lineNum":" 1568","line":" error.PkgConfigFailed,"}, {"lineNum":" 1569","line":" error.PkgConfigNotInstalled,"}, {"lineNum":" 1570","line":" error.PackageNotFound,"}, {"lineNum":" 1571","line":" => {},"}, {"lineNum":" 1572","line":""}, {"lineNum":" 1573","line":" else => unreachable,"}, {"lineNum":" 1574","line":" }"}, {"lineNum":" 1575","line":""}, {"lineNum":" 1576","line":" self.linkSystemLibraryName(name);"}, {"lineNum":" 1577","line":" }"}, {"lineNum":" 1578","line":""}, {"lineNum":" 1579","line":" pub fn setNamePrefix(self: *LibExeObjStep, text: []const u8) void {"}, {"lineNum":" 1580","line":" assert(self.kind == Kind.Test);"}, {"lineNum":" 1581","line":" self.name_prefix = text;"}, {"lineNum":" 1582","line":" }"}, {"lineNum":" 1583","line":""}, {"lineNum":" 1584","line":" pub fn setFilter(self: *LibExeObjStep, text: ?[]const u8) void {"}, {"lineNum":" 1585","line":" assert(self.kind == Kind.Test);"}, {"lineNum":" 1586","line":" self.filter = text;"}, {"lineNum":" 1587","line":" }"}, {"lineNum":" 1588","line":""}, {"lineNum":" 1589","line":" pub fn addCSourceFile(self: *LibExeObjStep, file: []const u8, args: []const []const u8) void {"}, {"lineNum":" 1590","line":" self.addCSourceFileSource(.{"}, {"lineNum":" 1591","line":" .args = args,"}, {"lineNum":" 1592","line":" .source = .{ .path = file },"}, {"lineNum":" 1593","line":" });"}, {"lineNum":" 1594","line":" }"}, {"lineNum":" 1595","line":""}, {"lineNum":" 1596","line":" pub fn addCSourceFileSource(self: *LibExeObjStep, source: CSourceFile) void {"}, {"lineNum":" 1597","line":" const c_source_file = self.builder.allocator.create(CSourceFile) catch unreachable;"}, {"lineNum":" 1598","line":""}, {"lineNum":" 1599","line":" const args_copy = self.builder.allocator.alloc([]u8, source.args.len) catch unreachable;"}, {"lineNum":" 1600","line":" for (source.args) |arg, i| {"}, {"lineNum":" 1601","line":" args_copy[i] = self.builder.dupe(arg);"}, {"lineNum":" 1602","line":" }"}, {"lineNum":" 1603","line":""}, {"lineNum":" 1604","line":" c_source_file.* = source;"}, {"lineNum":" 1605","line":" c_source_file.args = args_copy;"}, {"lineNum":" 1606","line":" self.link_objects.append(LinkObject{ .CSourceFile = c_source_file }) catch unreachable;"}, {"lineNum":" 1607","line":" }"}, {"lineNum":" 1608","line":""}, {"lineNum":" 1609","line":" pub fn setVerboseLink(self: *LibExeObjStep, value: bool) void {"}, {"lineNum":" 1610","line":" self.verbose_link = value;"}, {"lineNum":" 1611","line":" }"}, {"lineNum":" 1612","line":""}, {"lineNum":" 1613","line":" pub fn setVerboseCC(self: *LibExeObjStep, value: bool) void {"}, {"lineNum":" 1614","line":" self.verbose_cc = value;"}, {"lineNum":" 1615","line":" }"}, {"lineNum":" 1616","line":""}, {"lineNum":" 1617","line":" pub fn setBuildMode(self: *LibExeObjStep, mode: builtin.Mode) void {"}, {"lineNum":" 1618","line":" self.build_mode = mode;"}, {"lineNum":" 1619","line":" }"}, {"lineNum":" 1620","line":""}, {"lineNum":" 1621","line":" pub fn overrideZigLibDir(self: *LibExeObjStep, dir_path: []const u8) void {"}, {"lineNum":" 1622","line":" self.override_lib_dir = self.builder.dupe(dir_path);"}, {"lineNum":" 1623","line":" }"}, {"lineNum":" 1624","line":""}, {"lineNum":" 1625","line":" pub fn setMainPkgPath(self: *LibExeObjStep, dir_path: []const u8) void {"}, {"lineNum":" 1626","line":" self.main_pkg_path = dir_path;"}, {"lineNum":" 1627","line":" }"}, {"lineNum":" 1628","line":""}, {"lineNum":" 1629","line":" pub const setDisableGenH = @compileError(\"deprecated; set the emit_h field directly\");"}, {"lineNum":" 1630","line":""}, {"lineNum":" 1631","line":" pub fn setLibCFile(self: *LibExeObjStep, libc_file: ?[]const u8) void {"}, {"lineNum":" 1632","line":" self.libc_file = libc_file;"}, {"lineNum":" 1633","line":" }"}, {"lineNum":" 1634","line":""}, {"lineNum":" 1635","line":" /// Unless setOutputDir was called, this function must be called only in"}, {"lineNum":" 1636","line":" /// the make step, from a step that has declared a dependency on this one."}, {"lineNum":" 1637","line":" /// To run an executable built with zig build, use `run`, or create an install step and invoke it."}, {"lineNum":" 1638","line":" pub fn getOutputPath(self: *LibExeObjStep) []const u8 {"}, {"lineNum":" 1639","line":" return fs.path.join("}, {"lineNum":" 1640","line":" self.builder.allocator,"}, {"lineNum":" 1641","line":" &[_][]const u8{ self.output_dir.?, self.out_filename },"}, {"lineNum":" 1642","line":" ) catch unreachable;"}, {"lineNum":" 1643","line":" }"}, {"lineNum":" 1644","line":""}, {"lineNum":" 1645","line":" /// Unless setOutputDir was called, this function must be called only in"}, {"lineNum":" 1646","line":" /// the make step, from a step that has declared a dependency on this one."}, {"lineNum":" 1647","line":" pub fn getOutputLibPath(self: *LibExeObjStep) []const u8 {"}, {"lineNum":" 1648","line":" assert(self.kind == Kind.Lib);"}, {"lineNum":" 1649","line":" return fs.path.join("}, {"lineNum":" 1650","line":" self.builder.allocator,"}, {"lineNum":" 1651","line":" &[_][]const u8{ self.output_dir.?, self.out_lib_filename },"}, {"lineNum":" 1652","line":" ) catch unreachable;"}, {"lineNum":" 1653","line":" }"}, {"lineNum":" 1654","line":""}, {"lineNum":" 1655","line":" /// Unless setOutputDir was called, this function must be called only in"}, {"lineNum":" 1656","line":" /// the make step, from a step that has declared a dependency on this one."}, {"lineNum":" 1657","line":" pub fn getOutputHPath(self: *LibExeObjStep) []const u8 {"}, {"lineNum":" 1658","line":" assert(self.kind != Kind.Exe);"}, {"lineNum":" 1659","line":" assert(self.emit_h);"}, {"lineNum":" 1660","line":" return fs.path.join("}, {"lineNum":" 1661","line":" self.builder.allocator,"}, {"lineNum":" 1662","line":" &[_][]const u8{ self.output_dir.?, self.out_h_filename },"}, {"lineNum":" 1663","line":" ) catch unreachable;"}, {"lineNum":" 1664","line":" }"}, {"lineNum":" 1665","line":""}, {"lineNum":" 1666","line":" /// Unless setOutputDir was called, this function must be called only in"}, {"lineNum":" 1667","line":" /// the make step, from a step that has declared a dependency on this one."}, {"lineNum":" 1668","line":" pub fn getOutputPdbPath(self: *LibExeObjStep) []const u8 {"}, {"lineNum":" 1669","line":" assert(self.target.isWindows() or self.target.isUefi());"}, {"lineNum":" 1670","line":" return fs.path.join("}, {"lineNum":" 1671","line":" self.builder.allocator,"}, {"lineNum":" 1672","line":" &[_][]const u8{ self.output_dir.?, self.out_pdb_filename },"}, {"lineNum":" 1673","line":" ) catch unreachable;"}, {"lineNum":" 1674","line":" }"}, {"lineNum":" 1675","line":""}, {"lineNum":" 1676","line":" pub fn addAssemblyFile(self: *LibExeObjStep, path: []const u8) void {"}, {"lineNum":" 1677","line":" self.link_objects.append(LinkObject{"}, {"lineNum":" 1678","line":" .AssemblyFile = .{ .path = self.builder.dupe(path) },"}, {"lineNum":" 1679","line":" }) catch unreachable;"}, {"lineNum":" 1680","line":" }"}, {"lineNum":" 1681","line":""}, {"lineNum":" 1682","line":" pub fn addAssemblyFileFromWriteFileStep(self: *LibExeObjStep, wfs: *WriteFileStep, basename: []const u8) void {"}, {"lineNum":" 1683","line":" self.addAssemblyFileSource(.{"}, {"lineNum":" 1684","line":" .write_file = .{"}, {"lineNum":" 1685","line":" .step = wfs,"}, {"lineNum":" 1686","line":" .basename = self.builder.dupe(basename),"}, {"lineNum":" 1687","line":" },"}, {"lineNum":" 1688","line":" });"}, {"lineNum":" 1689","line":" }"}, {"lineNum":" 1690","line":""}, {"lineNum":" 1691","line":" pub fn addAssemblyFileSource(self: *LibExeObjStep, source: FileSource) void {"}, {"lineNum":" 1692","line":" self.link_objects.append(LinkObject{ .AssemblyFile = source }) catch unreachable;"}, {"lineNum":" 1693","line":" source.addStepDependencies(&self.step);"}, {"lineNum":" 1694","line":" }"}, {"lineNum":" 1695","line":""}, {"lineNum":" 1696","line":" pub fn addObjectFile(self: *LibExeObjStep, path: []const u8) void {"}, {"lineNum":" 1697","line":" self.link_objects.append(LinkObject{ .StaticPath = self.builder.dupe(path) }) catch unreachable;"}, {"lineNum":" 1698","line":" }"}, {"lineNum":" 1699","line":""}, {"lineNum":" 1700","line":" pub fn addObject(self: *LibExeObjStep, obj: *LibExeObjStep) void {"}, {"lineNum":" 1701","line":" assert(obj.kind == Kind.Obj);"}, {"lineNum":" 1702","line":" self.linkLibraryOrObject(obj);"}, {"lineNum":" 1703","line":" }"}, {"lineNum":" 1704","line":""}, {"lineNum":" 1705","line":" pub fn addBuildOption(self: *LibExeObjStep, comptime T: type, name: []const u8, value: T) void {"}, {"lineNum":" 1706","line":" const out = self.build_options_contents.outStream();"}, {"lineNum":" 1707","line":" switch (@typeInfo(T)) {"}, {"lineNum":" 1708","line":" .Enum => |enum_info| {"}, {"lineNum":" 1709","line":" out.print(\"const {} = enum {{\\n\", .{@typeName(T)}) catch unreachable;"}, {"lineNum":" 1710","line":" inline for (enum_info.fields) |field| {"}, {"lineNum":" 1711","line":" out.print(\" {},\\n\", .{field.name}) catch unreachable;"}, {"lineNum":" 1712","line":" }"}, {"lineNum":" 1713","line":" out.print(\"}};\\n\", .{}) catch unreachable;"}, {"lineNum":" 1714","line":" },"}, {"lineNum":" 1715","line":" else => {},"}, {"lineNum":" 1716","line":" }"}, {"lineNum":" 1717","line":" out.print(\"pub const {} = {};\\n\", .{ name, value }) catch unreachable;"}, {"lineNum":" 1718","line":" }"}, {"lineNum":" 1719","line":""}, {"lineNum":" 1720","line":" pub fn addSystemIncludeDir(self: *LibExeObjStep, path: []const u8) void {"}, {"lineNum":" 1721","line":" self.include_dirs.append(IncludeDir{ .RawPathSystem = self.builder.dupe(path) }) catch unreachable;"}, {"lineNum":" 1722","line":" }"}, {"lineNum":" 1723","line":""}, {"lineNum":" 1724","line":" pub fn addIncludeDir(self: *LibExeObjStep, path: []const u8) void {"}, {"lineNum":" 1725","line":" self.include_dirs.append(IncludeDir{ .RawPath = self.builder.dupe(path) }) catch unreachable;"}, {"lineNum":" 1726","line":" }"}, {"lineNum":" 1727","line":""}, {"lineNum":" 1728","line":" pub fn addLibPath(self: *LibExeObjStep, path: []const u8) void {"}, {"lineNum":" 1729","line":" self.lib_paths.append(self.builder.dupe(path)) catch unreachable;"}, {"lineNum":" 1730","line":" }"}, {"lineNum":" 1731","line":""}, {"lineNum":" 1732","line":" pub fn addFrameworkDir(self: *LibExeObjStep, dir_path: []const u8) void {"}, {"lineNum":" 1733","line":" self.framework_dirs.append(self.builder.dupe(dir_path)) catch unreachable;"}, {"lineNum":" 1734","line":" }"}, {"lineNum":" 1735","line":""}, {"lineNum":" 1736","line":" pub fn addPackage(self: *LibExeObjStep, package: Pkg) void {"}, {"lineNum":" 1737","line":" self.packages.append(package) catch unreachable;"}, {"lineNum":" 1738","line":" }"}, {"lineNum":" 1739","line":""}, {"lineNum":" 1740","line":" pub fn addPackagePath(self: *LibExeObjStep, name: []const u8, pkg_index_path: []const u8) void {"}, {"lineNum":" 1741","line":" self.packages.append(Pkg{"}, {"lineNum":" 1742","line":" .name = self.builder.dupe(name),"}, {"lineNum":" 1743","line":" .path = self.builder.dupe(pkg_index_path),"}, {"lineNum":" 1744","line":" }) catch unreachable;"}, {"lineNum":" 1745","line":" }"}, {"lineNum":" 1746","line":""}, {"lineNum":" 1747","line":" /// If Vcpkg was found on the system, it will be added to include and lib"}, {"lineNum":" 1748","line":" /// paths for the specified target."}, {"lineNum":" 1749","line":" pub fn addVcpkgPaths(self: *LibExeObjStep, linkage: VcpkgLinkage) !void {"}, {"lineNum":" 1750","line":" // Ideally in the Unattempted case we would call the function recursively"}, {"lineNum":" 1751","line":" // after findVcpkgRoot and have only one switch statement, but the compiler"}, {"lineNum":" 1752","line":" // cannot resolve the error set."}, {"lineNum":" 1753","line":" switch (self.builder.vcpkg_root) {"}, {"lineNum":" 1754","line":" .Unattempted => {"}, {"lineNum":" 1755","line":" self.builder.vcpkg_root = if (try findVcpkgRoot(self.builder.allocator)) |root|"}, {"lineNum":" 1756","line":" VcpkgRoot{ .Found = root }"}, {"lineNum":" 1757","line":" else"}, {"lineNum":" 1758","line":" .NotFound;"}, {"lineNum":" 1759","line":" },"}, {"lineNum":" 1760","line":" .NotFound => return error.VcpkgNotFound,"}, {"lineNum":" 1761","line":" .Found => {},"}, {"lineNum":" 1762","line":" }"}, {"lineNum":" 1763","line":""}, {"lineNum":" 1764","line":" switch (self.builder.vcpkg_root) {"}, {"lineNum":" 1765","line":" .Unattempted => unreachable,"}, {"lineNum":" 1766","line":" .NotFound => return error.VcpkgNotFound,"}, {"lineNum":" 1767","line":" .Found => |root| {"}, {"lineNum":" 1768","line":" const allocator = self.builder.allocator;"}, {"lineNum":" 1769","line":" const triplet = try self.target.vcpkgTriplet(allocator, linkage);"}, {"lineNum":" 1770","line":" defer self.builder.allocator.free(triplet);"}, {"lineNum":" 1771","line":""}, {"lineNum":" 1772","line":" const include_path = try fs.path.join(allocator, &[_][]const u8{ root, \"installed\", triplet, \"include\" });"}, {"lineNum":" 1773","line":" errdefer allocator.free(include_path);"}, {"lineNum":" 1774","line":" try self.include_dirs.append(IncludeDir{ .RawPath = include_path });"}, {"lineNum":" 1775","line":""}, {"lineNum":" 1776","line":" const lib_path = try fs.path.join(allocator, &[_][]const u8{ root, \"installed\", triplet, \"lib\" });"}, {"lineNum":" 1777","line":" try self.lib_paths.append(lib_path);"}, {"lineNum":" 1778","line":""}, {"lineNum":" 1779","line":" self.vcpkg_bin_path = try fs.path.join(allocator, &[_][]const u8{ root, \"installed\", triplet, \"bin\" });"}, {"lineNum":" 1780","line":" },"}, {"lineNum":" 1781","line":" }"}, {"lineNum":" 1782","line":" }"}, {"lineNum":" 1783","line":""}, {"lineNum":" 1784","line":" pub fn setExecCmd(self: *LibExeObjStep, args: []const ?[]const u8) void {"}, {"lineNum":" 1785","line":" assert(self.kind == Kind.Test);"}, {"lineNum":" 1786","line":" self.exec_cmd_args = args;"}, {"lineNum":" 1787","line":" }"}, {"lineNum":" 1788","line":""}, {"lineNum":" 1789","line":" pub fn enableSystemLinkerHack(self: *LibExeObjStep) void {"}, {"lineNum":" 1790","line":" self.system_linker_hack = true;"}, {"lineNum":" 1791","line":" }"}, {"lineNum":" 1792","line":""}, {"lineNum":" 1793","line":" fn linkLibraryOrObject(self: *LibExeObjStep, other: *LibExeObjStep) void {"}, {"lineNum":" 1794","line":" self.step.dependOn(&other.step);"}, {"lineNum":" 1795","line":" self.link_objects.append(LinkObject{ .OtherStep = other }) catch unreachable;"}, {"lineNum":" 1796","line":" self.include_dirs.append(IncludeDir{ .OtherStep = other }) catch unreachable;"}, {"lineNum":" 1797","line":""}, {"lineNum":" 1798","line":" // Inherit dependency on system libraries"}, {"lineNum":" 1799","line":" for (other.link_objects.span()) |link_object| {"}, {"lineNum":" 1800","line":" switch (link_object) {"}, {"lineNum":" 1801","line":" .SystemLib => |name| self.linkSystemLibrary(name),"}, {"lineNum":" 1802","line":" else => continue,"}, {"lineNum":" 1803","line":" }"}, {"lineNum":" 1804","line":" }"}, {"lineNum":" 1805","line":""}, {"lineNum":" 1806","line":" // Inherit dependencies on darwin frameworks"}, {"lineNum":" 1807","line":" if (self.target.isDarwin() and !other.isDynamicLibrary()) {"}, {"lineNum":" 1808","line":" var it = other.frameworks.iterator();"}, {"lineNum":" 1809","line":" while (it.next()) |entry| {"}, {"lineNum":" 1810","line":" self.frameworks.put(entry.key) catch unreachable;"}, {"lineNum":" 1811","line":" }"}, {"lineNum":" 1812","line":" }"}, {"lineNum":" 1813","line":" }"}, {"lineNum":" 1814","line":""}, {"lineNum":" 1815","line":" fn makePackageCmd(self: *LibExeObjStep, pkg: Pkg, zig_args: *ArrayList([]const u8)) error{OutOfMemory}!void {"}, {"lineNum":" 1816","line":" const builder = self.builder;"}, {"lineNum":" 1817","line":""}, {"lineNum":" 1818","line":" try zig_args.append(\"--pkg-begin\");"}, {"lineNum":" 1819","line":" try zig_args.append(pkg.name);"}, {"lineNum":" 1820","line":" try zig_args.append(builder.pathFromRoot(pkg.path));"}, {"lineNum":" 1821","line":""}, {"lineNum":" 1822","line":" if (pkg.dependencies) |dependencies| {"}, {"lineNum":" 1823","line":" for (dependencies) |sub_pkg| {"}, {"lineNum":" 1824","line":" try self.makePackageCmd(sub_pkg, zig_args);"}, {"lineNum":" 1825","line":" }"}, {"lineNum":" 1826","line":" }"}, {"lineNum":" 1827","line":""}, {"lineNum":" 1828","line":" try zig_args.append(\"--pkg-end\");"}, {"lineNum":" 1829","line":" }"}, {"lineNum":" 1830","line":""}, {"lineNum":" 1831","line":" fn make(step: *Step) !void {"}, {"lineNum":" 1832","line":" const self = @fieldParentPtr(LibExeObjStep, \"step\", step);"}, {"lineNum":" 1833","line":" const builder = self.builder;"}, {"lineNum":" 1834","line":""}, {"lineNum":" 1835","line":" if (self.root_src == null and self.link_objects.items.len == 0) {"}, {"lineNum":" 1836","line":" warn(\"{}: linker needs 1 or more objects to link\\n\", .{self.step.name});"}, {"lineNum":" 1837","line":" return error.NeedAnObject;"}, {"lineNum":" 1838","line":" }"}, {"lineNum":" 1839","line":""}, {"lineNum":" 1840","line":" var zig_args = ArrayList([]const u8).init(builder.allocator);"}, {"lineNum":" 1841","line":" defer zig_args.deinit();"}, {"lineNum":" 1842","line":""}, {"lineNum":" 1843","line":" zig_args.append(builder.zig_exe) catch unreachable;"}, {"lineNum":" 1844","line":""}, {"lineNum":" 1845","line":" const cmd = switch (self.kind) {"}, {"lineNum":" 1846","line":" Kind.Lib => \"build-lib\","}, {"lineNum":" 1847","line":" Kind.Exe => \"build-exe\","}, {"lineNum":" 1848","line":" Kind.Obj => \"build-obj\","}, {"lineNum":" 1849","line":" Kind.Test => \"test\","}, {"lineNum":" 1850","line":" };"}, {"lineNum":" 1851","line":" zig_args.append(cmd) catch unreachable;"}, {"lineNum":" 1852","line":""}, {"lineNum":" 1853","line":" if (self.root_src) |root_src| try zig_args.append(root_src.getPath(builder));"}, {"lineNum":" 1854","line":""}, {"lineNum":" 1855","line":" for (self.link_objects.span()) |link_object| {"}, {"lineNum":" 1856","line":" switch (link_object) {"}, {"lineNum":" 1857","line":" .StaticPath => |static_path| {"}, {"lineNum":" 1858","line":" try zig_args.append(\"--object\");"}, {"lineNum":" 1859","line":" try zig_args.append(builder.pathFromRoot(static_path));"}, {"lineNum":" 1860","line":" },"}, {"lineNum":" 1861","line":""}, {"lineNum":" 1862","line":" .OtherStep => |other| switch (other.kind) {"}, {"lineNum":" 1863","line":" .Exe => unreachable,"}, {"lineNum":" 1864","line":" .Test => unreachable,"}, {"lineNum":" 1865","line":" .Obj => {"}, {"lineNum":" 1866","line":" try zig_args.append(\"--object\");"}, {"lineNum":" 1867","line":" try zig_args.append(other.getOutputPath());"}, {"lineNum":" 1868","line":" },"}, {"lineNum":" 1869","line":" .Lib => {"}, {"lineNum":" 1870","line":" if (!other.is_dynamic or self.target.isWindows()) {"}, {"lineNum":" 1871","line":" try zig_args.append(\"--object\");"}, {"lineNum":" 1872","line":" try zig_args.append(other.getOutputLibPath());"}, {"lineNum":" 1873","line":" } else {"}, {"lineNum":" 1874","line":" const full_path_lib = other.getOutputPath();"}, {"lineNum":" 1875","line":" try zig_args.append(\"--library\");"}, {"lineNum":" 1876","line":" try zig_args.append(full_path_lib);"}, {"lineNum":" 1877","line":""}, {"lineNum":" 1878","line":" if (fs.path.dirname(full_path_lib)) |dirname| {"}, {"lineNum":" 1879","line":" try zig_args.append(\"-rpath\");"}, {"lineNum":" 1880","line":" try zig_args.append(dirname);"}, {"lineNum":" 1881","line":" }"}, {"lineNum":" 1882","line":" }"}, {"lineNum":" 1883","line":" },"}, {"lineNum":" 1884","line":" },"}, {"lineNum":" 1885","line":" .SystemLib => |name| {"}, {"lineNum":" 1886","line":" try zig_args.append(\"--library\");"}, {"lineNum":" 1887","line":" try zig_args.append(name);"}, {"lineNum":" 1888","line":" },"}, {"lineNum":" 1889","line":" .AssemblyFile => |asm_file| {"}, {"lineNum":" 1890","line":" try zig_args.append(\"--c-source\");"}, {"lineNum":" 1891","line":" try zig_args.append(asm_file.getPath(builder));"}, {"lineNum":" 1892","line":" },"}, {"lineNum":" 1893","line":" .CSourceFile => |c_source_file| {"}, {"lineNum":" 1894","line":" try zig_args.append(\"--c-source\");"}, {"lineNum":" 1895","line":" for (c_source_file.args) |arg| {"}, {"lineNum":" 1896","line":" try zig_args.append(arg);"}, {"lineNum":" 1897","line":" }"}, {"lineNum":" 1898","line":" try zig_args.append(c_source_file.source.getPath(builder));"}, {"lineNum":" 1899","line":" },"}, {"lineNum":" 1900","line":" }"}, {"lineNum":" 1901","line":" }"}, {"lineNum":" 1902","line":""}, {"lineNum":" 1903","line":" if (self.build_options_contents.items.len > 0) {"}, {"lineNum":" 1904","line":" const build_options_file = try fs.path.join("}, {"lineNum":" 1905","line":" builder.allocator,"}, {"lineNum":" 1906","line":" &[_][]const u8{ builder.cache_root, builder.fmt(\"{}_build_options.zig\", .{self.name}) },"}, {"lineNum":" 1907","line":" );"}, {"lineNum":" 1908","line":" try fs.cwd().writeFile(build_options_file, self.build_options_contents.span());"}, {"lineNum":" 1909","line":" try zig_args.append(\"--pkg-begin\");"}, {"lineNum":" 1910","line":" try zig_args.append(\"build_options\");"}, {"lineNum":" 1911","line":" try zig_args.append(builder.pathFromRoot(build_options_file));"}, {"lineNum":" 1912","line":" try zig_args.append(\"--pkg-end\");"}, {"lineNum":" 1913","line":" }"}, {"lineNum":" 1914","line":""}, {"lineNum":" 1915","line":" if (self.filter) |filter| {"}, {"lineNum":" 1916","line":" try zig_args.append(\"--test-filter\");"}, {"lineNum":" 1917","line":" try zig_args.append(filter);"}, {"lineNum":" 1918","line":" }"}, {"lineNum":" 1919","line":""}, {"lineNum":" 1920","line":" if (self.test_evented_io) {"}, {"lineNum":" 1921","line":" try zig_args.append(\"--test-evented-io\");"}, {"lineNum":" 1922","line":" }"}, {"lineNum":" 1923","line":""}, {"lineNum":" 1924","line":" if (self.name_prefix.len != 0) {"}, {"lineNum":" 1925","line":" try zig_args.append(\"--test-name-prefix\");"}, {"lineNum":" 1926","line":" try zig_args.append(self.name_prefix);"}, {"lineNum":" 1927","line":" }"}, {"lineNum":" 1928","line":""}, {"lineNum":" 1929","line":" if (builder.verbose_tokenize) zig_args.append(\"--verbose-tokenize\") catch unreachable;"}, {"lineNum":" 1930","line":" if (builder.verbose_ast) zig_args.append(\"--verbose-ast\") catch unreachable;"}, {"lineNum":" 1931","line":" if (builder.verbose_cimport) zig_args.append(\"--verbose-cimport\") catch unreachable;"}, {"lineNum":" 1932","line":" if (builder.verbose_ir) zig_args.append(\"--verbose-ir\") catch unreachable;"}, {"lineNum":" 1933","line":" if (builder.verbose_llvm_ir) zig_args.append(\"--verbose-llvm-ir\") catch unreachable;"}, {"lineNum":" 1934","line":" if (builder.verbose_link or self.verbose_link) zig_args.append(\"--verbose-link\") catch unreachable;"}, {"lineNum":" 1935","line":" if (builder.verbose_cc or self.verbose_cc) zig_args.append(\"--verbose-cc\") catch unreachable;"}, {"lineNum":" 1936","line":" if (builder.verbose_llvm_cpu_features) zig_args.append(\"--verbose-llvm-cpu-features\") catch unreachable;"}, {"lineNum":" 1937","line":""}, {"lineNum":" 1938","line":" if (self.emit_llvm_ir) try zig_args.append(\"-femit-llvm-ir\");"}, {"lineNum":" 1939","line":" if (self.emit_asm) try zig_args.append(\"-femit-asm\");"}, {"lineNum":" 1940","line":" if (!self.emit_bin) try zig_args.append(\"-fno-emit-bin\");"}, {"lineNum":" 1941","line":" if (self.emit_h) try zig_args.append(\"-femit-h\");"}, {"lineNum":" 1942","line":""}, {"lineNum":" 1943","line":" if (self.strip) {"}, {"lineNum":" 1944","line":" try zig_args.append(\"--strip\");"}, {"lineNum":" 1945","line":" }"}, {"lineNum":" 1946","line":" if (self.link_eh_frame_hdr) {"}, {"lineNum":" 1947","line":" try zig_args.append(\"--eh-frame-hdr\");"}, {"lineNum":" 1948","line":" }"}, {"lineNum":" 1949","line":" if (self.link_function_sections) {"}, {"lineNum":" 1950","line":" try zig_args.append(\"-ffunction-sections\");"}, {"lineNum":" 1951","line":" }"}, {"lineNum":" 1952","line":" if (self.single_threaded) {"}, {"lineNum":" 1953","line":" try zig_args.append(\"--single-threaded\");"}, {"lineNum":" 1954","line":" }"}, {"lineNum":" 1955","line":""}, {"lineNum":" 1956","line":" if (self.libc_file) |libc_file| {"}, {"lineNum":" 1957","line":" try zig_args.append(\"--libc\");"}, {"lineNum":" 1958","line":" try zig_args.append(builder.pathFromRoot(libc_file));"}, {"lineNum":" 1959","line":" }"}, {"lineNum":" 1960","line":""}, {"lineNum":" 1961","line":" switch (self.build_mode) {"}, {"lineNum":" 1962","line":" .Debug => {},"}, {"lineNum":" 1963","line":" .ReleaseSafe => zig_args.append(\"--release-safe\") catch unreachable,"}, {"lineNum":" 1964","line":" .ReleaseFast => zig_args.append(\"--release-fast\") catch unreachable,"}, {"lineNum":" 1965","line":" .ReleaseSmall => zig_args.append(\"--release-small\") catch unreachable,"}, {"lineNum":" 1966","line":" }"}, {"lineNum":" 1967","line":""}, {"lineNum":" 1968","line":" try zig_args.append(\"--cache-dir\");"}, {"lineNum":" 1969","line":" try zig_args.append(builder.pathFromRoot(builder.cache_root));"}, {"lineNum":" 1970","line":""}, {"lineNum":" 1971","line":" zig_args.append(\"--name\") catch unreachable;"}, {"lineNum":" 1972","line":" zig_args.append(self.name) catch unreachable;"}, {"lineNum":" 1973","line":""}, {"lineNum":" 1974","line":" if (self.kind == Kind.Lib and self.is_dynamic) {"}, {"lineNum":" 1975","line":" zig_args.append(\"--ver-major\") catch unreachable;"}, {"lineNum":" 1976","line":" zig_args.append(builder.fmt(\"{}\", .{self.version.major})) catch unreachable;"}, {"lineNum":" 1977","line":""}, {"lineNum":" 1978","line":" zig_args.append(\"--ver-minor\") catch unreachable;"}, {"lineNum":" 1979","line":" zig_args.append(builder.fmt(\"{}\", .{self.version.minor})) catch unreachable;"}, {"lineNum":" 1980","line":""}, {"lineNum":" 1981","line":" zig_args.append(\"--ver-patch\") catch unreachable;"}, {"lineNum":" 1982","line":" zig_args.append(builder.fmt(\"{}\", .{self.version.patch})) catch unreachable;"}, {"lineNum":" 1983","line":" }"}, {"lineNum":" 1984","line":" if (self.is_dynamic) {"}, {"lineNum":" 1985","line":" try zig_args.append(\"-dynamic\");"}, {"lineNum":" 1986","line":" }"}, {"lineNum":" 1987","line":" if (self.bundle_compiler_rt) {"}, {"lineNum":" 1988","line":" try zig_args.append(\"--bundle-compiler-rt\");"}, {"lineNum":" 1989","line":" }"}, {"lineNum":" 1990","line":" if (self.disable_stack_probing) {"}, {"lineNum":" 1991","line":" try zig_args.append(\"-fno-stack-check\");"}, {"lineNum":" 1992","line":" }"}, {"lineNum":" 1993","line":" if (self.disable_sanitize_c) {"}, {"lineNum":" 1994","line":" try zig_args.append(\"-fno-sanitize-c\");"}, {"lineNum":" 1995","line":" }"}, {"lineNum":" 1996","line":""}, {"lineNum":" 1997","line":" if (self.code_model != .default) {"}, {"lineNum":" 1998","line":" try zig_args.append(\"-code-model\");"}, {"lineNum":" 1999","line":" try zig_args.append(@tagName(self.code_model));"}, {"lineNum":" 2000","line":" }"}, {"lineNum":" 2001","line":""}, {"lineNum":" 2002","line":" if (!self.target.isNative()) {"}, {"lineNum":" 2003","line":" try zig_args.append(\"-target\");"}, {"lineNum":" 2004","line":" try zig_args.append(try self.target.zigTriple(builder.allocator));"}, {"lineNum":" 2005","line":""}, {"lineNum":" 2006","line":" // TODO this logic can disappear if cpu model + features becomes part of the target triple"}, {"lineNum":" 2007","line":" const cross = self.target.toTarget();"}, {"lineNum":" 2008","line":" const all_features = cross.cpu.arch.allFeaturesList();"}, {"lineNum":" 2009","line":" var populated_cpu_features = cross.cpu.model.features;"}, {"lineNum":" 2010","line":" populated_cpu_features.populateDependencies(all_features);"}, {"lineNum":" 2011","line":""}, {"lineNum":" 2012","line":" if (populated_cpu_features.eql(cross.cpu.features)) {"}, {"lineNum":" 2013","line":" // The CPU name alone is sufficient."}, {"lineNum":" 2014","line":" // If it is the baseline CPU, no command line args are required."}, {"lineNum":" 2015","line":" if (cross.cpu.model != std.Target.Cpu.baseline(cross.cpu.arch).model) {"}, {"lineNum":" 2016","line":" try zig_args.append(\"-mcpu\");"}, {"lineNum":" 2017","line":" try zig_args.append(cross.cpu.model.name);"}, {"lineNum":" 2018","line":" }"}, {"lineNum":" 2019","line":" } else {"}, {"lineNum":" 2020","line":" var mcpu_buffer = std.ArrayList(u8).init(builder.allocator);"}, {"lineNum":" 2021","line":""}, {"lineNum":" 2022","line":" try mcpu_buffer.outStream().print(\"-mcpu={}\", .{cross.cpu.model.name});"}, {"lineNum":" 2023","line":""}, {"lineNum":" 2024","line":" for (all_features) |feature, i_usize| {"}, {"lineNum":" 2025","line":" const i = @intCast(std.Target.Cpu.Feature.Set.Index, i_usize);"}, {"lineNum":" 2026","line":" const in_cpu_set = populated_cpu_features.isEnabled(i);"}, {"lineNum":" 2027","line":" const in_actual_set = cross.cpu.features.isEnabled(i);"}, {"lineNum":" 2028","line":" if (in_cpu_set and !in_actual_set) {"}, {"lineNum":" 2029","line":" try mcpu_buffer.outStream().print(\"-{}\", .{feature.name});"}, {"lineNum":" 2030","line":" } else if (!in_cpu_set and in_actual_set) {"}, {"lineNum":" 2031","line":" try mcpu_buffer.outStream().print(\"+{}\", .{feature.name});"}, {"lineNum":" 2032","line":" }"}, {"lineNum":" 2033","line":" }"}, {"lineNum":" 2034","line":""}, {"lineNum":" 2035","line":" try zig_args.append(mcpu_buffer.toOwnedSlice());"}, {"lineNum":" 2036","line":" }"}, {"lineNum":" 2037","line":""}, {"lineNum":" 2038","line":" if (self.target.dynamic_linker.get()) |dynamic_linker| {"}, {"lineNum":" 2039","line":" try zig_args.append(\"--dynamic-linker\");"}, {"lineNum":" 2040","line":" try zig_args.append(dynamic_linker);"}, {"lineNum":" 2041","line":" }"}, {"lineNum":" 2042","line":" }"}, {"lineNum":" 2043","line":""}, {"lineNum":" 2044","line":" if (self.linker_script) |linker_script| {"}, {"lineNum":" 2045","line":" zig_args.append(\"--linker-script\") catch unreachable;"}, {"lineNum":" 2046","line":" zig_args.append(builder.pathFromRoot(linker_script)) catch unreachable;"}, {"lineNum":" 2047","line":" }"}, {"lineNum":" 2048","line":""}, {"lineNum":" 2049","line":" if (self.version_script) |version_script| {"}, {"lineNum":" 2050","line":" try zig_args.append(\"--version-script\");"}, {"lineNum":" 2051","line":" try zig_args.append(builder.pathFromRoot(version_script));"}, {"lineNum":" 2052","line":" }"}, {"lineNum":" 2053","line":""}, {"lineNum":" 2054","line":" if (self.exec_cmd_args) |exec_cmd_args| {"}, {"lineNum":" 2055","line":" for (exec_cmd_args) |cmd_arg| {"}, {"lineNum":" 2056","line":" if (cmd_arg) |arg| {"}, {"lineNum":" 2057","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2058","line":" try zig_args.append(arg);"}, {"lineNum":" 2059","line":" } else {"}, {"lineNum":" 2060","line":" try zig_args.append(\"--test-cmd-bin\");"}, {"lineNum":" 2061","line":" }"}, {"lineNum":" 2062","line":" }"}, {"lineNum":" 2063","line":" } else switch (self.target.getExternalExecutor()) {"}, {"lineNum":" 2064","line":" .native, .unavailable => {},"}, {"lineNum":" 2065","line":" .qemu => |bin_name| if (self.enable_qemu) qemu: {"}, {"lineNum":" 2066","line":" const need_cross_glibc = self.target.isGnuLibC() and self.is_linking_libc;"}, {"lineNum":" 2067","line":" const glibc_dir_arg = if (need_cross_glibc)"}, {"lineNum":" 2068","line":" self.glibc_multi_install_dir orelse break :qemu"}, {"lineNum":" 2069","line":" else"}, {"lineNum":" 2070","line":" null;"}, {"lineNum":" 2071","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2072","line":" try zig_args.append(bin_name);"}, {"lineNum":" 2073","line":" if (glibc_dir_arg) |dir| {"}, {"lineNum":" 2074","line":" const full_dir = try fs.path.join(builder.allocator, &[_][]const u8{"}, {"lineNum":" 2075","line":" dir,"}, {"lineNum":" 2076","line":" try self.target.linuxTriple(builder.allocator),"}, {"lineNum":" 2077","line":" });"}, {"lineNum":" 2078","line":""}, {"lineNum":" 2079","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2080","line":" try zig_args.append(\"-L\");"}, {"lineNum":" 2081","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2082","line":" try zig_args.append(full_dir);"}, {"lineNum":" 2083","line":" }"}, {"lineNum":" 2084","line":" try zig_args.append(\"--test-cmd-bin\");"}, {"lineNum":" 2085","line":" },"}, {"lineNum":" 2086","line":" .wine => |bin_name| if (self.enable_wine) {"}, {"lineNum":" 2087","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2088","line":" try zig_args.append(bin_name);"}, {"lineNum":" 2089","line":" try zig_args.append(\"--test-cmd-bin\");"}, {"lineNum":" 2090","line":" },"}, {"lineNum":" 2091","line":" .wasmtime => |bin_name| if (self.enable_wasmtime) {"}, {"lineNum":" 2092","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2093","line":" try zig_args.append(bin_name);"}, {"lineNum":" 2094","line":" try zig_args.append(\"--test-cmd\");"}, {"lineNum":" 2095","line":" try zig_args.append(\"--dir=.\");"}, {"lineNum":" 2096","line":" try zig_args.append(\"--test-cmd-bin\");"}, {"lineNum":" 2097","line":" },"}, {"lineNum":" 2098","line":" }"}, {"lineNum":" 2099","line":""}, {"lineNum":" 2100","line":" for (self.packages.span()) |pkg| {"}, {"lineNum":" 2101","line":" try self.makePackageCmd(pkg, &zig_args);"}, {"lineNum":" 2102","line":" }"}, {"lineNum":" 2103","line":""}, {"lineNum":" 2104","line":" for (self.include_dirs.span()) |include_dir| {"}, {"lineNum":" 2105","line":" switch (include_dir) {"}, {"lineNum":" 2106","line":" .RawPath => |include_path| {"}, {"lineNum":" 2107","line":" try zig_args.append(\"-I\");"}, {"lineNum":" 2108","line":" try zig_args.append(self.builder.pathFromRoot(include_path));"}, {"lineNum":" 2109","line":" },"}, {"lineNum":" 2110","line":" .RawPathSystem => |include_path| {"}, {"lineNum":" 2111","line":" try zig_args.append(\"-isystem\");"}, {"lineNum":" 2112","line":" try zig_args.append(self.builder.pathFromRoot(include_path));"}, {"lineNum":" 2113","line":" },"}, {"lineNum":" 2114","line":" .OtherStep => |other| if (other.emit_h) {"}, {"lineNum":" 2115","line":" const h_path = other.getOutputHPath();"}, {"lineNum":" 2116","line":" try zig_args.append(\"-isystem\");"}, {"lineNum":" 2117","line":" try zig_args.append(fs.path.dirname(h_path).?);"}, {"lineNum":" 2118","line":" },"}, {"lineNum":" 2119","line":" }"}, {"lineNum":" 2120","line":" }"}, {"lineNum":" 2121","line":""}, {"lineNum":" 2122","line":" for (self.lib_paths.span()) |lib_path| {"}, {"lineNum":" 2123","line":" try zig_args.append(\"-L\");"}, {"lineNum":" 2124","line":" try zig_args.append(lib_path);"}, {"lineNum":" 2125","line":" }"}, {"lineNum":" 2126","line":""}, {"lineNum":" 2127","line":" for (self.c_macros.span()) |c_macro| {"}, {"lineNum":" 2128","line":" try zig_args.append(\"-D\");"}, {"lineNum":" 2129","line":" try zig_args.append(c_macro);"}, {"lineNum":" 2130","line":" }"}, {"lineNum":" 2131","line":""}, {"lineNum":" 2132","line":" if (self.target.isDarwin()) {"}, {"lineNum":" 2133","line":" for (self.framework_dirs.span()) |dir| {"}, {"lineNum":" 2134","line":" try zig_args.append(\"-F\");"}, {"lineNum":" 2135","line":" try zig_args.append(dir);"}, {"lineNum":" 2136","line":" }"}, {"lineNum":" 2137","line":""}, {"lineNum":" 2138","line":" var it = self.frameworks.iterator();"}, {"lineNum":" 2139","line":" while (it.next()) |entry| {"}, {"lineNum":" 2140","line":" zig_args.append(\"-framework\") catch unreachable;"}, {"lineNum":" 2141","line":" zig_args.append(entry.key) catch unreachable;"}, {"lineNum":" 2142","line":" }"}, {"lineNum":" 2143","line":" }"}, {"lineNum":" 2144","line":""}, {"lineNum":" 2145","line":" if (self.system_linker_hack) {"}, {"lineNum":" 2146","line":" try zig_args.append(\"--system-linker-hack\");"}, {"lineNum":" 2147","line":" }"}, {"lineNum":" 2148","line":""}, {"lineNum":" 2149","line":" if (self.valgrind_support) |valgrind_support| {"}, {"lineNum":" 2150","line":" if (valgrind_support) {"}, {"lineNum":" 2151","line":" try zig_args.append(\"--enable-valgrind\");"}, {"lineNum":" 2152","line":" } else {"}, {"lineNum":" 2153","line":" try zig_args.append(\"--disable-valgrind\");"}, {"lineNum":" 2154","line":" }"}, {"lineNum":" 2155","line":" }"}, {"lineNum":" 2156","line":""}, {"lineNum":" 2157","line":" if (self.override_lib_dir) |dir| {"}, {"lineNum":" 2158","line":" try zig_args.append(\"--override-lib-dir\");"}, {"lineNum":" 2159","line":" try zig_args.append(builder.pathFromRoot(dir));"}, {"lineNum":" 2160","line":" } else if (self.builder.override_lib_dir) |dir| {"}, {"lineNum":" 2161","line":" try zig_args.append(\"--override-lib-dir\");"}, {"lineNum":" 2162","line":" try zig_args.append(builder.pathFromRoot(dir));"}, {"lineNum":" 2163","line":" }"}, {"lineNum":" 2164","line":""}, {"lineNum":" 2165","line":" if (self.main_pkg_path) |dir| {"}, {"lineNum":" 2166","line":" try zig_args.append(\"--main-pkg-path\");"}, {"lineNum":" 2167","line":" try zig_args.append(builder.pathFromRoot(dir));"}, {"lineNum":" 2168","line":" }"}, {"lineNum":" 2169","line":""}, {"lineNum":" 2170","line":" if (self.force_pic) |pic| {"}, {"lineNum":" 2171","line":" if (pic) {"}, {"lineNum":" 2172","line":" try zig_args.append(\"-fPIC\");"}, {"lineNum":" 2173","line":" } else {"}, {"lineNum":" 2174","line":" try zig_args.append(\"-fno-PIC\");"}, {"lineNum":" 2175","line":" }"}, {"lineNum":" 2176","line":" }"}, {"lineNum":" 2177","line":""}, {"lineNum":" 2178","line":" if (self.subsystem) |subsystem| {"}, {"lineNum":" 2179","line":" try zig_args.append(\"--subsystem\");"}, {"lineNum":" 2180","line":" try zig_args.append(switch (subsystem) {"}, {"lineNum":" 2181","line":" .Console => \"console\","}, {"lineNum":" 2182","line":" .Windows => \"windows\","}, {"lineNum":" 2183","line":" .Posix => \"posix\","}, {"lineNum":" 2184","line":" .Native => \"native\","}, {"lineNum":" 2185","line":" .EfiApplication => \"efi_application\","}, {"lineNum":" 2186","line":" .EfiBootServiceDriver => \"efi_boot_service_driver\","}, {"lineNum":" 2187","line":" .EfiRom => \"efi_rom\","}, {"lineNum":" 2188","line":" .EfiRuntimeDriver => \"efi_runtime_driver\","}, {"lineNum":" 2189","line":" });"}, {"lineNum":" 2190","line":" }"}, {"lineNum":" 2191","line":""}, {"lineNum":" 2192","line":" if (self.kind == Kind.Test) {"}, {"lineNum":" 2193","line":" try builder.spawnChild(zig_args.span());"}, {"lineNum":" 2194","line":" } else {"}, {"lineNum":" 2195","line":" try zig_args.append(\"--cache\");"}, {"lineNum":" 2196","line":" try zig_args.append(\"on\");"}, {"lineNum":" 2197","line":""}, {"lineNum":" 2198","line":" const output_dir_nl = try builder.execFromStep(zig_args.span(), &self.step);"}, {"lineNum":" 2199","line":" const build_output_dir = mem.trimRight(u8, output_dir_nl, \"\\r\\n\");"}, {"lineNum":" 2200","line":""}, {"lineNum":" 2201","line":" if (self.output_dir) |output_dir| {"}, {"lineNum":" 2202","line":" var src_dir = try std.fs.cwd().openDir(build_output_dir, .{ .iterate = true });"}, {"lineNum":" 2203","line":" defer src_dir.close();"}, {"lineNum":" 2204","line":""}, {"lineNum":" 2205","line":" // Create the output directory if it doesn\'t exist."}, {"lineNum":" 2206","line":" try std.fs.cwd().makePath(output_dir);"}, {"lineNum":" 2207","line":""}, {"lineNum":" 2208","line":" var dest_dir = try std.fs.cwd().openDir(output_dir, .{});"}, {"lineNum":" 2209","line":" defer dest_dir.close();"}, {"lineNum":" 2210","line":""}, {"lineNum":" 2211","line":" var it = src_dir.iterate();"}, {"lineNum":" 2212","line":" while (try it.next()) |entry| {"}, {"lineNum":" 2213","line":" _ = try src_dir.updateFile(entry.name, dest_dir, entry.name, .{});"}, {"lineNum":" 2214","line":" }"}, {"lineNum":" 2215","line":" } else {"}, {"lineNum":" 2216","line":" self.output_dir = build_output_dir;"}, {"lineNum":" 2217","line":" }"}, {"lineNum":" 2218","line":" }"}, {"lineNum":" 2219","line":""}, {"lineNum":" 2220","line":" if (self.kind == Kind.Lib and self.is_dynamic and self.target.wantSharedLibSymLinks()) {"}, {"lineNum":" 2221","line":" try doAtomicSymLinks(builder.allocator, self.getOutputPath(), self.major_only_filename, self.name_only_filename);"}, {"lineNum":" 2222","line":" }"}, {"lineNum":" 2223","line":" }"}, {"lineNum":" 2224","line":"};"}, {"lineNum":" 2225","line":""}, {"lineNum":" 2226","line":"const InstallArtifactStep = struct {"}, {"lineNum":" 2227","line":" step: Step,"}, {"lineNum":" 2228","line":" builder: *Builder,"}, {"lineNum":" 2229","line":" artifact: *LibExeObjStep,"}, {"lineNum":" 2230","line":" dest_dir: InstallDir,"}, {"lineNum":" 2231","line":" pdb_dir: ?InstallDir,"}, {"lineNum":" 2232","line":" h_dir: ?InstallDir,"}, {"lineNum":" 2233","line":""}, {"lineNum":" 2234","line":" const Self = @This();"}, {"lineNum":" 2235","line":""}, {"lineNum":" 2236","line":" pub fn create(builder: *Builder, artifact: *LibExeObjStep) *Self {"}, {"lineNum":" 2237","line":" if (artifact.install_step) |s| return s;"}, {"lineNum":" 2238","line":""}, {"lineNum":" 2239","line":" const self = builder.allocator.create(Self) catch unreachable;"}, {"lineNum":" 2240","line":" self.* = Self{"}, {"lineNum":" 2241","line":" .builder = builder,"}, {"lineNum":" 2242","line":" .step = Step.init(builder.fmt(\"install {}\", .{artifact.step.name}), builder.allocator, make),"}, {"lineNum":" 2243","line":" .artifact = artifact,"}, {"lineNum":" 2244","line":" .dest_dir = switch (artifact.kind) {"}, {"lineNum":" 2245","line":" .Obj => unreachable,"}, {"lineNum":" 2246","line":" .Test => unreachable,"}, {"lineNum":" 2247","line":" .Exe => .Bin,"}, {"lineNum":" 2248","line":" .Lib => .Lib,"}, {"lineNum":" 2249","line":" },"}, {"lineNum":" 2250","line":" .pdb_dir = if (artifact.producesPdbFile()) blk: {"}, {"lineNum":" 2251","line":" if (artifact.kind == .Exe) {"}, {"lineNum":" 2252","line":" break :blk InstallDir.Bin;"}, {"lineNum":" 2253","line":" } else {"}, {"lineNum":" 2254","line":" break :blk InstallDir.Lib;"}, {"lineNum":" 2255","line":" }"}, {"lineNum":" 2256","line":" } else null,"}, {"lineNum":" 2257","line":" .h_dir = if (artifact.kind == .Lib and artifact.emit_h) .Header else null,"}, {"lineNum":" 2258","line":" };"}, {"lineNum":" 2259","line":" self.step.dependOn(&artifact.step);"}, {"lineNum":" 2260","line":" artifact.install_step = self;"}, {"lineNum":" 2261","line":""}, {"lineNum":" 2262","line":" builder.pushInstalledFile(self.dest_dir, artifact.out_filename);"}, {"lineNum":" 2263","line":" if (self.artifact.isDynamicLibrary()) {"}, {"lineNum":" 2264","line":" builder.pushInstalledFile(.Lib, artifact.major_only_filename);"}, {"lineNum":" 2265","line":" builder.pushInstalledFile(.Lib, artifact.name_only_filename);"}, {"lineNum":" 2266","line":" if (self.artifact.target.isWindows()) {"}, {"lineNum":" 2267","line":" builder.pushInstalledFile(.Lib, artifact.out_lib_filename);"}, {"lineNum":" 2268","line":" }"}, {"lineNum":" 2269","line":" }"}, {"lineNum":" 2270","line":" if (self.pdb_dir) |pdb_dir| {"}, {"lineNum":" 2271","line":" builder.pushInstalledFile(pdb_dir, artifact.out_pdb_filename);"}, {"lineNum":" 2272","line":" }"}, {"lineNum":" 2273","line":" if (self.h_dir) |h_dir| {"}, {"lineNum":" 2274","line":" builder.pushInstalledFile(h_dir, artifact.out_h_filename);"}, {"lineNum":" 2275","line":" }"}, {"lineNum":" 2276","line":" return self;"}, {"lineNum":" 2277","line":" }"}, {"lineNum":" 2278","line":""}, {"lineNum":" 2279","line":" fn make(step: *Step) !void {"}, {"lineNum":" 2280","line":" const self = @fieldParentPtr(Self, \"step\", step);"}, {"lineNum":" 2281","line":" const builder = self.builder;"}, {"lineNum":" 2282","line":""}, {"lineNum":" 2283","line":" const full_dest_path = builder.getInstallPath(self.dest_dir, self.artifact.out_filename);"}, {"lineNum":" 2284","line":" try builder.updateFile(self.artifact.getOutputPath(), full_dest_path);"}, {"lineNum":" 2285","line":" if (self.artifact.isDynamicLibrary() and self.artifact.target.wantSharedLibSymLinks()) {"}, {"lineNum":" 2286","line":" try doAtomicSymLinks(builder.allocator, full_dest_path, self.artifact.major_only_filename, self.artifact.name_only_filename);"}, {"lineNum":" 2287","line":" }"}, {"lineNum":" 2288","line":" if (self.pdb_dir) |pdb_dir| {"}, {"lineNum":" 2289","line":" const full_pdb_path = builder.getInstallPath(pdb_dir, self.artifact.out_pdb_filename);"}, {"lineNum":" 2290","line":" try builder.updateFile(self.artifact.getOutputPdbPath(), full_pdb_path);"}, {"lineNum":" 2291","line":" }"}, {"lineNum":" 2292","line":" if (self.h_dir) |h_dir| {"}, {"lineNum":" 2293","line":" const full_pdb_path = builder.getInstallPath(h_dir, self.artifact.out_h_filename);"}, {"lineNum":" 2294","line":" try builder.updateFile(self.artifact.getOutputHPath(), full_pdb_path);"}, {"lineNum":" 2295","line":" }"}, {"lineNum":" 2296","line":" self.artifact.installed_path = full_dest_path;"}, {"lineNum":" 2297","line":" }"}, {"lineNum":" 2298","line":"};"}, {"lineNum":" 2299","line":""}, {"lineNum":" 2300","line":"pub const InstallFileStep = struct {"}, {"lineNum":" 2301","line":" step: Step,"}, {"lineNum":" 2302","line":" builder: *Builder,"}, {"lineNum":" 2303","line":" src_path: []const u8,"}, {"lineNum":" 2304","line":" dir: InstallDir,"}, {"lineNum":" 2305","line":" dest_rel_path: []const u8,"}, {"lineNum":" 2306","line":""}, {"lineNum":" 2307","line":" pub fn init("}, {"lineNum":" 2308","line":" builder: *Builder,"}, {"lineNum":" 2309","line":" src_path: []const u8,"}, {"lineNum":" 2310","line":" dir: InstallDir,"}, {"lineNum":" 2311","line":" dest_rel_path: []const u8,"}, {"lineNum":" 2312","line":" ) InstallFileStep {"}, {"lineNum":" 2313","line":" builder.pushInstalledFile(dir, dest_rel_path);"}, {"lineNum":" 2314","line":" return InstallFileStep{"}, {"lineNum":" 2315","line":" .builder = builder,"}, {"lineNum":" 2316","line":" .step = Step.init(builder.fmt(\"install {}\", .{src_path}), builder.allocator, make),"}, {"lineNum":" 2317","line":" .src_path = src_path,"}, {"lineNum":" 2318","line":" .dir = dir,"}, {"lineNum":" 2319","line":" .dest_rel_path = dest_rel_path,"}, {"lineNum":" 2320","line":" };"}, {"lineNum":" 2321","line":" }"}, {"lineNum":" 2322","line":""}, {"lineNum":" 2323","line":" fn make(step: *Step) !void {"}, {"lineNum":" 2324","line":" const self = @fieldParentPtr(InstallFileStep, \"step\", step);"}, {"lineNum":" 2325","line":" const full_dest_path = self.builder.getInstallPath(self.dir, self.dest_rel_path);"}, {"lineNum":" 2326","line":" const full_src_path = self.builder.pathFromRoot(self.src_path);"}, {"lineNum":" 2327","line":" try self.builder.updateFile(full_src_path, full_dest_path);"}, {"lineNum":" 2328","line":" }"}, {"lineNum":" 2329","line":"};"}, {"lineNum":" 2330","line":""}, {"lineNum":" 2331","line":"pub const InstallDirectoryOptions = struct {"}, {"lineNum":" 2332","line":" source_dir: []const u8,"}, {"lineNum":" 2333","line":" install_dir: InstallDir,"}, {"lineNum":" 2334","line":" install_subdir: []const u8,"}, {"lineNum":" 2335","line":" exclude_extensions: ?[]const []const u8 = null,"}, {"lineNum":" 2336","line":"};"}, {"lineNum":" 2337","line":""}, {"lineNum":" 2338","line":"pub const InstallDirStep = struct {"}, {"lineNum":" 2339","line":" step: Step,"}, {"lineNum":" 2340","line":" builder: *Builder,"}, {"lineNum":" 2341","line":" options: InstallDirectoryOptions,"}, {"lineNum":" 2342","line":""}, {"lineNum":" 2343","line":" pub fn init("}, {"lineNum":" 2344","line":" builder: *Builder,"}, {"lineNum":" 2345","line":" options: InstallDirectoryOptions,"}, {"lineNum":" 2346","line":" ) InstallDirStep {"}, {"lineNum":" 2347","line":" builder.pushInstalledFile(options.install_dir, options.install_subdir);"}, {"lineNum":" 2348","line":" return InstallDirStep{"}, {"lineNum":" 2349","line":" .builder = builder,"}, {"lineNum":" 2350","line":" .step = Step.init(builder.fmt(\"install {}/\", .{options.source_dir}), builder.allocator, make),"}, {"lineNum":" 2351","line":" .options = options,"}, {"lineNum":" 2352","line":" };"}, {"lineNum":" 2353","line":" }"}, {"lineNum":" 2354","line":""}, {"lineNum":" 2355","line":" fn make(step: *Step) !void {"}, {"lineNum":" 2356","line":" const self = @fieldParentPtr(InstallDirStep, \"step\", step);"}, {"lineNum":" 2357","line":" const dest_prefix = self.builder.getInstallPath(self.options.install_dir, self.options.install_subdir);"}, {"lineNum":" 2358","line":" const full_src_dir = self.builder.pathFromRoot(self.options.source_dir);"}, {"lineNum":" 2359","line":" var it = try fs.walkPath(self.builder.allocator, full_src_dir);"}, {"lineNum":" 2360","line":" next_entry: while (try it.next()) |entry| {"}, {"lineNum":" 2361","line":" if (self.options.exclude_extensions) |ext_list| for (ext_list) |ext| {"}, {"lineNum":" 2362","line":" if (mem.endsWith(u8, entry.path, ext)) {"}, {"lineNum":" 2363","line":" continue :next_entry;"}, {"lineNum":" 2364","line":" }"}, {"lineNum":" 2365","line":" };"}, {"lineNum":" 2366","line":""}, {"lineNum":" 2367","line":" const rel_path = entry.path[full_src_dir.len + 1 ..];"}, {"lineNum":" 2368","line":" const dest_path = try fs.path.join(self.builder.allocator, &[_][]const u8{ dest_prefix, rel_path });"}, {"lineNum":" 2369","line":" switch (entry.kind) {"}, {"lineNum":" 2370","line":" .Directory => try fs.cwd().makePath(dest_path),"}, {"lineNum":" 2371","line":" .File => try self.builder.updateFile(entry.path, dest_path),"}, {"lineNum":" 2372","line":" else => continue,"}, {"lineNum":" 2373","line":" }"}, {"lineNum":" 2374","line":" }"}, {"lineNum":" 2375","line":" }"}, {"lineNum":" 2376","line":"};"}, {"lineNum":" 2377","line":""}, {"lineNum":" 2378","line":"pub const LogStep = struct {"}, {"lineNum":" 2379","line":" step: Step,"}, {"lineNum":" 2380","line":" builder: *Builder,"}, {"lineNum":" 2381","line":" data: []const u8,"}, {"lineNum":" 2382","line":""}, {"lineNum":" 2383","line":" pub fn init(builder: *Builder, data: []const u8) LogStep {"}, {"lineNum":" 2384","line":" return LogStep{"}, {"lineNum":" 2385","line":" .builder = builder,"}, {"lineNum":" 2386","line":" .step = Step.init(builder.fmt(\"log {}\", .{data}), builder.allocator, make),"}, {"lineNum":" 2387","line":" .data = data,"}, {"lineNum":" 2388","line":" };"}, {"lineNum":" 2389","line":" }"}, {"lineNum":" 2390","line":""}, {"lineNum":" 2391","line":" fn make(step: *Step) anyerror!void {"}, {"lineNum":" 2392","line":" const self = @fieldParentPtr(LogStep, \"step\", step);"}, {"lineNum":" 2393","line":" warn(\"{}\", .{self.data});"}, {"lineNum":" 2394","line":" }"}, {"lineNum":" 2395","line":"};"}, {"lineNum":" 2396","line":""}, {"lineNum":" 2397","line":"pub const RemoveDirStep = struct {"}, {"lineNum":" 2398","line":" step: Step,"}, {"lineNum":" 2399","line":" builder: *Builder,"}, {"lineNum":" 2400","line":" dir_path: []const u8,"}, {"lineNum":" 2401","line":""}, {"lineNum":" 2402","line":" pub fn init(builder: *Builder, dir_path: []const u8) RemoveDirStep {"}, {"lineNum":" 2403","line":" return RemoveDirStep{"}, {"lineNum":" 2404","line":" .builder = builder,"}, {"lineNum":" 2405","line":" .step = Step.init(builder.fmt(\"RemoveDir {}\", .{dir_path}), builder.allocator, make),"}, {"lineNum":" 2406","line":" .dir_path = dir_path,"}, {"lineNum":" 2407","line":" };"}, {"lineNum":" 2408","line":" }"}, {"lineNum":" 2409","line":""}, {"lineNum":" 2410","line":" fn make(step: *Step) !void {"}, {"lineNum":" 2411","line":" const self = @fieldParentPtr(RemoveDirStep, \"step\", step);"}, {"lineNum":" 2412","line":""}, {"lineNum":" 2413","line":" const full_path = self.builder.pathFromRoot(self.dir_path);"}, {"lineNum":" 2414","line":" fs.cwd().deleteTree(full_path) catch |err| {"}, {"lineNum":" 2415","line":" warn(\"Unable to remove {}: {}\\n\", .{ full_path, @errorName(err) });"}, {"lineNum":" 2416","line":" return err;"}, {"lineNum":" 2417","line":" };"}, {"lineNum":" 2418","line":" }"}, {"lineNum":" 2419","line":"};"}, {"lineNum":" 2420","line":""}, {"lineNum":" 2421","line":"pub const Step = struct {"}, {"lineNum":" 2422","line":" name: []const u8,"}, {"lineNum":" 2423","line":" makeFn: fn (self: *Step) anyerror!void,"}, {"lineNum":" 2424","line":" dependencies: ArrayList(*Step),"}, {"lineNum":" 2425","line":" loop_flag: bool,"}, {"lineNum":" 2426","line":" done_flag: bool,"}, {"lineNum":" 2427","line":""}, {"lineNum":" 2428","line":" pub fn init(name: []const u8, allocator: *Allocator, makeFn: fn (*Step) anyerror!void) Step {","class":"lineCov","hits":"1","order":"4422","possible_hits":"1",}, {"lineNum":" 2429","line":" return Step{","class":"lineCov","hits":"1","order":"4428","possible_hits":"1",}, {"lineNum":" 2430","line":" .name = name,","class":"lineCov","hits":"1","order":"4423","possible_hits":"1",}, {"lineNum":" 2431","line":" .makeFn = makeFn,","class":"lineCov","hits":"1","order":"4424","possible_hits":"1",}, {"lineNum":" 2432","line":" .dependencies = ArrayList(*Step).init(allocator),","class":"lineCov","hits":"1","order":"4425","possible_hits":"1",}, {"lineNum":" 2433","line":" .loop_flag = false,","class":"lineCov","hits":"1","order":"4426","possible_hits":"1",}, {"lineNum":" 2434","line":" .done_flag = false,","class":"lineCov","hits":"1","order":"4427","possible_hits":"1",}, {"lineNum":" 2435","line":" };"}, {"lineNum":" 2436","line":" }"}, {"lineNum":" 2437","line":" pub fn initNoOp(name: []const u8, allocator: *Allocator) Step {","class":"lineCov","hits":"1","order":"4420","possible_hits":"1",}, {"lineNum":" 2438","line":" return init(name, allocator, makeNoOp);","class":"lineCov","hits":"1","order":"4421","possible_hits":"1",}, {"lineNum":" 2439","line":" }"}, {"lineNum":" 2440","line":""}, {"lineNum":" 2441","line":" pub fn make(self: *Step) !void {"}, {"lineNum":" 2442","line":" if (self.done_flag) return;"}, {"lineNum":" 2443","line":""}, {"lineNum":" 2444","line":" try self.makeFn(self);"}, {"lineNum":" 2445","line":" self.done_flag = true;"}, {"lineNum":" 2446","line":" }"}, {"lineNum":" 2447","line":""}, {"lineNum":" 2448","line":" pub fn dependOn(self: *Step, other: *Step) void {"}, {"lineNum":" 2449","line":" self.dependencies.append(other) catch unreachable;"}, {"lineNum":" 2450","line":" }"}, {"lineNum":" 2451","line":""}, {"lineNum":" 2452","line":" fn makeNoOp(self: *Step) anyerror!void {}","class":"lineNoCov","hits":"0","possible_hits":"2",}, {"lineNum":" 2453","line":"};"}, {"lineNum":" 2454","line":""}, {"lineNum":" 2455","line":"fn doAtomicSymLinks(allocator: *Allocator, output_path: []const u8, filename_major_only: []const u8, filename_name_only: []const u8) !void {"}, {"lineNum":" 2456","line":" const out_dir = fs.path.dirname(output_path) orelse \".\";"}, {"lineNum":" 2457","line":" const out_basename = fs.path.basename(output_path);"}, {"lineNum":" 2458","line":" // sym link for libfoo.so.1 to libfoo.so.1.2.3"}, {"lineNum":" 2459","line":" const major_only_path = fs.path.join("}, {"lineNum":" 2460","line":" allocator,"}, {"lineNum":" 2461","line":" &[_][]const u8{ out_dir, filename_major_only },"}, {"lineNum":" 2462","line":" ) catch unreachable;"}, {"lineNum":" 2463","line":" fs.atomicSymLink(allocator, out_basename, major_only_path) catch |err| {"}, {"lineNum":" 2464","line":" warn(\"Unable to symlink {} -> {}\\n\", .{ major_only_path, out_basename });"}, {"lineNum":" 2465","line":" return err;"}, {"lineNum":" 2466","line":" };"}, {"lineNum":" 2467","line":" // sym link for libfoo.so to libfoo.so.1"}, {"lineNum":" 2468","line":" const name_only_path = fs.path.join("}, {"lineNum":" 2469","line":" allocator,"}, {"lineNum":" 2470","line":" &[_][]const u8{ out_dir, filename_name_only },"}, {"lineNum":" 2471","line":" ) catch unreachable;"}, {"lineNum":" 2472","line":" fs.atomicSymLink(allocator, filename_major_only, name_only_path) catch |err| {"}, {"lineNum":" 2473","line":" warn(\"Unable to symlink {} -> {}\\n\", .{ name_only_path, filename_major_only });"}, {"lineNum":" 2474","line":" return err;"}, {"lineNum":" 2475","line":" };"}, {"lineNum":" 2476","line":"}"}, {"lineNum":" 2477","line":""}, {"lineNum":" 2478","line":"/// Returned slice must be freed by the caller."}, {"lineNum":" 2479","line":"fn findVcpkgRoot(allocator: *Allocator) !?[]const u8 {"}, {"lineNum":" 2480","line":" const appdata_path = try fs.getAppDataDir(allocator, \"vcpkg\");"}, {"lineNum":" 2481","line":" defer allocator.free(appdata_path);"}, {"lineNum":" 2482","line":""}, {"lineNum":" 2483","line":" const path_file = try fs.path.join(allocator, &[_][]const u8{ appdata_path, \"vcpkg.path.txt\" });"}, {"lineNum":" 2484","line":" defer allocator.free(path_file);"}, {"lineNum":" 2485","line":""}, {"lineNum":" 2486","line":" const file = fs.cwd().openFile(path_file, .{}) catch return null;"}, {"lineNum":" 2487","line":" defer file.close();"}, {"lineNum":" 2488","line":""}, {"lineNum":" 2489","line":" const size = @intCast(usize, try file.getEndPos());"}, {"lineNum":" 2490","line":" const vcpkg_path = try allocator.alloc(u8, size);"}, {"lineNum":" 2491","line":" const size_read = try file.read(vcpkg_path);"}, {"lineNum":" 2492","line":" std.debug.assert(size == size_read);"}, {"lineNum":" 2493","line":""}, {"lineNum":" 2494","line":" return vcpkg_path;"}, {"lineNum":" 2495","line":"}"}, {"lineNum":" 2496","line":""}, {"lineNum":" 2497","line":"const VcpkgRoot = union(VcpkgRootStatus) {"}, {"lineNum":" 2498","line":" Unattempted: void,"}, {"lineNum":" 2499","line":" NotFound: void,"}, {"lineNum":" 2500","line":" Found: []const u8,"}, {"lineNum":" 2501","line":"};"}, {"lineNum":" 2502","line":""}, {"lineNum":" 2503","line":"const VcpkgRootStatus = enum {"}, {"lineNum":" 2504","line":" Unattempted,"}, {"lineNum":" 2505","line":" NotFound,"}, {"lineNum":" 2506","line":" Found,"}, {"lineNum":" 2507","line":"};"}, {"lineNum":" 2508","line":""}, {"lineNum":" 2509","line":"pub const VcpkgLinkage = std.builtin.LinkMode;"}, {"lineNum":" 2510","line":""}, {"lineNum":" 2511","line":"pub const InstallDir = enum {"}, {"lineNum":" 2512","line":" Prefix,"}, {"lineNum":" 2513","line":" Lib,"}, {"lineNum":" 2514","line":" Bin,"}, {"lineNum":" 2515","line":" Header,"}, {"lineNum":" 2516","line":"};"}, {"lineNum":" 2517","line":""}, {"lineNum":" 2518","line":"pub const InstalledFile = struct {"}, {"lineNum":" 2519","line":" dir: InstallDir,"}, {"lineNum":" 2520","line":" path: []const u8,"}, {"lineNum":" 2521","line":"};"}, ]}; var percent_low = 25;var percent_high = 75; var header = { "command" : "test", "date" : "2020-05-19 01:29:25", "instrumented" : 117, "covered" : 73,}; var merged_data = [];