@@ -258,9 +258,14 @@ pub const Builder = struct {
258258 }));
259259 }
260260
261- pub fn addSharedLibrary (self : * Builder , name : []const u8 , root_src : ? []const u8 , ver : Version ) * LibExeObjStep {
261+ pub fn addSharedLibrary (
262+ self : * Builder ,
263+ name : []const u8 ,
264+ root_src : ? []const u8 ,
265+ kind : LibExeObjStep.SharedLibKind ,
266+ ) * LibExeObjStep {
262267 const root_src_param = if (root_src ) | p | @as (FileSource , .{ .path = p }) else null ;
263- return LibExeObjStep .createSharedLibrary (self , name , root_src_param , ver );
268+ return LibExeObjStep .createSharedLibrary (self , name , root_src_param , kind );
264269 }
265270
266271 pub fn addStaticLibrary (self : * Builder , name : []const u8 , root_src : ? []const u8 ) * LibExeObjStep {
@@ -338,11 +343,13 @@ pub const Builder = struct {
338343 return TranslateCStep .create (self , source );
339344 }
340345
341- pub fn version (self : * const Builder , major : u32 , minor : u32 , patch : u32 ) Version {
342- return Version {
343- .major = major ,
344- .minor = minor ,
345- .patch = patch ,
346+ pub fn version (self : * const Builder , major : u32 , minor : u32 , patch : u32 ) LibExeObjStep.SharedLibKind {
347+ return .{
348+ .versioned = .{
349+ .major = major ,
350+ .minor = minor ,
351+ .patch = patch ,
352+ },
346353 };
347354 }
348355
@@ -1166,7 +1173,7 @@ pub const LibExeObjStep = struct {
11661173 version_script : ? []const u8 = null ,
11671174 out_filename : []const u8 ,
11681175 is_dynamic : bool ,
1169- version : Version ,
1176+ version : ? Version ,
11701177 build_mode : builtin.Mode ,
11711178 kind : Kind ,
11721179 major_only_filename : []const u8 ,
@@ -1268,33 +1275,41 @@ pub const LibExeObjStep = struct {
12681275 Test ,
12691276 };
12701277
1271- pub fn createSharedLibrary (builder : * Builder , name : []const u8 , root_src : ? FileSource , ver : Version ) * LibExeObjStep {
1278+ const SharedLibKind = union (enum ) {
1279+ versioned : Version ,
1280+ unversioned : void ,
1281+ };
1282+
1283+ pub fn createSharedLibrary (builder : * Builder , name : []const u8 , root_src : ? FileSource , kind : SharedLibKind ) * LibExeObjStep {
12721284 const self = builder .allocator .create (LibExeObjStep ) catch unreachable ;
1273- self .* = initExtraArgs (builder , name , root_src , Kind .Lib , true , ver );
1285+ self .* = initExtraArgs (builder , name , root_src , Kind .Lib , true , switch (kind ) {
1286+ .versioned = > | ver | ver ,
1287+ .unversioned = > null ,
1288+ });
12741289 return self ;
12751290 }
12761291
12771292 pub fn createStaticLibrary (builder : * Builder , name : []const u8 , root_src : ? FileSource ) * LibExeObjStep {
12781293 const self = builder .allocator .create (LibExeObjStep ) catch unreachable ;
1279- self .* = initExtraArgs (builder , name , root_src , Kind .Lib , false , builder . version ( 0 , 0 , 0 ) );
1294+ self .* = initExtraArgs (builder , name , root_src , Kind .Lib , false , null );
12801295 return self ;
12811296 }
12821297
12831298 pub fn createObject (builder : * Builder , name : []const u8 , root_src : ? FileSource ) * LibExeObjStep {
12841299 const self = builder .allocator .create (LibExeObjStep ) catch unreachable ;
1285- self .* = initExtraArgs (builder , name , root_src , Kind .Obj , false , builder . version ( 0 , 0 , 0 ) );
1300+ self .* = initExtraArgs (builder , name , root_src , Kind .Obj , false , null );
12861301 return self ;
12871302 }
12881303
12891304 pub fn createExecutable (builder : * Builder , name : []const u8 , root_src : ? FileSource , is_dynamic : bool ) * LibExeObjStep {
12901305 const self = builder .allocator .create (LibExeObjStep ) catch unreachable ;
1291- self .* = initExtraArgs (builder , name , root_src , Kind .Exe , is_dynamic , builder . version ( 0 , 0 , 0 ) );
1306+ self .* = initExtraArgs (builder , name , root_src , Kind .Exe , is_dynamic , null );
12921307 return self ;
12931308 }
12941309
12951310 pub fn createTest (builder : * Builder , name : []const u8 , root_src : FileSource ) * LibExeObjStep {
12961311 const self = builder .allocator .create (LibExeObjStep ) catch unreachable ;
1297- self .* = initExtraArgs (builder , name , root_src , Kind .Test , false , builder . version ( 0 , 0 , 0 ) );
1312+ self .* = initExtraArgs (builder , name , root_src , Kind .Test , false , null );
12981313 return self ;
12991314 }
13001315
@@ -1304,7 +1319,7 @@ pub const LibExeObjStep = struct {
13041319 root_src : ? FileSource ,
13051320 kind : Kind ,
13061321 is_dynamic : bool ,
1307- ver : Version ,
1322+ ver : ? Version ,
13081323 ) LibExeObjStep {
13091324 if (mem .indexOf (u8 , name , "/" ) != null or mem .indexOf (u8 , name , "\\ " ) != null ) {
13101325 panic ("invalid name: '{}'. It looks like a file path, but it is supposed to be the library or application name." , .{name });
@@ -1375,17 +1390,17 @@ pub const LibExeObjStep = struct {
13751390 self .target .staticLibSuffix (),
13761391 });
13771392 self .out_lib_filename = self .out_filename ;
1378- } else {
1393+ } else if ( self . version ) | version | {
13791394 if (self .target .isDarwin ()) {
13801395 self .out_filename = self .builder .fmt ("lib{}.{d}.{d}.{d}.dylib" , .{
13811396 self .name ,
1382- self . version .major ,
1383- self . version .minor ,
1384- self . version .patch ,
1397+ version .major ,
1398+ version .minor ,
1399+ version .patch ,
13851400 });
13861401 self .major_only_filename = self .builder .fmt ("lib{}.{d}.dylib" , .{
13871402 self .name ,
1388- self . version .major ,
1403+ version .major ,
13891404 });
13901405 self .name_only_filename = self .builder .fmt ("lib{}.dylib" , .{self .name });
13911406 self .out_lib_filename = self .out_filename ;
@@ -1395,14 +1410,25 @@ pub const LibExeObjStep = struct {
13951410 } else {
13961411 self .out_filename = self .builder .fmt ("lib{}.so.{d}.{d}.{d}" , .{
13971412 self .name ,
1398- self . version .major ,
1399- self . version .minor ,
1400- self . version .patch ,
1413+ version .major ,
1414+ version .minor ,
1415+ version .patch ,
14011416 });
1402- self .major_only_filename = self .builder .fmt ("lib{}.so.{d}" , .{ self .name , self . version .major });
1417+ self .major_only_filename = self .builder .fmt ("lib{}.so.{d}" , .{ self .name , version .major });
14031418 self .name_only_filename = self .builder .fmt ("lib{}.so" , .{self .name });
14041419 self .out_lib_filename = self .out_filename ;
14051420 }
1421+ } else {
1422+ if (self .target .isDarwin ()) {
1423+ self .out_filename = self .builder .fmt ("lib{}.dylib" , .{self .name });
1424+ self .out_lib_filename = self .out_filename ;
1425+ } else if (self .target .isWindows ()) {
1426+ self .out_filename = self .builder .fmt ("{}.dll" , .{self .name });
1427+ self .out_lib_filename = self .builder .fmt ("{}.lib" , .{self .name });
1428+ } else {
1429+ self .out_filename = self .builder .fmt ("lib{}.so" , .{self .name });
1430+ self .out_lib_filename = self .out_filename ;
1431+ }
14061432 }
14071433 },
14081434 }
@@ -2037,14 +2063,16 @@ pub const LibExeObjStep = struct {
20372063 zig_args .append (self .name ) catch unreachable ;
20382064
20392065 if (self .kind == Kind .Lib and self .is_dynamic ) {
2040- zig_args .append ("--ver-major" ) catch unreachable ;
2041- zig_args .append (builder .fmt ("{}" , .{self .version .major })) catch unreachable ;
2066+ if (self .version ) | version | {
2067+ zig_args .append ("--ver-major" ) catch unreachable ;
2068+ zig_args .append (builder .fmt ("{}" , .{version .major })) catch unreachable ;
20422069
2043- zig_args .append ("--ver-minor" ) catch unreachable ;
2044- zig_args .append (builder .fmt ("{}" , .{self . version .minor })) catch unreachable ;
2070+ zig_args .append ("--ver-minor" ) catch unreachable ;
2071+ zig_args .append (builder .fmt ("{}" , .{version .minor })) catch unreachable ;
20452072
2046- zig_args .append ("--ver-patch" ) catch unreachable ;
2047- zig_args .append (builder .fmt ("{}" , .{self .version .patch })) catch unreachable ;
2073+ zig_args .append ("--ver-patch" ) catch unreachable ;
2074+ zig_args .append (builder .fmt ("{}" , .{version .patch })) catch unreachable ;
2075+ }
20482076 }
20492077 if (self .is_dynamic ) {
20502078 try zig_args .append ("-dynamic" );
@@ -2285,7 +2313,7 @@ pub const LibExeObjStep = struct {
22852313 }
22862314 }
22872315
2288- if (self .kind == Kind .Lib and self .is_dynamic and self .target .wantSharedLibSymLinks ()) {
2316+ if (self .kind == Kind .Lib and self .is_dynamic and self .version != null and self . target .wantSharedLibSymLinks ()) {
22892317 try doAtomicSymLinks (builder .allocator , self .getOutputPath (), self .major_only_filename , self .name_only_filename );
22902318 }
22912319 }
@@ -2329,8 +2357,10 @@ pub const InstallArtifactStep = struct {
23292357
23302358 builder .pushInstalledFile (self .dest_dir , artifact .out_filename );
23312359 if (self .artifact .isDynamicLibrary ()) {
2332- builder .pushInstalledFile (.Lib , artifact .major_only_filename );
2333- builder .pushInstalledFile (.Lib , artifact .name_only_filename );
2360+ if (self .artifact .version != null ) {
2361+ builder .pushInstalledFile (.Lib , artifact .major_only_filename );
2362+ builder .pushInstalledFile (.Lib , artifact .name_only_filename );
2363+ }
23342364 if (self .artifact .target .isWindows ()) {
23352365 builder .pushInstalledFile (.Lib , artifact .out_lib_filename );
23362366 }
@@ -2350,7 +2380,7 @@ pub const InstallArtifactStep = struct {
23502380
23512381 const full_dest_path = builder .getInstallPath (self .dest_dir , self .artifact .out_filename );
23522382 try builder .updateFile (self .artifact .getOutputPath (), full_dest_path );
2353- if (self .artifact .isDynamicLibrary () and self .artifact .target .wantSharedLibSymLinks ()) {
2383+ if (self .artifact .isDynamicLibrary () and self .artifact .version != null and self . artifact . target .wantSharedLibSymLinks ()) {
23542384 try doAtomicSymLinks (builder .allocator , full_dest_path , self .artifact .major_only_filename , self .artifact .name_only_filename );
23552385 }
23562386 if (self .pdb_dir ) | pdb_dir | {
0 commit comments