| author | |
| committer | |
| log | f74285b3be58f0282fcdfeab4345660b6f5d35e5 |
| tree | eb6d839c347f254cd37366297bcb19d9ba6aab8e |
| parent | 1864ba2cccea8452c319bf2cb9787ecb41d44a34 |
| signature |
4 files changed, 246 insertions(+), 0 deletions(-)
test/standalone.zig+4| ... | ... | @@ -226,6 +226,10 @@ pub const build_cases = [_]BuildCase{ |
| 226 | 226 | .build_root = "test/standalone/strip_empty_loop", |
| 227 | 227 | .import = @import("standalone/strip_empty_loop/build.zig"), |
| 228 | 228 | }, |
| 229 | .{ | |
| 230 | .build_root = "test/standalone/cmakedefine", | |
| 231 | .import = @import("standalone/cmakedefine/build.zig"), | |
| 232 | }, | |
| 229 | 233 | }; |
| 230 | 234 | |
| 231 | 235 | const std = @import("std"); |
test/standalone/cmakedefine/build.zig created+56| ... | ... | @@ -0,0 +1,56 @@ |
| 1 | const std = @import("std"); | |
| 2 | const ConfigHeader = std.Build.Step.ConfigHeader; | |
| 3 | ||
| 4 | pub fn build(b: *std.Build) void { | |
| 5 | const config_header = b.addConfigHeader( | |
| 6 | .{ | |
| 7 | .style = .{ .cmake = .{ .path = "config.h.cmake" } }, | |
| 8 | }, | |
| 9 | .{ | |
| 10 | .noval = null, | |
| 11 | .trueval = true, | |
| 12 | .falseval = false, | |
| 13 | .zeroval = 0, | |
| 14 | .oneval = 1, | |
| 15 | .tenval = 10, | |
| 16 | .stringval = "test", | |
| 17 | ||
| 18 | .boolnoval = void{}, | |
| 19 | .booltrueval = true, | |
| 20 | .boolfalseval = false, | |
| 21 | .boolzeroval = 0, | |
| 22 | .booloneval = 1, | |
| 23 | .booltenval = 10, | |
| 24 | .boolstringval = "test", | |
| 25 | }, | |
| 26 | ); | |
| 27 | ||
| 28 | const test_step = b.step("test", "Test it"); | |
| 29 | test_step.makeFn = compare_headers; | |
| 30 | test_step.dependOn(&config_header.step); | |
| 31 | } | |
| 32 | ||
| 33 | fn compare_headers(step: *std.Build.Step, prog_node: *std.Progress.Node) !void { | |
| 34 | _ = prog_node; | |
| 35 | const allocator = step.owner.allocator; | |
| 36 | const cmake_header_path = "expected.h"; | |
| 37 | ||
| 38 | const config_header_step = step.dependencies.getLast(); | |
| 39 | const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step); | |
| 40 | ||
| 41 | const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file"); | |
| 42 | ||
| 43 | const cwd = std.fs.cwd(); | |
| 44 | ||
| 45 | const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes); | |
| 46 | defer allocator.free(cmake_header); | |
| 47 | ||
| 48 | const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes); | |
| 49 | defer allocator.free(zig_header); | |
| 50 | ||
| 51 | const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer"); | |
| 52 | ||
| 53 | if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) { | |
| 54 | @panic("processed cmakedefine header does not match expected output"); | |
| 55 | } | |
| 56 | } |
test/standalone/cmakedefine/config.h.cmake created+93| ... | ... | @@ -0,0 +1,93 @@ |
| 1 | // cmakedefine | |
| 2 | // undefined | |
| 3 | #cmakedefine noval unreachable | |
| 4 | ||
| 5 | // 1 | |
| 6 | #cmakedefine trueval 1 | |
| 7 | ||
| 8 | // undefined | |
| 9 | #cmakedefine falseval unreachable | |
| 10 | ||
| 11 | // undefined | |
| 12 | #cmakedefine zeroval unreachable | |
| 13 | ||
| 14 | // 1 | |
| 15 | #cmakedefine oneval 1 | |
| 16 | ||
| 17 | // 1 | |
| 18 | #cmakedefine tenval 1 | |
| 19 | ||
| 20 | // 1 | |
| 21 | #cmakedefine stringval 1 | |
| 22 | ||
| 23 | ||
| 24 | // cmakedefine01 | |
| 25 | // 0 | |
| 26 | #cmakedefine01 boolnoval | |
| 27 | ||
| 28 | // 1 | |
| 29 | #cmakedefine01 booltrueval | |
| 30 | ||
| 31 | // 0 | |
| 32 | #cmakedefine01 boolfalseval | |
| 33 | ||
| 34 | // 0 | |
| 35 | #cmakedefine01 boolzeroval | |
| 36 | ||
| 37 | // 1 | |
| 38 | #cmakedefine01 booloneval | |
| 39 | ||
| 40 | // 1 | |
| 41 | #cmakedefine01 booltenval | |
| 42 | ||
| 43 | // 1 | |
| 44 | #cmakedefine01 boolstringval | |
| 45 | ||
| 46 | ||
| 47 | // @ substition | |
| 48 | ||
| 49 | // no substition | |
| 50 | // @noval@ | |
| 51 | ||
| 52 | // 1 | |
| 53 | // @trueval@ | |
| 54 | ||
| 55 | // 0 | |
| 56 | // @falseval@ | |
| 57 | ||
| 58 | // 0 | |
| 59 | // @zeroval@ | |
| 60 | ||
| 61 | // 1 | |
| 62 | // @oneval@ | |
| 63 | ||
| 64 | // 10 | |
| 65 | // @tenval@ | |
| 66 | ||
| 67 | // test | |
| 68 | // @stringval@ | |
| 69 | ||
| 70 | ||
| 71 | // ${} substition | |
| 72 | ||
| 73 | // removal | |
| 74 | // ${noval} | |
| 75 | ||
| 76 | // 1 | |
| 77 | // ${trueval} | |
| 78 | ||
| 79 | // 0 | |
| 80 | // ${falseval} | |
| 81 | ||
| 82 | // 0 | |
| 83 | // ${zeroval} | |
| 84 | ||
| 85 | // 1 | |
| 86 | // ${oneval} | |
| 87 | ||
| 88 | // 10 | |
| 89 | // ${tenval} | |
| 90 | ||
| 91 | // test | |
| 92 | // ${stringval} | |
| 93 |
test/standalone/cmakedefine/expected.h created+93| ... | ... | @@ -0,0 +1,93 @@ |
| 1 | // cmakedefine | |
| 2 | // undefined | |
| 3 | /* #undef noval */ | |
| 4 | ||
| 5 | // 1 | |
| 6 | #define trueval 1 | |
| 7 | ||
| 8 | // undefined | |
| 9 | /* #undef falseval */ | |
| 10 | ||
| 11 | // undefined | |
| 12 | /* #undef zeroval */ | |
| 13 | ||
| 14 | // 1 | |
| 15 | #define oneval 1 | |
| 16 | ||
| 17 | // 1 | |
| 18 | #define tenval 1 | |
| 19 | ||
| 20 | // 1 | |
| 21 | #define stringval 1 | |
| 22 | ||
| 23 | ||
| 24 | // cmakedefine01 | |
| 25 | // 0 | |
| 26 | #define boolnoval 0 | |
| 27 | ||
| 28 | // 1 | |
| 29 | #define booltrueval 1 | |
| 30 | ||
| 31 | // 0 | |
| 32 | #define boolfalseval 0 | |
| 33 | ||
| 34 | // 0 | |
| 35 | #define boolzeroval 0 | |
| 36 | ||
| 37 | // 1 | |
| 38 | #define booloneval 1 | |
| 39 | ||
| 40 | // 1 | |
| 41 | #define booltenval 1 | |
| 42 | ||
| 43 | // 1 | |
| 44 | #define boolstringval 1 | |
| 45 | ||
| 46 | ||
| 47 | // @ substition | |
| 48 | ||
| 49 | // no substition | |
| 50 | // | |
| 51 | ||
| 52 | // 1 | |
| 53 | // 1 | |
| 54 | ||
| 55 | // 0 | |
| 56 | // 0 | |
| 57 | ||
| 58 | // 0 | |
| 59 | // 0 | |
| 60 | ||
| 61 | // 1 | |
| 62 | // 1 | |
| 63 | ||
| 64 | // 10 | |
| 65 | // 10 | |
| 66 | ||
| 67 | // test | |
| 68 | // test | |
| 69 | ||
| 70 | ||
| 71 | // substition | |
| 72 | ||
| 73 | // removal | |
| 74 | // | |
| 75 | ||
| 76 | // 1 | |
| 77 | // 1 | |
| 78 | ||
| 79 | // 0 | |
| 80 | // 0 | |
| 81 | ||
| 82 | // 0 | |
| 83 | // 0 | |
| 84 | ||
| 85 | // 1 | |
| 86 | // 1 | |
| 87 | ||
| 88 | // 10 | |
| 89 | // 10 | |
| 90 | ||
| 91 | // test | |
| 92 | // test | |
| 93 |