@@ -7,7 +7,8 @@ pub fn main() !void {
77 // no need to free
88
99 if (all_args .len <= 1 ) {
10- try std .io .getStdErr ().writer ().writeAll ("usage: makesetup UPSTREAM_SRC OUT_DIR SETUP_FILES...\n " );
10+ var stderr = std .fs .File .stderr ().writer (&.{});
11+ try stderr .interface .writeAll ("usage: makesetup UPSTREAM_SRC OUT_DIR SETUP_FILES...\n " );
1112 std .process .exit (0xff );
1213 }
1314 const args = all_args [1.. ];
@@ -36,51 +37,67 @@ pub fn main() !void {
3637 {
3738 var file = try out_dir .createFile ("config.c" , .{});
3839 defer file .close ();
39- var bw = std .io .bufferedWriter (file .writer ());
40- const writer = bw .writer ();
41- try writer .print ("/* Generated automatically from {s} by makesetup. */\n " , .{config_in_path });
42- var lines = std .mem .splitScalar (u8 , config_in , '\n ' );
43- while (lines .next ()) | line | {
44- if (std .mem .indexOf (u8 , line , "MARKER 1" )) | _ | {
45- var it = setup .modules .iterator ();
46- while (it .next ()) | entry | {
47- if (! entry .value_ptr .enabled ) continue ;
48- try writer .print ("extern PyObject* PyInit_{s}(void);\n " , .{entry .key_ptr .* });
49- }
50- } else if (std .mem .indexOf (u8 , line , "MARKER 2" )) | _ | {
51- var it = setup .modules .iterator ();
52- while (it .next ()) | entry | {
53- if (! entry .value_ptr .enabled ) continue ;
54- try writer .print (" {{\" {s}\" , PyInit_{0s}}},\n " , .{entry .key_ptr .* });
55- }
56- }
57- try writer .writeAll (line );
58- try writer .writeByte ('\n ' );
59- }
60- try bw .flush ();
40+ var out_file_buf : [4096 ]u8 = undefined ;
41+ var file_writer = file .writer (& out_file_buf );
42+ writeConfigC (setup , config_in_path , config_in , & file_writer .interface ) catch | err | switch (err ) {
43+ error .WriteFailed = > return file_writer .err orelse error .Unexpected ,
44+ };
6145 }
6246
6347 {
6448 var out_file = try out_dir .createFile ("module-compile-args.txt" , .{});
6549 defer out_file .close ();
66- var bw = std .io .bufferedWriter (out_file .writer ());
67- const writer = bw .writer ();
50+ var out_file_buf : [4096 ]u8 = undefined ;
51+ var file_writer = out_file .writer (& out_file_buf );
52+ writeCompileArgs (setup , & file_writer .interface ) catch | err | switch (err ) {
53+ error .WriteFailed = > return file_writer .err orelse error .Unexpected ,
54+ };
55+ }
56+ }
6857
69- var it = setup .modules .iterator ();
70- while (it .next ()) | entry | {
71- const module_name = entry .key_ptr .* ;
72- {
73- const suffix : []const u8 = if (entry .value_ptr .enabled ) "" else " (DISABLED)" ;
74- try writer .print ("# Module '{s}'{s}\n " , .{ module_name , suffix });
58+ fn writeConfigC (
59+ setup : Setup ,
60+ config_in_path : []const u8 ,
61+ config_in : []const u8 ,
62+ writer : * std.Io.Writer ,
63+ ) error {WriteFailed }! void {
64+ try writer .print ("/* Generated automatically from {s} by makesetup. */\n " , .{config_in_path });
65+ var lines = std .mem .splitScalar (u8 , config_in , '\n ' );
66+ while (lines .next ()) | line | {
67+ if (std .mem .indexOf (u8 , line , "MARKER 1" )) | _ | {
68+ var it = setup .modules .iterator ();
69+ while (it .next ()) | entry | {
70+ if (! entry .value_ptr .enabled ) continue ;
71+ try writer .print ("extern PyObject* PyInit_{s}(void);\n " , .{entry .key_ptr .* });
7572 }
76- const prefix : []const u8 = if (entry .value_ptr .enabled ) "" else "# " ;
77- for (entry .value_ptr .compile_args ) | compile_arg | switch (compile_arg ) {
78- .source = > | src | try writer .print ("{s}Modules/{s}\n " , .{ prefix , src }),
79- .include = > | inc | try writer .print ("{s}-I{s}\n " , .{ prefix , inc }),
80- };
73+ } else if (std .mem .indexOf (u8 , line , "MARKER 2" )) | _ | {
74+ var it = setup .modules .iterator ();
75+ while (it .next ()) | entry | {
76+ if (! entry .value_ptr .enabled ) continue ;
77+ try writer .print (" {{\" {s}\" , PyInit_{0s}}},\n " , .{entry .key_ptr .* });
78+ }
79+ }
80+ try writer .writeAll (line );
81+ try writer .writeByte ('\n ' );
82+ }
83+ try writer .flush ();
84+ }
85+
86+ fn writeCompileArgs (setup : Setup , writer : * std.Io.Writer ) error {WriteFailed }! void {
87+ var it = setup .modules .iterator ();
88+ while (it .next ()) | entry | {
89+ const module_name = entry .key_ptr .* ;
90+ {
91+ const suffix : []const u8 = if (entry .value_ptr .enabled ) "" else " (DISABLED)" ;
92+ try writer .print ("# Module '{s}'{s}\n " , .{ module_name , suffix });
8193 }
82- try bw .flush ();
94+ const prefix : []const u8 = if (entry .value_ptr .enabled ) "" else "# " ;
95+ for (entry .value_ptr .compile_args ) | compile_arg | switch (compile_arg ) {
96+ .source = > | src | try writer .print ("{s}Modules/{s}\n " , .{ prefix , src }),
97+ .include = > | inc | try writer .print ("{s}-I{s}\n " , .{ prefix , inc }),
98+ };
8399 }
100+ try writer .flush ();
84101}
85102
86103const CompileArg = union (enum ) {
0 commit comments