]> 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 b31ed83f1c7f5be6209feabb5a7f54c23024bff0..d4340ec5cb7894de77a83e37a8bf371b89f89673 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 60da0284e059cb4c1960da25e90542f5078f58a5..88141532fbc0a26913ceb99f572c60f0b8cb6464 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 3c327a0603654cf4952d9bf964698b8c2eb01648..1399c509fc03bce2aec26cf76af6f0c462e3b862 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 da8376733d245f63e63f0e83d3968811931a0f78..2dc47fadcedc5003e23cbd2801014ef63087de55 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 5819d137e7088633113e620c9e29c45280f57792..dbf83de253aac873677ab8be34b5fd68e97fd23f 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 d8210c98c506465dbedd1c74965bb6b9ff6086bd..3fe24fb3bca26f90ca744dbef51e78592149df06 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 cdcd09aeda026a8717bb6e4562ff3a68f36ba4d2..27722d85c557a8e82ba6335d074612199a04152a 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 e09e9c4ff19f5a2f1b97bd77531c5b4e315f5ed5..95b4dfe6284c54ba85599ccccca9cbb14495b8cb 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 a4a474046846a327e785b14215dbcea4f7908955..1a1678c3a4eb1d58886885fff2f495611344e90c 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 769ac4c0eb39c8b5df76d474a73d5078d94615be..f85fea32d57da80f31b9ed32eedc8848ef7bd159 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 0768814985716657417323f8959fbc8ec6884040..7ef969a474b0ae2e36ee3ab1d263b7b74f29f90d 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 5bfcaea09a2c2d1552e424bda886227541b5d3d5..16aae95f6082a3032ad373cf1be9ef6587602ede 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 b8d6fb3cf45c86a38d0edce8f33154b7a3b4ea32..56f22ad93182bcf262c76cf2a7fb3cacff7db358 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 d2f719a4dbd17d708f00f3b3bc096236577bbeea..297bf65507f226cb1d1d76d6106ad7e4e41bef0c 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 79fa433e5b45cd5d60d906c428c33d0afde4f3cd..1c103a24a4cbcfa06d3c778095a2a5001ed7825c 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 58dab1fc750053d2165307b391ed07ca9f8d9d62..cc1b833ae0a2a983b609ead369400cc8bc5a0550 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 1c938559b529cc72777297df1474321bb6c7677f..4bc11d24e81d12f402780039bab664ec2eb5ad0f 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 b283796ffd9ed9778271849c4891ca423729267c..1d2cc950083c7d48e6578c7f10e0784ea76292bb 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 b36e04af34b954436cf941f3e50e38d510807717..e601a572e9c769d9e1cc70e713b94518b491f10f 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 3525893c3035cf20dc553f2b403252bd716ea0e3..973b76fff9c10163ade84545de6dda6bb4cfd34d 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 e2c93b1a422537284b853df4fe835a32903cdcab..9de6fddd7aa5de4004280415b76bd30321586468 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 d9b31d1e8426adf4f61790bdf5ca67fcb8b4b3c4..119785c2faf47243185707adb707d5f9411a5d7f 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 755ffbcf8235be84479ec9aff454ae97a1d59a8e..6f4d8aea2d0eb7cd42d17aea84173d4717eddaf6 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 69ad0c410e947a40598f0f8d4fe100b615d2d581..6d336af7d0137f0a09399ff9a99613fc186ea3dc 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 6dde175b1956776b2099c62483654a9bddf15b2b..56193611939e12f8883c30fe19218ad5132d1b11 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 ab424775036394910b47fcb9d0a6d1598b5ec324..6a631ab8dc8dccd5f3c138c7818b1674af7b3bf3 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 d0f96306f3debc82722415e6854b89a0325dd82e..45c22782e2372964c9685dfcb9ef744b19d58b72 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 374681d0f9139da6cf911d720eb8c6e562ac989c..8b32453d2b58dbf14525262cb4fbac871ddb919d 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 7b31218664b94b0720848ea8be83e96e9c008edf..5ef106cd42cafcc2d67a12ac6c8008f755d6a298 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 25f1bad8cee6af9db024c8c25024ca80a612a290..c4708ef285adf75b2886d4a2b6411e4710d57b3f 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 56228b27622e0a81c03d82f204951543fe39598a..6b1d86c3af8ae56b8e78ffa6c592d62966a0a7b9 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 bc49ea5fb6743f103bd2f86eee4aade9f8329dd9..0741e9f33f429d16ce0eb80be7d966e6f478ee67 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 cd81f7a49a2171e72eaff571b1b04cffae2c1b50..6de5384a40820de1659b610d530e73225d7a70a0 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 b88c61799c7eeb47a19bd4c3571a384ca62fb86d..35248a04702e37d574f57e609eb8d7003b437545 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 5392704b7291147b6ff2b427a66e8016db48bd32..cfda9d365ac6f277b3f583ba22ff80bf9e3b1e03 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 cc6bd47e0a10766e0b4942227b3b284e546708e4..9b6c1d4cb1cbb08bdc98e44c8517f01173cfd774 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 926816243cb307f50ce6f40324d1b8708cb6b06c..55e942d10b4ae7856d611fc617325d0f7e47b2a1 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 a87697cbf7c374d32ab5af631cc11805298aa0bb..de5e07f4953bd843d7768e55438734012be6d0d5 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 5872f4c7cc0e2013e7d2948a25da0f32d1411cfa..03be9e8790b84b85ae03df9e538cfb2e49635b29 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 4636dda98fba341f06a11431cfb1f91a5c715c9c..2b627e38902728aaa931389fb686f4dfacd92c00 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 76590c6696bac4b3d2399a09c8bd4d67eb04cea9..9107aeff59e9cc41dbe04d5ae56c5b02143d8b56 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 eb38ede372f6108d504c49939e6d568ede28716e..a7c80ff39b6055b8deb92b03b0e433d55ad693a7 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 f21e37ee14a8088e79f61ebc7f72544886c3ab20..fb89d0ac222f9c9c54aaaa624153234a9790e3eb 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 4beff2ab2618d83128f1937b44cc3a6f022fde85..be6ad54184263abeb2eb5439a9f8e6f99eb2d0bf 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 b7bd80d7b0d9fd6f185cab5cc735e4ea670f87ba..7b91ce3a0894ad628d015189f7e2f565f78fe703 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 43e780e570010ec1f98ca98f09cf9ae29c390c52..f5b09c1d1b689bc43c7782a2c12b50243eaba97a 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 ef6d0e1177c5dee5e95e651b0a1596672e5fbace..88fbe4f6e57f6e39f0034258299530bf7522cba4 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 6727fffaf4935ff4715b8a0cc14c7d89dacc9f91..bcfb09f039ec63820b6c371b3e4231ec8d7309f9 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 1395c3849e8717e1fced0038fdd62e574c17bc2f..0448e2d208b1fb49bc306731fa257df3dff7137f 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 b26269626c9b5861120a6bfe5838278bfe8e5b2d..55a67dc1e32a4b58c0571d5b509ce5c2d7f60040 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 f4667b9ef43061aa5c34b9403bef58e86e1b3ea6..6bfe1aee0ca1b9866194f5a3428416a7b87bbe68 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 037d2b6e909042779f845ca681f0c5ff1df39dd1..97b272ecbe863f37a321d04457188baaa2174955 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 64d9eed9f002008799b025c68f81c9e2aca06698..587ee86dc5a214568aea45c45aa11fe063349581 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 efa52b341e54d9e373be31fdf6387e2a265899f3..1061c3b0546a865597d30608dbea7179bbda902f 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 b8ba3599d22731e7e11ce44ab4699ffa3525e9e2..85a8e41dbf8d0cac5a8ab49e5a854358c8d3f2b6 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 f373fec1a9537fb3499d5477952a09f5bbf8ac8b..265b63cb1b4573c8315094069461b52ae758de79 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 1db268745fb78da10f6c0bfe0d62001a60e5c3f6..1189fc9a4c67dfeb9ea653148b86a490b6b40da7 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 0d3cb59d8674c70887793858850468a9d7cdf840..90879d69f577c1466a0b5a9a3784c6f5aa27d7ec 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 9d3edd80a043e136175106f53b4da35ddac493e1..065ab6cfe9d65e429661f7b82278101ae472fb61 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 5eb0cc571d7eb5a1d5505c5e12d875c753ea2201..980b3227ede456ed26c75337449461d293c32973 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 568d9da5916b832ad3ab0bd9a399729c9b60a8b4..f3d2d9ff6bc2db994420bbd1f83e4db677a8299c 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 baa3b2ad6285a9a45b4bc9d8982ac9ae608709d1..18d5226648026cd1d2329e146612c1350556d688 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 e2061075278ed8e983b03ac61ad4ccb53dfd4948..045a0cf8dad3fc4c43cfbf8d74e71b6d68fdb2f5 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 4d9529e5d3c8e051ea22d080eb84d62a29927e3f..fb5bf9c66ea967416133358d0ac03fc5d4cb09f0 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 ce60e3e0f23281ea8f19c653605fc45535896089..24340131a0f6933adf5399ad4de351f619e62278 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 ef9895e1a5082a7c200aa3c672fd9f0de41b5aa1..09e6818b76657742372aa89f6b32afd0c7bc9e74 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 63320d7bd2c9eb605a0e8d5db68a1c5dd22a4545..896130a3866cc973b377f4061f359a022a7dbc23 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 a03b85da65c6f9c0092aefb9f247daa9ed082647..8d363ca94a87041c152c6f4392111fcc01ab70bb 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 2aea34d9effdde06e88d3043479e9522cf799f92..a31145deefddc3bfef17b6db08e6b5d2a59656c3 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 38da6cacf9868312aa5ba34fa3988d42c939d4f0..54656f67464e9a16975d0377c9c3ffea86d56c8f 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 cb32cea60227fd0077435824453b0a91b4bedce4..ada933b6231c3cb43dc57f25ca72b2375cf5dadd 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 e32512a01e4d1fe37a2fcd136c5038a37f60ee8c..cd8bb167a66212695ae86499e81679643bd2eb82 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 49cbcdecc32824aa0995a5876a9c9c4e6e6ff604..c70ac40a6f341ecc0852e08c8bef36415bed3a10 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 fda158b1aa60d1d9e7f7b486fa8e11c763f7aab3..cc53cf214df6c34bfeda208d8c8458119237c8ba 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 e966b93e97e453b20f7cc8e597f89f7ccc910544..bd98b6d6d53044c16940fa8289dbd5e55d6c01f3 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 07679b99e1e955e3ade7833a68531da5220077c4..7449e6adeb531daf641c4d0c914eb1e95473d593 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 cef845d926c021ed81e3933f7e59cf946b01d0d2..19a8c2973adb76d254e888712013845dd74205a3 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 57a6c0cdcbb6e08d9e64e878f9d84b74a98f79e2..fedacddf694d0360d80919e05fc079d48f0bc99b 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 f94c9eb7f9afba1d8a09aa0608eec131dd55013f..91436ebedbe84055a49780e75d8cdf26a25458c7 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 0b3d820f5a086fce6110f21b743be8932615bc38..a6b740a7b14e2dbea4284db178b63629e6641a8b 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 7a28fd3f84c0fea193f6070272ba9bbcf5cf343c..cd821adba27c97949735ba2318e9c9ed50b88ac6 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 106c86a7f00ba1a1990fed40daaee0129c63e055..732705dc1fc2f0d72649e19a5ed84660724fb5a7 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