| ... | ... | @@ -44,6 +44,7 @@ pub const Builder = struct { |
| 44 | 44 | dest_dir: ?[]const u8, |
| 45 | 45 | lib_dir: ?[]const u8, |
| 46 | 46 | exe_dir: ?[]const u8, |
| 47 | install_path: []const u8, |
| 47 | 48 | search_prefixes: ArrayList([]const u8), |
| 48 | 49 | installed_files: ArrayList(InstalledFile), |
| 49 | 50 | build_root: []const u8, |
| ... | ... | @@ -144,6 +145,7 @@ pub const Builder = struct { |
| 144 | 145 | .is_release = false, |
| 145 | 146 | .override_std_dir = null, |
| 146 | 147 | .override_lib_dir = null, |
| 148 | .install_path = undefined, |
| 147 | 149 | }; |
| 148 | 150 | try self.top_level_steps.append(&self.install_tls); |
| 149 | 151 | try self.top_level_steps.append(&self.uninstall_tls); |
| ... | ... | @@ -166,14 +168,19 @@ pub const Builder = struct { |
| 166 | 168 | } |
| 167 | 169 | |
| 168 | 170 | fn resolveInstallPrefix(self: *Builder) void { |
| 169 | | const dest_dir = self.dest_dir orelse blk: { |
| 170 | | const dest_dir = self.install_prefix orelse self.cache_root; |
| 171 | | self.dest_dir = dest_dir; |
| 172 | | break :blk dest_dir; |
| 173 | | }; |
| 174 | | self.dest_dir = dest_dir; |
| 175 | | self.lib_dir = fs.path.join(self.allocator, [_][]const u8{ dest_dir, "lib" }) catch unreachable; |
| 176 | | self.exe_dir = fs.path.join(self.allocator, [_][]const u8{ dest_dir, "bin" }) catch unreachable; |
| 171 | if (self.dest_dir) |dest_dir| { |
| 172 | const install_prefix = self.install_prefix orelse "/usr"; |
| 173 | self.install_path = fs.path.join(self.allocator, [_][]const u8{ dest_dir, install_prefix }) catch unreachable; |
| 174 | } else { |
| 175 | const install_prefix = self.install_prefix orelse blk: { |
| 176 | const p = self.cache_root; |
| 177 | self.install_prefix = p; |
| 178 | break :blk p; |
| 179 | }; |
| 180 | self.install_path = install_prefix; |
| 181 | } |
| 182 | self.lib_dir = fs.path.join(self.allocator, [_][]const u8{ self.install_path, "lib" }) catch unreachable; |
| 183 | self.exe_dir = fs.path.join(self.allocator, [_][]const u8{ self.install_path, "bin" }) catch unreachable; |
| 177 | 184 | } |
| 178 | 185 | |
| 179 | 186 | pub fn addExecutable(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep { |
| ... | ... | @@ -886,7 +893,7 @@ pub const Builder = struct { |
| 886 | 893 | |
| 887 | 894 | fn getInstallPath(self: *Builder, dir: InstallDir, dest_rel_path: []const u8) []const u8 { |
| 888 | 895 | const base_dir = switch (dir) { |
| 889 | | .Prefix => self.dest_dir.?, |
| 896 | .Prefix => self.install_path, |
| 890 | 897 | .Bin => self.exe_dir.?, |
| 891 | 898 | .Lib => self.lib_dir.?, |
| 892 | 899 | }; |