| 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,6 +226,10 @@ pub const build_cases = [_]BuildCase{ |
| 226 | .build_root = "test/standalone/strip_empty_loop", | 226 | .build_root = "test/standalone/strip_empty_loop", |
| 227 | .import = @import("standalone/strip_empty_loop/build.zig"), | 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 | const std = @import("std"); | 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 | |||