for (f_array_length i = 0; i < files.used; i++) {
if (files.array[i].used == 0) continue;
- if (source.used == 0) {
- path_source.used = 0;
- }
- else {
- path_source.used = source.used - 1;
- }
+ path_source.used = source.used;
*status = fl_string_dynamic_append_nulless(files.array[i], &path_source);
if (F_status_is_error(*status)) {
break;
}
- *status = fl_string_dynamic_terminate(&path_source);
+ *status = fl_string_dynamic_terminate_after(&path_source);
if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate", F_true);
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate_after", F_true);
break;
}
}
if (data.verbosity == fake_verbosity_verbose) {
- printf("Copied file '%s' to '%s'.%c", path_source.string, destination_file.string, f_string_eol[0]);
+ fl_color_print_line(f_type_output, data.context.standout, data.context.reset, "Copied file '%s' to '%s'.", path_source.string, destination_file.string);
}
}
else if (F_status_is_error(*status)) {
#endif // _di_fake_build_copy_
#ifndef _di_fake_build_skeleton_
- void fake_build_skeleton(const fake_data data, const fake_build_setting setting, const mode_t mode, const f_string_static file_stage, f_status *status) {
+ void fake_build_skeleton(const fake_data data, const fake_build_data data_build, const mode_t mode, const f_string_static file_stage, f_status *status) {
if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+ f_string_static path_headers = f_string_static_initialize;
+ f_string_length directory_headers_length = data.path_build_includes.used + data_build.setting.path_headers.used;
+
+ char directory_headers[directory_headers_length + 1];
+
+ if (data_build.setting.path_headers.used > 0) {
+ memcpy(directory_headers, data.path_build_includes.string, data.path_build_includes.used);
+ memcpy(directory_headers + data.path_build_includes.used, data_build.setting.path_headers.string, data_build.setting.path_headers.used);
+
+ directory_headers[directory_headers_length] = 0;
+
+ path_headers.string = directory_headers;
+ path_headers.used = directory_headers_length;
+ path_headers.size = directory_headers_length + 1;
+ }
+
const f_string_static *directorys[] = {
&data.path_build,
&data.path_build_documents,
&data.path_build_programs_static,
&data.path_build_settings,
&data.path_build_stage,
+ &path_headers,
};
if (data.verbosity != fake_verbosity_quiet) {
printf("%cCreating base build directories.%c", f_string_eol[0], f_string_eol[0]);
}
- for (uint8_t i = 0; i < 15; i++) {
+ for (uint8_t i = 0; i < 16; i++) {
if (directorys[i]->used == 0) continue;
*status = f_directory_create(directorys[i]->string, mode);
}
if (data.verbosity == fake_verbosity_verbose) {
- printf("Created directory '%s'%c", directorys[i]->string, f_string_eol[0]);
+ fl_color_print_line(f_type_output, data.context.standout, data.context.reset, "Created directory '%s'.", directorys[i]->string);
}
} // for
#endif // _di_fake_build_skeleton_
#ifndef _di_fake_build_execute_process_script_
- void fake_build_execute_process_script(const fake_data data, const fake_build_setting setting, const f_string_static process_script, const f_string_static file_stage, f_status *status) {
+ void fake_build_execute_process_script(const fake_data data, const fake_build_data data_build, const f_string_static process_script, const f_string_static file_stage, f_status *status) {
if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
if (process_script.used == 0) return;
}
if (!F_status_is_error(*status)) {
- function = "fl_string_dynamic_terminate";
- *status = fl_string_dynamic_terminate(&path);
+ function = "fl_string_dynamic_terminate_after";
+ *status = fl_string_dynamic_terminate_after(&path);
}
if (F_status_is_error(*status)) {
}
{
- // @todo: create an implode function that merges f_string [] (and an f_string_dynamic [] equivalent) into a f_string_dynamics.
- f_string_dynamics names = f_string_dynamics_initialize;
-
- {
- // add the guaranteed environment variables.
- const f_string variables_name[] = {
- f_path_environment,
- f_path_present_working
- };
+ int result = 0;
- const f_string_length variables_length[] = {
- f_path_environment_length,
- f_path_present_working_length
- };
+ *status = fll_execute_path_environment(path.string, arguments, data_build.environment.names, data_build.environment.values, &result);
- f_macro_string_dynamics_new(*status, names, 2);
- if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "f_macro_string_dynamics_new", F_true);
+ f_macro_string_dynamics_delete_simple(arguments);
+ }
- f_macro_string_dynamic_delete_simple(path);
- f_macro_string_dynamics_delete_simple(arguments);
- f_macro_string_dynamics_delete_simple(names);
- return;
+ if (F_status_is_error(*status)) {
+ if (F_status_set_fine(*status) == F_failure) {
+ if (data.verbosity != fake_verbosity_quiet) {
+ fprintf(f_type_error, "%c", f_string_eol[0]);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: Failed to execute script: ");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", path.string);
+ fl_color_print_line(f_type_error, data.context.error, data.context.reset, ".");
}
+ }
+ else {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_execute_path_environment", F_true);
+ }
+ }
+ else {
+ fake_build_touch(data, file_stage, status);
+ }
- f_string_dynamic part = f_string_dynamic_initialize;
+ f_macro_string_dynamic_delete_simple(path);
+ }
+#endif // _di_fake_build_execute_process_script_
- for (uint8_t i = 0; i < 2; i++) {
- *status = fl_string_append(variables_name[i], variables_length[i], &part);
- if (F_status_is_error(*status)) break;
+#ifndef _di_fake_build_get_file_name_without_extension_
+ f_return_status fake_build_get_file_name_without_extension(const fake_data data, const f_string_static path, f_string_dynamic *name) {
+ f_status status = F_none;
- names.array[names.used].string = part.string;
- names.array[names.used].used = part.used;
- names.array[names.used].size = part.size;
- names.used++;
+ name->used = 0;
- f_macro_string_dynamic_clear(part);
- } // for
+ status = f_file_name_base(path.string, path.used, name);
+ if (F_status_is_error(status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(status), "f_file_name_base", F_true);
+ return status;
+ }
- if (!F_status_is_error(*status)) {
- if (names.used + setting.environment.used > names.size) {
- if (names.used + setting.environment.used > f_array_length_size) {
- if (data.verbosity != fake_verbosity_quiet) {
- fprintf(f_type_error, "%c", f_string_eol[0]);
- fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: The values for the setting '");
- fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", fake_build_setting_name_environment);
- fl_color_print(f_type_error, data.context.error, data.context.reset, "' of setting file '");
- fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", data.file_data_build_settings.string);
- fl_color_print_line(f_type_error, data.context.error, data.context.reset, "' is too large.");
- }
+ f_string_length i = name->used;
- f_macro_string_dynamic_delete_simple(part);
- f_macro_string_dynamics_delete_simple(arguments);
- f_macro_string_dynamics_delete_simple(names);
- *status = F_status_set_error(F_buffer_too_large);
- return;
- }
+ for (; i > 0; i--) {
+ if (name->string[i] == f_path_extension_separator[0]) {
+ name->used = i - 1;
+ break;
+ }
+ } // for
- f_macro_string_dynamics_resize(*status, names, names.used + setting.environment.used);
- if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "f_macro_string_dynamics_resize", F_true);
+ return F_none;
+ }
+#endif // _di_fake_build_get_file_name_without_extension_
- f_macro_string_dynamic_delete_simple(part);
- f_macro_string_dynamics_delete_simple(arguments);
- f_macro_string_dynamics_delete_simple(names);
- return;
- }
- }
+#ifndef _di_fake_build_libraries_script_
+ void fake_build_libraries_script(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
- for (f_string_length i = 0; i < setting.environment.used; i++) {
- *status = fl_string_dynamic_append_nulless(setting.environment.array[i], &part);
- if (F_status_is_error(*status)) break;
+ // @todo needs to perform some sort of regex replace on the library scripts.
- names.array[names.used].string = part.string;
- names.array[names.used].used = part.used;
- names.array[names.used].size = part.size;
- names.used++;
+ fake_build_touch(data, file_stage, status);
+ }
+#endif // _di_fake_build_libraries_script_
- f_macro_string_dynamic_clear(part);
- } // for
- }
+#ifndef _di_fake_build_libraries_shared_
+ void fake_build_libraries_shared(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
- f_macro_string_dynamic_delete_simple(part);
+ if (data.verbosity != fake_verbosity_quiet) {
+ printf("%cCompiling shared libraries.%c", f_string_eol[0], f_string_eol[0]);
+ }
- if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_append", F_true);
+ f_string_dynamics arguments = f_string_dynamics_initialize;
- f_macro_string_dynamic_delete_simple(path);
- f_macro_string_dynamics_delete_simple(arguments);
- f_macro_string_dynamics_delete_simple(names);
- return;
- }
+ {
+ const f_string_static *path_sources = &data.path_sources_c;
+
+ if (data_build.setting.build_language == fake_build_language_type_bash) {
+ path_sources = &data.path_sources_bash;
+ }
+ else if (data_build.setting.build_language == fake_build_language_type_c) {
+ path_sources = &data.path_sources_c;
+ }
+ else if (data_build.setting.build_language == fake_build_language_type_cpp) {
+ path_sources = &data.path_sources_cpp;
}
- f_string_dynamics environment_names = f_string_dynamics_initialize;
- f_string_dynamics environment_values = f_string_dynamics_initialize;
+ f_string_length source_length = 0;
- f_string_dynamic variable_name = f_string_dynamic_initialize;
- f_string_dynamic variable_value = f_string_dynamic_initialize;
+ for (f_array_length i = 0; i < data_build.setting.build_sources_library.used; i++) {
+ source_length = path_sources->used + data_build.setting.build_sources_library.array[i].used;
- for (f_string_length i = 0; i < names.used; i++) {
- *status = f_environment_get_dynamic(names.array[i], &variable_value);
- if (F_status_is_error(*status)) {
- if (F_status_set_fine(*status) == F_memory_reallocation) {
- function = "f_macro_string_dynamics_resize";
- break;
- }
+ char source[source_length + 1];
+
+ memcpy(source, path_sources->string, path_sources->used);
+ memcpy(source + path_sources->used, data_build.setting.build_sources_library.array[i].string, data_build.setting.build_sources_library.array[i].used);
+ source[source_length] = 0;
+
+ *status = fll_execute_arguments_add(source, source_length, &arguments);
+ if (F_status_is_error(*status)) break;
+ } // for
+
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_execute_arguments_add", F_true);
+
+ f_macro_string_dynamics_delete_simple(arguments);
+ return;
+ }
+ }
+
+ f_string_length parameter_file_name_major_length = fake_build_parameter_library_name_prefix_length;
+ f_string_length parameter_file_name_minor_length = fake_build_parameter_library_name_prefix_length;
+ f_string_length parameter_file_name_micro_length = fake_build_parameter_library_name_prefix_length;
+
+ parameter_file_name_micro_length += data_build.setting.project_name.used + fake_build_parameter_library_name_suffix_length;
+ parameter_file_name_micro_length += data_build.setting.version_major.used + fake_build_parameter_library_separator_length;
+ parameter_file_name_major_length = parameter_file_name_micro_length;
+
+ parameter_file_name_micro_length += data_build.setting.version_minor.used + fake_build_parameter_library_separator_length;
+ parameter_file_name_minor_length = parameter_file_name_micro_length;
+
+ parameter_file_name_micro_length += data_build.setting.version_micro.used;
+
+ char parameter_file_name_major[parameter_file_name_major_length + 1];
+ char parameter_file_name_minor[parameter_file_name_minor_length + 1];
+ char parameter_file_name_micro[parameter_file_name_micro_length + 1];
+
+ parameter_file_name_micro_length = 0;
+
+ memcpy(parameter_file_name_major, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
+ memcpy(parameter_file_name_minor, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
+ memcpy(parameter_file_name_micro, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
+ parameter_file_name_micro_length += fake_build_parameter_library_name_prefix_length;
+
+ memcpy(parameter_file_name_major + parameter_file_name_micro_length, data_build.setting.project_name.string, data_build.setting.project_name.used);
+ memcpy(parameter_file_name_minor + parameter_file_name_micro_length, data_build.setting.project_name.string, data_build.setting.project_name.used);
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, data_build.setting.project_name.string, data_build.setting.project_name.used);
+ parameter_file_name_micro_length += data_build.setting.project_name.used;
+
+ memcpy(parameter_file_name_major + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix, fake_build_parameter_library_name_suffix_length);
+ memcpy(parameter_file_name_minor + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix, fake_build_parameter_library_name_suffix_length);
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix, fake_build_parameter_library_name_suffix_length);
+ parameter_file_name_micro_length += fake_build_parameter_library_name_suffix_length;
+
+ memcpy(parameter_file_name_major + parameter_file_name_micro_length, data_build.setting.version_major.string, data_build.setting.version_major.used);
+ memcpy(parameter_file_name_minor + parameter_file_name_micro_length, data_build.setting.version_major.string, data_build.setting.version_major.used);
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, data_build.setting.version_major.string, data_build.setting.version_major.used);
+ parameter_file_name_micro_length += data_build.setting.version_major.used;
+ parameter_file_name_major_length = parameter_file_name_micro_length;
+
+ memcpy(parameter_file_name_minor + parameter_file_name_micro_length, fake_build_parameter_library_separator, fake_build_parameter_library_separator_length);
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, fake_build_parameter_library_separator, fake_build_parameter_library_separator_length);
+ parameter_file_name_micro_length += fake_build_parameter_library_separator_length;
+
+ memcpy(parameter_file_name_minor + parameter_file_name_micro_length, data_build.setting.version_minor.string, data_build.setting.version_minor.used);
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, data_build.setting.version_minor.string, data_build.setting.version_minor.used);
+ parameter_file_name_micro_length += data_build.setting.version_minor.used;
+ parameter_file_name_minor_length = parameter_file_name_micro_length;
+
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, fake_build_parameter_library_separator, fake_build_parameter_library_separator_length);
+ parameter_file_name_micro_length += fake_build_parameter_library_separator_length;
+
+ memcpy(parameter_file_name_micro + parameter_file_name_micro_length, data_build.setting.version_micro.string, data_build.setting.version_micro.used);
+ parameter_file_name_micro_length += data_build.setting.version_micro.used;
+
+ parameter_file_name_major[parameter_file_name_major_length] = 0;
+ parameter_file_name_minor[parameter_file_name_minor_length] = 0;
+ parameter_file_name_micro[parameter_file_name_micro_length] = 0;
+
+ {
+ f_string_length parameter_file_path_length = data.path_build_libraries_shared.used + parameter_file_name_micro_length;
+
+ char parameter_file_path[parameter_file_path_length + 1];
+
+ memcpy(parameter_file_path, data.path_build_libraries_shared.string, data.path_build_libraries_shared.used);
+
+ memcpy(parameter_file_path + data.path_build_libraries_shared.used, parameter_file_name_micro, parameter_file_name_micro_length);
+
+ parameter_file_path[parameter_file_path_length] = 0;
+
+ f_string_length parameter_linker_length = fake_build_parameter_library_shared_prefix_length + parameter_file_name_micro_length;
+
+ char parameter_linker[parameter_linker_length + 1];
+
+ memcpy(parameter_linker, fake_build_parameter_library_shared_prefix, fake_build_parameter_library_shared_prefix_length);
+
+ memcpy(parameter_linker + fake_build_parameter_library_shared_prefix_length, parameter_file_name_micro, parameter_file_name_micro_length);
+
+ parameter_linker[parameter_linker_length] = 0;
+
+ f_string_length build_libraries_length = fake_build_parameter_library_link_path_length + data.path_build_libraries_shared.used;
+
+ char build_libraries[build_libraries_length + 1];
+
+ memcpy(build_libraries, fake_build_parameter_library_link_path, fake_build_parameter_library_link_path_length);
+ memcpy(build_libraries + fake_build_parameter_library_link_path_length, data.path_build_libraries_shared.string, data.path_build_libraries_shared.used);
+
+ f_string_length build_includes_length = fake_build_parameter_library_include_length + data.path_build_includes.used;
+
+ char build_includes[build_includes_length + 1];
+
+ memcpy(build_includes, fake_build_parameter_library_include, fake_build_parameter_library_include_length);
+ memcpy(build_includes + fake_build_parameter_library_include_length, data.path_build_includes.string, data.path_build_includes.used);
+
+ const f_string values[] = {
+ fake_build_parameter_library_shared,
+ parameter_linker,
+ fake_build_parameter_library_output,
+ parameter_file_path,
+ build_libraries,
+ build_includes,
+ };
+
+ const f_string_length lengths[] = {
+ fake_build_parameter_library_shared_length,
+ parameter_linker_length,
+ fake_build_parameter_library_output_length,
+ parameter_file_path_length,
+ build_libraries_length,
+ build_includes_length,
+ };
+
+ for (uint8_t i = 0; i < 6; i++) {
+ *status = fll_execute_arguments_add(values[i], lengths[i], &arguments);
+ if (F_status_is_error(*status)) break;
+ } // for
+
+ if (data.path_work.used > 0) {
+ f_string_length length = 0;
+
+ if (F_status_is_fine(*status)) {
+ length = fake_build_parameter_library_include_length + data.path_work_includes.used;
+
+ char string[length + 1];
+
+ memcpy(string, fake_build_parameter_library_include, fake_build_parameter_library_include_length);
+ memcpy(string + fake_build_parameter_library_include_length, data.path_work_includes.string, data.path_work_includes.used);
+
+ string[length] = 0;
+
+ *status = fll_execute_arguments_add(string, length, &arguments);
}
- if (environment_names.used + 1 > environment_names.size) {
- f_macro_string_dynamics_resize(*status, environment_names, environment_names.size + f_memory_default_allocation_step);
+ if (data_build.setting.search_shared && F_status_is_fine(*status)) {
+ length = fake_build_parameter_library_link_path_length + data.path_work_libraries_shared.used;
- if (!F_status_is_error(*status)) {
- f_macro_string_dynamics_resize(*status, environment_values, environment_values.size + f_memory_default_allocation_step);
- }
+ char string[length + 1];
- if (F_status_is_error(*status)) {
- function = "f_macro_string_dynamics_resize";
- break;
- }
+ memcpy(string, fake_build_parameter_library_link_path, fake_build_parameter_library_link_path_length);
+ memcpy(string + fake_build_parameter_library_link_path_length, data.path_work_libraries_shared.string, data.path_work_libraries_shared.used);
+
+ string[length] = 0;
+
+ *status = fll_execute_arguments_add(string, length, &arguments);
}
- *status = fl_string_dynamic_append(names.array[i], &variable_name);
+ if (data_build.setting.search_static && !data_build.setting.search_exclusive && F_status_is_fine(*status)) {
+ length = fake_build_parameter_library_link_path_length + data.path_work_libraries_static.used;
- if (F_status_is_error(*status)) {
- function = "fl_string_append";
- break;
+ char string[length + 1];
+
+ memcpy(string, fake_build_parameter_library_link_path, fake_build_parameter_library_link_path_length);
+ memcpy(string + fake_build_parameter_library_link_path_length, data.path_work_libraries_static.string, data.path_work_libraries_static.used);
+
+ string[length] = 0;
+
+ *status = fll_execute_arguments_add(string, length, &arguments);
}
+ }
- environment_names.array[environment_names.used].string = variable_name.string;
- environment_names.array[environment_names.used].used = variable_name.used;
- environment_names.array[environment_names.used].size = variable_name.size;
- environment_names.used++;
+ if (F_status_is_fine(*status)) {
+ for (f_array_length i = 0; i < data_build.setting.build_libraries.used; i++) {
+ *status = fll_execute_arguments_add(data_build.setting.build_libraries.array[i].string, data_build.setting.build_libraries.array[i].used, &arguments);
+ if (F_status_is_error(*status)) break;
+ } // for
+ }
- environment_values.array[environment_values.used].string = variable_value.string;
- environment_values.array[environment_values.used].used = variable_value.used;
- environment_values.array[environment_values.used].size = variable_value.size;
- environment_values.used++;
+ for (f_array_length i = 0; i < data_build.setting.flags_all.used && F_status_is_fine(*status); i++) {
+ *status = fll_execute_arguments_add(data_build.setting.flags_all.array[i].string, data_build.setting.flags_all.array[i].used, &arguments);
+ if (F_status_is_error(*status)) break;
+ } // for
- f_macro_string_dynamic_clear(variable_name);
- f_macro_string_dynamic_clear(variable_value);
+ for (f_array_length i = 0; i < data_build.setting.flags_shared.used && F_status_is_fine(*status); i++) {
+ *status = fll_execute_arguments_add(data_build.setting.flags_shared.array[i].string, data_build.setting.flags_shared.array[i].used, &arguments);
+ if (F_status_is_error(*status)) break;
} // for
- f_macro_string_dynamics_delete_simple(names);
+ for (f_array_length i = 0; i < data_build.setting.flags_library.used && F_status_is_fine(*status); i++) {
+ *status = fll_execute_arguments_add(data_build.setting.flags_library.array[i].string, data_build.setting.flags_library.array[i].used, &arguments);
+ if (F_status_is_error(*status)) break;
+ } // for
if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, *status, function, F_true);
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_execute_arguments_add", F_true);
- f_macro_string_dynamic_delete_simple(variable_name);
- f_macro_string_dynamic_delete_simple(variable_value);
- f_macro_string_dynamics_delete_simple(environment_names);
- f_macro_string_dynamics_delete_simple(environment_values);
- f_macro_string_dynamic_delete_simple(path);
f_macro_string_dynamics_delete_simple(arguments);
return;
}
+ }
- int result = 0;
+ if (data.verbosity == fake_verbosity_verbose) {
+ f_print_string_dynamic(f_type_output, data.context.standout);
- *status = fll_execute_path_environment(path.string, arguments, environment_names, environment_values, &result);
+ printf("%s", data_build.setting.build_compiler.string);
- f_macro_string_dynamics_delete_simple(environment_names);
- f_macro_string_dynamics_delete_simple(environment_values);
- f_macro_string_dynamics_delete_simple(arguments);
+ for (f_array_length i = 0; i < arguments.used; i++) {
+ if (arguments.array[i].used == 0) continue;
+
+ printf(" %s", arguments.array[i].string);
+ } // for
+
+ f_print_string_dynamic(f_type_output, data.context.reset);
+ printf("%c", f_string_eol[0]);
+
+ // flush to stdout before executing command.
+ fflush(f_type_output);
}
- if (F_status_is_error(*status)) {
- if (F_status_set_fine(*status) == F_failure) {
- if (data.verbosity != fake_verbosity_quiet) {
- fprintf(f_type_error, "%c", f_string_eol[0]);
- fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: Failed to execute script: ");
- fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", path.string);
- fl_color_print_line(f_type_error, data.context.error, data.context.reset, ".");
- }
+ {
+ int result = 0;
+
+ *status = fll_execute_program_environment(data_build.setting.build_compiler.string, arguments, data_build.environment.names, data_build.environment.values, &result);
+
+ if (result != 0) {
+ f_macro_string_dynamics_delete_simple(arguments);
+
+ *status = F_status_set_error(F_failure);
+ return;
}
- else {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_execute_path_environment", F_true);
+ else if (F_status_is_error(*status)) {
+ if (F_status_set_fine(*status) == F_file_found_not) {
+ if (data.verbosity != fake_verbosity_quiet) {
+ fprintf(f_type_error, "%c", f_string_eol[0]);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: failed to find program '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", data_build.setting.build_compiler.string);
+ fl_color_print_line(f_type_error, data.context.error, data.context.reset, "' for executing.");
+ }
+ }
+ else {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_execute_path_environment", F_true);
+ }
+
+ f_macro_string_dynamics_delete_simple(arguments);
+ return;
}
}
- else {
- fake_build_touch(data, file_stage, status);
+
+ {
+ f_string_length parameter_file_path_length = data.path_build_libraries_shared.used + parameter_file_name_minor_length;
+
+ char parameter_file_path[parameter_file_path_length + 1];
+
+ memcpy(parameter_file_path, data.path_build_libraries_shared.string, data.path_build_libraries_shared.used);
+
+ memcpy(parameter_file_path + data.path_build_libraries_shared.used, parameter_file_name_minor, parameter_file_name_minor_length);
+
+ parameter_file_path[parameter_file_path_length] = 0;
+
+ *status = f_file_link(parameter_file_name_micro, parameter_file_path);
+
+ if (F_status_is_fine(*status) && data.verbosity == fake_verbosity_verbose) {
+ fl_color_print_line(f_type_output, data.context.standout, data.context.reset, "Linked file '%s' to '%s'.", parameter_file_path, parameter_file_name_micro);
+ }
}
- f_macro_string_dynamic_delete_simple(path);
- }
-#endif // _di_fake_build_execute_process_script_
+ if (F_status_is_fine(*status)) {
+ f_string_length parameter_file_path_length = data.path_build_libraries_shared.used + parameter_file_name_major_length;
-#ifndef _di_fake_build_libraries_script_
- void fake_build_libraries_script(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
- if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+ char parameter_file_path[parameter_file_path_length + 1];
- // @todo needs to perform some sort of regex replace on the library scripts.
+ memcpy(parameter_file_path, data.path_build_libraries_shared.string, data.path_build_libraries_shared.used);
- fake_build_touch(data, file_stage, status);
- }
-#endif // _di_fake_build_libraries_script_
+ memcpy(parameter_file_path + data.path_build_libraries_shared.used, parameter_file_name_major, parameter_file_name_major_length);
-#ifndef _di_fake_build_libraries_shared_
- void fake_build_libraries_shared(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
- if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+ parameter_file_path[parameter_file_path_length] = 0;
- // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
+ *status = f_file_link(parameter_file_name_minor, parameter_file_path);
+
+ if (F_status_is_fine(*status) && data.verbosity == fake_verbosity_verbose) {
+ fl_color_print_line(f_type_output, data.context.standout, data.context.reset, "Linked file '%s' to '%s'.", parameter_file_path, parameter_file_name_minor);
+ }
+ }
+
+ f_macro_string_dynamics_delete_simple(arguments);
- // $compiler $sources -shared -Wl,-soname,lib$name.so.$major -o ${path_build}libraries/shared/lib$name.so.$major.$minor.$micro $arguments_shared $arguments_include $flags_all $arguments $flags_shared $flags_library
- // ln -vsf lib$name.so.$major.$minor.$micro ${path_build}libraries/shared/lib$name.so.$major
- // ln -vsf lib$name.so.$major ${path_build}libraries/shared/lib$name.so
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "f_file_link", F_true);
+
+ return;
+ }
fake_build_touch(data, file_stage, status);
}
#endif // _di_fake_build_libraries_shared_
#ifndef _di_fake_build_libraries_static_
- void fake_build_libraries_static(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ void fake_build_libraries_static(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
// needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
}
#endif // _di_fake_build_libraries_static_
-#ifndef _di_fake_build_objects_static_
- void fake_build_objects_static(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
- if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
-
- // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
-
- // $compiler $path_c$i -c -static -o ${path_build}objects/$i.o $arguments_static $arguments_include $flags_all $arguments $flags_static $flags_library
-
- fake_build_touch(data, file_stage, status);
- }
-#endif // _di_fake_build_objects_static_
+#ifndef _di_fake_build_load_environment_
+ void fake_build_load_environment(const fake_data data, const fake_build_data data_build, fake_build_environment *environment, f_status *status) {
+ if (F_status_is_error(*status)) return;
-#ifndef _di_fake_build_operate_
- f_return_status fake_build_operate(const fake_data data) {
- if (data.verbosity != fake_verbosity_quiet) {
- printf("%c", f_string_eol[0]);
- fl_color_print_line(f_type_output, data.context.important, data.context.reset, "Building project.");
- }
+ f_string_dynamics names = f_string_dynamics_initialize;
- f_status status = F_none;
- f_mode mode = f_mode_initialize;
+ {
+ // add the guaranteed environment variables.
+ const f_string variables_name[] = {
+ f_path_environment,
+ f_path_present_working
+ };
- fake_build_setting setting = fake_build_setting_initialize;
- fake_build_stage stage = fake_build_stage_initialize;
+ const f_string_length variables_length[] = {
+ f_path_environment_length,
+ f_path_present_working_length
+ };
- f_macro_mode_set_default_umask(mode, data.umask);
+ f_macro_string_dynamics_new(*status, names, 2);
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "f_macro_string_dynamics_new", F_true);
- fake_build_setting_load(data, &setting, &status);
+ f_macro_string_dynamics_delete_simple(names);
+ return;
+ }
- fake_build_stage_load(data, &stage, &status);
+ f_string_dynamic part = f_string_dynamic_initialize;
- fake_build_skeleton(data, setting, mode.directory, stage.file_skeleton, &status);
+ for (uint8_t i = 0; i < 2; i++) {
+ *status = fl_string_append(variables_name[i], variables_length[i], &part);
+ if (F_status_is_error(*status)) break;
- fake_build_execute_process_script(data, setting, setting.process_pre, stage.file_process_pre, &status);
+ names.array[names.used].string = part.string;
+ names.array[names.used].used = part.used;
+ names.array[names.used].size = part.size;
+ names.used++;
- fake_build_copy(data, mode, "setting files", data.path_data_settings, data.path_build_settings, setting.build_sources_setting, stage.file_sources_settings, &status);
+ f_macro_string_dynamic_clear(part);
+ } // for
- if (setting.build_language == fake_build_language_type_bash) {
- fake_build_libraries_script(data, setting, mode, stage.file_libraries_script, &status);
+ if (!F_status_is_error(*status)) {
+ if (names.used + data_build.setting.environment.used > names.size) {
+ if (names.used + data_build.setting.environment.used > f_array_length_size) {
+ if (data.verbosity != fake_verbosity_quiet) {
+ fprintf(f_type_error, "%c", f_string_eol[0]);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: The values for the setting '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", fake_build_setting_name_environment);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "' of setting file '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", data.file_data_build_settings.string);
+ fl_color_print_line(f_type_error, data.context.error, data.context.reset, "' is too large.");
+ }
- fake_build_programs_script(data, setting, mode, stage.file_programs_script, &status);
+ f_macro_string_dynamic_delete_simple(part);
+ f_macro_string_dynamics_delete_simple(names);
+ *status = F_status_set_error(F_buffer_too_large);
+ return;
+ }
- if (setting.build_script) {
- fake_build_copy(data, mode, "scripts", data.path_sources_script, data.path_build_programs_script, setting.build_sources_script, stage.file_sources_script, &status);
- }
- }
- else {
- const f_string_dynamic *path_sources = 0;
+ f_macro_string_dynamics_resize(*status, names, names.used + data_build.setting.environment.used);
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "f_macro_string_dynamics_resize", F_true);
- if (setting.build_language == fake_build_language_type_c) {
- path_sources = &data.path_sources_c;
- }
- else if (setting.build_language == fake_build_language_type_cpp) {
- path_sources = &data.path_sources_cpp;
- }
+ f_macro_string_dynamic_delete_simple(part);
+ f_macro_string_dynamics_delete_simple(names);
+ return;
+ }
+ }
- fake_build_copy(data, mode, "header files", *path_sources, data.path_build_includes, setting.build_sources_headers, stage.file_sources_headers, &status);
+ for (f_string_length i = 0; i < data_build.setting.environment.used; i++) {
+ *status = fl_string_dynamic_append_nulless(data_build.setting.environment.array[i], &part);
+ if (F_status_is_error(*status)) break;
- if (setting.build_shared) {
- fake_build_libraries_shared(data, setting, mode, stage.file_libraries_shared, &status);
+ names.array[names.used].string = part.string;
+ names.array[names.used].used = part.used;
+ names.array[names.used].size = part.size;
+ names.used++;
- fake_build_programs_shared(data, setting, mode, stage.file_programs_shared, &status);
+ f_macro_string_dynamic_clear(part);
+ } // for
}
- if (setting.build_static) {
- fake_build_objects_static(data, setting, mode, stage.file_objects_static, &status);
-
- fake_build_libraries_static(data, setting, mode, stage.file_libraries_static, &status);
+ f_macro_string_dynamic_delete_simple(part);
- fake_build_programs_static(data, setting, mode, stage.file_programs_static, &status);
- }
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_append", F_true);
- if (setting.build_script) {
- fake_build_copy(data, mode, "scripts", data.path_sources_script, data.path_build_programs_script, setting.build_sources_script, stage.file_sources_script, &status);
+ f_macro_string_dynamics_delete_simple(names);
+ return;
}
}
- fake_build_execute_process_script(data, setting, setting.process_post, stage.file_process_post, &status);
-
- fake_macro_build_settings_delete_simple(setting);
- fake_macro_build_stage_delete_simple(stage);
-
- return status;
- }
-#endif // _di_fake_build_operate_
+ f_string function = f_string_initialize;
+ f_string_dynamic variable_name = f_string_dynamic_initialize;
+ f_string_dynamic variable_value = f_string_dynamic_initialize;
-#ifndef _di_fake_build_programs_script_
- void fake_build_programs_script(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
- if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+ for (f_string_length i = 0; i < names.used; i++) {
+ *status = f_environment_get_dynamic(names.array[i], &variable_value);
+ if (F_status_is_error(*status)) {
+ if (F_status_set_fine(*status) == F_memory_reallocation) {
+ function = "f_macro_string_dynamics_resize";
+ break;
+ }
+ }
- // @todo needs to perform some sort of regex replace on the program scripts.
+ if (environment->names.used + 1 > environment->names.size) {
+ f_macro_string_dynamics_resize(*status, environment->names, environment->names.size + f_memory_default_allocation_step);
- fake_build_touch(data, file_stage, status);
- }
-#endif // _di_fake_build_programs_script_
+ if (!F_status_is_error(*status)) {
+ f_macro_string_dynamics_resize(*status, environment->values, environment->values.size + f_memory_default_allocation_step);
+ }
-#ifndef _di_fake_build_programs_shared_
- void fake_build_programs_shared(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
- if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+ if (F_status_is_error(*status)) {
+ function = "f_macro_string_dynamics_resize";
+ break;
+ }
+ }
- // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
+ *status = fl_string_dynamic_append(names.array[i], &variable_name);
- // $compiler $sources -o ${path_build}programs/shared/$name $arguments_shared $arguments_include $flags_all $arguments $flags_shared $flags_program
+ if (F_status_is_error(*status)) {
+ function = "fl_string_append";
+ break;
+ }
- fake_build_touch(data, file_stage, status);
- }
-#endif // _di_fake_build_programs_shared_
+ environment->names.array[environment->names.used].string = variable_name.string;
+ environment->names.array[environment->names.used].used = variable_name.used;
+ environment->names.array[environment->names.used].size = variable_name.size;
+ environment->names.used++;
-#ifndef _di_fake_build_programs_static_
- void fake_build_programs_static(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) {
- if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+ environment->values.array[environment->values.used].string = variable_value.string;
+ environment->values.array[environment->values.used].used = variable_value.used;
+ environment->values.array[environment->values.used].size = variable_value.size;
+ environment->values.used++;
- // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
+ f_macro_string_dynamic_clear(variable_name);
+ f_macro_string_dynamic_clear(variable_value);
+ } // for
- // $compiler -static -o ${path_build}programs/static/$name $sources $arguments_static $arguments_include $flags_all $arguments $flags_static $flags_program
+ f_macro_string_dynamics_delete_simple(names);
+ f_macro_string_dynamic_delete_simple(variable_name);
+ f_macro_string_dynamic_delete_simple(variable_value);
- fake_build_touch(data, file_stage, status);
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, *status, function, F_true);
+ }
}
-#endif // _di_fake_build_programs_static_
+#endif // _di_fake_build_load_environment_
-#ifndef _di_fake_build_setting_load_
- void fake_build_setting_load(const fake_data data, fake_build_setting *setting, f_status *status) {
+#ifndef _di_fake_build_load_setting_
+ void fake_build_load_setting(const fake_data data, fake_build_setting *setting, f_status *status) {
if (F_status_is_error(*status)) return;
f_file file = f_file_initialize;
fake_build_setting_name_process_pre,
fake_build_setting_name_project_level,
fake_build_setting_name_project_name,
+ fake_build_setting_name_search_exclusive,
+ fake_build_setting_name_search_shared,
+ fake_build_setting_name_search_static,
fake_build_setting_name_version_major,
fake_build_setting_name_version_micro,
fake_build_setting_name_version_minor,
fake_build_setting_name_process_pre_length,
fake_build_setting_name_project_level_length,
fake_build_setting_name_project_name_length,
+ fake_build_setting_name_search_exclusive_length,
+ fake_build_setting_name_search_shared_length,
+ fake_build_setting_name_search_static_length,
fake_build_setting_name_version_major_length,
fake_build_setting_name_version_micro_length,
fake_build_setting_name_version_minor_length,
};
+ f_string_dynamics build_compiler = f_string_dynamics_initialize;
f_string_dynamics build_language = f_string_dynamics_initialize;
+ f_string_dynamics build_linker = f_string_dynamics_initialize;
f_string_dynamics build_script = f_string_dynamics_initialize;
f_string_dynamics build_shared = f_string_dynamics_initialize;
f_string_dynamics build_static = f_string_dynamics_initialize;
f_string_dynamics process_pre = f_string_dynamics_initialize;
f_string_dynamics project_level = f_string_dynamics_initialize;
f_string_dynamics project_name = f_string_dynamics_initialize;
+ f_string_dynamics search_exclusive = f_string_dynamics_initialize;
+ f_string_dynamics search_shared = f_string_dynamics_initialize;
+ f_string_dynamics search_static = f_string_dynamics_initialize;
f_string_dynamics version_major = f_string_dynamics_initialize;
f_string_dynamics version_micro = f_string_dynamics_initialize;
f_string_dynamics version_minor = f_string_dynamics_initialize;
f_string_dynamics *settings_value[] = {
- &setting->build_compiler,
+ &build_compiler,
&build_language,
&setting->build_libraries,
- &setting->build_linker,
+ &build_linker,
&build_script,
&build_shared,
&setting->build_sources_headers,
&process_pre,
&project_level,
&project_name,
+ &search_exclusive,
+ &search_shared,
+ &search_static,
&version_major,
&version_micro,
&version_minor,
fake_build_setting_name_process_pre,
fake_build_setting_name_project_level,
fake_build_setting_name_project_name,
+ fake_build_setting_name_search_exclusive,
+ fake_build_setting_name_search_shared,
+ fake_build_setting_name_search_static,
fake_build_setting_name_version_major,
fake_build_setting_name_version_micro,
fake_build_setting_name_version_minor,
};
const f_string_statics *settings_single_source[] = {
+ &build_compiler,
&build_language,
+ &build_linker,
&build_script,
&build_shared,
&build_static,
&process_pre,
&project_level,
&project_name,
+ &search_exclusive,
+ &search_shared,
+ &search_static,
&version_major,
&version_micro,
&version_minor,
};
uint8_t *settings_single_language[] = {
+ 0,
&setting->build_language,
};
bool *settings_single_bool[] = {
0,
+ 0,
+ 0,
&setting->build_script,
&setting->build_shared,
&setting->build_static,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ &setting->search_exclusive,
+ &setting->search_shared,
+ &setting->search_static,
};
f_string_dynamic *settings_single_destination[] = {
+ &setting->build_compiler,
0,
+ &setting->build_linker,
0,
0,
0,
&setting->process_pre,
&setting->project_level,
&setting->project_name,
+ 0,
+ 0,
+ 0,
&setting->version_major,
&setting->version_micro,
&setting->version_minor,
};
+ // 1 = "yes" or "no", 2 = path/, 3 = literal, 4 = "bash", "c", or "c++".
uint8_t settings_single_type[] = {
+ 3,
4,
+ 3,
1,
1,
1,
3,
3,
3,
+ 1,
+ 1,
+ 1,
3,
3,
3,
};
- for (f_array_length i = 0; i < 18; i++) {
+ for (f_array_length i = 0; i < 24; i++) {
if (settings_single_source[i]->used == 0) continue;
if (settings_single_source[i]->used > 1) {
if (settings_single_type[i] == 2) {
*status = fl_string_append_assure(f_path_separator, f_path_separator_length, settings_single_destination[i]);
if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_append_nulless", F_true);
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_append_assure", F_true);
break;
}
}
- *status = fl_string_dynamic_terminate(settings_single_destination[i]);
+ *status = fl_string_dynamic_terminate_after(settings_single_destination[i]);
if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate", F_true);
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate_after", F_true);
break;
}
}
} // for
}
+ f_macro_string_dynamics_delete_simple(build_compiler);
f_macro_string_dynamics_delete_simple(build_language);
+ f_macro_string_dynamics_delete_simple(build_linker);
f_macro_string_dynamics_delete_simple(build_script);
f_macro_string_dynamics_delete_simple(build_shared);
f_macro_string_dynamics_delete_simple(build_static);
f_macro_string_dynamics_delete_simple(process_pre);
f_macro_string_dynamics_delete_simple(project_level);
f_macro_string_dynamics_delete_simple(project_name);
+ f_macro_string_dynamics_delete_simple(search_exclusive);
+ f_macro_string_dynamics_delete_simple(search_shared);
+ f_macro_string_dynamics_delete_simple(search_static);
f_macro_string_dynamics_delete_simple(version_major);
f_macro_string_dynamics_delete_simple(version_micro);
f_macro_string_dynamics_delete_simple(version_minor);
}
f_macro_string_dynamic_delete_simple(buffer);
+
+ // error when required settings are not specified.
+ {
+ bool failed = F_false;
+
+ f_string_static *settings[] = {
+ &setting->project_name,
+ };
+
+ f_string names[] = {
+ fake_build_setting_name_project_name,
+ };
+
+ for (uint8_t i = 0; i < 1; i++) {
+ if (settings[i]->used == 0) {
+ fprintf(f_type_error, "%c", f_string_eol[0]);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: the setting '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", names[i]);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "' is required but is not specified in the settings file '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", data.file_data_build_settings.string);
+ fl_color_print_line(f_type_error, data.context.error, data.context.reset, "'.");
+
+ failed = F_true;
+ }
+ } // for
+
+ if (failed) {
+ *status = F_status_set_error(F_failure);
+ return;
+ }
+ }
+
+ // provide some defaults.
+ {
+ f_string sources[] = {
+ fake_build_setting_default_version,
+ fake_build_setting_default_version,
+ fake_build_setting_default_version,
+ };
+
+ f_string_length lengths[] = {
+ fake_build_setting_default_version_length,
+ fake_build_setting_default_version_length,
+ fake_build_setting_default_version_length,
+ };
+
+ f_string_dynamic *destinations[] = {
+ &setting->version_major,
+ &setting->version_minor,
+ &setting->version_micro,
+ };
+
+ for (uint8_t i = 0; i < 3; i++) {
+ if (destinations[i]->used > 0) continue;
+
+ *status = fl_string_append_assure(sources[i], lengths[i], destinations[i]);
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_append_assure", F_true);
+ break;
+ }
+
+ *status = fl_string_dynamic_terminate_after(destinations[i]);
+ if (F_status_is_error(*status)) {
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate_after", F_true);
+ break;
+ }
+ } // for
+ }
+
+ // Override setting file when any of these are specified in the command line.
+ if (F_status_is_fine(*status)) {
+ if (data.parameters[fake_parameter_shared_disabled].result == f_console_result_found) {
+ if (data.parameters[fake_parameter_shared_enabled].result == f_console_result_found) {
+ if (data.parameters[fake_parameter_shared_enabled].location > data.parameters[fake_parameter_shared_disabled].location) {
+ setting->build_shared = F_true;
+ setting->search_shared = F_true;
+ }
+ else {
+ setting->build_shared = F_false;
+ setting->search_shared = F_false;
+ }
+
+ if (data.verbosity == fake_verbosity_verbose) {
+ fprintf(f_type_warning, "%c", f_string_eol[0]);
+ fl_color_print(f_type_warning, data.context.error, data.context.reset, "WARNING: the parameters '");
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_shared_disabled);
+ fl_color_print(f_type_warning, data.context.error, data.context.reset, "' and '");
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_shared_enabled);
+ fl_color_print(f_type_warning, data.context.error, data.context.reset, "' contradict, defaulting to '");
+
+ if (setting->build_shared) {
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_shared_enabled);
+ }
+ else {
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_shared_disabled);
+ }
+
+ fl_color_print_line(f_type_warning, data.context.error, data.context.reset, "'.");
+ }
+ }
+ else {
+ setting->build_shared = F_false;
+ setting->search_shared = F_false;
+ }
+ }
+ else if (data.parameters[fake_parameter_shared_enabled].result == f_console_result_found) {
+ setting->build_shared = F_true;
+ setting->search_shared = F_true;
+ }
+
+ if (data.parameters[fake_parameter_static_disabled].result == f_console_result_found) {
+ if (data.parameters[fake_parameter_static_enabled].result == f_console_result_found) {
+ if (data.parameters[fake_parameter_static_enabled].location > data.parameters[fake_parameter_static_disabled].location) {
+ setting->build_static = F_true;
+ setting->search_static = F_true;
+ }
+ else {
+ setting->build_static = F_false;
+ setting->search_static = F_false;
+ }
+
+ if (data.verbosity == fake_verbosity_verbose) {
+ fprintf(f_type_warning, "%c", f_string_eol[0]);
+ fl_color_print(f_type_warning, data.context.error, data.context.reset, "WARNING: the parameters '");
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_static_disabled);
+ fl_color_print(f_type_warning, data.context.error, data.context.reset, "' and '");
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_static_enabled);
+ fl_color_print(f_type_warning, data.context.error, data.context.reset, "' contradict, defaulting to '");
+
+ if (setting->build_static) {
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_static_enabled);
+ }
+ else {
+ fl_color_print(f_type_warning, data.context.notable, data.context.reset, "%s%s", f_console_symbol_long_enable, fake_long_static_disabled);
+ }
+
+ fl_color_print_line(f_type_warning, data.context.error, data.context.reset, "'.");
+ }
+ }
+ else {
+ setting->build_static = F_false;
+ setting->search_static = F_false;
+ }
+ }
+ else if (data.parameters[fake_parameter_static_enabled].result == f_console_result_found) {
+ setting->build_static = F_true;
+ setting->search_static = F_true;
+ }
+
+ if (setting->build_language == fake_build_language_type_c || setting->build_language == fake_build_language_type_cpp) {
+ if (setting->build_shared == F_false && setting->build_static == F_false) {
+ if (data.verbosity != fake_verbosity_quiet) {
+ fprintf(f_type_error, "%c", f_string_eol[0]);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "ERROR: the build settings '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", fake_build_setting_name_build_shared);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "' and '");
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", fake_build_setting_name_build_static);
+ fl_color_print(f_type_error, data.context.error, data.context.reset, "' cannot both be false when using the language '");
+
+ if (setting->build_language == fake_build_language_type_c) {
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", fake_build_language_c);
+ }
+ else {
+ fl_color_print(f_type_error, data.context.notable, data.context.reset, "%s", fake_build_language_cpp);
+ }
+
+ fl_color_print_line(f_type_error, data.context.error, data.context.reset, "'.");
+ }
+
+ *status = F_status_set_error(F_failure);
+ }
+ }
+ }
}
-#endif // _di_fake_build_setting_load_
+#endif // _di_fake_build_load_setting_
-#ifndef _di_fake_build_stage_load_
- void fake_build_stage_load(const fake_data data, fake_build_stage *stage, f_status *status) {
+#ifndef _di_fake_build_load_stage_
+ void fake_build_load_stage(const fake_data data, fake_build_stage *stage, f_status *status) {
if (F_status_is_error(*status)) return;
const f_string names[] = {
break;
}
- *status = fl_string_dynamic_terminate(values[i]);
+ *status = fl_string_dynamic_terminate_after(values[i]);
if (F_status_is_error(*status)) {
- fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate", F_true);
+ fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_terminate_after", F_true);
break;
}
} // for
}
-#endif // _di_fake_build_stage_load_
+#endif // _di_fake_build_load_stage_
+
+#ifndef _di_fake_build_objects_static_
+ void fake_build_objects_static(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+
+ // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
+
+ // $compiler $path_c$i -c -static -o ${path_build}objects/$i.o $arguments_static $arguments_include $flags_all $arguments $flags_static $flags_library
+
+ fake_build_touch(data, file_stage, status);
+ }
+#endif // _di_fake_build_objects_static_
+
+#ifndef _di_fake_build_operate_
+ f_return_status fake_build_operate(const fake_data data) {
+ if (data.verbosity != fake_verbosity_quiet) {
+ printf("%c", f_string_eol[0]);
+ fl_color_print_line(f_type_output, data.context.important, data.context.reset, "Building project.");
+ }
+
+ f_status status = F_none;
+ f_mode mode = f_mode_initialize;
+
+ fake_build_data data_build = fake_build_data_initialize;
+ fake_build_stage stage = fake_build_stage_initialize;
+
+ f_macro_mode_set_default_umask(mode, data.umask);
+
+ fake_build_load_setting(data, &data_build.setting, &status);
+
+ fake_build_load_stage(data, &stage, &status);
+
+ fake_build_load_environment(data, data_build, &data_build.environment, &status);
+
+ fake_build_skeleton(data, data_build, mode.directory, stage.file_skeleton, &status);
+
+ fake_build_execute_process_script(data, data_build, data_build.setting.process_pre, stage.file_process_pre, &status);
+
+ fake_build_copy(data, mode, "setting files", data.path_data_settings, data.path_build_settings, data_build.setting.build_sources_setting, stage.file_sources_settings, &status);
+
+ if (data_build.setting.build_language == fake_build_language_type_bash) {
+ fake_build_libraries_script(data, data_build, mode, stage.file_libraries_script, &status);
+
+ fake_build_programs_script(data, data_build, mode, stage.file_programs_script, &status);
+
+ if (data_build.setting.build_script) {
+ fake_build_copy(data, mode, "scripts", data.path_sources_script, data.path_build_programs_script, data_build.setting.build_sources_script, stage.file_sources_script, &status);
+ }
+ }
+ else {
+ {
+ const f_string_static *path_sources = 0;
+
+ if (data_build.setting.build_language == fake_build_language_type_c) {
+ path_sources = &data.path_sources_c;
+ }
+ else if (data_build.setting.build_language == fake_build_language_type_cpp) {
+ path_sources = &data.path_sources_cpp;
+ }
+
+ f_string_static path_headers = f_string_static_initialize;
+ f_string_length directory_headers_length = data.path_build_includes.used + data_build.setting.path_headers.used;
+
+ char directory_headers[directory_headers_length + 1];
+
+ if (data_build.setting.path_headers.used > 0) {
+ memcpy(directory_headers, data.path_build_includes.string, data.path_build_includes.used);
+ memcpy(directory_headers + data.path_build_includes.used, data_build.setting.path_headers.string, data_build.setting.path_headers.used);
+
+ directory_headers[directory_headers_length] = 0;
+
+ path_headers.string = directory_headers;
+ path_headers.used = directory_headers_length;
+ path_headers.size = directory_headers_length + 1;
+ }
+
+ fake_build_copy(data, mode, "header files", *path_sources, path_headers, data_build.setting.build_sources_headers, stage.file_sources_headers, &status);
+ }
+
+ if (data_build.setting.build_shared) {
+ fake_build_libraries_shared(data, data_build, mode, stage.file_libraries_shared, &status);
+
+ fake_build_programs_shared(data, data_build, mode, stage.file_programs_shared, &status);
+ }
+
+ if (data_build.setting.build_static) {
+ fake_build_objects_static(data, data_build, mode, stage.file_objects_static, &status);
+
+ fake_build_libraries_static(data, data_build, mode, stage.file_libraries_static, &status);
+
+ fake_build_programs_static(data, data_build, mode, stage.file_programs_static, &status);
+ }
+
+ if (data_build.setting.build_script) {
+ fake_build_copy(data, mode, "scripts", data.path_sources_script, data.path_build_programs_script, data_build.setting.build_sources_script, stage.file_sources_script, &status);
+ }
+ }
+
+ fake_build_execute_process_script(data, data_build, data_build.setting.process_post, stage.file_process_post, &status);
+
+ fake_macro_build_data_delete_simple(data_build);
+ fake_macro_build_stage_delete_simple(stage);
+
+ return status;
+ }
+#endif // _di_fake_build_operate_
+
+#ifndef _di_fake_build_programs_script_
+ void fake_build_programs_script(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+
+ // @todo needs to perform some sort of regex replace on the program scripts.
+
+ fake_build_touch(data, file_stage, status);
+ }
+#endif // _di_fake_build_programs_script_
+
+#ifndef _di_fake_build_programs_shared_
+ void fake_build_programs_shared(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+
+ // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
+
+ // $compiler $sources -o ${path_build}programs/shared/$name $arguments_shared $arguments_include $flags_all $arguments $flags_shared $flags_program
+
+ fake_build_touch(data, file_stage, status);
+ }
+#endif // _di_fake_build_programs_shared_
+
+#ifndef _di_fake_build_programs_static_
+ void fake_build_programs_static(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) {
+ if (F_status_is_error(*status) || f_file_exists(file_stage.string) == F_true) return;
+
+ // needs to strip the prefix and the filename extension '.c', '.cpp', etc.. to get the name." (call f_file_name_base() and then find last '.').
+
+ // $compiler -static -o ${path_build}programs/static/$name $sources $arguments_static $arguments_include $flags_all $arguments $flags_static $flags_program
+
+ fake_build_touch(data, file_stage, status);
+ }
+#endif // _di_fake_build_programs_static_
#ifndef _di_fake_build_touch_
void fake_build_touch(const fake_data data, const f_string_dynamic file, f_status *status) {
extern "C" {
#endif
+#ifndef _di_fake_build_environment_
+ typedef struct {
+ f_string_dynamics names;
+ f_string_dynamics values;
+ } fake_build_environment;
+
+ #define fake_build_environment_initialize { \
+ f_string_dynamics_initialize, \
+ f_string_dynamics_initialize, \
+ }
+
+ #define fake_macro_build_environment_delete_simple(environment) \
+ f_macro_string_dynamics_delete_simple(environment.names) \
+ f_macro_string_dynamics_delete_simple(environment.values)
+#endif // _di_fake_build_environment_
+
#ifndef _di_fake_build_setting_
typedef struct {
uint8_t build_language;
bool build_shared;
bool build_static;
+ bool search_exclusive;
+ bool search_shared;
+ bool search_static;
+
+ f_string_dynamic build_compiler;
+ f_string_dynamic build_linker;
f_string_dynamic path_language;
f_string_dynamic path_headers;
f_string_dynamic path_library_script;
f_string_dynamic version_micro;
f_string_dynamic version_minor;
- f_string_dynamics build_compiler;
f_string_dynamics build_libraries;
- f_string_dynamics build_linker;
f_string_dynamics build_sources_headers;
f_string_dynamics build_sources_library;
f_string_dynamics build_sources_program;
F_true, \
F_true, \
F_true, \
+ F_true, \
+ F_true, \
+ F_true, \
+ f_string_dynamic_initialize, \
+ f_string_dynamic_initialize, \
f_string_dynamic_initialize, \
f_string_dynamic_initialize, \
f_string_dynamic_initialize, \
f_string_dynamic_initialize, \
f_string_dynamic_initialize, \
f_string_dynamic_initialize, \
- f_string_dynamics_initialize, \
- f_string_dynamics_initialize, \
f_string_dynamics_initialize, \
f_string_dynamics_initialize, \
f_string_dynamics_initialize, \
f_string_dynamics_initialize, \
}
- #define fake_macro_build_settings_delete_simple(setting) \
+ #define fake_macro_build_setting_delete_simple(setting) \
+ f_macro_string_dynamic_delete_simple(setting.build_compiler) \
+ f_macro_string_dynamic_delete_simple(setting.build_linker) \
f_macro_string_dynamic_delete_simple(setting.path_headers) \
f_macro_string_dynamic_delete_simple(setting.path_language) \
f_macro_string_dynamic_delete_simple(setting.path_library_script) \
f_macro_string_dynamic_delete_simple(setting.version_major) \
f_macro_string_dynamic_delete_simple(setting.version_micro) \
f_macro_string_dynamic_delete_simple(setting.version_minor) \
- f_macro_string_dynamics_delete_simple(setting.build_compiler) \
f_macro_string_dynamics_delete_simple(setting.build_libraries) \
- f_macro_string_dynamics_delete_simple(setting.build_linker) \
f_macro_string_dynamics_delete_simple(setting.build_sources_headers) \
f_macro_string_dynamics_delete_simple(setting.build_sources_library) \
f_macro_string_dynamics_delete_simple(setting.build_sources_program) \
#define fake_build_setting_name_process_pre "process_pre"
#define fake_build_setting_name_project_level "project_level"
#define fake_build_setting_name_project_name "project_name"
+ #define fake_build_setting_name_search_exclusive "search_exclusive"
+ #define fake_build_setting_name_search_shared "search_shared"
+ #define fake_build_setting_name_search_static "search_static"
#define fake_build_setting_name_version_major "version_major"
#define fake_build_setting_name_version_micro "version_micro"
#define fake_build_setting_name_version_minor "version_minor"
#define fake_build_setting_name_process_pre_length 11
#define fake_build_setting_name_project_level_length 13
#define fake_build_setting_name_project_name_length 12
+ #define fake_build_setting_name_search_exclusive_length 16
+ #define fake_build_setting_name_search_shared_length 13
+ #define fake_build_setting_name_search_static_length 13
#define fake_build_setting_name_version_major_length 13
#define fake_build_setting_name_version_micro_length 13
#define fake_build_setting_name_version_minor_length 13
- #define fake_build_setting_total 38
+ #define fake_build_setting_total 41
#define fake_build_setting_bool_yes "yes"
#define fake_build_setting_bool_no "no"
#define fake_build_setting_bool_yes_length 3
#define fake_build_setting_bool_no_length 2
+
+ #define fake_build_setting_default_version "0"
+
+ #define fake_build_setting_default_version_length 1
#endif // _di_fake_build_setting_
#ifndef _di_fake_build_stage_
#define fake_build_stage_sources_settings_length 22
#endif // _di_fake_build_stage_
+#ifndef _di_fake_build_data_
+ typedef struct {
+ fake_build_setting setting;
+ fake_build_environment environment;
+ } fake_build_data;
+
+ #define fake_build_data_initialize { \
+ fake_build_setting_initialize, \
+ fake_build_environment_initialize, \
+ }
+
+ #define fake_macro_build_data_delete_simple(build) \
+ fake_macro_build_setting_delete_simple(build.setting) \
+ fake_macro_build_environment_delete_simple(build.environment)
+#endif // _di_fake_build_data_
+
+#ifndef _di_fake_build_parameter_
+ #define fake_build_parameter_library_include "-I"
+ #define fake_build_parameter_library_link_file "-l"
+ #define fake_build_parameter_library_link_path "-L"
+ #define fake_build_parameter_library_name_prefix "lib"
+ #define fake_build_parameter_library_name_suffix ".so."
+ #define fake_build_parameter_library_output "-o"
+ #define fake_build_parameter_library_separator "."
+ #define fake_build_parameter_library_shared "-shared"
+ #define fake_build_parameter_library_shared_prefix "-Wl,-soname,"
+
+ #define fake_build_parameter_library_include_length 2
+ #define fake_build_parameter_library_link_file_length 2
+ #define fake_build_parameter_library_link_path_length 2
+ #define fake_build_parameter_library_name_prefix_length 3
+ #define fake_build_parameter_library_name_suffix_length 4
+ #define fake_build_parameter_library_output_length 2
+ #define fake_build_parameter_library_separator_length 1
+ #define fake_build_parameter_library_shared_length 7
+ #define fake_build_parameter_library_shared_prefix_length 12
+#endif // _di_fake_build_parameter_
+
/**
* Copy over the data setting files.
*
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ * @param data_build
+ * The build data.
* @param mode
* The directory mode.
* @param file_stage
* Status codes (with error bit) are returned on any problem.
*/
#ifndef _di_fake_build_skeleton_
- extern void fake_build_skeleton(const fake_data data, const fake_build_setting setting, const mode_t mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+ extern void fake_build_skeleton(const fake_data data, const fake_build_data data_build, const mode_t mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
#endif // _di_fake_build_skeleton_
/**
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ * @param data_build
+ * All build related data.
* @param process_script
* The setting_data file name fo the appropriate process script.
* This is expected to be either setting.process_pre or setting.process_post.
* Status codes (with error bit) are returned on any problem.
*/
#ifndef _di_fake_build_execute_process_script_
- extern void fake_build_execute_process_script(const fake_data data, const fake_build_setting setting, const f_string_static process_script, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+ extern void fake_build_execute_process_script(const fake_data data, const fake_build_data data_build, const f_string_static process_script, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
#endif // _di_fake_build_execute_process_script_
/**
+ * Get the file name without the extension and without the path parts.
+ *
+ * @param data
+ * The program data.
+ * @param path
+ * The file path to get the file name from.
+ * @param name
+ * The processed filename.
+ *
+ * @return
+ * F_none on success.
+ * Status codes (with error bit) are returned on any problem.
+ */
+#ifndef _di_fake_build_get_file_name_without_extension_
+ extern f_return_status fake_build_get_file_name_without_extension(const fake_data data, const f_string_static path, f_string_dynamic *name);
+#endif // _di_fake_build_get_file_name_without_extension_
+
+/**
* Build the script libraries.
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ * @param data_build
+ * All build related data.
* @param mode
* The file mode.
* @param file_stage
* Status codes (with error bit) are returned on any problem.
*/
#ifndef _di_fake_build_libraries_script_
- extern void fake_build_libraries_script(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+ extern void fake_build_libraries_script(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
#endif // _di_fake_build_libraries_script_
/**
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ * @param data_build
+ * All build related data.
* @param mode
* The file mode.
* @param file_stage
* Status codes (with error bit) are returned on any problem.
*/
#ifndef _di_fake_build_libraries_shared_
- extern void fake_build_libraries_shared(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+ extern void fake_build_libraries_shared(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
#endif // _di_fake_build_libraries_shared_
/**
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ * @param data_build
+ * All build related data.
* @param mode
* The file mode.
* @param file_stage
* Status codes (with error bit) are returned on any problem.
*/
#ifndef _di_fake_build_libraries_static_
- extern void fake_build_libraries_static(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+ extern void fake_build_libraries_static(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
#endif // _di_fake_build_libraries_static_
/**
- * Build the static objects.
+ * Find the build setting file, load it, validate it, and process it.
*
* @param data
* The program data.
* @param setting
- * All build related setting data from the build setting file.
- * @param mode
- * The file mode.
- * @param file_stage
- * The specific stage file path.
+ * All build related setting data from the build setting file are loaded into this.
+ * These setting will have any specified mode property applied.
* @param status
* The return status.
*
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_objects_static_
- extern void fake_build_objects_static(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_objects_static_
+#ifndef _di_fake_build_load_setting_
+ extern void fake_build_load_setting(const fake_data data, fake_build_setting *setting, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_load_setting_
/**
- * Execute the build operation.
+ * Load the environment used when executing commands.
*
* @param data
* The program data.
+ * @param data_build
+ * All build related data.
+ * @param environment
+ * The environment data.
+ * @param status
+ * The return status.
*
* @return
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_operate_
- extern f_return_status fake_build_operate(const fake_data data) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_operate_
+#ifndef _di_fake_build_load_environment_
+ extern void fake_build_load_environment(const fake_data data, const fake_build_data data_build, fake_build_environment *environment, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_load_environment_
/**
- * Build the script programs.
+ * Load the stage file paths.
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
- * @param mode
- * The file mode.
- * @param file_stage
- * The specific stage file path.
+ * @param stage
+ * All stage file paths.
* @param status
* The return status.
*
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_programs_script_
- extern void fake_build_programs_script(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_programs_script_
+#ifndef _di_fake_build_load_stage_
+ extern void fake_build_load_stage(const fake_data data, fake_build_stage *stage, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_load_stage_
/**
- * Build the shared programs.
+ * Build the static objects.
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ * @param data_build
+ * All build related data.
* @param mode
* The file mode.
* @param file_stage
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_programs_shared_
- extern void fake_build_programs_shared(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_programs_shared_
+#ifndef _di_fake_build_objects_static_
+ extern void fake_build_objects_static(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_objects_static_
/**
- * Build the static programs.
+ * Execute the build operation.
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file.
+ *
+ * @return
+ * F_none on success.
+ * Status codes (with error bit) are returned on any problem.
+ */
+#ifndef _di_fake_build_operate_
+ extern f_return_status fake_build_operate(const fake_data data) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_operate_
+
+/**
+ * Build the script programs.
+ *
+ * @param data
+ * The program data.
+ * @param data_build
+ * All build related data.
* @param mode
* The file mode.
* @param file_stage
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_programs_static_
- extern void fake_build_programs_static(const fake_data data, const fake_build_setting setting, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_programs_static_
+#ifndef _di_fake_build_programs_script_
+ extern void fake_build_programs_script(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_programs_script_
/**
- * Find the build setting file, load it, validate it, and process it.
+ * Build the shared programs.
*
* @param data
* The program data.
- * @param setting
- * All build related setting data from the build setting file are loaded into this.
- * These setting will have any specified mode property applied.
+ * @param data_build
+ * All build related data.
+ * @param mode
+ * The file mode.
+ * @param file_stage
+ * The specific stage file path.
* @param status
* The return status.
*
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_setting_load_
- extern void fake_build_setting_load(const fake_data data, fake_build_setting *setting, f_status *status) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_setting_load_
+#ifndef _di_fake_build_programs_shared_
+ extern void fake_build_programs_shared(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_programs_shared_
/**
- * Load the stage file paths.
+ * Build the static programs.
*
* @param data
* The program data.
- * @param stage
- * All stage file paths.
+ * @param data_build
+ * All build related data.
+ * @param mode
+ * The file mode.
+ * @param file_stage
+ * The specific stage file path.
* @param status
* The return status.
*
* F_none on success.
* Status codes (with error bit) are returned on any problem.
*/
-#ifndef _di_fake_build_stage_load_
- extern void fake_build_stage_load(const fake_data data, fake_build_stage *stage, f_status *status) f_gcc_attribute_visibility_internal;
-#endif // _di_fake_build_stage_load_
+#ifndef _di_fake_build_programs_static_
+ extern void fake_build_programs_static(const fake_data data, const fake_build_data data_build, const f_mode mode, const f_string_static file_stage, f_status *status) f_gcc_attribute_visibility_internal;
+#endif // _di_fake_build_programs_static_
/**
* Touch the given build stage file, but only if there are no current errors in status.