support pkgconfig
This commit is contained in:
		
							parent
							
								
									0d848a71ec
								
							
						
					
					
						commit
						a3af1c76a3
					
				| @ -98,11 +98,13 @@ fn processStep( | ||||
| ) anyerror!void { | ||||
|     if (step.cast(InstallArtifactStep)) |install_exe| { | ||||
|         try processIncludeDirs(allocator, include_dirs, install_exe.artifact.include_dirs.items); | ||||
|         try processPkgConfig(allocator, include_dirs, install_exe.artifact); | ||||
|         for (install_exe.artifact.packages.items) |pkg| { | ||||
|             try processPackage(allocator, packages, pkg); | ||||
|         } | ||||
|     } else if (step.cast(LibExeObjStep)) |exe| { | ||||
|         try processIncludeDirs(allocator, include_dirs, exe.include_dirs.items); | ||||
|         try processPkgConfig(allocator, include_dirs, exe); | ||||
|         for (exe.packages.items) |pkg| { | ||||
|             try processPackage(allocator, packages, pkg); | ||||
|         } | ||||
| @ -161,6 +163,49 @@ fn processIncludeDirs( | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn processPkgConfig( | ||||
|     allocator: std.mem.Allocator, | ||||
|     include_dirs: *std.ArrayListUnmanaged(BuildConfig.IncludeDir), | ||||
|     exe: *std.build.LibExeObjStep, | ||||
| ) !void { | ||||
|     for (exe.link_objects.items) |link_object| { | ||||
|         switch (link_object) { | ||||
|             .system_lib => |system_lib| { | ||||
|                 switch (system_lib.use_pkg_config) { | ||||
|                     .no => {}, | ||||
|                     .yes, .force => { | ||||
|                         if (exe.runPkgConfig(system_lib.name)) |args| { | ||||
|                             for (args) |arg| { | ||||
|                                 if (std.mem.startsWith(u8, arg, "-I")) { | ||||
|                                     try include_dirs.append(allocator, .{ .path = arg[2..], .system = true }); | ||||
|                                 } | ||||
|                             } | ||||
|                         } else |err| switch (err) { | ||||
|                             error.PkgConfigInvalidOutput, | ||||
|                             error.PkgConfigCrashed, | ||||
|                             error.PkgConfigFailed, | ||||
|                             error.PkgConfigNotInstalled, | ||||
|                             error.PackageNotFound, | ||||
|                             => switch (system_lib.use_pkg_config) { | ||||
|                                 .yes => { | ||||
|                                     // pkg-config failed, so zig will not add any include paths | ||||
|                                 }, | ||||
|                                 .force => { | ||||
|                                     log.warn("pkg-config failed for library {s}", .{system_lib.name}); | ||||
|                                 }, | ||||
|                                 .no => unreachable, | ||||
|                             }, | ||||
| 
 | ||||
|                             else => |e| return e, | ||||
|                         } | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|             else => {}, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn runBuild(builder: *Builder) anyerror!void { | ||||
|     switch (@typeInfo(@typeInfo(@TypeOf(root.build)).Fn.return_type.?)) { | ||||
|         .Void => root.build(builder), | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user