@@ -59,7 +59,13 @@ pub const V0_12 = struct {
5959 // create a new module for flags options
6060 const flags_module = flags_options .createModule ();
6161
62- const webui = try webui_c (b , optimize , target , isStatic , enableTLS );
62+ const webui = b .dependency ("webui" , .{
63+ .target = target ,
64+ .optimize = optimize ,
65+ .dynamic = ! isStatic ,
66+ .@"enable-tls" = enableTLS ,
67+ .verbose = false ,
68+ });
6369
6470 const webui_module = b .addModule ("webui" , .{
6571 .root_source_file = b .path (b .pathJoin (&.{ "src" , "webui.zig" })),
@@ -70,106 +76,21 @@ pub const V0_12 = struct {
7076 },
7177 },
7278 });
73-
74- webui_module .linkLibrary (webui );
75-
76- // install webui c lib
77- install_webui_c (b , webui );
79+ webui_module .linkLibrary (webui .artifact ("webui" ));
80+ if (! isStatic ) {
81+ b .installArtifact (webui .artifact ("webui" ));
82+ }
7883
7984 // generate docs
8085 generate_docs (b , optimize , target , flags_module );
8186
8287 // build examples
83- build_examples_12 (b , optimize , target , webui_module , webui ) catch | err | {
88+ build_examples_12 (b , optimize , target , webui_module , webui . artifact ( "webui" ) ) catch | err | {
8489 log .err ("failed to build examples: {}" , .{err });
8590 std .process .exit (1 );
8691 };
8792 }
8893
89- /// this function to build webui from c code
90- pub fn webui_c (b : * Build , optimize : OptimizeMode , target : Build.ResolvedTarget , is_static : bool , enable_tls : bool ) ! * Compile {
91- const webui_dep = b .dependency ("webui" , .{});
92-
93- const name = "webui" ;
94- const webui = if (is_static ) b .addStaticLibrary (.{
95- .name = name ,
96- .target = target ,
97- .optimize = optimize ,
98- }) else b .addSharedLibrary (.{
99- .name = name ,
100- .target = target ,
101- .optimize = optimize ,
102- });
103-
104- // basical flags for civetweb
105- const basic_flags = [_ ][]const u8 { "-DNDEBUG" , "-DNO_CACHING" , "-DNO_CGI" , "-DUSE_WEBSOCKET" , "-Wno-error=date-time" };
106-
107- // when enable tls
108- const tls_flags = [_ ][]const u8 { "-DWEBUI_TLS" , "-DNO_SSL_DL" , "-DOPENSSL_API_1_1" };
109- // when disable tls
110- const no_tls_flags = [_ ][]const u8 {"-DNO_SSL" };
111-
112- // solve UBSAN
113- const ubsan_flags = [_ ][]const u8 {"-fno-sanitize=undefined" };
114-
115- var civetweb_flags = std .ArrayList ([]const u8 ).init (b .allocator );
116- defer civetweb_flags .deinit ();
117- try civetweb_flags .appendSlice (& ubsan_flags );
118- try civetweb_flags .appendSlice (& basic_flags );
119- try civetweb_flags .appendSlice (if (enable_tls ) & tls_flags else & no_tls_flags );
120-
121- var webui_flags = std .ArrayList ([]const u8 ).init (b .allocator );
122- defer webui_flags .deinit ();
123- try webui_flags .appendSlice (& ubsan_flags );
124- try webui_flags .appendSlice (if (enable_tls ) & tls_flags else & no_tls_flags );
125-
126- webui .addCSourceFile (.{
127- .file = webui_dep .path (b .pathJoin (&.{ "src" , "webui.c" })),
128- .flags = webui_flags .items ,
129- });
130-
131- webui .addCSourceFile (.{
132- .file = webui_dep .path (b .pathJoin (&.{ "src" , "civetweb" , "civetweb.c" })),
133- .flags = civetweb_flags .items ,
134- });
135-
136- webui .linkLibC ();
137- webui .addIncludePath (webui_dep .path ("include" ));
138-
139- // for windows build
140- if (target .result .os .tag == .windows ) {
141- webui .linkSystemLibrary ("ws2_32" );
142- webui .linkSystemLibrary ("ole32" );
143- if (target .result .abi == .msvc ) {
144- webui .linkSystemLibrary ("Advapi32" );
145- webui .linkSystemLibrary ("Shell32" );
146- webui .linkSystemLibrary ("user32" );
147- }
148- if (enable_tls ) {
149- webui .linkSystemLibrary ("bcrypt" );
150- }
151- } else if (target .result .os .tag == .macos ) {
152- webui .addCSourceFile (.{
153- .file = webui_dep .path (b .pathJoin (&.{ "src" , "webview" , "wkwebview.m" })),
154- .flags = &.{},
155- });
156- webui .linkFramework ("Cocoa" );
157- webui .linkFramework ("WebKit" );
158- }
159-
160- if (enable_tls ) {
161- webui .linkSystemLibrary ("ssl" );
162- webui .linkSystemLibrary ("crypto" );
163- }
164-
165- return webui ;
166- }
167-
168- fn install_webui_c (b : * Build , lib : * Compile ) void {
169- const step = b .step ("lib" , "Install lib" );
170- step .dependOn (& b .addInstallArtifact (lib , .{}).step );
171- }
172-
17394 fn generate_docs (b : * Build , optimize : OptimizeMode , target : Build.ResolvedTarget , flags_module : * Module ) void {
17495 const webui_lib = b .addObject (.{
17596 .name = "webui_lib" ,
0 commit comments