Something went wrong. Try again.
Something went wrong. Try again.
gnu-cash-csv build.zig
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283const std = @import("std");
fn addPkgConfig(b: *std.Build, compile: *std.Build.Step.Compile, pkg: []const u8) void { const cflags_out = b.run(&.{ "pkg-config", "--cflags", pkg }); var cflags_it = std.mem.tokenizeScalar(u8, cflags_out, ' '); while (cflags_it.next()) |flag| { const trimmed = std.mem.trim(u8, flag, " \n\r\t"); if (trimmed.len == 0) continue; if (std.mem.startsWith(u8, trimmed, "-I")) { compile.addIncludePath(.{ .cwd_relative = trimmed[2..] }); } // Other flags (e.g. -pthread) are ignored; linkLibC already covers threading. }
const libs_out = b.run(&.{ "pkg-config", "--libs", pkg }); var libs_it = std.mem.tokenizeScalar(u8, libs_out, ' '); while (libs_it.next()) |flag| { const trimmed = std.mem.trim(u8, flag, " \n\r\t"); if (trimmed.len == 0) continue; if (std.mem.startsWith(u8, trimmed, "-l")) { compile.linkSystemLibrary(trimmed[2..]); } else if (std.mem.startsWith(u8, trimmed, "-L")) { compile.addLibraryPath(.{ .cwd_relative = trimmed[2..] }); } }}
pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const exe_mod = b.createModule(.{ .root_source_file = b.path("main.zig"), .optimize = optimize, .target = target });
const zpdf_dep = b.dependency("zpdf", .{ .target = target, .optimize = optimize }); // zpdf's build.zig doesn't expose a module itself, so build one // ourselves from its root source file. const zpdf_mod = b.createModule(.{ .root_source_file = zpdf_dep.path("src/root.zig"), .target = target, .optimize = optimize, }); exe_mod.addImport("zpdf", zpdf_mod);
const string = b.dependency("string", .{ .target = target, .optimize = optimize, }); exe_mod.addImport("string", string.module("string"));
const osdialog_dep = b.dependency("osdialog", .{}); const osdialog_lib = b.addLibrary(.{ .name = "osdialog", .root_module = b.createModule(.{ .target = target, .optimize = optimize }), }); osdialog_lib.linkLibC(); osdialog_lib.addIncludePath(osdialog_dep.path(".")); osdialog_lib.addCSourceFile(.{ .file = osdialog_dep.path("osdialog.c") }); const target_os = target.result.os.tag; if (target_os == .linux) { addPkgConfig(b, osdialog_lib, "gtk+-3.0"); osdialog_lib.addCSourceFile(.{ .file = osdialog_dep.path("osdialog_gtk.c") }); } else if (target_os == .windows) { osdialog_lib.linkSystemLibrary("comdlg32"); osdialog_lib.addCSourceFile(.{ .file = osdialog_dep.path("osdialog_win.c") }); } else if (target_os.isDarwin()) { osdialog_lib.linkFramework("AppKit"); osdialog_lib.addCSourceFile(.{ .file = osdialog_dep.path("osdialog_mac.m") }); }
const exe = b.addExecutable(.{ .name = "gnu-cash-csv", .root_module = exe_mod }); exe.linkLibrary(osdialog_lib); exe.addIncludePath(osdialog_dep.path(".")); b.installArtifact(exe);
// `zig build run` const run_cmd = b.addRunArtifact(exe); run_cmd.step.dependOn(b.getInstallStep()); if (b.args) |args| { run_cmd.addArgs(args); } const run_step = b.step("run", "Run the app"); run_step.dependOn(&run_cmd.step);}