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 {...@@ -1388,66 +1388,50 @@ pub const LibExeObjStep = struct {
1388 }1388 }
13891389
1390 fn computeOutFileNames(self: *LibExeObjStep) void {1390 fn computeOutFileNames(self: *LibExeObjStep) void {
1391 // TODO make this call std.zig.binNameAlloc1391 const target_info = std.zig.system.NativeTargetInfo.detect(
1392 switch (self.kind) {1392 self.builder.allocator,
1393 .Obj => {1393 self.target,
1394 self.out_filename = self.builder.fmt("{}{}", .{ self.name, self.target.oFileExt() });1394 ) catch unreachable;
1395 },1395 const target = target_info.target;
1396 .Exe => {1396 self.out_filename = std.zig.binNameAlloc(self.builder.allocator, .{
1397 self.out_filename = self.builder.fmt("{}{}", .{ self.name, self.target.exeFileExt() });1397 .root_name = self.name,
1398 },1398 .target = target,
1399 .Test => {1399 .output_mode = switch (self.kind) {
1400 self.out_filename = self.builder.fmt("test{}", .{self.target.exeFileExt()});1400 .Lib => .Lib,
1401 .Obj => .Obj,
1402 .Exe, .Test => .Exe,
1401 },1403 },
1402 .Lib => {1404 .link_mode = if (self.is_dynamic) .Dynamic else .Static,
1403 if (!self.is_dynamic) {1405 .version = self.version,
1404 self.out_filename = self.builder.fmt("{}{}{}", .{1406 }) catch unreachable;
1405 self.target.libPrefix(),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", .{
1406 self.name,1414 self.name,
1407 self.target.staticLibSuffix(),1415 version.major,
1408 });1416 });
1417 self.name_only_filename = self.builder.fmt("lib{}.dylib", .{self.name});
1409 self.out_lib_filename = self.out_filename;1418 self.out_lib_filename = self.out_filename;
1410 } else if (self.version) |version| {1419 } else if (target.os.tag == .windows) {
1411 if (self.target.isDarwin()) {1420 self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name});
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 }
1438 } else {1421 } else {
1439 if (self.target.isDarwin()) {1422 self.major_only_filename = self.builder.fmt("lib{}.so.{d}", .{ self.name, version.major });
1440 self.out_filename = self.builder.fmt("lib{}.dylib", .{self.name});1423 self.name_only_filename = self.builder.fmt("lib{}.so", .{self.name});
1441 self.out_lib_filename = self.out_filename;1424 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 }
1449 }1425 }
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 }
1451 }1435 }
1452 }1436 }
14531437
...@@ -2046,7 +2030,7 @@ pub const LibExeObjStep = struct {...@@ -2046,7 +2030,7 @@ pub const LibExeObjStep = struct {
20462030
2047 if (self.image_base) |image_base| {2031 if (self.image_base) |image_base| {
2048 try zig_args.append("--image-base");2032 try zig_args.append("--image-base");
2049 try zig_args.append(image_base);2033 try zig_args.append(builder.fmt("0x{x}", .{image_base}));
2050 }2034 }
20512035
2052 if (self.filter) |filter| {2036 if (self.filter) |filter| {