]> Kevux Git Server - fll/commitdiff
Feature: Featureless Make must support both version_target and version_file.
authorKevin Day <thekevinday@gmail.com>
Sat, 26 Jun 2021 03:59:54 +0000 (22:59 -0500)
committerKevin Day <thekevinday@gmail.com>
Sat, 26 Jun 2021 03:59:54 +0000 (22:59 -0500)
This separates version_target into version_target and version_file.

Previously, they were one in the same and the recent design change of version_target exposed a problem with this.

Libraries are traditionally linked (as in dynamic linker and not as in the filesystem "ln") to the major version number (such as: "-Wl,-soname,libfake.so.0") and have a file path set to the micro version (such as: libfake.so.0.5.4).
When the version_target was set to "micro", this instead results in "-Wl,-soname,libfake.so.0.5.4" and "libfake.so.0.5.4".

By breaking this up, the linker and the file can be setup appropriately.
The problem here is that they are both related to linking but in two different contexts:
1) Dynamic Linker (_wl,-soname,...).
2) System Linker (ln -vs a b).

To disambiguate these, the version_target is now used to refer to the Dynamic Linker and the version_file is used with the file name in which the system linker is used to link files against.

The Featureless Linux Library used Major.Minor.Micro such that Major.Minor could represent stable versions (for even Minor numbers).
Set this new setting to have version_target set to "minor" instead of the traditional "major" in the appropriate settings files.

When not specified in the build settings file, the defaults must always be provided which are:
1) version_target = "major"
2) version_file = "micro"

This aligns the default behavior to align with traditional practices while manually setting the build settings for all FLL projects to use different settings.

The bootstrap.sh script has been updated to be consistent with this.
The bootstrap.sh has also been updated to include the version prefixes.

79 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/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/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 f374afbfa6bab0685795c6f6992d51758f275925..2edc21acd2fdf7861ef0b469a0a520aed5d9f299 100644 (file)
@@ -5,7 +5,8 @@ project_name fll_0
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 88141532fbc0a26913ceb99f572c60f0b8cb6464..e65d9162edef1c79ab8c8419dcdca385ccea1881 100644 (file)
@@ -5,7 +5,8 @@ project_name fll_1
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 1399c509fc03bce2aec26cf76af6f0c462e3b862..889d9f20a1426eb71ea73b2f9cdc56805e9e79b7 100644 (file)
@@ -5,7 +5,8 @@ project_name fll_2
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index e70f75e358c978aa0a422e7f5a6e16120a4f6e36..5effdf0786177887bf491c70f9796c122c34b1fb 100644 (file)
@@ -5,7 +5,8 @@ project_name fll
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index dbf83de253aac873677ab8be34b5fd68e97fd23f..766a14f3a9d7934e78123894be0da79d13f77f9d 100644 (file)
@@ -473,43 +473,44 @@ bootstrap_id() {
     "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;;
+    "version_file") echo -n 42;;
+    "version_major") echo -n 43;;
+    "version_major_prefix") echo -n 44;;
+    "version_micro") echo -n 45;;
+    "version_micro_prefix") echo -n 46;;
+    "version_minor") echo -n 47;;
+    "version_minor_prefix") echo -n 48;;
+    "version_nano") echo -n 49;;
+    "version_nano_prefix") echo -n 50;;
+    "version_target") echo -n 51;;
+
+    "build_libraries-$mode") echo -n 52;;
+    "build_sources_headers-$mode") echo -n 53;;
+    "build_sources_library-$mode") echo -n 54;;
+    "build_sources_program-$mode") echo -n 55;;
+    "build_sources_script-$mode") echo -n 56;;
+    "build_sources_setting-$mode") echo -n 57;;
+    "defines_all-$mode") echo -n 58;;
+    "defines_library-$mode") echo -n 59;;
+    "defines_program-$mode") echo -n 60;;
+    "defines_shared-$mode") echo -n 61;;
+    "defines_static-$mode") echo -n 62;;
+    "environment-$mode") echo -n 63;;
+    "flags_all-$mode") echo -n 64;;
+    "flags_library-$mode") echo -n 65;;
+    "flags_program-$mode") echo -n 66;;
+    "flags_shared-$mode") echo -n 67;;
+    "flags_static-$mode") echo -n 68;;
+
+    "has-version_major_prefix") echo -n 69;;
+    "has-version_micro_prefix") echo -n 70;;
+    "has-version_minor_prefix") echo -n 71;;
+    "has-version_nano_prefix") echo -n 72;;
+
+    "has-version_major_prefix-$mode") echo -n 73;;
+    "has-version_micro_prefix-$mode") echo -n 74;;
+    "has-version_minor_prefix-$mode") echo -n 75;;
+    "has-version_nano_prefix-$mode") echo -n 76;;
   esac
 }
 
