]> Kevux Git Server - fll/commitdiff
Feature: Print the time stamp, if possible, when the operation fails or is cancelled.
authorKevin Day <Kevin@kevux.org>
Thu, 1 Oct 2026 02:54:12 +0000 (21:54 -0500)
committerKevin Day <Kevin@kevux.org>
Tue, 13 Oct 2026 02:46:15 +0000 (21:46 -0500)
Provide additional useful information, such as time stamp.

There is currently no **FLL** wrapper for `strftime()`.

This does require bringing in a new dependency `f_time`.

This is all optional via the `_en_print_time_on_cancel_` and `_en_print_time_on_failure_` defines.
The modes `time` and `individual_time` are used to enable this.
The `time` mode is added by default.
The `f_time` is not a dependency if `time` or `individual_time` modes are not used.

Update the boot strap script to pass `time` and `individual_time` accordingly to just `fake`.

build/scripts/bootstrap-example.sh
build/stand_alone/fake.config.h
build/stand_alone/fake.fakefile
build/stand_alone/fake.settings
level_3/fake/c/main/fake.h
level_3/fake/c/main/print/error.c
level_3/fake/c/main/print/operation.c
level_3/fake/data/build/defines
level_3/fake/data/build/dependencies
level_3/fake/data/build/fakefile
level_3/fake/data/build/settings

