]> Kevux Git Server - fll/commitdiff
Progress: Incorrect linkage, not handling default values well, add version_nano,...
authorKevin Day <thekevinday@gmail.com>
Wed, 9 Jun 2021 02:01:29 +0000 (21:01 -0500)
committerKevin Day <thekevinday@gmail.com>
Wed, 9 Jun 2021 04:10:51 +0000 (23:10 -0500)
The documentation has version_target described as the target to build but the C source for Featureless Make is using it for the link file name.
Change this behavior to be consistent with the documentation.
Update all build settings to now be set to micro to be consistent with this change.

The default values should only be assigned if the Object is not provided at all.
This allows for the value to be set to empty (aka NULL).
The version_major, version_minor, and version_micro all are currently required to be defined and if empty will be set to 0.

Some projects use four versions and others like to add things like "-dev" or "-rc1".
Provide a way to do this by adding a version_nano as well as adding version prefixes.
For each version there is now a version_X_prefix such as version_major now has version_major_prefix.
For all version prefixes, except version_major_prefix, the prefix will be in place of the '.' in the version name.
The major version is an exception case as there is no value by default.
For example "1.2.3" would have version_major = "1", version_minor_prefix = ".", version_minor = "2", version_micro_prefix = "." version_micro = "3".
The default version continues to be a version_target of micro, such as "1.2.3".

The build settings documentation is out of date and needed some corrections to be made.

There is still more work to do in adding the prefixes and making the bootstrap.sh script and the fake program more consistent with the version numbers.
I simply ran out of time.

82 files changed:
build/level_0/settings
build/level_1/settings
build/level_2/settings
build/monolithic/settings
build/scripts/bootstrap.sh
level_0/f_account/data/build/settings
level_0/f_capability/data/build/settings
level_0/f_color/data/build/settings
level_0/f_console/data/build/settings
level_0/f_control_group/data/build/settings
level_0/f_conversion/data/build/settings
level_0/f_directory/data/build/settings
level_0/f_environment/data/build/settings
level_0/f_execute/data/build/settings
level_0/f_file/data/build/settings
level_0/f_fss/data/build/settings
level_0/f_iki/data/build/settings
level_0/f_limit/data/build/settings
level_0/f_memory/data/build/settings
level_0/f_path/data/build/settings
level_0/f_pipe/data/build/settings
level_0/f_print/data/build/settings
level_0/f_serialize/data/build/settings
level_0/f_signal/data/build/settings
level_0/f_socket/data/build/settings
level_0/f_status/data/build/settings
level_0/f_string/data/build/settings
level_0/f_thread/data/build/settings
level_0/f_type/data/build/settings
level_0/f_type_array/data/build/settings
level_0/f_utf/data/build/settings
level_1/fl_console/data/build/settings
level_1/fl_control_group/data/build/settings
level_1/fl_conversion/data/build/settings
level_1/fl_directory/data/build/settings
level_1/fl_environment/data/build/settings
level_1/fl_execute/data/build/settings
level_1/fl_fss/data/build/settings
level_1/fl_iki/data/build/settings
level_1/fl_print/data/build/settings
level_1/fl_signal/data/build/settings
level_1/fl_status/data/build/settings
level_1/fl_string/data/build/settings
level_1/fl_utf/data/build/settings
level_1/fl_utf_file/data/build/settings
level_2/fll_control_group/data/build/settings
level_2/fll_error/data/build/settings
level_2/fll_execute/data/build/settings
level_2/fll_file/data/build/settings
level_2/fll_fss/c/fss.c
level_2/fll_fss/c/fss.h
level_2/fll_fss/data/build/settings
level_2/fll_iki/data/build/settings
level_2/fll_path/data/build/settings
level_2/fll_program/data/build/settings
level_2/fll_status/data/build/settings
level_3/byte_dump/data/build/settings
level_3/control/data/build/settings
level_3/controller/data/build/settings
level_3/fake/c/fake.h
level_3/fake/c/private-build.c
level_3/fake/c/private-common.h
level_3/fake/c/private-make.c
level_3/fake/data/build/settings
level_3/fake/documents/settings.txt
level_3/fake/specifications/settings.txt
level_3/firewall/data/build/settings
level_3/fss_basic_list_read/data/build/settings
level_3/fss_basic_list_write/data/build/settings
level_3/fss_basic_read/data/build/settings
level_3/fss_basic_write/data/build/settings
level_3/fss_embedded_list_read/data/build/settings
level_3/fss_embedded_list_write/data/build/settings
level_3/fss_extended_list_read/data/build/settings
level_3/fss_extended_list_write/data/build/settings
level_3/fss_extended_read/data/build/settings
level_3/fss_extended_write/data/build/settings
level_3/fss_identify/data/build/settings
level_3/fss_status_code/data/build/settings
level_3/iki_read/data/build/settings
level_3/iki_write/data/build/settings
level_3/status_code/data/build/settings

index b31ed83..d4340ec 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_0
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 60da028..8814153 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_1
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 3c327a0..1399c50 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_2
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index da83767..2dc47fa 100644 (file)
@@ -5,7 +5,7 @@ project_name fll
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 5819d13..dbf83de 100644 (file)
@@ -183,6 +183,13 @@ bootstrap_main() {
     return 1
   fi
 
+  bootstrap_load_settings_has
+
+  if [[ $? -ne 0 ]] ; then
+    bootstrap_cleanup
+    return 1
+  fi
+
   project_built="${path_build_stage}${variables[$(bootstrap_id project_name)]}"
   if [[ $process != "" ]] ; then
     project_built="${project_built}-$process"
@@ -433,57 +440,76 @@ bootstrap_id() {
     "build_sources_headers") echo -n 6;;
     "build_sources_library") echo -n 7;;
     "build_sources_program") echo -n 8;;
-    "build_sources_setting") echo -n 9;;
-    "build_sources_script") echo -n 10;;
+    "build_sources_script") echo -n 9;;
+    "build_sources_setting") echo -n 10;;
     "build_static") echo -n 11;;
     "defines_all") echo -n 12;;
-    "defines_shared") echo -n 13;;
-    "defines_static") echo -n 14;;
-    "environment") echo -n 15;;
-    "flags_all") echo -n 16;;
-    "flags_library") echo -n 17;;
-    "flags_program") echo -n 18;;
-    "flags_shared") echo -n 19;;
-    "flags_static") echo -n 20;;
-    "modes") echo -n 21;;
-    "modes_default") echo -n 22;;
-    "path_language") echo -n 23;;
-    "path_headers") echo -n 24;;
-    "path_headers_preserve") echo -n 25;;
-    "path_library_script") echo -n 26;;
-    "path_library_shared") echo -n 27;;
-    "path_library_static") echo -n 28;;
-    "path_program_script") echo -n 29;;
-    "path_program_shared") echo -n 30;;
-    "path_program_static") echo -n 31;;
-    "path_sources") echo -n 32;;
-    "path_standard") echo -n 33;;
-    "process_post") echo -n 34;;
-    "process_pre") echo -n 35;;
-    "project_name") echo -n 36;;
-    "search_exclusive") echo -n 37;;
-    "search_shared") echo -n 38;;
-    "search_static") echo -n 39;;
-    "version_major") echo -n 40;;
-    "version_micro") echo -n 41;;
-    "version_minor") echo -n 42;;
-    "version_target") echo -n 43;;
-
-    "build_libraries-$mode") echo -n 44;;
-    "build_sources_headers-$mode") echo -n 45;;
-    "build_sources_library-$mode") echo -n 46;;
-    "build_sources_program-$mode") echo -n 47;;
-    "build_sources_setting-$mode") echo -n 48;;
-    "build_sources_script-$mode") echo -n 49;;
-    "defines_all-$mode") echo -n 50;;
-    "defines_shared-$mode") echo -n 51;;
-    "defines_static-$mode") echo -n 52;;
-    "environment-$mode") echo -n 53;;
-    "flags_all-$mode") echo -n 54;;
-    "flags_library-$mode") echo -n 55;;
-    "flags_program-$mode") echo -n 56;;
-    "flags_shared-$mode") echo -n 57;;
-    "flags_static-$mode") echo -n 58;;
+    "defines_library") echo -n 13;;
+    "defines_program") echo -n 14;;
+    "defines_shared") echo -n 15;;
+    "defines_static") echo -n 16;;
+    "environment") echo -n 17;;
+    "flags_all") echo -n 18;;
+    "flags_library") echo -n 19;;
+    "flags_program") echo -n 20;;
+    "flags_shared") echo -n 21;;
+    "flags_static") echo -n 22;;
+    "modes") echo -n 23;;
+    "modes_default") echo -n 24;;
+    "path_headers") echo -n 25;;
+    "path_headers_preserve") echo -n 26;;
+    "path_language") echo -n 27;;
+    "path_library_script") echo -n 28;;
+    "path_library_shared") echo -n 29;;
+    "path_library_static") echo -n 30;;
+    "path_program_script") echo -n 31;;
+    "path_program_shared") echo -n 32;;
+    "path_program_static") echo -n 33;;
+    "path_sources") echo -n 34;;
+    "path_standard") echo -n 35;;
+    "process_post") echo -n 36;;
+    "process_pre") echo -n 37;;
+    "project_name") echo -n 38;;
+    "search_exclusive") echo -n 39;;
+    "search_shared") echo -n 40;;
+    "search_static") echo -n 41;;
+    "version_major") echo -n 42;;
+    "version_major_prefix") echo -n 43;;
+    "version_micro") echo -n 44;;
+    "version_micro_prefix") echo -n 45;;
+    "version_minor") echo -n 46;;
+    "version_minor_prefix") echo -n 47;;
+    "version_nano") echo -n 48;;
+    "version_nano_prefix") echo -n 49;;
+    "version_target") echo -n 50;;
+
+    "build_libraries-$mode") echo -n 51;;
+    "build_sources_headers-$mode") echo -n 52;;
+    "build_sources_library-$mode") echo -n 53;;
+    "build_sources_program-$mode") echo -n 54;;
+    "build_sources_script-$mode") echo -n 55;;
+    "build_sources_setting-$mode") echo -n 56;;
+    "defines_all-$mode") echo -n 57;;
+    "defines_library-$mode") echo -n 58;;
+    "defines_program-$mode") echo -n 59;;
+    "defines_shared-$mode") echo -n 60;;
+    "defines_static-$mode") echo -n 61;;
+    "environment-$mode") echo -n 62;;
+    "flags_all-$mode") echo -n 63;;
+    "flags_library-$mode") echo -n 64;;
+    "flags_program-$mode") echo -n 65;;
+    "flags_shared-$mode") echo -n 66;;
+    "flags_static-$mode") echo -n 67;;
+
+    "has-version_major_prefix") echo -n 68;;
+    "has-version_micro_prefix") echo -n 69;;
+    "has-version_minor_prefix") echo -n 70;;
+    "has-version_nano_prefix") echo -n 71;;
+
+    "has-version_major_prefix-$mode") echo -n 72;;
+    "has-version_micro_prefix-$mode") echo -n 73;;
+    "has-version_minor_prefix-$mode") echo -n 74;;
+    "has-version_nano_prefix-$mode") echo -n 75;;
   esac
 }
 
@@ -510,7 +536,7 @@ bootstrap_load_settings() {
     return 1
   fi
 
-  for i in build_compiler build_indexer build_language build_libraries build_script build_shared build_sources_headers build_sources_library build_sources_program build_sources_setting build_sources_script build_static defines_all defines_shared defines_static environment flags_all flags_library flags_program flags_shared flags_static modes modes_default path_language path_headers path_headers_preserve path_library_script path_library_shared path_library_static path_program_script path_program_shared path_program_static path_sources path_standard process_post process_pre project_name search_exclusive search_shared search_static version_major version_micro version_minor ; do
+  for i in build_compiler build_indexer build_language build_libraries build_script build_shared build_sources_headers build_sources_library build_sources_program build_sources_script build_sources_setting build_static defines_all defines_library defines_program defines_shared defines_static environment flags_all flags_library flags_program flags_shared flags_static modes modes_default path_headers path_headers_preserve path_language path_library_script path_library_shared path_library_static path_program_script path_program_shared path_program_static path_sources path_standard process_post process_pre project_name search_exclusive search_shared search_static version_major version_major_prefix version_micro version_micro_prefix version_minor version_minor_prefix version_nano version_nano_prefix version_target ; do
     variables[$(bootstrap_id $i)]=$(grep -s -o "^[[:space:]]*$i[[:space:]].*\$" $settings_file | sed -e "s|^[[:space:]]*$i\>||" -e 's|^[[:space:]]*||')
   done
 }