@@ -600,6 +601,7 @@ bootstrap_operation_build() {
   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 file=${variables[$(bootstrap_id version_file)]}
   local target=${variables[$(bootstrap_id version_target)]}
   local compiler=${variables[$(bootstrap_id build_compiler)]}
   local indexer=${variables[$(bootstrap_id build_indexer)]}
@@ -631,7 +633,8 @@ bootstrap_operation_build() {
   local flags_static=${variables[$(bootstrap_id flags_static)]}
   local i=
   local n=
-  local version=
+  local version_file=
+  local version_target=
   local alt=$1
   local directory=
   local path_headers=${variables[$(bootstrap_id path_headers)]}
@@ -650,18 +653,32 @@ bootstrap_operation_build() {
     nano_prefix="."
   fi
 
+  if [[ $file == "" ]] ; then
+    file="micro"
+  fi
+
   if [[ $target == "" ]] ; then
-    target="micro"
+    target="major"
+  fi
+
+  if [[ $file == "major" ]] ; then
+    version_file="$major_prefix$major"
+  elif [[ $file == "minor" ]] ; then
+    version_file="$major_prefix$major$minor_prefix$minor"
+  elif [[ $file == "micro" ]] ; then
+    version_file="$major_prefix$major$minor_prefix$minor$micro_prefix$micro"
+  elif [[ $file == "nano" ]] ; then
+    version_file="$major_prefix$major$minor_prefix$minor$micro_prefix$micro$nano_prefix$nano"
   fi
 
   if [[ $target == "major" ]] ; then
-    version="$major_prefix$major"
+    version_target="$major_prefix$major"
   elif [[ $target == "minor" ]] ; then
-    version="$major_prefix$major$minor_prefix$minor"
+    version_target="$major_prefix$major$minor_prefix$minor"
   elif [[ $target == "micro" ]] ; then
-    version="$major_prefix$major$minor_prefix$minor$micro_prefix$micro"
+    version_target="$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"
+    version_target="$major_prefix$major$minor_prefix$minor$micro_prefix$micro$nano_prefix$nano"
   fi
 
   if [[ $sources_library == "" ]] ; then
@@ -933,17 +950,35 @@ 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.$version $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library $defines_all $defines_shared $defines_library
+        echo $compiler $sources -shared -Wl,-soname,lib$name.so.$version_target -o ${path_build}libraries/shared/lib$name.so.$version_file $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.$version $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library $defines_all $defines_shared $defines_library || failure=1
+      $compiler $sources -shared -Wl,-soname,lib$name.so.$version_target -o ${path_build}libraries/shared/lib$name.so.$version_file $arguments_shared $arguments_include $libraries $flags_all $flags_shared $flags_library $defines_all $defines_shared $defines_library || failure=1
 
       if [[ $failure == "" ]] ; then
-        if [[ $target != "major" ]] ; then
-          ln $verbose -sf lib$name.so.$version ${path_build}libraries/shared/lib$name.so.$major || failure=1
+        if [[ $file != "major" ]] ; then
+          if [[ $file == "minor" ]] ; then
+            ln $verbose -sf lib$name.so.$version_file ${path_build}libraries/shared/lib$name.so.$major_prefix$major || failure=1
+          else
+            ln $verbose -sf lib$name.so.$major_prefix$major$minor_prefix$minor ${path_build}libraries/shared/lib$name.so.$major_prefix$major || failure=1
+
+            if [[ $failure == "" ]] ; then
+              if [[ $file == "micro" ]] ; then
+                ln $verbose -sf lib$name.so.$version_file ${path_build}libraries/shared/lib$name.so.$major_prefix$major$minor_prefix$minor || failure=1
+              else
+                ln $verbose -sf lib$name.so.$major_prefix$major$minor_prefix$minor$micro_prefix$micro ${path_build}libraries/shared/lib$name.so.$major_prefix$major$minor_prefix$minor || failure=1
+
+                if [[ $failure == "" ]] ; then
+                  ln $verbose -sf lib$name.so.$version_file ${path_build}libraries/shared/lib$name.so.$major_prefix$major$minor_prefix$minor_prefix$minor$micro_prefix$micro || failure=1
+                fi
+              fi
+            fi
+          fi
         fi
 
-        ln $verbose -sf lib$name.so.$major ${path_build}libraries/shared/lib$name.so || failure=1
+        if [[ $failure == "" ]] ; then
+          ln $verbose -sf lib$name.so.$major_prefix$major ${path_build}libraries/shared/lib$name.so || failure=1
+        fi
       fi
     fi
 
index 3fe24fb3bca26f90ca744dbef51e78592149df06..4f4047dad0511b81ec253db33e634873afa8767a 100644 (file)
@@ -5,6 +5,7 @@ project_name f_account
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 27722d85c557a8e82ba6335d074612199a04152a..b20a07fdfcd2fca8e5ba431eaf4c1d5544cc21de 100644 (file)
@@ -5,6 +5,7 @@ project_name f_capability
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 95b4dfe6284c54ba85599ccccca9cbb14495b8cb..42d62e763b27e2876311ab1d5d543c667f309749 100644 (file)
@@ -5,6 +5,7 @@ project_name f_color
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 1a1678c3a4eb1d58886885fff2f495611344e90c..b33ae2398113fd0dc73868efd9feb0def5a40992 100644 (file)
@@ -5,6 +5,7 @@ project_name f_console
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index f85fea32d57da80f31b9ed32eedc8848ef7bd159..39d9f1bfc7e12be43756bb5061bc9018e1c24f16 100644 (file)
@@ -5,6 +5,7 @@ project_name f_control_group
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 7ef969a474b0ae2e36ee3ab1d263b7b74f29f90d..2d0eb39be9d9a028441cd4a9f0f746e6f8545d48 100644 (file)
@@ -5,6 +5,7 @@ project_name f_conversion
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 16aae95f6082a3032ad373cf1be9ef6587602ede..bc6edc546d60e8031afe858fcd67897e50f1620a 100644 (file)
@@ -5,6 +5,7 @@ project_name f_directory
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 56f22ad93182bcf262c76cf2a7fb3cacff7db358..368d40d0f57e137da47ba2a76bbea814b532aca2 100644 (file)
@@ -5,6 +5,7 @@ project_name f_environment
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 297bf65507f226cb1d1d76d6106ad7e4e41bef0c..2e46c92d01191f52e93bc799c8f95358ae462511 100644 (file)
@@ -5,6 +5,7 @@ project_name f_execute
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 1c103a24a4cbcfa06d3c778095a2a5001ed7825c..1ac45877d9fc06047c791befaec104a9912a00b6 100644 (file)
@@ -5,6 +5,7 @@ project_name f_file
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index cc1b833ae0a2a983b609ead369400cc8bc5a0550..8590a310b0d2d192ecb2afc1df07dd73ef8ddc43 100644 (file)
@@ -5,6 +5,7 @@ project_name f_fss
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 4bc11d24e81d12f402780039bab664ec2eb5ad0f..d094c2c429bc0dac63e7a764f9bf8ea1ee1ca396 100644 (file)
@@ -5,6 +5,7 @@ project_name f_iki
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 1d2cc950083c7d48e6578c7f10e0784ea76292bb..a6d3590ba74426fc5be5a1430e85a97f88c2cc22 100644 (file)
@@ -5,6 +5,7 @@ project_name f_limit
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index e601a572e9c769d9e1cc70e713b94518b491f10f..59b4eb989f02e737af38f652b126297e2f6f63c1 100644 (file)
@@ -5,6 +5,7 @@ project_name f_memory
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 973b76fff9c10163ade84545de6dda6bb4cfd34d..22ec9f86518ece077e827fb2a59739ca72fa3bf0 100644 (file)
@@ -5,6 +5,7 @@ project_name f_path
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 9de6fddd7aa5de4004280415b76bd30321586468..171e6896573a1ade410a47c9feee459e1b1220f9 100644 (file)
@@ -5,6 +5,7 @@ project_name f_pipe
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 119785c2faf47243185707adb707d5f9411a5d7f..d0454a6d4786ba362c872fcb176cf548a1f26772 100644 (file)
@@ -5,6 +5,7 @@ project_name f_print
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 6f4d8aea2d0eb7cd42d17aea84173d4717eddaf6..da3a95b835603f1eac1a61c531952f88c441e08a 100644 (file)
@@ -5,6 +5,7 @@ project_name f_serialize
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 6d336af7d0137f0a09399ff9a99613fc186ea3dc..9f063b02f711d48584bc03d6269d8fa4a34fd099 100644 (file)
@@ -5,6 +5,7 @@ project_name f_signal
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 56193611939e12f8883c30fe19218ad5132d1b11..9c10a5669db7bc566fc5bedd4e54756385a7ccb7 100644 (file)
@@ -5,6 +5,7 @@ project_name f_socket
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 6a631ab8dc8dccd5f3c138c7818b1674af7b3bf3..80e40c9ae57eb0be7d265a2aa7a4e2a3cd61a4e9 100644 (file)
@@ -5,6 +5,7 @@ project_name f_status
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 45c22782e2372964c9685dfcb9ef744b19d58b72..fad6b065247843931c2a09e74c8510bee10db9e8 100644 (file)
@@ -5,6 +5,7 @@ project_name f_string
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 8b32453d2b58dbf14525262cb4fbac871ddb919d..f193daff4f36edf6afb4f72879012e22f0749d84 100644 (file)
@@ -5,6 +5,7 @@ project_name f_thread
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 5ef106cd42cafcc2d67a12ac6c8008f755d6a298..206728bb0695a2e121ae210ef122cf53ab779745 100644 (file)
@@ -5,6 +5,7 @@ project_name f_type
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index c4708ef285adf75b2886d4a2b6411e4710d57b3f..8f4629e8b88c6758a03bbafed88d55b2aba40b35 100644 (file)
@@ -5,6 +5,7 @@ project_name f_type_array
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index ccc8bd3232baaacf73a8991aae8480d808d7277c..d704b73c75c6d808b415ed4835088df9e576ff1d 100644 (file)
@@ -5,6 +5,7 @@ project_name f_utf
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 0741e9f33f429d16ce0eb80be7d966e6f478ee67..4c420ca584a58f935588f29328b2a2d1beb20278 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_console
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 6de5384a40820de1659b610d530e73225d7a70a0..3e7566b5555440b5437887f6d83cc8b807e12fa1 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_control_group
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 35248a04702e37d574f57e609eb8d7003b437545..09af0fd39e4e63cbec90a257fd3fc24ba184688b 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_conversion
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index cfda9d365ac6f277b3f583ba22ff80bf9e3b1e03..e0f3dc94d2d96cc8453c516a5d71c846ef630dee 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_directory
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 9b6c1d4cb1cbb08bdc98e44c8517f01173cfd774..3a55d0a179b0040a353830516b9550913a0071d8 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_environment
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 55e942d10b4ae7856d611fc617325d0f7e47b2a1..e310b9ccf9f30ca6a4fa1a1b4d3199593adc3690 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_execute
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index de5e07f4953bd843d7768e55438734012be6d0d5..70ea49d3a1a0172e62f004ebb7df0f638927aff4 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_fss
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 03be9e8790b84b85ae03df9e538cfb2e49635b29..84c38797e596fc0e7fb308c971460a106fec85b4 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_iki
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 2b627e38902728aaa931389fb686f4dfacd92c00..50e10a8efb80d6a8a21aab0586b84ea600388ed6 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_print
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 9107aeff59e9cc41dbe04d5ae56c5b02143d8b56..5098d74e7af9a76ed9015c17ecee8e1af7a23f4a 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_iki
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index a7c80ff39b6055b8deb92b03b0e433d55ad693a7..345d9cb66739712afe5ed978344cc3657e4068c5 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_status
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index fb89d0ac222f9c9c54aaaa624153234a9790e3eb..b29c36a894cfafa61c1c9779058935650b34079f 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_string
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index be6ad54184263abeb2eb5439a9f8e6f99eb2d0bf..f2047f9a81efa28b70dc2d55cd72eb25b6515992 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_utf
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 7b91ce3a0894ad628d015189f7e2f565f78fe703..9605e81861f358c6b582a5e04e5c755d60acb3ba 100644 (file)
@@ -5,6 +5,7 @@ project_name fl_utf_file
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index f5b09c1d1b689bc43c7782a2c12b50243eaba97a..4c13dc3c037190582ad977842ecb18abbb2b32f4 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_control_group
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 88fbe4f6e57f6e39f0034258299530bf7522cba4..885241919b06c802b348168aaddb681166105e08 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_error
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index bcfb09f039ec63820b6c371b3e4231ec8d7309f9..b3661fa02c28b16f1d0af808576e3143ba7e8bf4 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_execute
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 0448e2d208b1fb49bc306731fa257df3dff7137f..a84b15e54684d3b3aa7e08b7adb6722bffd75778 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_file
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 97b272ecbe863f37a321d04457188baaa2174955..995afefaa588cb80d6fe387cbf6e36b3e2772acb 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_fss
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 587ee86dc5a214568aea45c45aa11fe063349581..b03dbe5db2669eb8bb7ec0aa05fce245d8d4e86a 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_iki
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 1061c3b0546a865597d30608dbea7179bbda902f..d6be4a2b5d1627c83ac500be419d34098c3a28ed 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_path
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 85a8e41dbf8d0cac5a8ab49e5a854358c8d3f2b6..c2a88e78ae45b9402c67a86f249376f9acb72ccd 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_program
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 265b63cb1b4573c8315094069461b52ae758de79..f01ca99f1a61ecd330fc8225963ca615aa86eedf 100644 (file)
@@ -5,6 +5,7 @@ project_name fll_status
 version_major 0
 version_minor 5
 version_micro 4
+version_file minor
 version_target micro
 
 environment
index 1189fc9a4c67dfeb9ea653148b86a490b6b40da7..5b68c1b9195832bf330ed906f71cd74e0d9c2d49 100644 (file)
@@ -5,7 +5,8 @@ project_name byte_dump
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 90879d69f577c1466a0b5a9a3784c6f5aa27d7ec..b971b4fc1f4b9427070be78ef22e60e057cbbafd 100644 (file)
@@ -5,7 +5,8 @@ project_name control
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 065ab6cfe9d65e429661f7b82278101ae472fb61..7ab6a1054e35b2d0b3c10d6cd914ecfd5b538633 100644 (file)
@@ -5,7 +5,8 @@ project_name controller
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index d90a6e0d84c0bd2d677db656cfb381b7231c8305..0a94f185d4fe6b88d28cfdd3a679821fd665b4a5 100644 (file)
@@ -1020,21 +1020,30 @@ extern "C" {
       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_file == fake_build_version_type_major) {
+        parameter_file_path_length += parameter_file_name_major_length;
+      }
+      else if (data_build.setting.version_file == fake_build_version_type_minor) {
+        parameter_file_path_length += parameter_file_name_minor_length;
+      }
+      else if (data_build.setting.version_file == fake_build_version_type_micro) {
+        parameter_file_path_length += parameter_file_name_micro_length;
+      }
+      else if (data_build.setting.version_file == fake_build_version_type_nano) {
+        parameter_file_path_length += parameter_file_name_nano_length;
+      }
+
       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];
@@ -1043,21 +1052,30 @@ extern "C" {
       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_file == fake_build_version_type_major) {
+        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_file == fake_build_version_type_minor) {
+        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_file == fake_build_version_type_micro) {
+        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_file == fake_build_version_type_nano) {
+        memcpy(parameter_file_path + main.path_build_libraries_shared.used, parameter_file_name_nano, parameter_file_name_nano_length);
+      }
+
       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;
@@ -1108,24 +1126,14 @@ extern "C" {
       }
     }
 
-    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;
+    if (parameter_file_name_major_length) {
 
-      char *link_target = 0;
-      char parameter_file_path[parameter_file_path_length + 1];
+      f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_length;
 
-      if (data_build.setting.version_target == fake_build_version_type_minor) {
-        link_target = parameter_file_name_minor;
-      }
-      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;
-      }
+      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_major, parameter_file_name_major_length);
+      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;
 
