authorgravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2025-01-23 23:15:44+01:00
committergravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2025-07-26 12:06:42+02:00
log413179ccfca32691504805d04ab1359104d22144
tree1a7f3db794f5de61162a981111e97dc9e0169565
parentfc4b7c968afa6fa0780a011f3c8cfeaea38b7b98

std.Build: Deprecate `Step.Compile` APIs that mutate the root module

Not only are `Step.Compile` methods like `linkLibC()` redundant because `Module` exposes the same APIs, it also might not be immediately obvious to users that these methods modify the underlying root module, which can be a footgun and lead to unintended results if the module is exported to package consumers or shared by multiple compile steps. Using `compile.root_module.link_libc = true` makes it more clear to users which of the compile step and the module owns which options.

1 files changed, 42 insertions(+), 4 deletions(-)

lib/std/Build/Step/Compile.zig+42-4
......@@ -681,10 +681,14 @@ pub fn producesImplib(compile: *Compile) bool {
681681 return compile.isDll();
682682}
683683
684/// Deprecated; use `compile.root_module.link_libc = true` instead.
685/// To be removed after 0.15.0 is tagged.
684686pub fn linkLibC(compile: *Compile) void {
685687 compile.root_module.link_libc = true;
686688}
687689
690/// Deprecated; use `compile.root_module.link_libcpp = true` instead.
691/// To be removed after 0.15.0 is tagged.
688692pub fn linkLibCpp(compile: *Compile) void {
689693 compile.root_module.link_libcpp = true;
690694}
......@@ -802,10 +806,14 @@ fn runPkgConfig(compile: *Compile, lib_name: []const u8) !PkgConfigResult {
802806 };
803807}
804808
809/// Deprecated; use `compile.root_module.linkSystemLibrary(name, .{})` instead.
810/// To be removed after 0.15.0 is tagged.
805811pub fn linkSystemLibrary(compile: *Compile, name: []const u8) void {
806812 return compile.root_module.linkSystemLibrary(name, .{});
807813}
808814
815/// Deprecated; use `compile.root_module.linkSystemLibrary(name, options)` instead.
816/// To be removed after 0.15.0 is tagged.
809817pub fn linkSystemLibrary2(
810818 compile: *Compile,
811819 name: []const u8,
......@@ -814,22 +822,26 @@ pub fn linkSystemLibrary2(
814822 return compile.root_module.linkSystemLibrary(name, options);
815823}
816824
825/// Deprecated; use `c.root_module.linkFramework(name, .{})` instead.
826/// To be removed after 0.15.0 is tagged.
817827pub fn linkFramework(c: *Compile, name: []const u8) void {
818828 c.root_module.linkFramework(name, .{});
819829}
820830
821/// Handy when you have many C/C++ source files and want them all to have the same flags.
831/// Deprecated; use `compile.root_module.addCSourceFiles(options)` instead.
832/// To be removed after 0.15.0 is tagged.
822833pub fn addCSourceFiles(compile: *Compile, options: Module.AddCSourceFilesOptions) void {
823834 compile.root_module.addCSourceFiles(options);
824835}
825836
837/// Deprecated; use `compile.root_module.addCSourceFile(source)` instead.
838/// To be removed after 0.15.0 is tagged.
826839pub fn addCSourceFile(compile: *Compile, source: Module.CSourceFile) void {
827840 compile.root_module.addCSourceFile(source);
828841}
829842
830/// Resource files must have the extension `.rc`.
831/// Can be called regardless of target. The .rc file will be ignored
832/// if the target object format does not support embedded resources.
843/// Deprecated; use `compile.root_module.addWin32ResourceFile(source)` instead.
844/// To be removed after 0.15.0 is tagged.
833845pub fn addWin32ResourceFile(compile: *Compile, source: Module.RcSourceFile) void {
834846 compile.root_module.addWin32ResourceFile(source);
835847}
......@@ -915,54 +927,80 @@ pub fn getEmittedLlvmBc(compile: *Compile) LazyPath {
915927 return compile.getEmittedFileGeneric(&compile.generated_llvm_bc);
916928}
917929
930/// Deprecated; use `compile.root_module.addAssemblyFile(source)` instead.
931/// To be removed after 0.15.0 is tagged.
918932pub fn addAssemblyFile(compile: *Compile, source: LazyPath) void {
919933 compile.root_module.addAssemblyFile(source);
920934}
921935
936/// Deprecated; use `compile.root_module.addObjectFile(source)` instead.
937/// To be removed after 0.15.0 is tagged.
922938pub fn addObjectFile(compile: *Compile, source: LazyPath) void {
923939 compile.root_module.addObjectFile(source);
924940}
925941
942/// Deprecated; use `compile.root_module.addObject(object)` instead.
943/// To be removed after 0.15.0 is tagged.
926944pub fn addObject(compile: *Compile, object: *Compile) void {
927945 compile.root_module.addObject(object);
928946}
929947
948/// Deprecated; use `compile.root_module.linkLibrary(library)` instead.
949/// To be removed after 0.15.0 is tagged.
930950pub fn linkLibrary(compile: *Compile, library: *Compile) void {
931951 compile.root_module.linkLibrary(library);
932952}
933953
954/// Deprecated; use `compile.root_module.addAfterIncludePath(lazy_path)` instead.
955/// To be removed after 0.15.0 is tagged.
934956pub fn addAfterIncludePath(compile: *Compile, lazy_path: LazyPath) void {
935957 compile.root_module.addAfterIncludePath(lazy_path);
936958}
937959
960/// Deprecated; use `compile.root_module.addSystemIncludePath(lazy_path)` instead.
961/// To be removed after 0.15.0 is tagged.
938962pub fn addSystemIncludePath(compile: *Compile, lazy_path: LazyPath) void {
939963 compile.root_module.addSystemIncludePath(lazy_path);
940964}
941965
966/// Deprecated; use `compile.root_module.addIncludePath(lazy_path)` instead.
967/// To be removed after 0.15.0 is tagged.
942968pub fn addIncludePath(compile: *Compile, lazy_path: LazyPath) void {
943969 compile.root_module.addIncludePath(lazy_path);
944970}
945971
972/// Deprecated; use `compile.root_module.addConfigHeader(config_header)` instead.
973/// To be removed after 0.15.0 is tagged.
946974pub fn addConfigHeader(compile: *Compile, config_header: *Step.ConfigHeader) void {
947975 compile.root_module.addConfigHeader(config_header);
948976}
949977
978/// Deprecated; use `compile.root_module.addEmbedPath(lazy_path)` instead.
979/// To be removed after 0.15.0 is tagged.
950980pub fn addEmbedPath(compile: *Compile, lazy_path: LazyPath) void {
951981 compile.root_module.addEmbedPath(lazy_path);
952982}
953983
984/// Deprecated; use `compile.root_module.addLibraryPath(directory_path)` instead.
985/// To be removed after 0.15.0 is tagged.
954986pub fn addLibraryPath(compile: *Compile, directory_path: LazyPath) void {
955987 compile.root_module.addLibraryPath(directory_path);
956988}
957989
990/// Deprecated; use `compile.root_module.addRPath(directory_path)` instead.
991/// To be removed after 0.15.0 is tagged.
958992pub fn addRPath(compile: *Compile, directory_path: LazyPath) void {
959993 compile.root_module.addRPath(directory_path);
960994}
961995
996/// Deprecated; use `compile.root_module.addSystemFrameworkPath(directory_path)` instead.
997/// To be removed after 0.15.0 is tagged.
962998pub fn addSystemFrameworkPath(compile: *Compile, directory_path: LazyPath) void {
963999 compile.root_module.addSystemFrameworkPath(directory_path);
9641000}
9651001
1002/// Deprecated; use `compile.root_module.addFrameworkPath(directory_path)` instead.
1003/// To be removed after 0.15.0 is tagged.
9661004pub fn addFrameworkPath(compile: *Compile, directory_path: LazyPath) void {
9671005 compile.root_module.addFrameworkPath(directory_path);
9681006}