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