@@ -1135,10 +1143,10 @@ extern "C" {
         return 0;
       }
 
-      *status = f_file_link(link_target, 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 '%s'.%c", parameter_file_path, link_target, 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) {
@@ -1147,20 +1155,20 @@ extern "C" {
           return 0;
         }
 
-        fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, link_target, "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;
       }
     }
 
-    if (F_status_is_error_not(*status) && parameter_file_name_major_length) {
+    if (data_build.setting.version_file != 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_length;
+      f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_major_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);
+      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;
 
@@ -1170,10 +1178,10 @@ extern "C" {
         return 0;
       }
 
-      *status = f_file_link(parameter_file_name_major, parameter_file_path);
+      *status = f_file_link(parameter_file_name_minor, 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_major, f_string_eol_s[0]);
+        fprintf(main.output.stream, "Linked file '%s' to '%s'.%c", parameter_file_path, parameter_file_name_minor, f_string_eol_s[0]);
       }
       else if (F_status_is_error(*status)) {
         if (F_status_set_fine(*status) == F_file_found) {
@@ -1182,10 +1190,80 @@ extern "C" {
           return 0;
         }
 
-        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);
+        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);
 
         return 0;
       }
+
+      if (data_build.setting.version_file != fake_build_version_type_minor && parameter_file_name_minor_length) {
+
+        f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_minor_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_minor, parameter_file_name_minor_length);
+
+        parameter_file_path[parameter_file_path_length] = 0;
+
+        if (fake_signal_received(main)) {
+          *status = F_status_set_error(F_signal);
+
+          return 0;
+        }
+
+        *status = f_file_link(parameter_file_name_micro, 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]);
+        }
+        else if (F_status_is_error(*status)) {
+          if (F_status_set_fine(*status) == F_file_found) {
+            fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_path, "link", fll_error_file_type_file);
+
+            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);
+
+          return 0;
+        }
+
+        if (data_build.setting.version_file != fake_build_version_type_micro && parameter_file_name_micro_length) {
+
+          f_array_length_t parameter_file_path_length = main.path_build_libraries_shared.used + parameter_file_name_micro_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_micro, parameter_file_name_micro_length);
+
+          parameter_file_path[parameter_file_path_length] = 0;
+
+          if (fake_signal_received(main)) {
+            *status = F_status_set_error(F_signal);
+
+            return 0;
+          }
+
+          *status = f_file_link(parameter_file_name_nano, 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_nano, f_string_eol_s[0]);
+          }
+          else if (F_status_is_error(*status)) {
+            if (F_status_set_fine(*status) == F_file_found) {
+              fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_path, "link", fll_error_file_type_file);
+
+              return 0;
+            }
+
+            fll_error_file_print(main.error, F_status_set_fine(*status), "f_file_link", F_true, parameter_file_name_nano, "link", fll_error_file_type_file);
+
+            return 0;
+          }
+        }
+      }
     }
 
     fake_build_touch(main, file_stage, status);
