authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-10-04 20:10:47-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-10-04 20:10:47-07:00
log33bc1ebe37ef6ba5dfe73e458d662b5b516723ba
tree2cec37e87c3a069aaf85fcb2d953925b2f824f9b
parentd0a4110d34b8d80a9212a01f21d7be7629de8813

build system: implement computeOutFilenames using std.zig.binNameAlloc

See #6552 #6553 #6483 Also fixes a regression introduced in 1d777e99588be047ec4d7650f048b043d6e52da0 of not converting an integer to a string for a command line parameter.

1 files changed, 39 insertions(+), 55 deletions(-)

lib/std/build.zig+39-55
......@@ -1388,66 +1388,50 @@ pub const LibExeObjStep = struct {
13881388 }
13891389
13901390 fn computeOutFileNames(self: *LibExeObjStep) void {
1391 // TODO make this call std.zig.binNameAlloc
1392 switch (self.kind) {
1393 .Obj => {
1394 self.out_filename = self.builder.fmt("{}{}", .{ self.name, self.target.oFileExt() });
1395 },
1396 .Exe => {
1397 self.out_filename = self.builder.fmt("{}{}", .{ self.name, self.target.exeFileExt() });
1398 },
1399 .Test => {
1400 self.out_filename = self.builder.fmt("test{}", .{self.target.exeFileExt()});
1391 const target_info = std.zig.system.NativeTargetInfo.detect(
1392 self.builder.allocator,
1393 self.target,
1394 ) catch unreachable;
1395 const target = target_info.target;
1396 self.out_filename = std.zig.binNameAlloc(self.builder.allocator, .{
1397 .root_name = self.name,
1398 .target = target,
1399 .output_mode = switch (self.kind) {
1400 .Lib => .Lib,
1401 .Obj => .Obj,
1402 .Exe, .Test => .Exe,
14011403 },
1402 .Lib => {
1403 if (!self.is_dynamic) {
1404 self.out_filename = self.builder.fmt("{}{}{}", .{
1405 self.target.libPrefix(),
1404 .link_mode = if (self.is_dynamic) .Dynamic else .Static,
1405 .version = self.version,
1406 }) catch unreachable;
1407
1408 if (self.kind == .Lib) {
1409 if (!self.is_dynamic) {
1410 self.out_lib_filename = self.out_filename;
1411 } else if (self.version) |version| {
1412 if (target.isDarwin()) {
1413 self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", .{
14061414 self.name,
1407 self.target.staticLibSuffix(),
1415 version.major,
14081416 });
1417 self.name_only_filename = self.builder.fmt("lib{}.dylib", .{self.name});
14091418 self.out_lib_filename = self.out_filename;
1410 } else if (self.version) |version| {
1411 if (self.target.isDarwin()) {
1412 self.out_filename = self.builder.fmt("lib{}.{d}.{d}.{d}.dylib", .{
1413 self.name,
1414 version.major,
1415 version.minor,
1416 version.patch,
1417 });
1418 self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", .{
1419 self.name,
1420 version.major,
1421 });
1422 self.name_only_filename = self.builder.fmt("lib{}.dylib", .{self.name});
1423 self.out_lib_filename = self.out_filename;
1424 } else if (self.target.isWindows()) {
1425 self.out_filename = self.builder.fmt("{}.dll", .{self.name});
1426 self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name});
1427 } else {
1428 self.out_filename = self.builder.fmt("lib{}.so.{d}.{d}.{d}", .{
1429 self.name,
1430 version.major,
1431 version.minor,
1432 version.patch,
1433 });
1434 self.major_only_filename = self.builder.fmt("lib{}.so.{d}", .{ self.name, version.major });
1435 self.name_only_filename = self.builder.fmt("lib{}.so", .{self.name});
1436 self.out_lib_filename = self.out_filename;
1437 }
1419 } else if (target.os.tag == .windows) {
1420 self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name});
14381421 } else {
1439 if (self.target.isDarwin()) {
1440 self.out_filename = self.builder.fmt("lib{}.dylib", .{self.name});
1441 self.out_lib_filename = self.out_filename;
1442 } else if (self.target.isWindows()) {
1443 self.out_filename = self.builder.fmt("{}.dll", .{self.name});
1444 self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name});
1445 } else {
1446 self.out_filename = self.builder.fmt("lib{}.so", .{self.name});
1447 self.out_lib_filename = self.out_filename;
1448 }
1422 self.major_only_filename = self.builder.fmt("lib{}.so.{d}", .{ self.name, version.major });
1423 self.name_only_filename = self.builder.fmt("lib{}.so", .{self.name});
1424 self.out_lib_filename = self.out_filename;
14491425 }
1450 },
1426 } else {
1427 if (target.isDarwin()) {
1428 self.out_lib_filename = self.out_filename;
1429 } else if (target.os.tag == .windows) {
1430 self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name});
1431 } else {
1432 self.out_lib_filename = self.out_filename;
1433 }
1434 }
14511435 }
14521436 }
14531437
......@@ -2046,7 +2030,7 @@ pub const LibExeObjStep = struct {
20462030
20472031 if (self.image_base) |image_base| {
20482032 try zig_args.append("--image-base");
2049 try zig_args.append(image_base);
2033 try zig_args.append(builder.fmt("0x{x}", .{image_base}));
20502034 }
20512035
20522036 if (self.filter) |filter| {