index 83f76a78a6576701b307f84d64bce22ff280a7c2..162652567f7feb7faccd5b26824a9deb9697fbe9 100644 (file)
@@ -82,6 +82,10 @@ main() {
   local build_mode_extra_value_1=
   local build_mode_extra_param_2=
   local build_mode_extra_value_2=
+  local build_mode_extra_param_3=
+  local build_mode_extra_value_3=
+  local build_mode_extra_param_4=
+  local build_mode_extra_value_4=
   local shell_command=bash
   local exclude_programs=
   local fake_programs="fss_read fss_write iki_read iki_write status_code"
@@ -265,6 +269,10 @@ boostrap_process() {
     build_mode_extra_value_1=
     build_mode_extra_param_2=
     build_mode_extra_value_2=
+    build_mode_extra_param_3=
+    build_mode_extra_value_3=
+    build_mode_extra_param_4=
+    build_mode_extra_value_4=
 
     if [[ ${1} == "${mode_part}-individual" ]] ; then
       build_mode="individual"
@@ -293,13 +301,23 @@ boostrap_process() {
       build_mode_extra_value_1=${mode_thread_value}
     fi
 
+    if [[ ${mode_part} == "fake" ]] ; then
+      build_mode_extra_param_3="-m"
+      build_mode_extra_value_3="time"
+
+      if [[ ${build_mode} == "individual" ]] ; then
+        build_mode_extra_param_4="-m"
+        build_mode_extra_value_4="individual_time"
+      fi
+    fi
+
     ${shell_command} build/scripts/package.sh ${verbose} ${color} rebuild ${mode_parameter} ${mode_value} &&
 
     cd package/${mode_path}/${mode_part}-${version}/ &&
 
     ${shell_command} ./bootstrap.sh clean ${verbose} ${color} &&
 
-    ${shell_command} ./bootstrap.sh build ${verbose} ${color} ${shared} ${static} -w ${path_work} -m ${build_mode} ${mode_debug_param} ${mode_debug_value} ${build_mode_extra_param_1} ${build_mode_extra_value_1} ${build_mode_extra_param_2} ${build_mode_extra_value_2} ${mode_custom_param} ${mode_custom_value} ${mode_compiler_param} ${mode_compiler_value} &&
+    ${shell_command} ./bootstrap.sh build ${verbose} ${color} ${shared} ${static} -w ${path_work} -m ${build_mode} ${mode_debug_param} ${mode_debug_value} ${build_mode_extra_param_1} ${build_mode_extra_value_1} ${build_mode_extra_param_2} ${build_mode_extra_value_2} ${build_mode_extra_param_3} ${build_mode_extra_value_3} ${build_mode_extra_param_4} ${build_mode_extra_value_4} ${mode_custom_param} ${mode_custom_value} ${mode_compiler_param} ${mode_compiler_value} &&
 
     ${shell_command} ./install.sh ${verbose} ${color} ${shared} ${static} -w ${path_work}
 
@@ -311,6 +329,10 @@ boostrap_process() {
     build_mode_extra_value_1=
     build_mode_extra_param_2=
     build_mode_extra_value_2=
+    build_mode_extra_param_3=
+    build_mode_extra_value_3=
+    build_mode_extra_param_4=
+    build_mode_extra_value_4=
 
     if [[ ${1} == "programs-individual" ]] ; then
       build_mode="individual"
@@ -357,11 +379,26 @@ boostrap_process() {
           continue
         fi
 
+        if [[ ${i} == "fake-${version}" ]] ; then
+          build_mode_extra_param_3="-m"
+          build_mode_extra_value_3="time"
+
+          if [[ ${build_mode} == "individual" ]] ; then
+            build_mode_extra_param_4="-m"
+            build_mode_extra_value_4="individual_time"
+          fi
+        else
+          build_mode_extra_param_3=
+          build_mode_extra_value_3=
+          build_mode_extra_param_4=
+          build_mode_extra_value_4=
+        fi
+
         cd ${path_original}package/program/${i} &&
 
         ${shell_command} ./bootstrap.sh clean ${verbose} ${color} &&
 
-        ${shell_command} ./bootstrap.sh build ${verbose} ${color} ${shared} ${static} -w ${path_work} -m ${build_mode} ${mode_debug_param} ${mode_debug_value} ${build_mode_extra_param_1} ${build_mode_extra_value_1} ${build_mode_extra_param_2} ${build_mode_extra_value_2} ${mode_custom_param} ${mode_custom_value} ${mode_compiler_param} ${mode_compiler_value} &&
+        ${shell_command} ./bootstrap.sh build ${verbose} ${color} ${shared} ${static} -w ${path_work} -m ${build_mode} ${mode_debug_param} ${mode_debug_value} ${build_mode_extra_param_1} ${build_mode_extra_value_1} ${build_mode_extra_param_2} ${build_mode_extra_value_2} ${build_mode_extra_param_3} ${build_mode_extra_value_3} ${build_mode_extra_param_4} ${build_mode_extra_value_4} ${mode_custom_param} ${mode_custom_value} ${mode_compiler_param} ${mode_compiler_value} &&
 
         ${shell_command} ./install.sh ${verbose} ${color} ${shared} ${static} -w ${path_work}
 
@@ -372,7 +409,7 @@ boostrap_process() {
             if [[ ${i} == "${j}-${version}" ]] ; then
               cd ${path_original}package/program/${i} &&
 
-              fake clean make ${verbose} ${color} ${shared} ${static} -w ${path_work} -m ${build_mode} ${mode_debug_param} ${mode_debug_value} ${build_mode_extra_param_1} ${build_mode_extra_value_1} ${build_mode_extra_param_2} ${build_mode_extra_value_2} ${mode_custom_param} ${mode_custom_value} ${mode_compiler_param} ${mode_compiler_value} &&
+              fake clean make ${verbose} ${color} ${shared} ${static} -w ${path_work} -m ${build_mode} ${mode_debug_param} ${mode_debug_value} ${build_mode_extra_param_1} ${build_mode_extra_value_1} ${build_mode_extra_param_2} ${build_mode_extra_value_2} ${build_mode_extra_param_3} ${build_mode_extra_value_3} ${build_mode_extra_param_4} ${build_mode_extra_value_4} ${mode_custom_param} ${mode_custom_value} ${mode_compiler_param} ${mode_compiler_value} &&
 
               ${shell_command} ./install.sh ${verbose} ${color} ${shared} ${static} -w ${path_work}
 
index 5ce2c9a31d3eec70388537417b5efeb678369bfa..cdde1b78b1988e4dcfdd7e2bf0f7517ebdcabfac 100644 (file)
@@ -8,7 +8,7 @@
 //
 // Example:
 //   echo > /tmp/all.txt
-//   for i in f_type f_status f_memory f_type_array f_string f_utf f_abstruse f_account f_capability f_color f_compare f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_network f_parse f_path f_pipe f_print f_rip f_serialize f_signal f_thread ; do grep -horP '\b_di_f_\w*\b' level_0/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_0/$i/c >> /tmp/all.txt ; done
+//   for i in f_type f_status f_memory f_type_array f_string f_utf f_abstruse f_account f_capability f_color f_compare f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_network f_parse f_path f_pipe f_print f_rip f_serialize f_signal f_time f_thread ; do grep -horP '\b_di_f_\w*\b' level_0/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_0/$i/c >> /tmp/all.txt ; done
 //   for i in fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print ; do grep -horP '\b_di_fl_\w*\b' level_1/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_1/$i/c >> /tmp/all.txt ; done
 //   for i in fll_error fll_execute fll_file fll_fss fll_print fll_program ; do grep -horP '\b_di_fll_\w*\b' level_2/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_2/$i/c >> /tmp/all.txt ; done
 //   sort /tmp/all.txt | uniq | sed -e 's|^_|#define &|g' > /tmp/sorted.txt
 #define _di_f_thread_spinss_destroy_callback_
 #define _di_f_thread_spinss_t_
 #define _di_f_thread_unlock_
-#define _di_f_time_part_t_
+#define _di_f_time_calendar_string_
+#define _di_f_time_calendar_string_part_
+#define _di_f_time_clock_get_
+#define _di_f_time_clock_precision_
+#define _di_f_time_clock_set_
+#define _di_f_time_d_
+//#define _di_f_time_epoch_get_
+//#define _di_f_time_local_get_
+#define _di_f_time_of_day_get_
+#define _di_f_time_of_day_set_
+//#define _di_f_time_part_t_
 #define _di_f_time_simple_t_
 #define _di_f_time_simples_t_
 #define _di_f_time_simpless_delete_callback_
 #define _di_f_time_simpless_destroy_callback_
 #define _di_f_time_simpless_t_
+#define _di_f_time_sleep_spec_
+#define _di_f_time_spec_millisecond_
+#define _di_f_time_spec_nanosecond_
 #define _di_f_time_spec_t_
 #define _di_f_time_t_
+#define _di_f_time_utc_get_
 #define _di_f_time_value_t_
 //#define _di_f_type_d_
 //#define _di_f_type_file_defaults_d_
index 82e36edb8e94832db6d2f41ae73c99ce9d126ab4..df64033a98b28e363ee37aa8c2718ed723132a02 100644 (file)
@@ -2,7 +2,7 @@
 
 settings:
   fail exit
-  modes android clang coverage debug fanalyzer flex_arrays gcc pinephone test thread threadless
+  modes android clang coverage debug fanalyzer flex_arrays gcc pinephone test thread threadless time
 
   environment PATH LD_LIBRARY_PATH
   environment LANG LC_ALL LC_COLLATE LC_CTYPE LC_FASTMSG LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LOCPATH NLSPATH
index 3600c33b97f533b210a0de3d00989594bc0be160..62e79ae4773153b8034919cff046d4b0e61d6311 100644 (file)
@@ -15,6 +15,7 @@
 #   - test:        Compile for a test, such as unit testing.
 #   - thread:      Compile with thread support.
 #   - threadless:  Compile without thread support.
+#   - time:        Support printing time on some cancellations and failures.
 #
 
 build_name fake
@@ -26,8 +27,8 @@ version_micro 2
 version_file micro
 version_target minor
 
-modes android clang coverage debug fanalyzer flex_arrays gcc pinephone test thread threadless
-modes_default debug gcc thread
+modes android clang coverage debug fanalyzer flex_arrays gcc pinephone test thread threadless time
+modes_default debug gcc thread time
 
 build_compiler gcc
 build_compiler-clang clang
@@ -65,6 +66,7 @@ build_sources_program fll/level_0/rip.c fll/level_0/rip/utf.c fll/level_0/privat
 build_sources_program fll/level_0/signal.c
 build_sources_program fll/level_0/string.c fll/level_0/private-string.c fll/level_0/string/common.c
 build_sources_program fll/level_0/string/dynamic.c fll/level_0/string/dynamics.c fll/level_0/string/dynamicss.c fll/level_0/string/map.c fll/level_0/string/maps.c fll/level_0/string/mapss.c fll/level_0/string/map_multi.c fll/level_0/string/map_multis.c fll/level_0/string/map_multiss.c fll/level_0/string/static.c fll/level_0/string/statics.c fll/level_0/string/staticss.c fll/level_0/string/triple.c fll/level_0/string/triples.c fll/level_0/string/tripless.c
+build_sources_program fll/level_0/time.c
 build_sources_program fll/level_0/type_array/cell.c fll/level_0/type_array/date.c fll/level_0/type_array/file.c fll/level_0/type_array/fll_id.c fll/level_0/type_array/int8.c fll/level_0/type_array/int16.c fll/level_0/type_array/int32.c fll/level_0/type_array/int64.c fll/level_0/type_array/int128.c fll/level_0/type_array/number_signed.c fll/level_0/type_array/number_unsigned.c fll/level_0/type_array/poll.c fll/level_0/type_array/quantity.c  fll/level_0/type_array/quantitys.c fll/level_0/type_array/quantityss.c fll/level_0/type_array/range.c  fll/level_0/type_array/ranges.c fll/level_0/type_array/rangess.c fll/level_0/type_array/state.c fll/level_0/type_array/status.c fll/level_0/type_array/time.c fll/level_0/type_array/uint8.c fll/level_0/type_array/uint16.c fll/level_0/type_array/uint32.c fll/level_0/type_array/uint64.c fll/level_0/type_array/uint128.c
 build_sources_program fll/level_0/utf.c fll/level_0/private-utf.c fll/level_0/private-utf_alphabetic.c fll/level_0/private-utf_combining.c fll/level_0/private-utf_control.c fll/level_0/private-utf_digit.c fll/level_0/private-utf_emoji.c fll/level_0/private-utf_numeric.c fll/level_0/private-utf_phonetic.c fll/level_0/private-utf_private.c fll/level_0/private-utf_punctuation.c fll/level_0/private-utf_subscript.c fll/level_0/private-utf_superscript.c fll/level_0/private-utf_symbol.c fll/level_0/private-utf_unassigned.c fll/level_0/private-utf_valid.c fll/level_0/private-utf_whitespace.c fll/level_0/private-utf_wide.c fll/level_0/private-utf_word.c fll/level_0/private-utf_zero_width.c
 build_sources_program fll/level_0/utf/common.c fll/level_0/utf/convert.c fll/level_0/utf/dynamic.c fll/level_0/utf/dynamics.c fll/level_0/utf/dynamicss.c fll/level_0/utf/is.c fll/level_0/utf/is_character.c fll/level_0/utf/map.c fll/level_0/utf/maps.c fll/level_0/utf/mapss.c fll/level_0/utf/map_multi.c fll/level_0/utf/map_multis.c fll/level_0/utf/map_multiss.c fll/level_0/utf/static.c fll/level_0/utf/statics.c fll/level_0/utf/staticss.c fll/level_0/utf/string.c fll/level_0/utf/triple.c fll/level_0/utf/triples.c fll/level_0/utf/tripless.c
@@ -127,6 +129,7 @@ defines-debug -D_en_f_status_debug_
 defines-pinephone -D_di_f_thread_mutex_priority_ceiling_get_ -D_di_f_thread_mutex_priority_ceiling_set_ -D_di_f_thread_mutex_attribute_priority_ceiling_get_ -D_di_f_thread_mutex_attribute_priority_ceiling_set_
 defines-thread -D_pthread_attr_unsupported_ -D_pthread_sigqueue_unsupported_
 defines-threadless -D_di_thread_support_
+defines-time -D_en_print_time_on_cancel_ -D_en_print_time_on_failure_
 
 flags -O2 -pipe -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses -Wno-missing-braces -Wno-main
 flags -fstack-clash-protection -fno-delete-null-pointer-checks
index fe81d1f98a849d53935c2161d34f7dc1751d7269..8277fd61eda692d906bd188a117a8ef9d634164e 100644 (file)
@@ -77,6 +77,7 @@
 #include <fll/level_0/print.h>
 #include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
+#include <fll/level_0/time.h>
 
 #ifndef _di_thread_support_
   #include <fll/level_0/thread.h>
index 4bdf09dc34b8bde91e66715af5835ebf5201f4a8..ee4d32987d3e402721da8112c76f5b857896ba08 100644 (file)
@@ -277,7 +277,38 @@ extern "C" {
       f_print_dynamic(fake_other_operation_skeleton_s, print->to);
     }
 
-    fl_print_format("%]%[' failed.%]%r", print->to, print->notable, print->context, print->context, f_string_eol_s);
+    #ifdef _en_print_time_on_failure_
+      time_t time = 0;
+
+      f_status_t status = f_time_epoch_get(&time);
+
+      if (F_status_is_error_not(status)) {
+        f_time_part_t part = f_time_part_t_initialize;
+
+        status = f_time_local_get(time, &part);
+
+        if (F_status_is_error_not(status)) {
+          char now_string[100];
+          const f_string_static_t now = macro_f_string_static_t_initialize_2(now_string, 100);
+
+          memset(&now_string, 0, now.used);
+
+          strftime(now_string, sizeof(now_string), "%Y-%m-%d %I:%M:%S%P %Z", &part);
+
+          fl_print_format("%]%[' failed at%] ", print->to, print->notable, print->context, print->context);
+          fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, now, print->notable);
+          fl_print_format(f_string_format_sentence_end_single_quote_s.string, print->to, print->context, print->context, f_string_eol_s);
+
+          status = F_okay;
+        }
+      }
+
+      if (F_status_is_error(status)) {
+        fl_print_format("%]%[' failed.%]%r", print->to, print->notable, print->context, print->context, f_string_eol_s);
+      }
+    #else
+      fl_print_format("%]%[' failed.%]%r", print->to, print->notable, print->context, print->context, f_string_eol_s);
+    #endif // _en_print_time_on_failure_
 
     f_file_stream_unlock(print->to);
 
index 55cd0094143f48e11b7e1f98817e25eb8644c919..c8bfd331aa51051e9d0999a3342ece93fa882491 100644 (file)
@@ -44,7 +44,38 @@ extern "C" {
       f_print_dynamic(fake_other_operation_skeleton_s, print->to);
     }
 
-    fl_print_format("%]%[' is cancelled.%]%r", print->to, print->notable, print->context, print->context, f_string_eol_s);
+    #ifdef _en_print_time_on_cancel_
+      time_t time = 0;
+
+      f_status_t status = f_time_epoch_get(&time);
+
+      if (F_status_is_error_not(status)) {
+        f_time_part_t part = f_time_part_t_initialize;
+
+        status = f_time_local_get(time, &part);
+
+        if (F_status_is_error_not(status)) {
+          char now_string[100];
+          const f_string_static_t now = macro_f_string_static_t_initialize_2(now_string, 100);
+
+          memset(&now_string, 0, now.used);
+
+          strftime(now_string, sizeof(now_string), "%Y-%m-%d %I:%M:%S%P %Z", &part);
+
+          fl_print_format("%]%[' is cancelled at%] ", print->to, print->notable, print->context, print->context);
+          fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, now, print->notable);
+          fl_print_format(f_string_format_sentence_end_single_quote_s.string, print->to, print->context, print->context, f_string_eol_s);
+
+          status = F_okay;
+        }
+      }
+
+      if (F_status_is_error(status)) {
+        fl_print_format("%]%[' is cancelled.%]%r", print->to, print->notable, print->context, print->context, f_string_eol_s);
+      }
+    #else
+      fl_print_format("%]%[' is cancelled.%]%r", print->to, print->notable, print->context, print->context, f_string_eol_s);
+    #endif // _en_print_time_on_cancel_
 
     f_file_stream_flush(print->to);
     f_file_stream_unlock(print->to);
index 82abf48afdd2ffa1ce33679c35590cb671805871..da1c43c725956e6239f4cd919401a122b4a681ac 100644 (file)
@@ -3,6 +3,9 @@
 _di_libcap_ Disable libcap support, allow for compiling and linking without libcap (-lcap).
 _di_thread_support_ Disables thread support.
 
+_en_print_time_on_cancel_ Enables printing time on some cancellations.
+_en_print_time_on_failure_ Enables printing time on some failures.
+
 _libcap_legacy_only_ Disable functionality provided by later versions of libcap (2.43 and later).
 
 _pthread_attr_unsupported_ Disable non-portable functionality associated with pthread_attr.
index bf212aa5a358c0560ccc5c83db46b9627d6ddf52..5bb7412f3f6b6d4d636f59fffc25002ad849d96b 100644 (file)
@@ -28,6 +28,7 @@ f_print
 f_rip
 f_signal
 f_thread
+f_time
 
 fl_control_group
 fl_conversion
index c78f2cf573457d821dcfe742244d880119aff9b8..b3c9457c93996852b7d6a263dd3b24508f76381c 100644 (file)
@@ -2,7 +2,7 @@
 
 settings:
   fail exit
-  modes android clang coverage debug fanalyzer flex_arrays gcc individual individual_thread level monolithic pinephone test thread threadless
+  modes android clang coverage debug fanalyzer flex_arrays gcc individual individual_thread individual_time level monolithic pinephone test thread threadless time
 
   environment PATH LD_LIBRARY_PATH
   environment LANG LC_ALL LC_COLLATE LC_CTYPE LC_FASTMSG LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LOCPATH NLSPATH
index dd3a0ee21727ce7cb1c62e59234cfe4f1bb76940..7146918eefb53e102a0d8cada989e871c8cc6fdd 100644 (file)
 #   - gcc:               Use GCC specific settings.
 #   - individual:        Compile using per project (individual) libraries, does not handle thread or threadless cases.
 #   - individual_thread: This is required when compiling in individual mode with "thread" mode.
+#   - individual_time:   This is required when compiling in individual mode with "time" mode.
 #   - level:             Compile using per level libraries.
 #   - monolithic:        Compile using per monolithic libraries.
 #   - pinephone:         Compile on a pinephone system.
 #   - test:              Compile for a test, such as unit testing.
 #   - thread:            Compile with thread support.
 #   - threadless:        Compile without thread support.
+#   - time:              Support printing time on some cancellations and failures.
 #
 
 build_name fake
@@ -29,8 +31,8 @@ version_target minor
 process_pre process_pre.sh
 process_post process_post.sh
 
-modes android clang coverage debug fanalyzer flex_arrays gcc individual individual_thread level monolithic pinephone test thread threadless
-modes_default debug gcc monolithic thread
+modes android clang coverage debug fanalyzer flex_arrays gcc individual individual_thread individual_time level monolithic pinephone test thread threadless time
+modes_default debug gcc monolithic thread time
 
 build_compiler gcc
 build_compiler-clang clang
@@ -41,7 +43,8 @@ build_language c
 build_libraries_shared -lc -lcap
 build_libraries_shared-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_print -lfll_program
 build_libraries_shared-individual -lfl_control_group -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_iki -lfl_path -lfl_print
-build_libraries_shared-individual -lf_abstruse -lf_account -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_iki -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string  -lf_type_array -lf_utf
+build_libraries_shared-individual -lf_abstruse -lf_account -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_iki -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries_shared-individual_time -lf_time
 build_libraries_shared-individual_thread -lf_thread
 build_libraries_shared-level -lfll_2 -lfll_1 -lfll_0
 build_libraries_shared-monolithic -lfll
@@ -49,8 +52,9 @@ build_libraries_shared-monolithic -lfll
 build_libraries_static -l:libc.a -l:libcap.a
 build_libraries_static-individual -l:libfll_error.a -l:libfll_execute.a -l:libfll_file.a -l:libfll_fss.a -l:libfll_print.a -l:libfll_program.a
 build_libraries_static-individual -l:libfl_control_group.a -l:libfl_conversion.a -l:libfl_directory.a -l:libfl_environment.a -l:libfl_fss.a -l:libfl_iki.a -l:libfl_path.a -l:libfl_print.a
-build_libraries_static-individual -l:libf_abstruse.a -l:libf_account.a -l:libf_capability.a -l:libf_color.a -l:libf_compare.a -l:libf_console.a -l:libf_control_group.a -l:libf_conversion.a -l:libf_directory.a -l:libf_environment.a -l:libf_execute.a -l:libf_file.a -l:libf_fss.a -l:libf_iki.a -l:libf_limit.a -l:libf_memory.a -l:libf_parse.a -l:libf_path.a -l:libf_pipe.a -l:libf_print.a -l:libf_rip.a -l:libf_signal.a -l:libf_status_string.a -l:libf_string.a  -l:libf_type_array.a -l:libf_utf.a
+build_libraries_static-individual -l:libf_abstruse.a -l:libf_account.a -l:libf_capability.a -l:libf_color.a -l:libf_compare.a -l:libf_console.a -l:libf_control_group.a -l:libf_conversion.a -l:libf_directory.a -l:libf_environment.a -l:libf_execute.a -l:libf_file.a -l:libf_fss.a -l:libf_iki.a -l:libf_limit.a -l:libf_memory.a -l:libf_parse.a -l:libf_path.a -l:libf_pipe.a -l:libf_print.a -l:libf_rip.a -l:libf_signal.a -l:libf_status_string.a -l:libf_string.a -l:libf_type_array.a -l:libf_utf.a
 build_libraries_static-individual_thread -l:libf_thread.a
+build_libraries_static-individual_time -l:libf_time.a
 build_libraries_static-level -l:libfll_2.a -l:libfll_1.a -l:libfll_0.a
 build_libraries_static-monolithic -l:libfll.a
 
@@ -85,6 +89,7 @@ defines-debug -D_en_f_status_debug_
 defines-pinephone -D_di_f_thread_mutex_priority_ceiling_get_ -D_di_f_thread_mutex_priority_ceiling_set_ -D_di_f_thread_mutex_attribute_priority_ceiling_get_ -D_di_f_thread_mutex_attribute_priority_ceiling_set_
 defines-thread -D_pthread_attr_unsupported_ -D_pthread_sigqueue_unsupported_
 defines-threadless -D_di_thread_support_
+defines-time -D_en_print_time_on_cancel_ -D_en_print_time_on_failure_
 
 flags -O2 -pipe -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses -Wno-missing-braces -Wno-main
 flags -fstack-clash-protection -fno-delete-null-pointer-checks