@@ -1537,6 +1615,7 @@ extern "C" {
     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_file = 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;
@@ -1590,6 +1669,7 @@ extern "C" {
       fake_build_setting_name_search_exclusive,
       fake_build_setting_name_search_shared,
       fake_build_setting_name_search_static,
+      fake_build_setting_name_version_file,
       fake_build_setting_name_version_major,
       fake_build_setting_name_version_major_prefix,
       fake_build_setting_name_version_micro,
@@ -1644,6 +1724,7 @@ extern "C" {
       fake_build_setting_name_search_exclusive_length,
       fake_build_setting_name_search_shared_length,
       fake_build_setting_name_search_static_length,
+      fake_build_setting_name_version_file_length,
       fake_build_setting_name_version_major_length,
       fake_build_setting_name_version_major_prefix_length,
       fake_build_setting_name_version_micro_length,
@@ -1698,6 +1779,7 @@ extern "C" {
       &search_exclusive,
       &search_shared,
       &search_static,
+      &version_file,
       &version_major,
       &version_major_prefix,
       &version_micro,
@@ -1761,6 +1843,7 @@ extern "C" {
       F_false,
       F_false,
       F_false,
+      F_false,
     };
 
     f_string_t function = "fll_fss_snatch_apart";
@@ -1917,6 +2000,7 @@ extern "C" {
         fake_build_setting_name_search_exclusive,
         fake_build_setting_name_search_shared,
         fake_build_setting_name_search_static,
+        fake_build_setting_name_version_file,
         fake_build_setting_name_version_major,
         fake_build_setting_name_version_major_prefix,
         fake_build_setting_name_version_micro,
@@ -1952,6 +2036,7 @@ extern "C" {
         &search_exclusive,
         &search_shared,
         &search_static,
+        &version_file,
         &version_major,
         &version_major_prefix,
         &version_micro,
@@ -2013,6 +2098,7 @@ extern "C" {
         0,
         0,
         0,
+        0,
         &setting->version_major,
         &setting->version_major_prefix,
         &setting->version_micro,
@@ -2053,6 +2139,7 @@ extern "C" {
         0,
         0,
         0,
+        &setting->version_file,
         0,
         0,
         0,
@@ -2064,6 +2151,78 @@ extern "C" {
         &setting->version_target,
       };
 
+      const uint8_t settings_single_version_default[] = {
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        fake_build_version_type_micro,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        fake_build_version_type_major,
+      };
+
+      const char *settings_single_version_default_name[] = {
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        fake_build_version_micro,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        fake_build_version_major,
+      };
+
       // 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,
@@ -2089,6 +2248,7 @@ extern "C" {
         1,
         1,
         1,
+        5,
         3,
         3,
         3,
@@ -2100,7 +2260,7 @@ extern "C" {
         5,
       };
 
-      for (f_array_length_t i = 0; i < 32; ++i) {
+      for (f_array_length_t i = 0; i < 33; ++i) {
 
         if (!settings_single_source[i]->used) continue;
 
@@ -2191,7 +2351,7 @@ extern "C" {
             *settings_single_version[i] = fake_build_version_type_nano;
           }
           else {
-            *settings_single_version[i] = fake_build_version_type_major;
+            *settings_single_version[i] = settings_single_version_default[i];
 
             if (main.error.verbosity == f_console_verbosity_verbose) {
               fprintf(main.output.stream, "%c", f_string_eol_s[0]);
@@ -2208,7 +2368,7 @@ extern "C" {
               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.notable, "%s", settings_single_version_default_name[i]);
               f_color_print(main.output.stream, main.context.set.warning, "'.");
               fprintf(main.output.stream, "%c", f_string_eol_s[0]);
             }
@@ -2243,6 +2403,40 @@ extern "C" {
         }
       } // for
 
+      if (F_status_is_error_not(*status)) {
+        if (!setting->version_file) {
+          setting->version_file = fake_build_version_type_micro;
+
+          if (main.error.verbosity == f_console_verbosity_verbose) {
+            fprintf(main.output.stream, "%c", f_string_eol_s[0]);
+            f_color_print(main.output.stream, main.context.set.warning, "%sthe setting '", fll_error_print_warning);
+            f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_setting_name_version_file);
+            f_color_print(main.output.stream, main.context.set.warning, "' in the file '");
+            f_color_print(main.output.stream, main.context.set.notable, "%s", path_file);
+            f_color_print(main.output.stream, main.context.set.warning, "' is required, defaulting to '");
+            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, "'.");
+            fprintf(main.output.stream, "%c", f_string_eol_s[0]);
+          }
+        }
+
+        if (!setting->version_target) {
+          setting->version_target = fake_build_version_type_major;
+
+          if (main.error.verbosity == f_console_verbosity_verbose) {
+            fprintf(main.output.stream, "%c", f_string_eol_s[0]);
+            f_color_print(main.output.stream, main.context.set.warning, "%sthe setting '", fll_error_print_warning);
+            f_color_print(main.output.stream, main.context.set.notable, "%s", fake_build_setting_name_version_target);
+            f_color_print(main.output.stream, main.context.set.warning, "' in the file '");
+            f_color_print(main.output.stream, main.context.set.notable, "%s", path_file);
+            f_color_print(main.output.stream, main.context.set.warning, "' is required, 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, "'.");
+            fprintf(main.output.stream, "%c", f_string_eol_s[0]);
+          }
+        }
+      }
+
       // 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.
       if (F_status_is_error_not(*status)) {
@@ -2261,10 +2455,10 @@ extern "C" {
         };
 
         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
+          settings_matches[44], // version_major_prefix
+          settings_matches[46], // version_minor_prefix
+          settings_matches[48], // version_micro_prefix
+          settings_matches[50], // version_nano_prefix
         };
 
         const char *name_target[] = {
@@ -2281,7 +2475,20 @@ extern "C" {
           fake_build_setting_name_version_nano,
         };
 
-        for (f_array_length_t i = 0; i < 4; ++i) {
+        const char *setting_name[] = {
+          fake_build_setting_name_version_file,
+          fake_build_setting_name_version_target,
+        };
+
+        const uint8_t setting_target[] = {
+          setting->version_file,
+          setting->version_target,
+        };
+
+        f_array_length_t i = 0;
+        f_array_length_t j = 0;
+
+        for (; i < 4; ++i) {
 
           if (version[i]->used) {
             if (!has_prefix_object[i]) {
@@ -2298,20 +2505,26 @@ extern "C" {
           else {
             prefix[i]->used = 0;
 
-            if (setting->version_target && i + 1 <= setting->version_target) {
-              if (main.error.verbosity != f_console_verbosity_quiet) {
-                fprintf(main.error.to.stream, "%c", f_string_eol_s[0]);
-                f_color_print(main.error.to.stream, main.context.set.error, "%sWhen the version target is set to '", fll_error_print_error);
-                f_color_print(main.error.to.stream, main.context.set.notable, "%s", name_target[setting->version_target - 1]);
-                f_color_print(main.error.to.stream, main.context.set.error, "', then the '");
-                f_color_print(main.error.to.stream, main.context.set.notable, "%s", name_object[i]);
-                f_color_print(main.error.to.stream, main.context.set.error, "' Object must have Content.");
-                fprintf(main.error.to.stream, "%c", f_string_eol_s[0]);
+            for (j = 0; j < 2; ++j) {
+              if (setting_target[j] && i + 1 <= setting_target[j]) {
+                if (main.error.verbosity != f_console_verbosity_quiet) {
+                  fprintf(main.error.to.stream, "%c", f_string_eol_s[0]);
+                  f_color_print(main.error.to.stream, main.context.set.error, "%sWhen the '", fll_error_print_error);
+                  f_color_print(main.error.to.stream, main.context.set.notable, "%s", setting_name[j]);
+                  f_color_print(main.error.to.stream, main.context.set.error, "' is set to '");
+                  f_color_print(main.error.to.stream, main.context.set.notable, "%s", name_target[setting_target[j] - 1]);
+                  f_color_print(main.error.to.stream, main.context.set.error, "', then the '");
+                  f_color_print(main.error.to.stream, main.context.set.notable, "%s", name_object[i]);
+                  f_color_print(main.error.to.stream, main.context.set.error, "' Object must have Content.");
+                  fprintf(main.error.to.stream, "%c", f_string_eol_s[0]);
+                }
+
+                *status = F_status_set_error(F_failure);
+                break;
               }
+            } // for
 
-              *status = F_status_set_error(F_failure);
-              break;
-            }
+            if (F_status_is_error(*status)) break;
           }
         } // for
       }
@@ -2340,6 +2553,7 @@ extern "C" {
     macro_f_string_dynamics_t_delete_simple(search_exclusive);
     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_file);
     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);
index 18d5226648026cd1d2329e146612c1350556d688..73ae703392da2d474bd145dc9abb00eeb9971613 100644 (file)
@@ -16,6 +16,7 @@ extern "C" {
   typedef struct {
     uint8_t build_language;
 
+    uint8_t version_file;
     uint8_t version_target;
 
     bool build_script;
@@ -76,6 +77,7 @@ extern "C" {
   #define fake_build_setting_t_initialize { \
     0, \
     0, \
+    0, \
     F_true, \
     F_true, \
     F_true, \
@@ -212,6 +214,7 @@ extern "C" {
   #define fake_build_setting_name_search_exclusive       "search_exclusive"
   #define fake_build_setting_name_search_shared          "search_shared"
   #define fake_build_setting_name_search_static          "search_static"
+  #define fake_build_setting_name_version_file           "version_file"
   #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"
@@ -264,6 +267,7 @@ extern "C" {
   #define fake_build_setting_name_search_exclusive_length       16
   #define fake_build_setting_name_search_shared_length          13
   #define fake_build_setting_name_search_static_length          13
+  #define fake_build_setting_name_version_file_length           12
   #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
@@ -274,7 +278,7 @@ extern "C" {
   #define fake_build_setting_name_version_nano_prefix_length    19
   #define fake_build_setting_name_version_target_length         14
 
-  #define fake_build_setting_total 51
+  #define fake_build_setting_total 52
 
   #define fake_build_setting_default_version        "0"
   #define fake_build_setting_default_version_prefix "."
index b1a2b5f0a9d93836413709d1ffd0b6b6fd1a48ea..e2ec44f51cb94278d7cd797d1904340c5d4b0092 100644 (file)
@@ -1592,20 +1592,23 @@ extern "C" {
     {
       const f_string_t uint8_name[] = {
         fake_build_setting_name_build_language,
+        fake_build_setting_name_version_file,
         fake_build_setting_name_version_target,
       };
 
       const f_array_length_t uint8_length[] = {
         fake_build_setting_name_build_language_length,
+        fake_build_setting_name_version_file_length,
         fake_build_setting_name_version_target_length,
       };
 
       const uint8_t uint8_value[] = {
         data_make->setting_build.build_language,
+        data_make->setting_build.version_file,
         data_make->setting_build.version_target,
       };
 
-      for (uint8_t i = 0; i < 2; ++i) {
+      for (uint8_t i = 0; i < 3; ++i) {
 
         status = fl_string_dynamic_partial_compare_string(uint8_name[i], data_make->buffer, uint8_length[i], range_name);
 
index fb5bf9c66ea967416133358d0ac03fc5d4cb09f0..814d16d72d5e2eccc75dba06c6af34d9b79c6783 100644 (file)
@@ -5,7 +5,8 @@ project_name fake
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 24340131a0f6933adf5399ad4de351f619e62278..e1779cc96788a0ccba74d37483b64f91e2a55589 100644 (file)
@@ -229,6 +229,17 @@ Settings Documentation:
     When "yes", static library paths are searched during compile.
     Both this and search_shared cannot be "no" at the same time.
 
+  version_file\:
+    Designates which version should be used when building the symbolic links.
+    Any version prefixes are used as defined.
+    A Symbolic link is created against this created file such that "libX.so" is a link to "libX.so.A".
+    For all files other than when file is "major", another symbolic link is created against this such that "libX.so.A" is a link to "libX.so.A.X" such that X is the respective "B", "B.C', or "B.C.D" as described below.
+    The default file is "major".
+    When "major" is used, the file created is "libX.so.A", whereas "X" is the "project_name" and "A" is the major version.
+    When "minor" is used, the file created is "libX.so.A.B", whereas "X" is the "project_name" and "A.B" is the major and minor versions, respectively.
+    When "micro" is used, the file created is "libX.so.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, the file created is "libX.so.A.B.C.D", whereas "X" is the "project_name" and "A.B.C.D" is the major, minor, micro, and nano versions, respectively.
+
   version_major\:
     The major version number (or in theory any characters allowed in a filename).
     This should generally be a positive number or 0.
@@ -282,10 +293,10 @@ Settings Documentation:
     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.
+    Designates which version should be used when linking the shared library.
     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.
+    When "major" is used, a shared library is generated with "-Wl,-soname,libX.so.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.so.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.so.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.so.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 09e6818b76657742372aa89f6b32afd0c7bc9e74..e116bc6ddf4313870c32277788c25ac95b709af9 100644 (file)
@@ -52,6 +52,7 @@ Settings Specification:
     "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_file": Must only be one of: "major", "minor", "micro", or "nano".
     "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.
index 896130a3866cc973b377f4061f359a022a7dbc23..ba2265051e2b57e493f835638c4332f75c7ad77b 100644 (file)
@@ -5,7 +5,8 @@ project_name firewall
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 8d363ca94a87041c152c6f4392111fcc01ab70bb..e9f92be61b50ef4f4129089d9e4381ed0b4677c4 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_basic_list_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index a31145deefddc3bfef17b6db08e6b5d2a59656c3..51ecd889fe22bfcdfc88c16423b4ebfbfa4b9a3e 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_basic_list_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 54656f67464e9a16975d0377c9c3ffea86d56c8f..671faf8b071c9ae302a7c1b1e09bb262e2a71704 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_basic_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index ada933b6231c3cb43dc57f25ca72b2375cf5dadd..7841ca7bc2e55d8ce9a2a8f1298baf5472b1c74b 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_basic_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index cd8bb167a66212695ae86499e81679643bd2eb82..18f5340563e65e0a1a35f879c7b096ae9ba3af25 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_embedded_list_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index c70ac40a6f341ecc0852e08c8bef36415bed3a10..2f74e4ef161be3cf017051dff1d85b76ffab44f2 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_embedded_list_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index cc53cf214df6c34bfeda208d8c8458119237c8ba..60efc43641e5a2f0c28c8fb79cecf5a858f24b89 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_extended_list_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index bd98b6d6d53044c16940fa8289dbd5e55d6c01f3..7b1bf9fbd9819450e1328d718ce3360181d5fbc8 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_extended_list_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 7449e6adeb531daf641c4d0c914eb1e95473d593..19227283252cc4d6b261e0b23cf376fd92b6e490 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_extended_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 19a8c2973adb76d254e888712013845dd74205a3..197722224c441f88dc3019c05d2828d978a5a4de 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_extended_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index fedacddf694d0360d80919e05fc079d48f0bc99b..2712d63941fa3f5b4dc7300ae0c9bd214fb688da 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_identify
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 91436ebedbe84055a49780e75d8cdf26a25458c7..40ae4124798f4c4f019f36ed84e7ee46a28b4aa3 100644 (file)
@@ -5,7 +5,8 @@ project_name fss_status_code
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index a6b740a7b14e2dbea4284db178b63629e6641a8b..1acf2a63d23677f68663b53144b204e402ec4d1c 100644 (file)
@@ -5,7 +5,8 @@ project_name iki_read
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index cd821adba27c97949735ba2318e9c9ed50b88ac6..1340fa20ac98e8ab103a1e37197a89bbd5867a36 100644 (file)
@@ -5,7 +5,8 @@ project_name iki_write
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment
 
index 732705dc1fc2f0d72649e19a5ed84660724fb5a7..d092a28b926bad0fbde78ede77a78d74cf9ddb1f 100644 (file)
@@ -5,7 +5,8 @@ project_name status_code
 version_major 0
 version_minor 5
 version_micro 4
-version_target micro
+version_file micro
+version_target minor
 
 environment