aboutsummaryrefslogtreecommitdiff
path: root/src/build_settings.cpp
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2022-04-26 13:14:09 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2022-04-26 13:14:09 +0200
commita5342a01267f55dec5a5b9f775cec8c8379139b1 (patch)
treedf6aec12051d2bb82790cf56ebe24147c54c2dd4 /src/build_settings.cpp
parent9f8d90f466454f4d14e755d44e4ba47ccbf0c92e (diff)
Address edge cases.
Diffstat (limited to 'src/build_settings.cpp')
-rw-r--r--src/build_settings.cpp42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 212ded5c8..89d370144 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -1276,16 +1276,44 @@ bool init_build_paths(String init_filename) {
if (bc->out_filepath.len > 0) {
bc->build_paths[BuildPath_Output] = path_from_string(ha, bc->out_filepath);
+ if (build_context.metrics.os == TargetOs_windows) {
+ String output_file = path_to_string(ha, bc->build_paths[BuildPath_Output]);
+ defer (gb_free(ha, output_file.text));
+ if (path_is_directory(bc->build_paths[BuildPath_Output])) {
+ gb_printf_err("Output path %.*s is a directory.\n", LIT(output_file));
+ return false;
+ } else if (bc->build_paths[BuildPath_Output].ext.len == 0) {
+ gb_printf_err("Output path %.*s must have an appropriate extension.\n", LIT(output_file));
+ return false;
+ }
+ }
} else {
- String output_name = remove_directory_from_path(init_filename);
- output_name = remove_extension_from_path(output_name);
- output_name = copy_string(ha, string_trim_whitespace(output_name));
+ Path output_path;
- Path output_path = path_from_string(ha, output_name);
+ if (str_eq(init_filename, str_lit("."))) {
+ // We must name the output file after the current directory.
+ debugf("Output name will be created from current base name %.*s.\n", LIT(bc->build_paths[BuildPath_Main_Package].basename));
+ String last_element = last_path_element(bc->build_paths[BuildPath_Main_Package].basename);
- // Replace extension.
- if (output_path.ext.len > 0) {
- gb_free(ha, output_path.ext.text);
+ if (last_element.len == 0) {
+ gb_printf_err("The output name is created from the last path element. `%.*s` has none. Use `-out:output_name.ext` to set it.\n", LIT(bc->build_paths[BuildPath_Main_Package].basename));
+ return false;
+ }
+ output_path.basename = copy_string(ha, bc->build_paths[BuildPath_Main_Package].basename);
+ output_path.name = copy_string(ha, last_element);
+
+ } else {
+ // Init filename was not 'current path'.
+ // Contruct the output name from the path elements as usual.
+ String output_name = remove_directory_from_path(init_filename);
+ output_name = remove_extension_from_path(output_name);
+ output_name = copy_string(ha, string_trim_whitespace(output_name));
+ output_path = path_from_string(ha, output_name);
+
+ // Replace extension.
+ if (output_path.ext.len > 0) {
+ gb_free(ha, output_path.ext.text);
+ }
}
output_path.ext = copy_string(ha, output_extension);