@@ -518,11 +544,31 @@ bootstrap_load_settings() {
 bootstrap_load_settings_mode() {
   local i=
 
-  for i in build_libraries-$mode build_sources_headers-$mode build_sources_library-$mode build_sources_program-$mode build_sources_setting-$mode build_sources_script-$mode defines_all-$mode defines_shared-$mode defines_static-$mode environment-$mode flags_all-$mode flags_library-$mode flags_program-$mode flags_shared-$mode flags_static-$mode ; do
+  for i in build_libraries-$mode build_sources_headers-$mode build_sources_library-$mode build_sources_program-$mode build_sources_script-$mode build_sources_setting-$mode defines_all-$mode defines_library-$mode defines_program-$mode defines_shared-$mode defines_static-$mode environment-$mode flags_all-$mode flags_library-$mode flags_program-$mode flags_shared-$mode flags_static-$mode ; do
     variables[$(bootstrap_id $i)]=$(grep -s -o "^[[:space:]]*$i[[:space:]].*\$" $settings_file | sed -e "s|^[[:space:]]*$i\>||" -e 's|^[[:space:]]*||')
   done
 }
 
+bootstrap_load_settings_has() {
+  local i=
+
+  for i in version_major_prefix version_minor_prefix version_micro_prefix version_nano_prefix ; do
+    if [[ $(grep -s -o "^[[:space:]]*$i\>" $settings_file | sed -e "s|^[[:space:]]*||") ]] ; then
+      variables[$(bootstrap_id has-$i)]="yes"
+    else
+      variables[$(bootstrap_id has-$i)]="no"
+    fi
+  done
+
+  for i in version_major_prefix-$mode version_minor_prefix-$mode version_micro_prefix-$mode version_nano_prefix-$mode ; do
+    if [[ $(grep -s -o "^[[:space:]]*$i-$mode\>" $settings_file | sed -e "s|^[[:space:]]*||") ]] ; then
+      variables[$(bootstrap_id has-$i)]="yes"
+    else
+      variables[$(bootstrap_id has-$i)]="no"
+    fi
+  done
+}
+
 bootstrap_prepare_build() {
   local failure=
   local alt=$1
@@ -547,8 +593,13 @@ bootstrap_operation_build() {
   local failure=
   local name=${variables[$(bootstrap_id project_name)]}
   local major=${variables[$(bootstrap_id version_major)]}
+  local major_prefix=${variables[$(bootstrap_id version_major_prefix)]}
   local minor=${variables[$(bootstrap_id version_minor)]}
+  local minor_prefix=${variables[$(bootstrap_id version_minor_prefix)]}
   local micro=${variables[$(bootstrap_id version_micro)]}
+  local micro_prefix=${variables[$(bootstrap_id version_micro_prefix)]}
+  local nano=${variables[$(bootstrap_id version_nano)]}
+  local nano_prefix=${variables[$(bootstrap_id version_nano_prefix)]}
   local target=${variables[$(bootstrap_id version_target)]}
   local compiler=${variables[$(bootstrap_id build_compiler)]}
   local indexer=${variables[$(bootstrap_id build_indexer)]}
@@ -560,22 +611,24 @@ bootstrap_operation_build() {
   local search_static=${variables[$(bootstrap_id search_static)]}
   local shared=${variables[$(bootstrap_id build_shared)]}
   local static=${variables[$(bootstrap_id build_static)]}
+  local sources_headers=${variables[$(bootstrap_id build_sources_headers)]}
   local sources_library=${variables[$(bootstrap_id build_sources_library)]}
   local sources_program=${variables[$(bootstrap_id build_sources_program)]}
-  local sources_headers=${variables[$(bootstrap_id build_sources_headers)]}
-  local sources_bash=${variables[$(bootstrap_id build_sources_bash)]}
+  local sources_script=${variables[$(bootstrap_id build_sources_script)]}
   local sources_setting=${variables[$(bootstrap_id build_sources_setting)]}
   local sources=
   local libraries=${variables[$(bootstrap_id build_libraries)]}
   local links=
-  local defines=${variables[$(bootstrap_id defines_all)]}
+  local defines_all=${variables[$(bootstrap_id defines_all)]}
+  local defines_library=${variables[$(bootstrap_id defines_library)]}
+  local defines_program=${variables[$(bootstrap_id defines_program)]}
   local defines_shared=${variables[$(bootstrap_id defines_shared)]}
   local defines_static=${variables[$(bootstrap_id defines_static)]}
   local flags_all=${variables[$(bootstrap_id flags_all)]}
-  local flags_shared=${variables[$(bootstrap_id flags_shared)]}
-  local flags_static=${variables[$(bootstrap_id flags_static)]}
   local flags_library=${variables[$(bootstrap_id flags_library)]}
   local flags_program=${variables[$(bootstrap_id flags_program)]}
+  local flags_shared=${variables[$(bootstrap_id flags_shared)]}
+  local flags_static=${variables[$(bootstrap_id flags_static)]}
   local i=
   local n=
   local version=
@@ -584,16 +637,31 @@ bootstrap_operation_build() {
   local path_headers=${variables[$(bootstrap_id path_headers)]}
   local path_headers_preserve=${variables[$(bootstrap_id path_headers_preserve)]}
 
+  # provide defaults for version prefixes if they are not specified (except for major).
+  if [[ ${variables[$(bootstrap_id has-version_minor_prefix)]} != "yes" && $minor != "" ]] ; then
+    minor_prefix="."
+  fi
+
+  if [[ ${variables[$(bootstrap_id has-version_micro_prefix)]} != "yes" && $micro != "" ]] ; then
+    micro_prefix="."
+  fi
+
+  if [[ ${variables[$(bootstrap_id has-version_nano_prefix)]} != "yes" && $nano != "" ]] ; then
+    nano_prefix="."
+  fi
+
   if [[ $target == "" ]] ; then
-    target="major"
+    target="micro"
   fi
 
   if [[ $target == "major" ]] ; then
-    version="$major"
+    version="$major_prefix$major"
   elif [[ $target == "minor" ]] ; then
-    version="${major}.$minor"
+    version="$major_prefix$major$minor_prefix$minor"
   elif [[ $target == "micro" ]] ; then
-    version="${major}.${minor}.$micro"
+    version="$major_prefix$major$minor_prefix$minor$micro_prefix$micro"
+  elif [[ $target == "nano" ]] ; then
+    version="$major_prefix$major$minor_prefix$minor$micro_prefix$micro$nano_prefix$nano"
   fi
 
   if [[ $sources_library == "" ]] ; then
@@ -626,10 +694,22 @@ bootstrap_operation_build() {
     libraries="${variables[$(bootstrap_id build_libraries-$mode)]} $libraries"
   fi
 
-  if [[ $defines == "" ]] ; then
-    defines=${variables[$(bootstrap_id defines_all-$mode)]}
+  if [[ $defines_all == "" ]] ; then
+    defines_all=${variables[$(bootstrap_id defines_all-$mode)]}
+  else
+    defines_all="$defines_all ${variables[$(bootstrap_id defines_all-$mode)]}"
+  fi
+
+  if [[ $defines_library == "" ]] ; then
+    defines_library=${variables[$(bootstrap_id defines_library-$mode)]}
+  else
+    defines_library="$defines_library ${variables[$(bootstrap_id defines_library-$mode)]}"
+  fi
+
+  if [[ $defines_program == "" ]] ; then
+    defines_program=${variables[$(bootstrap_id defines_program-$mode)]}
   else
-    defines="$defines ${variables[$(bootstrap_id defines_all-$mode)]}"
+    defines_program="$defines_program ${variables[$(bootstrap_id defines_program-$mode)]}"
   fi
 
   if [[ $defines_shared == "" ]] ; then
@@ -650,18 +730,6 @@ bootstrap_operation_build() {
     flags_all="$flags_all ${variables[$(bootstrap_id flags_all-$mode)]}"
   fi
 
-  if [[ $flags_shared == "" ]] ; then
-    flags_shared=${variables[$(bootstrap_id flags_shared-$mode)]}
-  else
-    flags_shared="$flags_shared ${variables[$(bootstrap_id flags_shared-$mode)]}"
-  fi
-
-  if [[ $flags_static == "" ]] ; then
-    flags_static=${variables[$(bootstrap_id flags_static-$mode)]}
-  else
-    flags_static="$flags_static ${variables[$(bootstrap_id flags_static-$mode)]}"
-  fi
-
   if [[ $flags_library == "" ]] ; then
     flags_library=${variables[$(bootstrap_id flags_library-$mode)]}
   else
@@ -674,6 +742,18 @@ bootstrap_operation_build() {
     flags_program="$flags_program ${variables[$(bootstrap_id flags_program-$mode)]}"
   fi
 
+  if [[ $flags_shared == "" ]] ; then
+    flags_shared=${variables[$(bootstrap_id flags_shared-$mode)]}
+  else
+    flags_shared="$flags_shared ${variables[$(bootstrap_id flags_shared-$mode)]}"
+  fi
+
+  if [[ $flags_static == "" ]] ; then
+    flags_static=${variables[$(bootstrap_id flags_static-$mode)]}
+  else
+    flags_static="$flags_static ${variables[$(bootstrap_id flags_static-$mode)]}"
+  fi
+
   if [[ $path_work != "" ]] ; then
     arguments_include="$arguments_include -I${path_work}includes/"
     arguments_shared="$arguments_shared -L${path_work}libraries/shared/"
@@ -681,32 +761,13 @@ bootstrap_operation_build() {
   fi
 
   if [[ $defines_override != "" ]] ; then
-    defines="$defines_override"
+    defines_all="$defines_override"
+    defines_library=
+    defines_program=
     defines_shared=
     defines_static=
   fi
 
-  if [[ $defines != "" ]] ; then
-    flags_all="$flags_all "
-    for i in $defines ; do
-      flags_all="${flags_all}$i "
-    done
-  fi
-
-  if [[ $defines_shared != "" ]] ; then
-    flags_shared="$flags_shared "
-    for i in $defines_shared ; do
-      flags_shared="${flags_shared}$i "
-    done
-  fi
-
-  if [[ $defines_static != "" ]] ; then
-    flags_static="$flags_static "
-    for i in $defines_static ; do
-      flags_static="${flags_static}$i "
-    done
-  fi
-
   if [[ $enable_shared == "yes" ]] ; then
     shared="yes"
     search_shared="yes"
@@ -872,13 +933,16 @@ bootstrap_operation_build() {
       done
 
       if [[ $verbosity == "verbose" ]] ; then
-        echo $compiler $sources -shared -Wl,-soname,lib$name.so.$version -o ${path_build}libraries/shared/lib$name.so.$major.$minor.$micro $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library
+        echo $compiler $sources -shared -Wl,-soname,lib$name.so.$version -o ${path_build}libraries/shared/lib$name.so.$version $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library $defines_all $defines_shared $defines_library
       fi
 
-      $compiler $sources -shared -Wl,-soname,lib$name.so.$version -o ${path_build}libraries/shared/lib$name.so.$major.$minor.$micro $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library || failure=1
+      $compiler $sources -shared -Wl,-soname,lib$name.so.$version -o ${path_build}libraries/shared/lib$name.so.$version $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library $defines_all $defines_shared $defines_library || failure=1
 
       if [[ $failure == "" ]] ; then
-        ln $verbose -sf lib$name.so.$major.$minor.$micro ${path_build}libraries/shared/lib$name.so.$major || failure=1
+        if [[ $target != "major" ]] ; then
+          ln $verbose -sf lib$name.so.$version ${path_build}libraries/shared/lib$name.so.$major || failure=1
+        fi
+
         ln $verbose -sf lib$name.so.$major ${path_build}libraries/shared/lib$name.so || failure=1
       fi
     fi
@@ -896,10 +960,10 @@ bootstrap_operation_build() {
       done
 
       if [[ $verbosity == "verbose" ]] ; then
-        echo $compiler $sources -o ${path_build}programs/shared/$name $arguments_shared $arguments_include $links $libraries $flags_all $flags_shared $flags_program
+        echo $compiler $sources -o ${path_build}programs/shared/$name $arguments_shared $arguments_include $links $libraries $flags_all $flags_shared $flags_program $defines_all $defines_shared $defines_program
       fi
 
-      $compiler $sources -o ${path_build}programs/shared/$name $arguments_shared $arguments_include $links $libraries $flags_all $flags_shared $flags_program || failure=1
+      $compiler $sources -o ${path_build}programs/shared/$name $arguments_shared $arguments_include $links $libraries $flags_all $flags_shared $flags_program $defines_all $defines_shared $defines_program || failure=1
     fi
   fi
 
@@ -922,10 +986,10 @@ bootstrap_operation_build() {
         sources="$sources${path_build}objects/$directory/$n.o "
 
         if [[ $verbosity == "verbose" ]] ; then
-          echo $compiler $path_c$i -c -static -o ${path_build}objects/$directory/$n.o $arguments_static $arguments_include $libraries $flags_all $flags_static $flags_library
+          echo $compiler $path_c$i -c -static -o ${path_build}objects/$directory/$n.o $arguments_static $arguments_include $libraries $flags_all $flags_static $flags_library $defines_all $defines_static $defines_library
         fi
 
-        $compiler $path_c$i -c -static -o ${path_build}objects/$directory/$n.o $arguments_static $arguments_include $libraries $flags_all $flags_static $flags_library || failure=1
+        $compiler $path_c$i -c -static -o ${path_build}objects/$directory/$n.o $arguments_static $arguments_include $libraries $flags_all $flags_static $flags_library $defines_all $defines_static $defines_library || failure=1
 
         if [[ $failure == "1" ]] ; then
           break;
@@ -955,10 +1019,10 @@ bootstrap_operation_build() {
       done
 
       if [[ $verbosity == "verbose" ]] ; then
-        echo $compiler $sources -static -o ${path_build}programs/static/$name $arguments_static $arguments_include $links $libraries $flags_all $flags_static $flags_program
+        echo $compiler $sources -static -o ${path_build}programs/static/$name $arguments_static $arguments_include $links $libraries $flags_all $flags_static $flags_program $defines_all $defines_static $defines_program
       fi
 
-      $compiler $sources -static -o ${path_build}programs/static/$name $arguments_static $arguments_include $links $libraries $flags_all $flags_static $flags_program || failure=1
+      $compiler $sources -static -o ${path_build}programs/static/$name $arguments_static $arguments_include $links $libraries $flags_all $flags_static $flags_program $defines_all $defines_static $defines_program || failure=1
     fi
   fi
 
@@ -998,6 +1062,7 @@ bootstrap_cleanup() {
   unset bootstrap_id
   unset bootstrap_load_settings
   unset bootstrap_load_settings_mode
+  unset bootstrap_load_settings_has
   unset bootstrap_prepare_build
   unset bootstrap_operation_build
   unset bootstrap_operation_clean
index d8210c9..3fe24fb 100644 (file)
@@ -5,7 +5,7 @@ project_name f_account
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index cdcd09a..27722d8 100644 (file)
@@ -5,7 +5,7 @@ project_name f_capability
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index e09e9c4..95b4dfe 100644 (file)
@@ -5,7 +5,7 @@ project_name f_color
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index a4a4740..1a1678c 100644 (file)
@@ -5,7 +5,7 @@ project_name f_console
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 769ac4c..f85fea3 100644 (file)
@@ -5,7 +5,7 @@ project_name f_control_group
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 0768814..7ef969a 100644 (file)
@@ -5,7 +5,7 @@ project_name f_conversion
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 5bfcaea..16aae95 100644 (file)
@@ -5,7 +5,7 @@ project_name f_directory
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b8d6fb3..56f22ad 100644 (file)
@@ -5,7 +5,7 @@ project_name f_environment
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index d2f719a..297bf65 100644 (file)
@@ -5,7 +5,7 @@ project_name f_execute
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 79fa433..1c103a2 100644 (file)
@@ -5,7 +5,7 @@ project_name f_file
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 58dab1f..cc1b833 100644 (file)
@@ -5,7 +5,7 @@ project_name f_fss
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 1c93855..4bc11d2 100644 (file)
@@ -5,7 +5,7 @@ project_name f_iki
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b283796..1d2cc95 100644 (file)
@@ -5,7 +5,7 @@ project_name f_limit
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b36e04a..e601a57 100644 (file)
@@ -5,7 +5,7 @@ project_name f_memory
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 3525893..973b76f 100644 (file)
@@ -5,7 +5,7 @@ project_name f_path
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index e2c93b1..9de6fdd 100644 (file)
@@ -5,7 +5,7 @@ project_name f_pipe
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index d9b31d1..119785c 100644 (file)
@@ -5,7 +5,7 @@ project_name f_print
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 755ffbc..6f4d8ae 100644 (file)
@@ -5,7 +5,7 @@ project_name f_serialize
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 69ad0c4..6d336af 100644 (file)
@@ -5,7 +5,7 @@ project_name f_signal
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 6dde175..5619361 100644 (file)
@@ -5,7 +5,7 @@ project_name f_socket
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index ab42477..6a631ab 100644 (file)
@@ -5,7 +5,7 @@ project_name f_status
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index d0f9630..45c2278 100644 (file)
@@ -5,7 +5,7 @@ project_name f_string
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 374681d..8b32453 100644 (file)
@@ -5,7 +5,7 @@ project_name f_thread
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 7b31218..5ef106c 100644 (file)
@@ -5,7 +5,7 @@ project_name f_type
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 25f1bad..c4708ef 100644 (file)
@@ -5,7 +5,7 @@ project_name f_type_array
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 56228b2..6b1d86c 100644 (file)
@@ -5,7 +5,7 @@ project_name f_utf
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index bc49ea5..0741e9f 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_console
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index cd81f7a..6de5384 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_control_group
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b88c617..35248a0 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_conversion
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 5392704..cfda9d3 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_directory
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index cc6bd47..9b6c1d4 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_environment
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 9268162..55e942d 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_execute
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index a87697c..de5e07f 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_fss
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 5872f4c..03be9e8 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_iki
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 4636dda..2b627e3 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_print
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 76590c6..9107aef 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_iki
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index eb38ede..a7c80ff 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_status
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index f21e37e..fb89d0a 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_string
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 4beff2a..be6ad54 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_utf
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b7bd80d..7b91ce3 100644 (file)
@@ -5,7 +5,7 @@ project_name fl_utf_file
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 43e780e..f5b09c1 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_control_group
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index ef6d0e1..88fbe4f 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_error
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 6727fff..bcfb09f 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_execute
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 1395c38..0448e2d 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_file
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b262696..55a67dc 100644 (file)
@@ -186,7 +186,7 @@ extern "C" {
 #endif // _di_fll_fss_identify_
 
 #ifndef _di_fll_fss_snatch_
-  f_status_t fll_fss_snatch(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamic_t *values[], f_array_length_t *indexs[]) {
+  f_status_t fll_fss_snatch(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamic_t *values[], bool matches[], f_array_length_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -207,11 +207,12 @@ extern "C" {
 
     memset(&matched, 0, sizeof(bool) * size);
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
+
         if (matched[j]) continue;
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
@@ -221,6 +222,10 @@ extern "C" {
 
         matched[j] = F_true;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         if (!contents.array[i].used) continue;
 
         status = f_string_dynamic_partial_append_nulless(buffer, contents.array[i].array[0], values[j]);
@@ -237,7 +242,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_
 
 #ifndef _di_fll_fss_snatch_apart_
-  f_status_t fll_fss_snatch_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamics_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamics_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -257,11 +262,11 @@ extern "C" {
     f_array_length_t j = 0;
     f_array_length_t k = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
 
@@ -271,6 +276,10 @@ extern "C" {
         value = values[j];
         content = &contents.array[i];
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         if (values[j]->used + contents.array[i].used > values[j]->size) {
           if (values[j]->used + contents.array[i].used > f_array_length_t_size) {
             return F_status_set_error(F_array_too_large);
@@ -285,16 +294,16 @@ extern "C" {
           }
         }
 
-        for (k = 0; k < contents.array[i].used; k++) {
+        for (k = 0; k < contents.array[i].used; ++k) {
 
           status = f_string_dynamic_partial_append_nulless(buffer, contents.array[i].array[k], &values[j]->array[values[j]->used]);
           if (F_status_is_error(status)) return status;
 
-          values[j]->used++;
+          ++values[j]->used;
 
           if (indexs) {
             indexs[j]->array[indexs[j]->used] = i;
-            indexs[j]->used++;
+            ++indexs[j]->used;
           }
         } // for
       } // for
@@ -305,7 +314,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_apart_
 
 #ifndef _di_fll_fss_snatch_map_
-  f_status_t fll_fss_snatch_map(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_maps_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_map(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_maps_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -328,12 +337,13 @@ extern "C" {
 
     f_string_map_t *map = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
+
       if (!contents.array[i].used) continue;
 
       length_name = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_name, lengths[j]);
 
@@ -344,24 +354,30 @@ extern "C" {
 
         if (F_status_is_error(status)) {
           macro_f_string_dynamic_t_delete_simple(name);
+
           return status;
         }
 
         matched = F_false;
         length_name = (contents.array[i].array[0].stop - contents.array[i].array[0].start) + 1;
 
-        for (k = 0; k < values[j]->used; k++) {
+        for (k = 0; k < values[j]->used; ++k) {
 
           status = fl_string_compare_trim(buffer.string + contents.array[i].array[0].start, values[j]->array[k].name.string, length_name, values[j]->array[k].name.used);
 
           if (F_status_is_error(status)) {
             macro_f_string_dynamic_t_delete_simple(name);
+
             return status;
           }
 
           if (status == F_equal_to) {
             matched = F_true;
 
+            if (matches) {
+              matches[j] = F_true;
+            }
+
             macro_f_string_dynamic_t_delete_simple(name);
             break;
           }
@@ -369,6 +385,7 @@ extern "C" {
 
         if (matched) {
           name.used = 0;
+
           continue;
         }
 
@@ -376,6 +393,7 @@ extern "C" {
           if (values[j]->used + f_fss_default_allocation_step > f_array_length_t_size) {
             if (values[j]->used == f_array_length_t_size) {
               macro_f_string_dynamic_t_delete_simple(name);
+
               return F_status_set_error(F_array_too_large);
             }
 
@@ -383,6 +401,7 @@ extern "C" {
 
             if (F_status_is_error(status)) {
               macro_f_string_dynamic_t_delete_simple(name);
+
               return status;
             }
 
@@ -396,6 +415,7 @@ extern "C" {
 
             if (F_status_is_error(status)) {
               macro_f_string_dynamic_t_delete_simple(name);
+
               return status;
             }
 
@@ -413,6 +433,7 @@ extern "C" {
 
           if (F_status_is_error(status)) {
             macro_f_string_dynamic_t_delete_simple(name);
+
             return status;
           }
         }
@@ -421,11 +442,11 @@ extern "C" {
         map->name.used = name.used;
         map->name.size = name.size;
 
-        values[j]->used++;
+        ++values[j]->used;
 
         if (indexs) {
           indexs[j]->array[indexs[j]->used] = i;
-          indexs[j]->used++;
+          ++indexs[j]->used;
         }
 
         macro_f_string_dynamic_t_clear(name);
@@ -438,7 +459,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_map_
 
 #ifndef _di_fll_fss_snatch_map_apart_
-  f_status_t fll_fss_snatch_map_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_map_multis_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_map_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_map_multis_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -458,18 +479,23 @@ extern "C" {
 
     f_string_map_multi_t *map_multi = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
+
       if (!contents.array[i].used) continue;
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         status = f_string_map_multis_increase(f_fss_default_allocation_step_small, values[j]);
         if (F_status_is_error(status)) return status;
 
@@ -483,23 +509,23 @@ extern "C" {
         status = f_string_dynamic_partial_append_nulless(buffer, contents.array[i].array[0], &map_multi->name);
         if (F_status_is_error(status)) return status;
 
-        values[j]->used++;
+        ++values[j]->used;
 
         if (indexs) {
           indexs[j]->array[indexs[j]->used] = i;
-          indexs[j]->used++;
+          ++indexs[j]->used;
         }
 
         if (contents.array[i].used > 1) {
           status = f_string_dynamics_increase_by(contents.array[i].used - 1, &map_multi->value);
           if (F_status_is_error(status)) return status;
 
-          for (k = 1; k < contents.array[i].used; k++) {
+          for (k = 1; k < contents.array[i].used; ++k) {
 
             status = f_string_dynamic_partial_append_nulless(buffer, contents.array[i].array[k], &map_multi->value.array[map_multi->value.used]);
             if (F_status_is_error(status)) return status;
 
-            map_multi->value.used++;
+            ++map_multi->value.used;
           } // for
         }
       } // for
@@ -510,7 +536,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_map_apart_
 
 #ifndef _di_fll_fss_snatch_map_mash_
-  f_status_t fll_fss_snatch_map_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_map_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -530,18 +556,23 @@ extern "C" {
 
     f_string_map_t *map = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
+
       if (!contents.array[i].used) continue;
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         status = f_string_maps_increase(f_fss_default_allocation_step_small, values[j]);
         if (F_status_is_error(status)) return status;
 
@@ -577,7 +608,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_map_mash_
 
 #ifndef _di_fll_fss_snatch_map_mash_apart_
-  f_status_t fll_fss_snatch_map_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_map_multis_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_map_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_map_multis_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -600,33 +631,41 @@ extern "C" {
 
     f_string_map_multi_t *map_multi = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
+
       if (!contents.array[i].used) continue;
 
       length_name = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
+
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_name, lengths[j]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         status = f_string_dynamic_partial_append_nulless(buffer, contents.array[i].array[0], &name);
 
         if (F_status_is_error(status)) {
           macro_f_string_dynamic_t_delete_simple(name);
+
           return status;
         }
 
         matched = F_false;
         length_name = (contents.array[i].array[0].stop - contents.array[i].array[0].start) + 1;
 
-        for (k = 0; k < values[j]->used; k++) {
+        for (k = 0; k < values[j]->used; ++k) {
 
           status = fl_string_compare_trim(buffer.string + contents.array[i].array[0].start, values[j]->array[k].name.string, length_name, values[j]->array[k].name.used);
 
           if (F_status_is_error(status)) {
             macro_f_string_dynamic_t_delete_simple(name);
+
             return status;
           }
 
@@ -657,11 +696,11 @@ extern "C" {
           map_multi->name.used = name.used;
           map_multi->name.size = name.size;
 
-          values[j]->used++;
+          ++values[j]->used;
 
           if (indexs) {
             indexs[j]->array[indexs[j]->used] = i;
-            indexs[j]->used++;
+            ++indexs[j]->used;
           }
 
           macro_f_string_dynamic_t_clear(name);
@@ -672,23 +711,24 @@ extern "C" {
         status = f_string_dynamics_increase(f_fss_default_allocation_step_small, &map_multi->value);
         if (F_status_is_error(status)) return status;
 
-        for (k = 1; k < contents.array[i].used; k++) {
+        for (k = 1; k < contents.array[i].used; ++k) {
 
           status = f_string_dynamic_partial_mash_nulless(glue, glue_length, buffer, contents.array[i].array[k], &map_multi->value.array[map_multi->value.used]);
           if (F_status_is_error(status)) return status;
         } // for
 
-        map_multi->value.used++;
+        ++map_multi->value.used;
       } // for
     } // for
 
     macro_f_string_dynamic_t_delete_simple(name);
+
     return F_none;
   }
 #endif // _di_fll_fss_snatch_map_mash_apart_
 
 #ifndef _di_fll_fss_snatch_map_together_
-  f_status_t fll_fss_snatch_map_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_map_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -711,34 +751,41 @@ extern "C" {
 
     f_string_map_t *map = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
+
       if (!contents.array[i].used) continue;
 
       length_name = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_name, lengths[j]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         status = f_string_dynamic_partial_append_nulless(buffer, contents.array[i].array[0], &name);
 
         if (F_status_is_error(status)) {
           macro_f_string_dynamic_t_delete_simple(name);
+
           return status;
         }
 
         matched = F_false;
         length_name = (contents.array[i].array[0].stop - contents.array[i].array[0].start) + 1;
 
-        for (k = 0; k < values[j]->used; k++) {
+        for (k = 0; k < values[j]->used; ++k) {
 
           status = fl_string_compare_trim(buffer.string + contents.array[i].array[0].start, values[j]->array[k].name.string, length_name, values[j]->array[k].name.used);
 
           if (F_status_is_error(status)) {
             macro_f_string_dynamic_t_delete_simple(name);
+
             return status;
           }
 
@@ -770,11 +817,11 @@ extern "C" {
           map->name.used = name.used;
           map->name.size = name.size;
 
-          values[j]->used++;
+          ++values[j]->used;
 
           if (indexs) {
             indexs[j]->array[indexs[j]->used] = i;
-            indexs[j]->used++;
+            ++indexs[j]->used;
           }
 
           macro_f_string_dynamic_t_clear(name);
@@ -785,6 +832,7 @@ extern "C" {
 
           if (F_status_is_error(status)) {
             macro_f_string_dynamic_t_delete_simple(name);
+
             return status;
           }
         }
@@ -792,12 +840,13 @@ extern "C" {
     } // for
 
     macro_f_string_dynamic_t_delete_simple(name);
+
     return F_none;
   }
 #endif // _di_fll_fss_snatch_map_together_
 
 #ifndef _di_fll_fss_snatch_mash_
-  f_status_t fll_fss_snatch_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], f_array_length_t *indexs[]) {
+  f_status_t fll_fss_snatch_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], bool matches[], f_array_length_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -819,11 +868,12 @@ extern "C" {
 
     memset(&matched, 0, sizeof(bool) * size);
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
+
         if (matched[j]) continue;
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
@@ -831,9 +881,13 @@ extern "C" {
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         matched[j] = F_true;
 
-        for (k = 0; k < contents.array[i].used; k++) {
+        for (k = 0; k < contents.array[i].used; ++k) {
 
           status = f_string_dynamic_partial_mash_nulless(glue, glue_length, buffer, contents.array[i].array[k], values[j]);
           if (F_status_is_error(status)) return status;
@@ -850,7 +904,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_mash_
 
 #ifndef _di_fll_fss_snatch_mash_apart_
-  f_status_t fll_fss_snatch_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamics_t *values[], f_array_lengths_t *indexs[]) {
+  f_status_t fll_fss_snatch_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamics_t *values[], bool matches[], f_array_lengths_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -868,17 +922,21 @@ extern "C" {
     f_array_length_t j = 0;
     f_array_length_t k = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
+        if (matches) {
+          matches[j] = F_true;
+        }
+
         status = f_string_dynamics_increase(f_fss_default_allocation_step_small, values[j]);
         if (F_status_is_error(status)) return status;
 
@@ -887,17 +945,17 @@ extern "C" {
           if (F_status_is_error(status)) return status;
         }
 
-        for (k = 0; k < contents.array[i].used; k++) {
+        for (k = 0; k < contents.array[i].used; ++k) {
 
           status = f_string_dynamic_partial_mash_nulless(glue, glue_length, buffer, contents.array[i].array[k], &values[j]->array[values[j]->used]);
           if (F_status_is_error(status)) return status;
         } // for
 
-        values[j]->used++;
+        ++values[j]->used;
 
         if (indexs) {
           indexs[j]->array[indexs[j]->used] = i;
-          indexs[j]->used++;
+          ++indexs[j]->used;
         }
       } // for
     } // for
@@ -907,7 +965,7 @@ extern "C" {
 #endif // _di_fll_fss_snatch_mash_apart_
 
 #ifndef _di_fll_fss_snatch_together_
-  f_status_t fll_fss_snatch_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], f_array_length_t *indexs[]) {
+  f_status_t fll_fss_snatch_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], bool matches[], f_array_length_t *indexs[]) {
     #ifndef _di_level_2_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (objects.used != contents.used) return F_status_set_error(F_parameter);
@@ -925,18 +983,22 @@ extern "C" {
     f_array_length_t j = 0;
     f_array_length_t k = 0;
 
-    for (; i < objects.used; i++) {
+    for (; i < objects.used; ++i) {
 
       length_object = (objects.array[i].stop - objects.array[i].start) + 1;
 
-      for (j = 0; j < size; j++) {
+      for (j = 0; j < size; ++j) {
 
         status = fl_string_compare_trim(buffer.string + objects.array[i].start, names[j], length_object, lengths[j]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
 
-        for (k = 0; k < contents.array[i].used; k++) {
+        if (matches) {
+          matches[j] = F_true;
+        }
+
+        for (k = 0; k < contents.array[i].used; ++k) {
 
           status = f_string_dynamic_partial_mash_nulless(glue, glue_length, buffer, contents.array[i].array[k], values[j]);
           if (F_status_is_error(status)) return status;
index f4667b9..6bfe1ae 100644 (file)
@@ -103,8 +103,11 @@ extern "C" {
  *   The total size of the names, lengths, and values arrays.
  * @param values
  *   An array of values where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -120,7 +123,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_
-  extern f_status_t fll_fss_snatch(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamic_t *values[], f_array_length_t *indexs[]);
+  extern f_status_t fll_fss_snatch(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamic_t *values[], bool matches[], f_array_length_t *indexs[]);
 #endif // _di_fll_fss_snatch_
 
 /**
@@ -150,8 +153,11 @@ extern "C" {
  *   The total size of the names, lengths, and values arrays.
  * @param values
  *   An array of values where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -167,7 +173,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_apart_
-  extern f_status_t fll_fss_snatch_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamics_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_dynamics_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_apart_
 
 /**
@@ -199,8 +205,11 @@ extern "C" {
  *   The total size of the names, lengths, and values arrays.
  * @param values
  *   An array of map arrays where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -216,7 +225,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_
-  extern f_status_t fll_fss_snatch_map(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_maps_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_map(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_maps_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_map_
 
 /**
@@ -250,8 +259,11 @@ extern "C" {
  *   The total size of the names, lengths, and values arrays.
  * @param values
  *   An array of multi map arrays where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -267,7 +279,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_apart_
-  extern f_status_t fll_fss_snatch_map_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_map_multis_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_map_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, f_string_map_multis_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_map_apart_
 
 /**
@@ -304,8 +316,11 @@ extern "C" {
  *   The length of the glue string
  * @param values
  *   An array of multi map value arrays where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -318,7 +333,7 @@ extern "C" {
  *   Errors (with error bit) from: f_string_dynamic_partial_mash_nulless().
  */
 #ifndef _di_fll_fss_snatch_map_mash_
-  extern f_status_t fll_fss_snatch_map_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_map_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_map_mash_
 
 /**
@@ -356,8 +371,11 @@ extern "C" {
  *   The length of the glue string
  * @param values
  *   An array of multi map value arrays where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -373,7 +391,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_mash_apart_
-  extern f_status_t fll_fss_snatch_map_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_map_multis_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_map_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_map_multis_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_map_mash_apart_
 
 /**
@@ -410,8 +428,11 @@ extern "C" {
  *   The length of the glue string
  * @param values
  *   An array of map arrays where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -427,7 +448,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_together_
-  extern f_status_t fll_fss_snatch_map_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_map_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_maps_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_map_together_
 
 /**
@@ -461,8 +482,11 @@ extern "C" {
  *   The length of the glue string.
  * @param values
  *   An array of values where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -475,7 +499,7 @@ extern "C" {
  *   Errors (with error bit) from: f_string_dynamic_partial_mash_nulless().
  */
 #ifndef _di_fll_fss_snatch_mash_
-  extern f_status_t fll_fss_snatch_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], f_array_length_t *indexs[]);
+  extern f_status_t fll_fss_snatch_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], bool matches[], f_array_length_t *indexs[]);
 #endif // _di_fll_fss_snatch_mash_
 
 /**
@@ -510,8 +534,11 @@ extern "C" {
  *   The length of the glue string
  * @param values
  *   An array of values where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -527,7 +554,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_mash_apart_
-  extern f_status_t fll_fss_snatch_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamics_t *values[], f_array_lengths_t *indexs[]);
+  extern f_status_t fll_fss_snatch_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamics_t *values[], bool matches[], f_array_lengths_t *indexs[]);
 #endif // _di_fll_fss_snatch_mash_apart_
 
 /**
@@ -555,8 +582,11 @@ extern "C" {
  *   The total size of the names, lengths, and values arrays.
  * @param values
  *   An array of values where "snatched" content is stored.
+ * @param matches
+ *   An array representing the if an Object was matched.
+ *   Set the pointer address to 0 to disable.
  * @param indexs
- *   An array representing the index within the objects where the match was made.
+ *   An array representing the index within the Objects where the Content match was made.
  *   Set the pointer address to 0 to disable.
  *
  * @return
@@ -572,7 +602,7 @@ extern "C" {
  * @see fl_string_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_together_
-  extern f_status_t fll_fss_snatch_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], f_array_length_t *indexs[]);
+  extern f_status_t fll_fss_snatch_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_t names[], const f_array_length_t lengths[], const f_array_length_t size, const f_string_t glue, const f_array_length_t glue_length, f_string_dynamic_t *values[], bool matches[], f_array_length_t *indexs[]);
 #endif // _di_fll_fss_snatch_together_
 
 #ifdef __cplusplus
index 037d2b6..97b272e 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_fss
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 64d9eed..587ee86 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_iki
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index efa52b3..1061c3b 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_path
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index b8ba359..85a8e41 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_program
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index f373fec..265b63c 100644 (file)
@@ -5,7 +5,7 @@ project_name fll_status
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 1db2687..1189fc9 100644 (file)
@@ -5,7 +5,7 @@ project_name byte_dump
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 0d3cb59..90879d6 100644 (file)
@@ -5,7 +5,7 @@ project_name control
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 9d3edd8..065ab6c 100644 (file)
@@ -5,7 +5,7 @@ project_name controller
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 5eb0cc5..980b322 100644 (file)
@@ -207,15 +207,18 @@ extern "C" {
     fake_build_version_type_major = 1,
     fake_build_version_type_micro,
     fake_build_version_type_minor,
+    fake_build_version_type_nano,
   };
 
   #define fake_build_version_major "major"
   #define fake_build_version_micro "micro"
   #define fake_build_version_minor "minor"
+  #define fake_build_version_nano  "nano"
 
   #define fake_build_version_major_length 5
   #define fake_build_version_micro_length 5
   #define fake_build_version_minor_length 5
+  #define fake_build_version_nano_length  4
 #endif // _di_fake_build_version_
 
 #ifndef _di_fake_defines_
index 568d9da..f3d2d9f 100644 (file)
@@ -164,6 +164,21 @@ extern "C" {
           if (F_status_is_error(*status)) break;
         } // for
       }
+
+      if (is_library) {
+        for (i = 0; i < data_build.setting.defines_library.used && F_status_is_error_not(*status); ++i) {
+
+          *status = fll_execute_arguments_add(data_build.setting.defines_library.array[i].string, data_build.setting.defines_library.array[i].used, arguments);
+          if (F_status_is_error(*status)) break;
+        } // for
+      }
+      else {
+        for (i = 0; i < data_build.setting.defines_program.used && F_status_is_error_not(*status); ++i) {
+
+          *status = fll_execute_arguments_add(data_build.setting.defines_program.array[i].string, data_build.setting.defines_program.array[i].used, arguments);
+          if (F_status_is_error(*status)) break;
+        } // for
+      }
     }
   }
 #endif // _di_fake_build_arguments_standard_add_
@@ -839,115 +854,182 @@ extern "C" {
       }
     }
 
-    f_array_length_t parameter_file_name_length = fake_build_parameter_library_name_prefix_length;
-    f_array_length_t parameter_file_name_major_length = fake_build_parameter_library_name_prefix_length;
-    f_array_length_t parameter_file_name_minor_length = fake_build_parameter_library_name_prefix_length;
-    f_array_length_t 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_shared_length;
-    parameter_file_name_length = parameter_file_name_micro_length;
-
-    parameter_file_name_micro_length += fake_build_parameter_library_separator_length + data_build.setting.version_major.used;
-    parameter_file_name_major_length = parameter_file_name_micro_length;
-
-    parameter_file_name_micro_length += fake_build_parameter_library_separator_length + data_build.setting.version_minor.used;
-    parameter_file_name_minor_length = parameter_file_name_micro_length;
-
-    parameter_file_name_micro_length += fake_build_parameter_library_separator_length + data_build.setting.version_micro.used;
+    const f_array_length_t parameter_file_name_length = fake_build_parameter_library_name_prefix_length + data_build.setting.project_name.used + fake_build_parameter_library_name_suffix_shared_length;
+    const f_array_length_t parameter_file_name_major_length = data_build.setting.version_major.used ? parameter_file_name_length + data_build.setting.version_major_prefix.used + data_build.setting.version_major.used : 0;
+    const f_array_length_t parameter_file_name_minor_length = data_build.setting.version_minor.used ? parameter_file_name_major_length + data_build.setting.version_minor_prefix.used + data_build.setting.version_minor.used : 0;
+    const f_array_length_t parameter_file_name_micro_length = data_build.setting.version_micro.used ? parameter_file_name_minor_length + data_build.setting.version_micro_prefix.used + data_build.setting.version_micro.used : 0;
+    const f_array_length_t parameter_file_name_nano_length = data_build.setting.version_nano.used ? parameter_file_name_micro_length + data_build.setting.version_nano_prefix.used + data_build.setting.version_nano.used : 0;
 
     char parameter_file_name[parameter_file_name_length + 1];
     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, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
-    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 + parameter_file_name_micro_length, data_build.setting.project_name.string, data_build.setting.project_name.used);
-    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 + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
-    memcpy(parameter_file_name_major + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
-    memcpy(parameter_file_name_minor + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
-    memcpy(parameter_file_name_micro + parameter_file_name_micro_length, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
-    parameter_file_name_micro_length += fake_build_parameter_library_name_suffix_shared_length;
-
-    memcpy(parameter_file_name_major + parameter_file_name_micro_length, fake_build_parameter_library_separator, fake_build_parameter_library_separator_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_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;
+    char parameter_file_name_nano[parameter_file_name_nano_length + 1];
 
     parameter_file_name[parameter_file_name_length] = 0;
     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;
+    parameter_file_name_nano[parameter_file_name_nano_length] = 0;
 
-    {
-      f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_micro_length;
+    memcpy(parameter_file_name, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
 
-      char parameter_file_path[parameter_file_path_length + 1];
+    if (parameter_file_name_major_length) {
+      memcpy(parameter_file_name_major, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
 
-      memcpy(parameter_file_path, main.path_build_libraries_shared.string, main.path_build_libraries_shared.used);
-      memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_micro, parameter_file_name_micro_length);
+      if (parameter_file_name_minor_length) {
+        memcpy(parameter_file_name_minor, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
 
-      parameter_file_path[parameter_file_path_length] = 0;
+        if (parameter_file_name_micro_length) {
+          memcpy(parameter_file_name_micro, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
+
+          if (parameter_file_name_nano_length) {
+            memcpy(parameter_file_name_nano, fake_build_parameter_library_name_prefix, fake_build_parameter_library_name_prefix_length);
+          }
+        }
+      }
+    }
+
+    f_array_length_t count = fake_build_parameter_library_name_prefix_length;
+
+    memcpy(parameter_file_name + count, data_build.setting.project_name.string, data_build.setting.project_name.used);
+
+    if (parameter_file_name_major_length) {
+      memcpy(parameter_file_name_major + count, data_build.setting.project_name.string, data_build.setting.project_name.used);
+
+      if (parameter_file_name_minor_length) {
+        memcpy(parameter_file_name_minor + count, data_build.setting.project_name.string, data_build.setting.project_name.used);
+
+        if (parameter_file_name_micro_length) {
+          memcpy(parameter_file_name_micro + count, data_build.setting.project_name.string, data_build.setting.project_name.used);
+
+          if (parameter_file_name_nano_length) {
+            memcpy(parameter_file_name_nano + count, data_build.setting.project_name.string, data_build.setting.project_name.used);
+          }
+        }
+      }
+    }
+
+    count += data_build.setting.project_name.used;
+
+    memcpy(parameter_file_name + count, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
+
+    if (parameter_file_name_major_length) {
+      memcpy(parameter_file_name_major + count, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
+
+      if (parameter_file_name_minor_length) {
+        memcpy(parameter_file_name_minor + count, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
+
+        if (parameter_file_name_micro_length) {
+          memcpy(parameter_file_name_micro + count, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
+
+          if (parameter_file_name_nano_length) {
+            memcpy(parameter_file_name_nano + count, fake_build_parameter_library_name_suffix_shared, fake_build_parameter_library_name_suffix_shared_length);
+          }
+        }
+      }
+    }
+
+    count += fake_build_parameter_library_name_suffix_shared_length;
+
+    if (parameter_file_name_major_length) {
+      if (data_build.setting.version_major_prefix.used) {
+        memcpy(parameter_file_name_major + count, data_build.setting.version_major_prefix.string, data_build.setting.version_major_prefix.used);
+        memcpy(parameter_file_name_minor + count, data_build.setting.version_major_prefix.string, data_build.setting.version_major_prefix.used);
+        memcpy(parameter_file_name_micro + count, data_build.setting.version_major_prefix.string, data_build.setting.version_major_prefix.used);
+        memcpy(parameter_file_name_nano + count, data_build.setting.version_major_prefix.string, data_build.setting.version_major_prefix.used);
+        count += data_build.setting.version_major_prefix.used;
+      }
 
+      memcpy(parameter_file_name_major + count, data_build.setting.version_major.string, data_build.setting.version_major.used);
+      memcpy(parameter_file_name_minor + count, data_build.setting.version_major.string, data_build.setting.version_major.used);
+      memcpy(parameter_file_name_micro + count, data_build.setting.version_major.string, data_build.setting.version_major.used);
+      memcpy(parameter_file_name_nano + count, data_build.setting.version_major.string, data_build.setting.version_major.used);
+      count += data_build.setting.version_major.used;
+
+      if (parameter_file_name_minor_length) {
+        if (data_build.setting.version_minor_prefix.used) {
+          memcpy(parameter_file_name_minor + count, data_build.setting.version_minor_prefix.string, data_build.setting.version_minor_prefix.used);
+          memcpy(parameter_file_name_micro + count, data_build.setting.version_minor_prefix.string, data_build.setting.version_minor_prefix.used);
+          memcpy(parameter_file_name_nano + count, data_build.setting.version_minor_prefix.string, data_build.setting.version_minor_prefix.used);
+          count += data_build.setting.version_minor_prefix.used;
+        }
+
+        memcpy(parameter_file_name_minor + count, data_build.setting.version_minor.string, data_build.setting.version_minor.used);
+        memcpy(parameter_file_name_micro + count, data_build.setting.version_minor.string, data_build.setting.version_minor.used);
+        memcpy(parameter_file_name_nano + count, data_build.setting.version_minor.string, data_build.setting.version_minor.used);
+        count += data_build.setting.version_minor.used;
+
+        if (parameter_file_name_micro_length) {
+          if (data_build.setting.version_micro_prefix.used) {
+            memcpy(parameter_file_name_micro + count, data_build.setting.version_micro_prefix.string, data_build.setting.version_micro_prefix.used);
+            memcpy(parameter_file_name_nano + count, data_build.setting.version_micro_prefix.string, data_build.setting.version_micro_prefix.used);
+            count += data_build.setting.version_micro_prefix.used;
+          }
+
+          memcpy(parameter_file_name_micro + count, data_build.setting.version_micro.string, data_build.setting.version_micro.used);
+          memcpy(parameter_file_name_nano + count, data_build.setting.version_micro.string, data_build.setting.version_micro.used);
+          count += data_build.setting.version_micro.used;
+
+          if (parameter_file_name_nano_length) {
+            if (data_build.setting.version_nano_prefix.used) {
+              memcpy(parameter_file_name_nano + count, data_build.setting.version_nano_prefix.string, data_build.setting.version_nano_prefix.used);
+              count += data_build.setting.version_nano_prefix.used;
+            }
+
+            memcpy(parameter_file_name_nano + count, data_build.setting.version_nano.string, data_build.setting.version_nano.used);
+            count += data_build.setting.version_nano.used;
+          }
+        }
+      }
+    }
+
+    {
       f_array_length_t parameter_linker_length = fake_build_parameter_library_shared_prefix_length;
+      f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used;
 
       if (data_build.setting.version_target == fake_build_version_type_major) {
         parameter_linker_length += parameter_file_name_major_length;
+        parameter_file_path_length += parameter_file_name_major_length;
       }
       else if (data_build.setting.version_target == fake_build_version_type_minor) {
         parameter_linker_length += parameter_file_name_minor_length;
+        parameter_file_path_length += parameter_file_name_minor_length;
       }
       else if (data_build.setting.version_target == fake_build_version_type_micro) {
         parameter_linker_length += parameter_file_name_micro_length;
+        parameter_file_path_length += parameter_file_name_micro_length;
+      }
+      else if (data_build.setting.version_target == fake_build_version_type_nano) {
+        parameter_linker_length += parameter_file_name_nano_length;
+        parameter_file_path_length += parameter_file_name_nano_length;
       }
 
       char parameter_linker[parameter_linker_length + 1];
+      char parameter_file_path[parameter_file_path_length + 1];
 
       memcpy(parameter_linker, fake_build_parameter_library_shared_prefix, fake_build_parameter_library_shared_prefix_length);
+      memcpy(parameter_file_path, main.path_build_libraries_shared.string, main.path_build_libraries_shared.used);
 
       if (data_build.setting.version_target == fake_build_version_type_major) {
         memcpy(parameter_linker + fake_build_parameter_library_shared_prefix_length, parameter_file_name_major, parameter_file_name_major_length);
+        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_major, parameter_file_name_major_length);
       }
       else if (data_build.setting.version_target == fake_build_version_type_minor) {
         memcpy(parameter_linker + fake_build_parameter_library_shared_prefix_length, parameter_file_name_minor, parameter_file_name_minor_length);
+        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_minor, parameter_file_name_minor_length);
       }
       else if (data_build.setting.version_target == fake_build_version_type_micro) {
         memcpy(parameter_linker + fake_build_parameter_library_shared_prefix_length, parameter_file_name_micro, parameter_file_name_micro_length);
+        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_micro, parameter_file_name_micro_length);
+      }
+      else if (data_build.setting.version_target == fake_build_version_type_nano) {
+        memcpy(parameter_linker + fake_build_parameter_library_shared_prefix_length, parameter_file_name_nano, parameter_file_name_nano_length);
+        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_nano, parameter_file_name_nano_length);
       }
 
       parameter_linker[parameter_linker_length] = 0;
+      parameter_file_path[parameter_file_path_length] = 0;
 
       const f_string_t values[] = {
         fake_build_parameter_library_shared,
@@ -975,6 +1057,7 @@ extern "C" {
         fll_error_print(main.error, F_status_set_fine(*status), "fll_execute_arguments_add", F_true);
 
         macro_f_string_dynamics_t_delete_simple(arguments);
+
         return 0;
       }
     }
@@ -993,29 +1076,26 @@ extern "C" {
       }
     }
 
-    if (data_build.setting.version_target != fake_build_version_type_micro) {
-      f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used;
-
-      if (data_build.setting.version_target == fake_build_version_type_major) {
-        parameter_file_path_length += parameter_file_name_major_length;
-      }
-      else {
-        parameter_file_path_length += parameter_file_name_minor_length;
-      }
+    if (data_build.setting.version_target != fake_build_version_type_major && parameter_file_name_major_length) {
+      f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_major_length;
 
+      char *link_target = 0;
       char parameter_file_path[parameter_file_path_length + 1];
 
-      memcpy(parameter_file_path, main.path_build_libraries_shared.string, main.path_build_libraries_shared.used);
-
-      if (data_build.setting.version_target == fake_build_version_type_major) {
-        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_major, parameter_file_name_major_length);
+      if (data_build.setting.version_target == fake_build_version_type_minor) {
+        link_target = parameter_file_name_minor;
       }
-      else {
-        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_minor, parameter_file_name_minor_length);
+      else if (data_build.setting.version_target == fake_build_version_type_micro) {
+        link_target = parameter_file_name_micro;
+      }
+      else if (data_build.setting.version_target == fake_build_version_type_nano) {
+        link_target = parameter_file_name_nano;
       }
 
-      parameter_file_path[parameter_file_path_length] = 0;
+      memcpy(parameter_file_path, main.path_build_libraries_shared.string, main.path_build_libraries_shared.used);
+      memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_major, parameter_file_name_major_length);
 
+      parameter_file_path[parameter_file_path_length] = 0;
 
       if (fake_signal_received(main)) {
         *status = F_status_set_error(F_signal);
@@ -1023,10 +1103,10 @@ extern "C" {
         return 0;
       }
 
-      *status = f_file_link(parameter_file_name_micro, parameter_file_path);
+      *status = f_file_link(link_target, parameter_file_path);
 
       if (F_status_is_error_not(*status) && main.error.verbosity == f_console_verbosity_verbose) {
-        fprintf(main.output.stream, "Linked file '%s' to '%s'.%c", parameter_file_path, parameter_file_name_micro, f_string_eol_s[0]);
+        fprintf(main.output.stream, "Linked file '%s' to '%s'.%c", parameter_file_path, link_target, f_string_eol_s[0]);
       }
       else if (F_status_is_error(*status)) {
         if (F_status_set_fine(*status) == F_file_found) {
@@ -1035,52 +1115,33 @@ extern "C" {
           return 0;
         }
 
-        fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_name_micro, "link", fll_error_file_type_file);
+        fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, link_target, "link", fll_error_file_type_file);
 
         return 0;
       }
     }
 
-    if (F_status_is_error_not(*status)) {
+    if (F_status_is_error_not(*status) && parameter_file_name_major_length) {
+
       f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_length;
 
       char parameter_file_path[parameter_file_path_length + 1];
 
       memcpy(parameter_file_path, main.path_build_libraries_shared.string, main.path_build_libraries_shared.used);
-
       memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name, parameter_file_name_length);
 
       parameter_file_path[parameter_file_path_length] = 0;
 
       if (fake_signal_received(main)) {
         *status = F_status_set_error(F_signal);
+
         return 0;
       }
 
-      if (data_build.setting.version_target == fake_build_version_type_major) {
-        *status = f_file_link(parameter_file_name_major, parameter_file_path);
-      }
-      else if (data_build.setting.version_target == fake_build_version_type_minor) {
-        *status = f_file_link(parameter_file_name_minor, parameter_file_path);
-      }
-      else if (data_build.setting.version_target == fake_build_version_type_micro) {
-        *status = f_file_link(parameter_file_name_micro, parameter_file_path);
-      }
+      *status = f_file_link(parameter_file_name_major, parameter_file_path);
 
       if (F_status_is_error_not(*status) && main.error.verbosity == f_console_verbosity_verbose) {
-        fprintf(main.output.stream, "Linked file '%s' to '", parameter_file_path);
-
-        if (data_build.setting.version_target == fake_build_version_type_major) {
-          fprintf(main.output.stream, "%s", parameter_file_name_major);
-        }
-        else if (data_build.setting.version_target == fake_build_version_type_minor) {
-          fprintf(main.output.stream, "%s", parameter_file_name_minor);
-        }
-        else if (data_build.setting.version_target == fake_build_version_type_micro) {
-          fprintf(main.output.stream, "%s", parameter_file_name_micro);
-        }
-
-        fprintf(main.output.stream, "'.%c", f_string_eol_s[0]);
+        fprintf(main.output.stream, "Linked file '%s' to '%s'.%c", parameter_file_path, parameter_file_name_major, f_string_eol_s[0]);
       }
       else if (F_status_is_error(*status)) {
         if (F_status_set_fine(*status) == F_file_found) {
@@ -1089,15 +1150,7 @@ extern "C" {
           return 0;
         }
 
-        if (data_build.setting.version_target == fake_build_version_type_major) {
-          fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_name_major, "link", fll_error_file_type_file);
-        }
-        else if (data_build.setting.version_target == fake_build_version_type_minor) {
-          fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_name_minor, "link", fll_error_file_type_file);
-        }
-        else if (data_build.setting.version_target == fake_build_version_type_micro) {
-          fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_name_micro, "link", fll_error_file_type_file);
-        }
+        fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_name_major, "link", fll_error_file_type_file);
 
         return 0;
       }
@@ -1429,6 +1482,39 @@ extern "C" {
 
     bool error_printed = F_false;
 
+    f_string_dynamics_t build_compiler = f_string_dynamics_t_initialize;
+    f_string_dynamics_t build_indexer = f_string_dynamics_t_initialize;
+    f_string_dynamics_t build_language = f_string_dynamics_t_initialize;
+    f_string_dynamics_t build_script = f_string_dynamics_t_initialize;
+    f_string_dynamics_t build_shared = f_string_dynamics_t_initialize;
+    f_string_dynamics_t build_static = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_headers = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_headers_preserve = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_language = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_library_script = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_library_shared = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_library_static = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_program_script = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_program_shared = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_program_static = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_sources = f_string_dynamics_t_initialize;
+    f_string_dynamics_t path_standard = f_string_dynamics_t_initialize;
+    f_string_dynamics_t process_post = f_string_dynamics_t_initialize;
+    f_string_dynamics_t process_pre = f_string_dynamics_t_initialize;
+    f_string_dynamics_t project_name = f_string_dynamics_t_initialize;
+    f_string_dynamics_t search_exclusive = f_string_dynamics_t_initialize;
+    f_string_dynamics_t search_shared = f_string_dynamics_t_initialize;
+    f_string_dynamics_t search_static = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_major = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_major_prefix = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_micro = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_micro_prefix = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_minor = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_minor_prefix = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_nano = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_nano_prefix = f_string_dynamics_t_initialize;
+    f_string_dynamics_t version_target = f_string_dynamics_t_initialize;
+
     const f_string_t settings_name[] = {
       fake_build_setting_name_build_compiler,
       fake_build_setting_name_build_indexer,
@@ -1439,10 +1525,12 @@ extern "C" {
       fake_build_setting_name_build_sources_headers,
       fake_build_setting_name_build_sources_library,
       fake_build_setting_name_build_sources_program,
-      fake_build_setting_name_build_sources_settings,
       fake_build_setting_name_build_sources_script,
+      fake_build_setting_name_build_sources_settings,
       fake_build_setting_name_build_static,
       fake_build_setting_name_defines_all,
+      fake_build_setting_name_defines_library,
+      fake_build_setting_name_defines_program,
       fake_build_setting_name_defines_shared,
       fake_build_setting_name_defines_static,
       fake_build_setting_name_environment,
@@ -1471,8 +1559,13 @@ extern "C" {
       fake_build_setting_name_search_shared,
       fake_build_setting_name_search_static,
       fake_build_setting_name_version_major,
+      fake_build_setting_name_version_major_prefix,
       fake_build_setting_name_version_micro,
+      fake_build_setting_name_version_micro_prefix,
       fake_build_setting_name_version_minor,
+      fake_build_setting_name_version_minor_prefix,
+      fake_build_setting_name_version_nano,
+      fake_build_setting_name_version_nano_prefix,
       fake_build_setting_name_version_target,
     };
 
@@ -1486,10 +1579,12 @@ extern "C" {
       fake_build_setting_name_build_sources_headers_length,
       fake_build_setting_name_build_sources_library_length,
       fake_build_setting_name_build_sources_program_length,
-      fake_build_setting_name_build_sources_settings_length,
       fake_build_setting_name_build_sources_script_length,
+      fake_build_setting_name_build_sources_settings_length,
       fake_build_setting_name_build_static_length,
       fake_build_setting_name_defines_all_length,
+      fake_build_setting_name_defines_library_length,
+      fake_build_setting_name_defines_program_length,
       fake_build_setting_name_defines_shared_length,
       fake_build_setting_name_defines_static_length,
       fake_build_setting_name_environment_length,
@@ -1518,39 +1613,16 @@ extern "C" {
       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_major_prefix_length,
       fake_build_setting_name_version_micro_length,
+      fake_build_setting_name_version_micro_prefix_length,
       fake_build_setting_name_version_minor_length,
+      fake_build_setting_name_version_minor_prefix_length,
+      fake_build_setting_name_version_nano_length,
+      fake_build_setting_name_version_nano_prefix_length,
       fake_build_setting_name_version_target_length,
     };
 
-    f_string_dynamics_t build_compiler = f_string_dynamics_t_initialize;
-    f_string_dynamics_t build_indexer = f_string_dynamics_t_initialize;
-    f_string_dynamics_t build_language = f_string_dynamics_t_initialize;
-    f_string_dynamics_t build_script = f_string_dynamics_t_initialize;
-    f_string_dynamics_t build_shared = f_string_dynamics_t_initialize;
-    f_string_dynamics_t build_static = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_headers = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_headers_preserve = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_language = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_library_script = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_library_shared = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_library_static = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_program_script = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_program_shared = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_program_static = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_sources = f_string_dynamics_t_initialize;
-    f_string_dynamics_t path_standard = f_string_dynamics_t_initialize;
-    f_string_dynamics_t process_post = f_string_dynamics_t_initialize;
-    f_string_dynamics_t process_pre = f_string_dynamics_t_initialize;
-    f_string_dynamics_t project_name = f_string_dynamics_t_initialize;
-    f_string_dynamics_t search_exclusive = f_string_dynamics_t_initialize;
-    f_string_dynamics_t search_shared = f_string_dynamics_t_initialize;
-    f_string_dynamics_t search_static = f_string_dynamics_t_initialize;
-    f_string_dynamics_t version_major = f_string_dynamics_t_initialize;
-    f_string_dynamics_t version_micro = f_string_dynamics_t_initialize;
-    f_string_dynamics_t version_minor = f_string_dynamics_t_initialize;
-    f_string_dynamics_t version_target = f_string_dynamics_t_initialize;
-
     f_string_dynamics_t *settings_value[] = {
       &build_compiler,
       &build_indexer,
@@ -1561,10 +1633,12 @@ extern "C" {
       &setting->build_sources_headers,
       &setting->build_sources_library,
       &setting->build_sources_program,
-      &setting->build_sources_setting,
       &setting->build_sources_script,
+      &setting->build_sources_setting,
       &build_static,
       &setting->defines_all,
+      &setting->defines_library,
+      &setting->defines_program,
       &setting->defines_shared,
       &setting->defines_static,
       &setting->environment,
@@ -1593,14 +1667,73 @@ extern "C" {
       &search_shared,
       &search_static,
       &version_major,
+      &version_major_prefix,
       &version_micro,
+      &version_micro_prefix,
       &version_minor,
+      &version_minor_prefix,
+      &version_nano,
+      &version_nano_prefix,
       &version_target,
     };
 
+    bool settings_matches[] = {
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+      F_false,
+    };
+
     f_string_t function = "fll_fss_snatch_apart";
 
-    *status = fll_fss_snatch_apart(buffer, objects, contents, settings_name, settings_length, fake_build_setting_total, settings_value, 0);
+    *status = fll_fss_snatch_apart(buffer, objects, contents, settings_name, settings_length, fake_build_setting_total, settings_value, settings_matches, 0);
 
     if (*status == F_none) {
       const int total_build_libraries = setting->build_libraries.used;
@@ -1659,7 +1792,7 @@ extern "C" {
           macro_f_string_dynamic_t_resize(*status, settings_mode_name_dynamic[j], setting_mode_lengths[j]);
 
           if (F_status_is_error(*status)) {
-            function = " macro_f_string_dynamic_t_resize";
+            function = "macro_f_string_dynamic_t_resize";
             break;
           }
 
@@ -1671,7 +1804,7 @@ extern "C" {
         } // for
 
         if (*status == F_none) {
-          *status = fll_fss_snatch_apart(buffer, objects, contents, settings_mode_names, setting_mode_lengths, fake_build_setting_total, settings_value, 0);
+          *status = fll_fss_snatch_apart(buffer, objects, contents, settings_mode_names, setting_mode_lengths, fake_build_setting_total, settings_value, 0, 0);
 
           if (F_status_is_error(*status)) {
             function = "fll_fss_snatch_apart";
@@ -1753,8 +1886,13 @@ extern "C" {
         fake_build_setting_name_search_shared,
         fake_build_setting_name_search_static,
         fake_build_setting_name_version_major,
+        fake_build_setting_name_version_major_prefix,
         fake_build_setting_name_version_micro,
+        fake_build_setting_name_version_micro_prefix,
         fake_build_setting_name_version_minor,
+        fake_build_setting_name_version_minor_prefix,
+        fake_build_setting_name_version_nano,
+        fake_build_setting_name_version_nano_prefix,
         fake_build_setting_name_version_target,
       };
 
@@ -1783,8 +1921,13 @@ extern "C" {
         &search_shared,
         &search_static,
         &version_major,
+        &version_major_prefix,
         &version_micro,
+        &version_micro_prefix,
         &version_minor,
+        &version_minor_prefix,
+        &version_nano,
+        &version_nano_prefix,
         &version_target,
       };
 
@@ -1839,8 +1982,13 @@ extern "C" {
         0,
         0,
         &setting->version_major,
+        &setting->version_major_prefix,
         &setting->version_micro,
+        &setting->version_micro_prefix,
         &setting->version_minor,
+        &setting->version_minor_prefix,
+        &setting->version_nano,
+        &setting->version_nano_prefix,
       };
 
       uint8_t * const settings_single_language[] = {
@@ -1876,10 +2024,15 @@ extern "C" {
         0,
         0,
         0,
+        0,
+        0,
+        0,
+        0,
+        0,
         &setting->version_target,
       };
 
-      // 1 = "yes" or "no", 2 = path/, 3 = literal, 4 = "bash", "c", or "c++", 5 = "major", "minor", or "micro".
+      // 1 = "yes" or "no", 2 = path/, 3 = literal, 4 = "bash", "c", or "c++", 5 = "major", "minor", "micro", or "nano".
       const uint8_t settings_single_type[] = {
         3,
         3,
@@ -1907,10 +2060,15 @@ extern "C" {
         3,
         3,
         3,
+        3,
+        3,
+        3,
+        3,
+        3,
         5,
       };
 
-      for (f_array_length_t i = 0; i < 27; ++i) {
+      for (f_array_length_t i = 0; i < 32; ++i) {
 
         if (!settings_single_source[i]->used) continue;
 
@@ -1997,6 +2155,9 @@ extern "C" {
           else if (fl_string_compare_trim(settings_single_source[i]->array[0].string, fake_build_version_minor, settings_single_source[i]->array[0].used, fake_build_version_minor_length) == F_equal_to) {
             *settings_single_version[i] = fake_build_version_type_minor;
           }
+          else if (fl_string_compare_trim(settings_single_source[i]->array[0].string, fake_build_version_nano, settings_single_source[i]->array[0].used, fake_build_version_nano_length) == F_equal_to) {
+            *settings_single_version[i] = fake_build_version_type_nano;
+          }
           else {
             *settings_single_version[i] = fake_build_version_type_major;
 
@@ -2010,8 +2171,10 @@ extern "C" {
               f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_version_major);
               f_color_print(main.output.stream, main.context.set.warning, "', '");
               f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_version_minor);
-              f_color_print(main.output.stream, main.context.set.warning, "', or '");
+              f_color_print(main.output.stream, main.context.set.warning, "', '");
               f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_version_micro);
+              f_color_print(main.output.stream, main.context.set.warning, "', or '");
+              f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_version_nano);
               f_color_print(main.output.stream, main.context.set.warning, "', defaulting to '");
               f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_version_major);
               f_color_print(main.output.stream, main.context.set.warning, "'.");
@@ -2025,6 +2188,7 @@ extern "C" {
           settings_single_destination[i]->used = 0;
 
           *status = f_string_dynamic_append_nulless(settings_single_source[i]->array[0], settings_single_destination[i]);
+
           if (F_status_is_error(*status)) {
             fll_error_print(main.error, F_status_set_fine(*status), "f_string_dynamic_append_nulless", F_true);
             break;
@@ -2032,6 +2196,7 @@ extern "C" {
 
           if (settings_single_type[i] == 2) {
             *status = f_string_append_assure(f_path_separator_s, f_path_separator_length, settings_single_destination[i]);
+
             if (F_status_is_error(*status)) {
               fll_error_print(main.error, F_status_set_fine(*status), "f_string_append_assure", F_true);
               break;
@@ -2045,6 +2210,50 @@ extern "C" {
           }
         }
       } // for
+
+      // Provide these defaults only if the Object is not defined (this allows for empty Content to exist if the Object is defined).
+      // In the case of the version prefixes, if the associated version is empty, then instead clear the associated version prefix.
+      {
+        f_string_dynamic_t *prefix[] = {
+          &setting->version_major_prefix,
+          &setting->version_minor_prefix,
+          &setting->version_micro_prefix,
+          &setting->version_nano_prefix,
+        };
+
+        f_string_dynamic_t *version[] = {
+          &setting->version_major,
+          &setting->version_minor,
+          &setting->version_micro,
+          &setting->version_nano,
+        };
+
+        bool has_prefix_object[] = {
+          settings_matches[43], // version_major_prefix
+          settings_matches[45], // version_minor_prefix
+          settings_matches[47], // version_micro_prefix
+          settings_matches[49], // version_nano_prefix
+        };
+
+        for (f_array_length_t i = 0; i < 4; ++i) {
+
+          if (version[i]->used) {
+            if (!has_prefix_object[i]) {
+              prefix[i]->used = 0;
+
+              *status = f_string_append(fake_build_setting_default_version_prefix, fake_build_setting_default_version_prefix_length, prefix[i]);
+
+              if (F_status_is_error(*status)) {
+                fll_error_print(main.error, F_status_set_fine(*status), "f_string_append", F_true);
+                break;
+              }
+            }
+          }
+          else {
+            prefix[i]->used = 0;
+          }
+        } // for
+      }
     }
 
     macro_f_string_dynamics_t_delete_simple(build_compiler);
@@ -2071,8 +2280,13 @@ extern "C" {
     macro_f_string_dynamics_t_delete_simple(search_shared);
     macro_f_string_dynamics_t_delete_simple(search_static);
     macro_f_string_dynamics_t_delete_simple(version_major);
+    macro_f_string_dynamics_t_delete_simple(version_major_prefix);
     macro_f_string_dynamics_t_delete_simple(version_micro);
+    macro_f_string_dynamics_t_delete_simple(version_micro_prefix);
     macro_f_string_dynamics_t_delete_simple(version_minor);
+    macro_f_string_dynamics_t_delete_simple(version_minor_prefix);
+    macro_f_string_dynamics_t_delete_simple(version_nano);
+    macro_f_string_dynamics_t_delete_simple(version_nano_prefix);
     macro_f_string_dynamics_t_delete_simple(version_target);
   }
 #endif // _di_fake_build_load_setting_process_
index baa3b2a..18d5226 100644 (file)
@@ -44,16 +44,23 @@ extern "C" {
     f_string_dynamic_t process_pre;
     f_string_dynamic_t project_name;
     f_string_dynamic_t version_major;
+    f_string_dynamic_t version_major_prefix;
     f_string_dynamic_t version_micro;
+    f_string_dynamic_t version_micro_prefix;
     f_string_dynamic_t version_minor;
+    f_string_dynamic_t version_minor_prefix;
+    f_string_dynamic_t version_nano;
+    f_string_dynamic_t version_nano_prefix;
 
     f_string_dynamics_t build_libraries;
     f_string_dynamics_t build_sources_headers;
     f_string_dynamics_t build_sources_library;
     f_string_dynamics_t build_sources_program;
-    f_string_dynamics_t build_sources_setting;
     f_string_dynamics_t build_sources_script;
+    f_string_dynamics_t build_sources_setting;
     f_string_dynamics_t defines_all;
+    f_string_dynamics_t defines_library;
+    f_string_dynamics_t defines_program;
     f_string_dynamics_t defines_shared;
     f_string_dynamics_t defines_static;
     f_string_dynamics_t environment;
@@ -94,6 +101,13 @@ extern "C" {
     f_string_dynamic_t_initialize, \
     f_string_dynamic_t_initialize, \
     f_string_dynamic_t_initialize, \
+    f_string_dynamic_t_initialize, \
+    f_string_dynamic_t_initialize, \
+    f_string_dynamic_t_initialize, \
+    f_string_dynamic_t_initialize, \
+    f_string_dynamic_t_initialize, \
+    f_string_dynamics_t_initialize, \
+    f_string_dynamics_t_initialize, \
     f_string_dynamics_t_initialize, \
     f_string_dynamics_t_initialize, \
     f_string_dynamics_t_initialize, \
@@ -129,15 +143,22 @@ extern "C" {
     macro_f_string_dynamic_t_delete_simple(setting.process_pre); \
     macro_f_string_dynamic_t_delete_simple(setting.project_name); \
     macro_f_string_dynamic_t_delete_simple(setting.version_major); \
+    macro_f_string_dynamic_t_delete_simple(setting.version_major_prefix); \
     macro_f_string_dynamic_t_delete_simple(setting.version_micro); \
+    macro_f_string_dynamic_t_delete_simple(setting.version_micro_prefix); \
     macro_f_string_dynamic_t_delete_simple(setting.version_minor); \
+    macro_f_string_dynamic_t_delete_simple(setting.version_minor_prefix); \
+    macro_f_string_dynamic_t_delete_simple(setting.version_nano); \
+    macro_f_string_dynamic_t_delete_simple(setting.version_nano_prefix); \
     macro_f_string_dynamics_t_delete_simple(setting.build_libraries); \
     macro_f_string_dynamics_t_delete_simple(setting.build_sources_headers); \
     macro_f_string_dynamics_t_delete_simple(setting.build_sources_library); \
     macro_f_string_dynamics_t_delete_simple(setting.build_sources_program); \
-    macro_f_string_dynamics_t_delete_simple(setting.build_sources_setting); \
     macro_f_string_dynamics_t_delete_simple(setting.build_sources_script); \
+    macro_f_string_dynamics_t_delete_simple(setting.build_sources_setting); \
     macro_f_string_dynamics_t_delete_simple(setting.defines_all); \
+    macro_f_string_dynamics_t_delete_simple(setting.defines_library); \
+    macro_f_string_dynamics_t_delete_simple(setting.defines_program); \
     macro_f_string_dynamics_t_delete_simple(setting.defines_shared); \
     macro_f_string_dynamics_t_delete_simple(setting.defines_static); \
     macro_f_string_dynamics_t_delete_simple(setting.environment); \
@@ -158,10 +179,12 @@ extern "C" {
   #define fake_build_setting_name_build_sources_headers  "build_sources_headers"
   #define fake_build_setting_name_build_sources_library  "build_sources_library"
   #define fake_build_setting_name_build_sources_program  "build_sources_program"
-  #define fake_build_setting_name_build_sources_settings "build_sources_setting"
   #define fake_build_setting_name_build_sources_script   "build_sources_script"
+  #define fake_build_setting_name_build_sources_settings "build_sources_setting"
   #define fake_build_setting_name_build_static           "build_static"
   #define fake_build_setting_name_defines_all            "defines_all"
+  #define fake_build_setting_name_defines_library        "defines_library"
+  #define fake_build_setting_name_defines_program        "defines_program"
   #define fake_build_setting_name_defines_shared         "defines_shared"
   #define fake_build_setting_name_defines_static         "defines_static"
   #define fake_build_setting_name_environment            "environment"
@@ -190,8 +213,13 @@ extern "C" {
   #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_major_prefix   "version_major_prefix"
   #define fake_build_setting_name_version_micro          "version_micro"
+  #define fake_build_setting_name_version_micro_prefix   "version_micro_prefix"
   #define fake_build_setting_name_version_minor          "version_minor"
+  #define fake_build_setting_name_version_minor_prefix   "version_minor_prefix"
+  #define fake_build_setting_name_version_nano           "version_nano"
+  #define fake_build_setting_name_version_nano_prefix    "version_nano_prefix"
   #define fake_build_setting_name_version_target         "version_target"
 
   #define fake_build_setting_name_build_compiler_length         14
@@ -203,11 +231,13 @@ extern "C" {
   #define fake_build_setting_name_build_sources_headers_length  21
   #define fake_build_setting_name_build_sources_library_length  21
   #define fake_build_setting_name_build_sources_program_length  21
-  #define fake_build_setting_name_build_sources_settings_length 22
   #define fake_build_setting_name_build_sources_script_length   20
+  #define fake_build_setting_name_build_sources_settings_length 22
   #define fake_build_setting_name_build_static_length           12
   #define fake_build_setting_name_environment_length            11
   #define fake_build_setting_name_defines_all_length            11
+  #define fake_build_setting_name_defines_library_length        15
+  #define fake_build_setting_name_defines_program_length        15
   #define fake_build_setting_name_defines_shared_length         14
   #define fake_build_setting_name_defines_static_length         14
   #define fake_build_setting_name_flags_all_length              9
@@ -235,15 +265,22 @@ extern "C" {
   #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_major_prefix_length   20
   #define fake_build_setting_name_version_micro_length          13
+  #define fake_build_setting_name_version_micro_prefix_length   20
   #define fake_build_setting_name_version_minor_length          13
+  #define fake_build_setting_name_version_minor_prefix_length   20
+  #define fake_build_setting_name_version_nano_length           12
+  #define fake_build_setting_name_version_nano_prefix_length    19
   #define fake_build_setting_name_version_target_length         14
 
-  #define fake_build_setting_total 44
+  #define fake_build_setting_total 51
 
-  #define fake_build_setting_default_version "0"
+  #define fake_build_setting_default_version        "0"
+  #define fake_build_setting_default_version_prefix "."
 
-  #define fake_build_setting_default_version_length 1
+  #define fake_build_setting_default_version_length        1
+  #define fake_build_setting_default_version_prefix_length 1
 #endif // _di_fake_build_setting_t_
 
 #ifndef _di_fake_build_stage_t_
@@ -353,7 +390,6 @@ extern "C" {
   #define fake_build_parameter_library_name_suffix_shared ".so"
   #define fake_build_parameter_library_name_suffix_static ".a"
   #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_static             "-static"
   #define fake_build_parameter_library_shared_prefix      "-Wl,-soname,"
@@ -365,7 +401,6 @@ extern "C" {
   #define fake_build_parameter_library_name_suffix_shared_length 3
   #define fake_build_parameter_library_name_suffix_static_length 2
   #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_static_length             7
   #define fake_build_parameter_library_shared_prefix_length      12
index e206107..045a0cf 100644 (file)
@@ -695,7 +695,7 @@ extern "C" {
           &data_make->setting_make.parameter,
         };
 
-        *status = fll_fss_snatch_map_apart(data_make->buffer, settings.objects, settings.contents, settings_name, settings_length, 2, settings_value, 0);
+        *status = fll_fss_snatch_map_apart(data_make->buffer, settings.objects, settings.contents, settings_name, settings_length, 2, settings_value, 0, 0);
 
         if (F_status_is_error(*status)) {
           fll_error_print(main.error, F_status_set_fine(*status), "fll_fss_snatch_map_apart", F_true);
index 4d9529e..fb5bf9c 100644 (file)
@@ -5,7 +5,7 @@ project_name fake
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index ce60e3e..2434013 100644 (file)
@@ -2,32 +2,32 @@
 
 Settings Documentation:
   This describes intent and purposes of the build settings file settings.
+  The settings file is designed for very simple compilations that represent a single named program and/or a single named library.
   For specific details on the allowed formatting, see the settings.txt under the specifications folder.
 
   build_compiler\:
     Expects the name of the compiler, which generally should not be the path to the file, just the executable name.
-    Currently only GCC is truly supported.
-    All of the arguments assume the GCC, so if a non-GCC executable is provided supports the GCC argument structure, then that is by effect supported.
+    The programs "gcc" and "clang" are known to work.
     Many of the parameters in the settings file can be changed if using a non-GCC, but there is certain hard-coded functionality that may still need changing.
 
   build_indexer\:
     Exactly like build_compiler, except for the linker, aka indexer.
-    The default behavior is to support the GNU ar program.
-    As with build_compiler, anything linker that supports the "ar" program parameters is effectively supported.
+    The default behavior is to support the GNU "ar" program.
+    Similar to "build_compiler", any linker that supports the "ar" program parameters is effectively supported.
 
   build_language\:
-    The language to build with.
-    The only currently supported languages are: bash, c, and c++.
+    The programming language to build with.
+    The languages "c" and "c++" are supported (with "bash" as a consideration for support).
     The "bash" language is not currently implemented and needs some consideration because there is nothing to compile.
-    The "bash" language will likely build a set of individual scripts, and perhaps script dependencies, into a single bash script.
+    The "bash" language will likely build a set of individual scripts, and perhaps script dependencies, into a single Bash script.
 
   build_libraries\:
     A collection of libraries to be linked against.
-    The should contain the compiler specific parameter parts, such as the "-l" prefix.
-    The order of these may matter if GCC (or the linker via GCC) is order sensitive.
+    This should include the compiler specific parameter parts, such as the "-l" prefix in "-lc".
+    The order of these may matter if the compiler (such as GCC or a linker via GCC) is order sensitive.
 
   build_script\:
-    When "yes", the build process will build any scripts, such as bash script.
+    When "yes", the build process will build any scripts, such as a Bash script.
     This is currently not implemented.
 
   build_shared\:
@@ -35,26 +35,21 @@ Settings Documentation:
 
   build_sources_headers\:
     A collection of header files.
-    May include a relative sub-path to each individual header (such as "level_0/a.h level_0/b.h level_1/c.h".
-    The order of these may matter if GCC (or the linker via GCC) is order sensitive.
+    May include a relative sub-path to each individual header (such as: "level_0/a.h level_0/b.h level_1/c.h").
+    The order of these may matter if the compiler (such as GCC or a linker via GCC) is order sensitive.
 
   build_sources_library\:
     A collection of library related source files.
-    May include a relative sub-path to each individual header (such as "level_0/a.c level_0/b.c level_1/c.c".
-    The order of these may matter if GCC (or the linker via GCC) is order sensitive.
+    May include a relative sub-path to each individual source file (such as: "level_0/a.c level_0/b.c level_1/c.c").
+    The order of these may matter if the compiler (such as GCC or a linker via GCC) is order sensitive.
     These files are used when compiling the library.
 
   build_sources_program\:
     A collection of program related source files.
-    May include a relative sub-path to each individual header (such as "level_0/a.h level_0/b.h level_1/c.h".
-    The order of these may matter if GCC (or the linker via GCC) is order sensitive.
+    May include a relative sub-path to each individual source file (such as: "level_0/a.c level_0/b.c level_1/c.c").
+    The order of these may matter if the compiler (such as GCC or a linker via GCC) is order sensitive.
     These files are used when compiling the program.
 
-  build_sources_setting\:
-    A collection of settings files.
-    These are settings files used by the project and are simply copied over to the build directory.
-    Unless a pre-process script (or in theory post-process script) is configured to alter these, they are not modified.
-
   build_sources_script\:
     A collection of script files.
     These are settings files used by the project and are simply copied over to the build directory.
@@ -62,40 +57,73 @@ Settings Documentation:
     Unlike the "compile_language" setting "bash", this is not for built Bash script, but is instead for any valid scripting language (including Bash).
     These could be in any language.
 
+  build_sources_setting\:
+    A collection of settings files.
+    These are settings files used by the project and are simply copied over to the build directory.
+    Unless a pre-process script (or in theory post-process script) is configured to alter these, they are not modified.
+
   build_static\:
     When "yes", the build process will compile any source code for any supported language that supports static library linking.
 
   defines_all\:
     A collection of macro names.
+    This includes the any compiler specific parameters required by the "build_compiler", such as the "-D" used by gcc and clang.
     These will be appended to the compiler for compiled languages such as C and C++.
     These are applied to both shared and static builds.
 
+  defines_library\:
+    A collection of macro names.
+    This includes the any compiler specific parameters required by the "build_compiler", such as the "-D" used by gcc and clang.
+    These will be appended to the compiler for compiled languages such as C and C++.
+    These are applied to only library builds.
+
+  defines_program\:
+    A collection of macro names.
+    This includes the any compiler specific parameters required by the "build_compiler", such as the "-D" used by gcc and clang.
+    These will be appended to the compiler for compiled languages such as C and C++.
+    These are applied to only program builds.
+
   defines_shared\:
     A collection of macro names.
+    This includes the any compiler specific parameters required by the "build_compiler", such as the "-D" used by gcc and clang.
     These will be appended to the compiler for compiled languages such as C and C++.
     These are applied to only shared builds.
 
   defines_static\:
     A collection of macro names.
+    This includes the any compiler specific parameters required by the "build_compiler", such as the "-D" used by gcc and clang.
     These will be appended to the compiler for compiled languages such as C and C++.
     These are applied to only static builds.
 
   environment\:
-    A collection of environment names to pass from the callers environment into the environment of executed programs.
+    A collection of environment names to pass from the callers environment into the executed programs environment.
     For security and integrity reasons, all environment variables are removed when calling user-space programs, such as "gcc".
     There are times when someone desires that an environment variable be exposed to the user-space programs.
     Add them here and they will be available in the environment of all user-space programs executed.
 
   flags_all\:
-    A collection of any flag support by the "build_compiler", such as GCC.
+    A collection of any flag supported by the "build_compiler", such as gcc.
+    This includes the any compiler specific parameters to defined this, such as the "-f" used by gcc and clang.
     These are applied to both shared and static builds.
 
+  flags_library\:
+    A collection of any flag supported by the "build_compiler", such as gcc.
+    This includes the any compiler specific parameters to defined this, such as the "-f" used by gcc and clang.
+    These are applied when building a library.
+
+  flags_program\:
+    A collection of any flag supported by the "build_compiler", such as gcc.
+    This includes the any compiler specific parameters to defined this, such as the "-f" used by gcc and clang.
+    These are applied when building a program.
+
   flags_shared\:
-    A collection of any flag support by the "build_compiler", such as GCC.
+    A collection of any flag supported by the "build_compiler", such as gcc.
+    This includes the any compiler specific parameters to defined this, such as the "-f" used by gcc and clang.
     These are applied to only shared builds.
 
   flags_static\:
-    A collection of any flag support by the "build_compiler", such as GCC.
+    A collection of any flag supported by the "build_compiler", such as gcc.
+    This includes the any compiler specific parameters to defined this, such as the "-f" used by gcc and clang.
     These are applied to only static builds.
 
   modes\:
@@ -109,8 +137,15 @@ Settings Documentation:
 
   path_headers\:
     A sub-path in which headers are to be installed under.
-    This is primarily for the FLL project to build the "level_0", "level_1", etc.. headers without requiring that structure within the source.
+    For example, the FLL project might use the "level_0", "level_1", etc.. headers without requiring that structure within the source.
     A resulting build destination for a path_headers of "level_0" would be something like "build/includes/level_0/".
+    If "path_headers" is "level_0", "path_headers_preserve" is "yes", and "build_sources_headers" has "xxx/a.h yyy/zzz/b.h", then the headers would be at: "build/includes/level_0/xxx/a.h build/includes/level_0/yyy/zzz/b.h"
+
+  path_headers_preserve\:
+    When "yes" the relative directory structure in the source (as defined in "build_sources_headers") is preserved.
+    If the "build_sources_headers" has the header files "xxx/a.h yyy/zzz/b.h" and this is "yes", then the directories "xxx/" and "yyy/zzz/" are created and the files are stored within them.
+    If the "build_sources_headers" has the header files "xxx/a.h yyy/zzz/b.h" and this is "no", then the directories "xxx/" and "yyy/zzz/" are stripped before installing.
+    When this is "no" and the "build_sources_headers" has header files "xxx/a.h yyy/a.h", then one of the "a.h" files will be overwritten, depending on order they were supplied.
 
   path_language\:
     A sub-path in which to find the source files for the currently defined language.
@@ -143,11 +178,7 @@ Settings Documentation:
     When "yes", the sources path will be built using the sources path with the language, such as "sources/c/", ignoring "path_sources" completely.
     When "no", the default sources path structure is not used and instead "path_sources" is used.
     When the parameter -S/--sources is specified, such as "-S xxx", then when "yes" is used path would be "xxx/c/" and when "no" path would be "xxx/".
-
-  project_name\:
-    The name of the project.
-    If program sources are specified, then this will be used as the program name.
-    If library sources are specified, then this will be used in the library name, such as "libX.so" where "X" would be the "project_name" value.
+    The default behavior is "yes".
 
   process_post\:
     The filename (relative to the "data/build/" directory) of a script to execute after the "build" operation successfully completes.
@@ -163,16 +194,36 @@ Settings Documentation:
       Sources Path parameter, such as "-S X', whereas "X" is any valid argument associated with "-S".
       Work Path parameter, such as "-w X', whereas "X" is any valid argument associated with "-w".
 
+  process_pre\:
+    The filename (relative to the "data/build/" directory) of a script to execute before the "build" operation is executed.
+    A small subset of parameters from the main execution are passed to this script during execution as parameters (using short parameter codes)\:
+      Color context parameters, such as: "+l", "+n", and "+d".
+      Operation mode, such as: "build", "clean", "make", or "skeleton".
+      Verbosity parameters, such as: "+q", "+D", or "+V".
+      Define parameters, such as "-d X" or "-d Y", whereas "X" or "Y" are any valid argument associated with "-d".
+      Process parameter, such as "-p X", whereas "X" is any valid argument associated with "-p".
+      Settings parameter, such as "-s X', whereas "X" is any valid argument associated with "-s".
+      Build Path parameter, such as "-b X', whereas "X" is any valid argument associated with "-b".
+      Data Path parameter, such as "-D X', whereas "X" is any valid argument associated with "-D".
+      Sources Path parameter, such as "-S X', whereas "X" is any valid argument associated with "-S".
+      Work Path parameter, such as "-w X', whereas "X" is any valid argument associated with "-w".
+
+  project_name\:
+    The name of the project.
+    If program sources are specified, then this will be used as the program name.
+    If library sources are specified, then this will be used in the library name, such as "libX.so" where "X" would be the "project_name" value.
+
   search_exclusive\:
     When "yes", the search path during compile for shared libraries will only include shared library paths.
     When "no", the search path during compile time for shared libraries will include shared library paths followed by static library paths.
-    Setting this to "yes" helps prevent static libraries from ended up in shared libraries (very useful when bootstrapping a system).
+    Setting this to "yes" helps prevent static libraries from ending up in shared libraries (very useful when bootstrapping a system).
     Setting this to "no" allows for including static libraries if no shared libraries are found but static are.
     This does not alter search paths introduced automatically by the "build_compiler" or "build_indexer", so it is still possible for static libraries to end up even when this is set to "yes".
 
   search_shared\:
     When "yes", shared library paths are searched during compile.
-    Both this and search_static cannot be "no" at the same time.
+    Both this and "search_static" cannot be "no" at the same time.
+    The default behavior is "yes".
 
   search_shared\:
     When "yes", static library paths are searched during compile.
@@ -184,20 +235,57 @@ Settings Documentation:
     Anything else is currently untested but allowed.
     With a structure of "A.B.C", the major version would be the "A".
 
+  version_major_prefix\:
+    The version major prefix is the character used to designate the start of the major version.
+    This can zero or more characters.
+    The default is an empty string.
+    With a structure of "A.B.C", the major version prefix would be before the "A".
+    This is only added if "version_major" is not empty.
+
   version_minor\:
     The minor version number (or in theory any characters allowed in a filename).
     This should generally be a positive number or 0.
     Anything else is currently untested but allowed.
     With a structure of "A.B.C", the minor version would be the "B".
 
+  version_minor_prefix\:
+    The version minor prefix is the character used to separate the major from the minor.
+    This can zero or more characters.
+    The default prefix is an ASCII period character "." if and only if "version_minor" is not an empty string.
+    With a structure of "A.B.C", the minor version prefix would be the "." before the "B".
+    This is only added if "version_minor" is not empty.
+
   version_micro\:
     The micro version number (or in theory any characters allowed in a filename).
     This should generally be a positive number or 0.
     Anything else is currently untested but allowed.
     With a structure of "A.B.C", the micro version would be the "C".
 
+  version_micro_prefix\:
+    The version micro prefix is the character used to separate the minor from the micro.
+    This can zero or more characters.
+    The default prefix is an ASCII period character "." if and only if "version_micro" is not an empty string.
+    With a structure of "A.B.C", the micro version prefix would be the "." before the "C".
+    This is only added if "version_micro" is not empty.
+
+  version_nano\:
+    The nano version number (or in theory any characters allowed in a filename).
+    This should generally be a positive number or 0.
+    Anything else is currently untested but allowed.
+    With a structure of "A.B.C.D", the micro version prefix would be the "." before the "D".
+
+  version_nano_prefix\:
+    The version nano prefix is the character used to separate the micro from the nano.
+    This can zero or more characters.
+    The default prefix is an ASCII period character "." if and only if "version_nano" is not an empty string.
+    With a structure of "A.B.C.D", the minor version would be the "." before the "D".
+    This is only added if "version_nano" is not empty.
+
   version_target\:
     Designates which version should be used when building the shared library and creating the respective symbolic links.
+    Any version prefixes are used as defined.
+    The default target is "micro".
     When "major" is used, a shared library is generated with "-Wl,-soname,libX.A", whereas "X" is the "project_name" and "A" is the major version.
     When "minor" is used, a shared library is generated with "-Wl,-soname,libX.A.B", whereas "X" is the "project_name" and "A.B" is the major and minor versions, respectively.
     When "micro" is used, a shared library is generated with "-Wl,-soname,libX.A.B.C", whereas "X" is the "project_name" and "A.B.C" is the major, minor, and micro versions, respectively.
+    When "nano" is used, a shared library is generated with "-Wl,-soname,libX.A.B.C.D", whereas "X" is the "project_name" and "A.B.C.D" is the major, minor, micro, and nano versions, respectively.
index ef9895e..09e6818 100644 (file)
@@ -19,12 +19,14 @@ Settings Specification:
     "build_sources_headers": Must only contain any number of valid filenames.
     "build_sources_library": Must only contain any number of valid filenames.
     "build_sources_program": Must only contain any number of valid filenames.
-    "build_sources_setting": Must only contain any number of valid filenames.
     "build_sources_script": Must only contain any number of valid filenames.
+    "build_sources_setting": Must only contain any number of valid filenames.
     "build_static": Must only one of: "yes" or "no".
-    "defines_all": Must only contain any number of valid C/C++ macro names.
-    "defines_static": Must only contain any number of valid C/C++ macro names.
-    "defines_shared": Must only contain any number of valid C/C++ macro names.
+    "defines_all": Must only contain any number of valid macro names supported by the compiler specified in "build_compiler".
+    "defines_library": Must only contain any number of valid macro names supported by the compiler specified in "build_compiler".
+    "defines_program": Must only contain any number of valid macro names supported by the compiler specified in "build_compiler".
+    "defines_shared": Must only contain any number of valid macro names supported by the compiler specified in "build_compiler".
+    "defines_static": Must only contain any number of valid macro names supported by the compiler specified in "build_compiler".
     "environment": Environment variable names, case-sensitive, usually uppercase. May only contain characters allowed in an environment variable.
     "flags_all": Must only contain any number of parameters supported by the compiler specified in "build_compiler".
     "flags_library": Must only contain any number of parameters supported by the compiler specified in "build_compiler".
@@ -34,6 +36,7 @@ Settings Specification:
     "modes": Any valid word character, '-', or '+'.
     "modes_default": May only be a single complete Content word defined in "modes" Object.
     "path_headers": Must be a single valid path.
+    "path_headers_preserve": Must only be one of "yes" or "no".
     "path_language": Must be a single valid path.
     "path_library_script": Must be a single valid path.
     "path_library_shared": Must be a single valid path.
@@ -43,24 +46,29 @@ Settings Specification:
     "path_program_static": Must be a single valid path.
     "path_sources": Must only be a valid directory path or not specified.
     "path_standard": Must only one of: "yes" or "no".
-    "project_name": Must only contain characters allowed in a filename.
     "process_post": Must contain only a single valid filename.
     "process_pre": Must contain only a single valid filename.
+    "project_name": Must only contain characters allowed in a filename.
     "search_exclusive": Must only one of: "yes" or "no".
     "search_shared": Must only one of: "yes" or "no".
     "search_static": Must only one of: "yes" or "no".
-    "version_major": Must only be a single value containg valid filename characters.
-    "version_minor": Must only be a single value containg valid filename characters.
-    "version_micro": Must only be a single value containg valid filename characters.
-    "version_target": Must only be one of: "major", "minor", or "micro".
+    "version_major": Must only be a single value containing valid filename characters.
+    "version_major_prefix": Must be zero or more valid filename characters.
+    "version_minor": Must only be a single value containing valid filename characters.
+    "version_minor_prefix": Must be zero or more valid filename characters.
+    "version_micro": Must only be a single value containing valid filename characters.
+    "version_micro_prefix": Must be zero or more valid filename characters.
+    "version_nano": Must only be a single value containing valid filename characters.
+    "version_nano_prefix": Must be zero or more valid filename characters.
+    "version_target": Must only be one of: "major", "minor", "micro", or "nano".
 
   The following Object names support having a "-" and a "mode" name, such as "build_libraries-individual" for a mode called "individual"\:
     "build_libraries"
     "build_sources_headers"
     "build_sources_library"
     "build_sources_program"
-    "build_sources_setting"
     "build_sources_script"
+    "build_sources_setting"
     "defines_all"
     "defines_shared"
     "defines_static"
@@ -70,3 +78,7 @@ Settings Specification:
     "flags_program"
     "flags_shared"
     "flags_static"
+
+    TODO: look into adding all, except for "modes" and "modes_default".
+    TODO: some options will "replace" while others will "append".
+          those that "replace" will be single property ones, such as "build_compiler" or "version_major".
index 63320d7..896130a 100644 (file)
@@ -5,7 +5,7 @@ project_name firewall
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index a03b85d..8d363ca 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_basic_list_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 2aea34d..a31145d 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_basic_list_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 38da6ca..54656f6 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_basic_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index cb32cea..ada933b 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_basic_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index e32512a..cd8bb16 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_embedded_list_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 49cbcde..c70ac40 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_embedded_list_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index fda158b..cc53cf2 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_extended_list_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index e966b93..bd98b6d 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_extended_list_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 07679b9..7449e6a 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_extended_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index cef845d..19a8c29 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_extended_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 57a6c0c..fedacdd 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_identify
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index f94c9eb..91436eb 100644 (file)
@@ -5,7 +5,7 @@ project_name fss_status_code
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 0b3d820..a6b740a 100644 (file)
@@ -5,7 +5,7 @@ project_name iki_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 7a28fd3..cd821ad 100644 (file)
@@ -5,7 +5,7 @@ project_name iki_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment
 
index 106c86a..732705d 100644 (file)
@@ -5,7 +5,7 @@ project_name status_code
 version_major 0
 version_minor 5
 version_micro 4
-version_target major
+version_target micro
 
 environment