]> Kevux Git Server - fll/commitdiff
Feature: add 'dependency' generation to package.sh and update all dependencies
authorKevin Day <thekevinday@gmail.com>
Mon, 2 Sep 2019 00:21:40 +0000 (19:21 -0500)
committerKevin Day <thekevinday@gmail.com>
Mon, 2 Sep 2019 00:21:40 +0000 (19:21 -0500)
This will help ensure that dependencies will be accurate and less error prone (so long as the script is run after making changes to any projects).

Dependencies are processed from the projects individual data/build/dependencies file.
The order of the dependencies does matter and is processed from top to bottom.
The 4 core dependencies must be first if they are depended on (and in this order: f_type, f_status, f_memory, and f_string).

The dependency generation for individual projects will generate the libraries to link against if a given project has any library source files.
Linking is done in highest level to lowest level to help ensure no linking errors happen.

The dependency generation for level projects and monolithic project are done based on the library and header sources.
All files specified in the build_sources_library and build_sources_headers are generated.

This script has been run and the dependency updates generated by this script are included in this commit.

50 files changed:
build/level_0/settings
build/level_1/settings
build/level_2/settings
build/monolithic/settings
build/scripts/package.sh
level_0/f_colors/data/build/settings
level_0/f_console/data/build/settings
level_0/f_conversion/data/build/settings
level_0/f_fss/data/build/settings
level_0/f_print/data/build/settings
level_0/f_serialized/data/build/settings
level_0/f_string/data/build/settings
level_0/f_utf/data/build/settings
level_1/fl_colors/data/build/dependencies
level_1/fl_colors/data/build/settings
level_1/fl_console/data/build/dependencies
level_1/fl_console/data/build/settings
level_1/fl_directory/data/build/dependencies
level_1/fl_file/data/build/dependencies
level_1/fl_file/data/build/settings
level_1/fl_fss/data/build/dependencies
level_1/fl_fss/data/build/settings
level_1/fl_program/data/build/settings
level_1/fl_serialized/data/build/dependencies
level_1/fl_serialized/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_2/fll_colors/data/build/dependencies
level_2/fll_colors/data/build/settings
level_2/fll_execute/data/build/dependencies
level_2/fll_fss/data/build/dependencies
level_2/fll_fss/data/build/settings
level_2/fll_status/data/build/dependencies
level_2/fll_status/data/build/settings
level_3/firewall/data/build/dependencies
level_3/firewall/data/build/settings
level_3/fss_basic_list_read/data/build/dependencies
level_3/fss_basic_list_read/data/build/settings
level_3/fss_basic_list_write/data/build/dependencies
level_3/fss_basic_list_write/data/build/settings
level_3/fss_basic_read/data/build/dependencies
level_3/fss_basic_read/data/build/settings
level_3/fss_basic_write/data/build/dependencies
level_3/fss_basic_write/data/build/settings
level_3/fss_extended_read/data/build/settings
level_3/fss_extended_write/data/build/settings
level_3/fss_status_code/data/build/settings
level_3/init/data/build/settings
level_3/status_code/data/build/settings

index f538502..7846191 100644 (file)
@@ -11,9 +11,9 @@ build_compiler gcc
 build_linker ar
 build_libraries -lc
 build_libraries_fll
-build_sources_library level_0/console.c level_0/conversion.c level_0/file.c level_0/memory.c level_0/pipe.c level_0/print.c level_0/utf.c
+build_sources_library console.c conversion.c file.c memory.c pipe.c print.c utf.c
 build_sources_program
-build_sources_headers level_0/colors.h level_0/console.h level_0/conversion.h level_0/status.h level_0/file.h level_0/fss.h level_0/memory.h level_0/path_fll.h level_0/path_filesystem.h level_0/pipe.h level_0/print.h level_0/serialized.h level_0/string.h level_0/type.h level_0/type_array.h level_0/utf.h
+build_sources_headers colors.h console.h conversion.h file.h fss.h memory.h path_fll.h path_filesystem.h pipe.h print.h serialized.h socket.h status.h string.h type.h type_array.h utf.h
 build_shared yes
 build_static yes
 
index d08c3d5..1cc2a70 100644 (file)
@@ -11,9 +11,9 @@ build_compiler gcc
 build_linker ar
 build_libraries -lc
 build_libraries_fll -lfll_0
-build_sources_library level_1/colors.c level_1/console.c level_1/directory.c level_1/status.c level_1/file.c level_1/fss.c level_1/fss_basic.c level_1/fss_basic_list.c level_1/fss_extended.c level_1/program.c level_1/serialized.c level_1/string.c level_1/utf.c
+build_sources_library colors.c console.c directory.c file.c fss.c fss_basic.c fss_basic_list.c fss_extended.c program.c serialized.c socket.c status.c string.c utf.c
 build_sources_program 
-build_sources_headers level_1/colors.h level_1/console.h level_1/directory.h level_1/status.h level_1/file.h level_1/fss.h level_1/fss_basic.h level_1/fss_basic_list.h level_1/fss_status.h level_1/fss_extended.h level_1/fss_macro.h level_1/program.h level_1/serialized.h level_1/string.h level_1/utf.h
+build_sources_headers colors.h console.h directory.h file.h fss.h fss_basic.h fss_basic_list.h fss_status.h fss_extended.h fss_macro.h program.h serialized.h socket.h status.h string.h utf.h
 build_shared yes
 build_static yes
 
index d66e112..32bcc8a 100644 (file)
@@ -11,9 +11,9 @@ build_compiler gcc
 build_linker ar
 build_libraries -lc
 build_libraries_fll -lfll_0 -lfll_1
-build_sources_library level_2/colors.c level_2/execute.c level_2/status.c level_2/fss_basic.c level_2/fss_basic_list.c level_2/fss_extended.c level_2/fss_status.c
+build_sources_library colors.c execute.c fss_basic.c fss_basic_list.c fss_extended.c fss_status.c status.c
 build_sources_program 
-build_sources_headers level_2/colors.h level_2/execute.h level_2/status.h level_2/fss_basic.h level_2/fss_basic_list.h level_2/fss_extended.h level_2/fss_status.h
+build_sources_headers colors.h execute.h fss_basic.h fss_basic_list.h fss_extended.h fss_status.h status.h
 build_shared yes
 build_static yes
 
index 3fb3d70..a4749a7 100644 (file)
@@ -11,9 +11,9 @@ build_compiler gcc
 build_linker ar
 build_libraries -lc
 build_libraries_fll
-build_sources_library level_0/console.c level_0/conversion.c level_0/file.c level_0/memory.c level_0/pipe.c level_0/print.c level_0/utf.c level_1/colors.c level_1/console.c level_1/directory.c level_1/status.c level_1/file.c level_1/fss.c level_1/fss_basic.c level_1/fss_basic_list.c level_1/fss_extended.c level_1/program.c level_1/serialized.c level_1/string.c level_1/utf.c level_2/colors.c level_2/execute.c level_2/status.c
+build_sources_library level_0/console.c level_0/conversion.c level_0/file.c level_0/memory.c level_0/pipe.c level_0/print.c level_0/utf.c level_1/colors.c level_1/console.c level_1/directory.c level_1/file.c level_1/fss.c level_1/fss_basic.c level_1/fss_basic_list.c level_1/fss_extended.c level_1/program.c level_1/serialized.c level_1/socket.c level_1/status.c level_1/string.c level_1/utf.c level_2/colors.c level_2/execute.c level_2/fss_basic.c level_2/fss_basic_list.c level_2/fss_extended.c level_2/fss_status.c level_2/status.c
 build_sources_program
-build_sources_headers level_0/colors.h level_0/console.h level_0/conversion.h level_0/status.h level_0/file.h level_0/fss.h level_0/memory.h level_0/path_fll.h level_0/path_filesystem.h level_0/pipe.h level_0/print.h level_0/serialized.h level_0/string.h level_0/type.h level_0/type_array.h level_0/utf.h level_1/colors.h level_1/console.h level_1/directory.h level_1/status.h level_1/file.h level_1/fss.h level_1/fss_basic.h level_1/fss_basic_list.h level_1/fss_status.h level_1/fss_extended.h level_1/fss_macro.h level_1/program.h level_1/serialized.h level_1/string.h level_1/utf.h level_2/colors.h level_2/execute.h level_2/status.h level_2/fss_basic.h level_2/fss_basic_list.h level_2/fss_extended.h level_2/fss_status.h
+build_sources_headers level_0/colors.h level_0/console.h level_0/conversion.h level_0/file.h level_0/fss.h level_0/memory.h level_0/path_fll.h level_0/path_filesystem.h level_0/pipe.h level_0/print.h level_0/serialized.h level_0/socket.h level_0/status.h level_0/string.h level_0/type.h level_0/type_array.h level_0/utf.h level_1/colors.h level_1/console.h level_1/directory.h level_1/file.h level_1/fss.h level_1/fss_basic.h level_1/fss_basic_list.h level_1/fss_status.h level_1/fss_extended.h level_1/fss_macro.h level_1/program.h level_1/serialized.h level_1/socket.h level_1/status.h level_1/string.h level_1/utf.h level_2/colors.h level_2/execute.h level_2/fss_basic.h level_2/fss_basic_list.h level_2/fss_extended.h level_2/fss_status.h level_2/status.h
 build_sources_bash
 build_sources_settings
 build_shared yes
index 755358c..9d1db98 100644 (file)
@@ -2,7 +2,7 @@
 # license: lgpl-2.1
 # programmer: Kevin Day
 #
-# The purpose of this script is to create release directories from the project source.
+# The purpose of this script is to create releases from the project source.
 # These release directories can then be used to compile the project or to package the project.
 # The dependencies of this script are: basename, bash, chmod, grep, and sed.
 
@@ -101,48 +101,48 @@ package_main(){
     exit 0
   fi
 
-  if [[ ! -d $path_build ]] ; then
-    echo -e "${c_error}ERROR: build directory '$path_build' is invalid or missing.$c_reset"
+  if [[ $operation_failure == "fail-multiple" ]] ; then
+    echo -e "${c_error}ERROR: only one operation may be specified at a time.$c_reset"
     exit 1
-  fi
-
-  if [[ ! -d $path_destination ]] ; then
-    mkdir -vp $path_destination
-    if [[ $? -ne 0 ]] ; then
-      echo -e "${c_error}ERROR: package directory '$path_destination' is invalid or could not be created.$c_reset"
+  elif [[ $operation == "build" ]] ; then
+    if [[ ! -d $path_build ]] ; then
+      echo -e "${c_error}ERROR: build directory '$path_build' is invalid or missing.$c_reset"
       exit 1
     fi
-  fi
 
-  if [[ ! -d $path_sources ]] ; then
-    echo -e "${c_error}ERROR: sources directory '$path_sources' is invalid or missing.$c_reset"
-    exit 1
-  fi
+    if [[ ! -d $path_destination ]] ; then
+      mkdir -vp $path_destination
+      if [[ $? -ne 0 ]] ; then
+        echo -e "${c_error}ERROR: package directory '$path_destination' is invalid or could not be created.$c_reset"
+        exit 1
+      fi
+    fi
 
-  if [[ ! -d ${path_sources}level_0/ ]] ; then
-    echo -e "${c_error}ERROR: build sources directory '${path_sources}level_0/' is invalid or missing.$c_reset"
-    exit 1
-  fi
+    if [[ ! -d $path_sources ]] ; then
+      echo -e "${c_error}ERROR: sources directory '$path_sources' is invalid or missing.$c_reset"
+      exit 1
+    fi
 
-  if [[ ! -d ${path_sources}level_1/ ]] ; then
-    echo -e "${c_error}ERROR: build sources directory '${path_sources}level_1/' is invalid or missing.$c_reset"
-    exit 1
-  fi
+    if [[ ! -d ${path_sources}level_0/ ]] ; then
+      echo -e "${c_error}ERROR: build sources directory '${path_sources}level_0/' is invalid or missing.$c_reset"
+      exit 1
+    fi
 
-  if [[ ! -d ${path_sources}level_2/ ]] ; then
-    echo -e "${c_error}ERROR: build sources directory '${path_sources}level_2/' is invalid or missing.$c_reset"
-    exit 1
-  fi
+    if [[ ! -d ${path_sources}level_1/ ]] ; then
+      echo -e "${c_error}ERROR: build sources directory '${path_sources}level_1/' is invalid or missing.$c_reset"
+      exit 1
+    fi
 
-  if [[ ! -d ${path_sources}level_3/ ]] ; then
-    echo -e "${c_error}ERROR: build sources directory '${path_sources}level_3/' is invalid or missing.$c_reset"
-    exit 1
-  fi
+    if [[ ! -d ${path_sources}level_2/ ]] ; then
+      echo -e "${c_error}ERROR: build sources directory '${path_sources}level_2/' is invalid or missing.$c_reset"
+      exit 1
+    fi
+
+    if [[ ! -d ${path_sources}level_3/ ]] ; then
+      echo -e "${c_error}ERROR: build sources directory '${path_sources}level_3/' is invalid or missing.$c_reset"
+      exit 1
+    fi
 
-  if [[ $operation_failure == "fail-multiple" ]] ; then
-    echo -e "${c_error}ERROR: only one operation may be specified at a time.$c_reset"
-    exit 1
-  elif [[ $operation == "build" ]] ; then
     if [[ $mode_individual == "" && $mode_level == "" && $mode_monolithic == "" && $mode_program == "" ]] ; then
       mode_individual="yes"
     fi
@@ -162,7 +162,19 @@ package_main(){
     if [[ $mode_program == "yes" ]] ; then
       package_operation_program
     fi
+  elif [[ $operation == "dependencies" ]] ; then
+    if [[ ! -d $path_sources ]] ; then
+      echo -e "${c_error}ERROR: sources directory '$path_sources' is invalid or missing.$c_reset"
+      exit 1
+    fi
+
+    package_operation_dependencies
   elif [[ $operation == "clean" ]] ; then
+    if [[ ! -d $path_destination ]] ; then
+      echo -e "${c_warning}WARNING: package directory '$path_destination' does not exist, there is nothing to clean.$c_reset"
+      exit 0
+    fi
+
     package_operation_clean
   elif [[ $operation == "" ]] ; then
     echo -e "${c_error}ERROR: no operation was given.$c_reset"
@@ -200,8 +212,9 @@ package_help(){
   echo -e " ${c_notice}Version $version$c_reset"
   echo
   echo -e "$c_highlight$system_name$c_reset $c_notice<${c_reset}operation$c_notice>$c_reset"
-  echo -e " ${c_important}build${c_reset}  Build the package"
-  echo -e " ${c_important}clean${c_reset}  Delete all built packages"
+  echo -e " ${c_important}build${c_reset}         Build the package"
+  echo -e " ${c_important}dependencies${c_reset}  Rebuild all dependencies"
+  echo -e " ${c_important}clean${c_reset}         Delete all built packages"
   echo
   echo -e "${c_highlight}Options:$c_reset"
   echo -e " -${c_important}h$c_reset, --${c_important}help$c_reset      Print this help screen"
@@ -381,6 +394,7 @@ package_operation_level(){
   local name=
   local level=
   local directory=
+  local package=
 
   for level in level_0 level_1 level_2 ; do
     name="fll-$level"
@@ -479,6 +493,7 @@ package_operation_monolithic(){
   local name=
   local level=
   local directory=
+  local package=
   local subdirectory=
   local pathname=
 
@@ -618,6 +633,7 @@ package_operation_program(){
   local failure=
   local name=
   local directory=
+  local package=
 
   if [[ ! -d ${path_destination}program ]] ; then
     mkdir -vp ${path_destination}program
@@ -663,6 +679,369 @@ package_operation_program(){
   fi
 }
 
+package_operation_dependencies() {
+  local failure=
+  local level_0_libraries=
+  local level_1_libraries=
+  local level_2_libraries=
+  local level_0_headers=
+  local level_1_headers=
+  local level_2_headers=
+
+  package_dependencies_individual
+
+  if [[ $failure != "" ]] ; then
+    return;
+  fi
+
+  package_dependencies_level
+
+  if [[ $failure != "" ]] ; then
+    return;
+  fi
+
+  package_dependencies_monolithic
+}
+
+package_dependencies_individual() {
+  local level=
+  local directory=
+  local settings=
+  local name=
+  local dependencies=
+  local dependency=
+  local sub_level=
+  local sub_dependencies=
+  local sub_dependency=
+  local sub_sub_level=
+  local sub_sub_dependencies=
+  local sub_sub_dependency=
+  local individual_dependencies=
+
+  for directory in ${path_sources}level_0/* ${path_sources}level_1/* ${path_sources}level_2/* ${path_sources}level_3/* ; do
+    name="$(echo $directory | sed -e "s|${path_sources}level_0/||" -e "s|${path_sources}level_1/||" -e "s|${path_sources}level_2/||" -e "s|${path_sources}level_3/||")"
+
+    echo
+    echo -e "${c_highlight}Building Dependencies For $c_reset$c_notice${name}$c_reset${c_highlight}.$c_reset"
+
+    if [[ ! -f ${directory}/data/build/dependencies ]] ; then
+      echo -e "${c_error}ERROR: cannot build dependencies, failed to find $c_notice${directory}/data/build/dependencies$c_error.$c_reset"
+      failure=1
+      return
+    fi
+    if [[ ! -f ${directory}/data/build/settings ]] ; then
+      echo -e "${c_error}ERROR: cannot build dependencies for $c_reset$c_notice${name}$c_reset${c_error}, failed to find $c_notice${directory}/data/build/settings$c_error.$c_reset"
+      failure=1
+      return
+    fi
+
+    dependencies=
+    if [[ -f ${directory}/data/build/dependencies ]] ; then
+      dependencies=$(cat ${directory}/data/build/dependencies)
+    fi
+
+    individual_dependencies=
+    for dependency in $dependencies ; do
+      if [[ $(echo "$dependency" | grep -o "^f_") != "" ]] ; then
+        level=level_0
+      elif [[ $(echo "$dependency" | grep -o "^fl_") != "" ]] ; then
+        level=level_1
+      elif [[ $(echo "$dependency" | grep -o "^fll_") != "" ]] ; then
+        level=level_2
+      else
+        echo -e "${c_warning}WARNING: failed to detect level for dependency $c_notice$dependency$c_warning.$c_reset"
+        continue
+      fi
+
+      if [[ ! -d ${path_sources}${level}/${dependency}/data/build/ ]] ; then
+        echo -e "${c_error}ERROR: failed to find dependency data directory $c_notice${path_sources}${level}/${dependency}/data/build/$c_error.$c_reset"
+        failure=1
+        return
+      fi
+
+      sub_dependencies=
+      if [[ -f ${path_sources}${level}/${dependency}/data/build/dependencies ]] ; then
+        sub_dependencies=$(cat ${path_sources}${level}/${dependency}/data/build/dependencies)
+      fi
+
+      for sub_dependency in $sub_dependencies ; do
+        if [[ $(echo "$sub_dependency" | grep -o "^f_") != "" ]] ; then
+          sub_level=level_0
+        elif [[ $(echo "$sub_dependency" | grep -o "^fl_") != "" ]] ; then
+          sub_level=level_1
+        else
+          echo -e "${c_warning}WARNING: failed to detect level for sub-dependency $c_notice$sub_dependency$c_warning.$c_reset"
+          continue
+        fi
+
+        if [[ ! -d ${path_sources}${sub_level}/${sub_dependency}/data/build/ ]] ; then
+          echo -e "${c_error}ERROR: failed to find dependency data directory $c_notice${path_sources}${sub_level}/${sub_dependency}/data/build/$c_error.$c_reset"
+          failure=1
+          return
+        fi
+
+        sub_sub_dependencies=
+        if [[ -f ${path_sources}${sub_level}/${sub_dependency}/data/build/dependencies ]] ; then
+          sub_sub_dependencies=$(cat ${path_sources}${sub_level}/${sub_dependency}/data/build/dependencies)
+        fi
+
+        for sub_sub_dependency in $sub_sub_dependencies ; do
+          if [[ $(echo "$sub_sub_dependency" | grep -o "^f_") != "" ]] ; then
+            sub_sub_level=level_0
+          else
+            echo -e "${c_warning}WARNING: failed to detect level for sub-sub-dependency $c_notice$sub_sub_dependency$c_warning.$c_reset"
+            continue
+          fi
+
+          package_dependencies_append "$sub_sub_level" "$sub_sub_dependency"
+        done
+
+        if [[ $failure != "" ]] ; then
+          break;
+        fi
+
+        package_dependencies_append "$sub_level" "$sub_dependency"
+
+        if [[ $failure != "" ]] ; then
+          break;
+        fi
+      done
+
+      if [[ $failure != "" ]] ; then
+        break;
+      fi
+
+      package_dependencies_append "$level" "$dependency"
+
+      if [[ $failure != "" ]] ; then
+        break;
+      fi
+    done
+
+    if [[ $failure != "" ]] ; then
+      break;
+    fi
+
+    individual_dependencies=$(echo "$individual_dependencies" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+    if [[ $individual_dependencies != "" ]] ; then
+      echo -e "  $individual_dependencies"
+      individual_dependencies=" $individual_dependencies"
+    fi
+
+    settings=${directory}/data/build/settings
+    sed -i -e "s|^build_libraries_fll\>.*\$|build_libraries_fll$individual_dependencies|" $settings
+
+    if [[ $? -ne 0 ]] ; then
+      echo -e "${c_error}ERROR: failed to update settings file $c_notice${settings}$c_error.$c_reset"
+      failure=1
+      return
+    fi
+  done
+}
+
+package_dependencies_level() {
+  local directory=
+  local name=
+  local settings=
+  local library=
+  local libraries=
+  local header=
+  local headers=
+
+  package_dependencies_level_update "level_0"
+
+  if [[ $failure != "" ]] ; then
+    return;
+  fi
+
+  package_dependencies_level_update "level_1"
+
+  if [[ $failure != "" ]] ; then
+    return;
+  fi
+
+  package_dependencies_level_update "level_2"
+}
+
+package_dependencies_level_update() {
+  local level="$1"
+  local level_libraries=
+  local level_headers=
+  local monolithic_libraries=
+  local monolithic_headers=
+
+  echo
+  echo -e "${c_highlight}Building Dependencies: $c_notice$level${c_highlight}.$c_reset"
+
+  for directory in $path_sources${level}/* ; do
+    name="$(echo $directory | sed -e "s|$path_sources${level}/||")"
+
+    settings=${directory}/data/build/settings
+    if [[ ! -f $settings ]] ; then
+      echo -e "${c_error}ERROR: failed to find settings file $c_notice$settings$c_error.$c_reset"
+      failure=1
+      return
+    fi
+
+    libraries=$(grep -o '^build_sources_library\>.*$' $settings | sed -e 's|^build_sources_library\>||' -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+    for library in $libraries ; do
+      level_libraries="$level_libraries $library"
+      monolithic_libraries="$monolithic_libraries $level/$library"
+    done
+
+    headers=$(grep -o '^build_sources_headers\>.*$' $settings | sed -e 's|^build_sources_headers\>||' -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+    for header in $headers ; do
+      level_headers="$level_headers $header"
+      monolithic_headers="$monolithic_headers $level/$header"
+    done
+  done
+
+  settings=${path_sources}/build/${level}/settings
+
+  if [[ ! -f $settings ]] ; then
+    echo -e "${c_error}ERROR: failed to find settings file $c_notice$settings$c_error.$c_reset"
+    failure=1
+    return
+  fi
+
+  level_libraries=$(echo "$level_libraries" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+  if [[ $level_libraries != "" ]] ; then
+    echo "  $level_libraries"
+    level_libraries=" $level_libraries"
+  fi
+
+  sed -i -e "s|^build_sources_library\>.*\$|build_sources_library$level_libraries|" $settings
+
+  if [[ $? -ne 0 ]] ; then
+    echo -e "${c_error}ERROR: failed to update libraries for settings file $c_notice$settings$c_error.$c_reset"
+    failure=1
+    return
+  fi
+
+  level_headers=$(echo "$level_headers" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+  if [[ $level_headers != "" ]] ; then
+    echo "  $level_headers"
+    level_headers=" $level_headers"
+  fi
+
+  sed -i -e "s|^build_sources_headers\>.*\$|build_sources_headers$level_headers|" $settings
+
+  if [[ $? -ne 0 ]] ; then
+    echo -e "${c_error}ERROR: failed to update headers for settings file $c_notice$settings$c_error.$c_reset"
+    failure=1
+    return
+  fi
+
+  if [[ $level == "level_0" ]] ; then
+    level_0_libraries=$(echo "$monolithic_libraries" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+    level_0_headers=$(echo "$monolithic_headers" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+  elif [[ $level == "level_1" ]] ; then
+    level_1_libraries=$(echo "$monolithic_libraries" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+    level_1_headers=$(echo "$monolithic_headers" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+  elif [[ $level == "level_2" ]] ; then
+    level_2_libraries=$(echo "$monolithic_libraries" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+    level_2_headers=$(echo "$monolithic_headers" | sed -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+  fi
+}
+
+package_dependencies_monolithic() {
+  local monolithic_libraries=""
+  local monolithic_headers=""
+
+  echo
+  echo -e "${c_highlight}Building Dependencies: ${c_notice}monolithic${c_highlight}.$c_reset"
+
+  if [[ $level_0_libraries != "" ]] ; then
+    monolithic_libraries="$level_0_libraries"
+  fi
+
+  if [[ $level_0_headers != "" ]] ; then
+    monolithic_headers="$level_0_headers"
+  fi
+
+  if [[ $level_1_libraries != "" ]] ; then
+    if [[ $monolithic_libraries == "" ]] ; then
+      monolithic_libraries="$level_1_libraries"
+    else
+      monolithic_libraries="$monolithic_libraries $level_1_libraries"
+    fi
+  fi
+
+  if [[ $level_1_headers != "" ]] ; then
+    if [[ $monolithic_libraries == "" ]] ; then
+      monolithic_headers="$level_1_headers"
+    else
+      monolithic_headers="$monolithic_headers $level_1_headers"
+    fi
+  fi
+
+  if [[ $level_2_libraries != "" ]] ; then
+    if [[ $monolithic_libraries == "" ]] ; then
+      monolithic_libraries="$level_2_libraries"
+    else
+      monolithic_libraries="$monolithic_libraries $level_2_libraries"
+    fi
+  fi
+
+  if [[ $level_2_headers != "" ]] ; then
+    if [[ $monolithic_libraries == "" ]] ; then
+      monolithic_headers="$level_2_headers"
+    else
+      monolithic_headers="$monolithic_headers $level_2_headers"
+    fi
+  fi
+
+  settings=${path_sources}/build/monolithic/settings
+
+  if [[ $monolithic_libraries != "" ]] ; then
+    echo "  $monolithic_libraries"
+    monolithic_libraries=" $monolithic_libraries"
+  fi
+
+  sed -i -e "s|^build_sources_library\>.*\$|build_sources_library$monolithic_libraries|" $settings
+
+  if [[ $? -ne 0 ]] ; then
+    echo -e "${c_error}ERROR: failed to update libraries for settings file $c_notice$settings$c_error.$c_reset"
+    failure=1
+    return
+  fi
+
+
+  if [[ $monolithic_headers != "" ]] ; then
+    echo "  $monolithic_headers"
+    monolithic_headers=" $monolithic_headers"
+  fi
+
+  sed -i -e "s|^build_sources_headers\>.*\$|build_sources_headers$monolithic_headers|" $settings
+
+  if [[ $? -ne 0 ]] ; then
+    echo -e "${c_error}ERROR: failed to update headers for settings file $c_notice$settings$c_error.$c_reset"
+    failure=1
+    return
+  fi
+}
+
+package_dependencies_append() {
+  local level="$1"
+  local dependency="$2"
+  local settings=
+  local libraries=
+
+  settings=${path_sources}${level}/${dependency}/data/build/settings
+  if [[ ! -f $settings ]] ; then
+    echo -e "${c_error}ERROR: failed to find dependency settings file $c_notice$settings$c_error.$c_reset"
+    failure=1
+    return
+  fi
+
+  libraries=$(grep -o '^build_sources_library\>.*$' $settings | sed -e 's|^build_sources_library\>||' -e 's|^[[:space:]]*||' -e 's|[[:space:]]*$||')
+  if [[ $libraries != "" ]] ; then
+    if [[ $(echo $individual_dependencies | grep -o "\-l$dependency\>") == "" ]] ; then
+      individual_dependencies="-l$dependency $individual_dependencies"
+    fi
+  fi
+}
+
 package_operation_clean(){
   local i=
 
@@ -684,6 +1063,12 @@ package_cleanup(){
   unset package_operation_level
   unset package_operation_monolithic
   unset package_operation_program
+  unset package_operation_dependencies
+  unset package_dependencies_individual
+  unset package_dependencies_level
+  unset package_dependencies_level_update
+  unset package_dependencies_monolithic
+  unset package_dependencies_append
   unset package_cleanup
 }
 
index f908df4..cb8f6c1 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library
 build_sources_program
 build_sources_headers colors.h
index d39a6f1..bded1b9 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library console.c
 build_sources_program 
 build_sources_headers console.h
index c480d36..1bc814a 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library conversion.c
 build_sources_program 
 build_sources_headers conversion.h
index 15f07fd..2cf6fe2 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library 
 build_sources_program 
 build_sources_headers fss.h
index 739a02e..89d9113 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library print.c
 build_sources_program
 build_sources_headers print.h
index 46cd4a3..1bbd560 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library
 build_sources_program 
 build_sources_headers serialized.h
index 1895ecf..7709246 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library 
 build_sources_program 
 build_sources_headers string.h
index 5e0a396..0fc14b9 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc 
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library utf.c
 build_sources_program 
 build_sources_headers utf.h
index 9dbca83..424bcf3 100644 (file)
@@ -1,7 +1,7 @@
 f_type
 f_status
+f_memory
 f_string
 f_colors
 f_file
-f_memory
 f_print
index 1823c52..ae05a15 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_memory -lf_file -lf_print
+build_libraries_fll -lf_print -lf_file -lf_memory
 build_sources_library colors.c
 build_sources_program
 build_sources_headers colors.h
index 24cd18c..1ee73f6 100644 (file)
@@ -1,6 +1,6 @@
 f_type
 f_status
+f_memory
 f_string
 f_console
-f_memory
 f_utf
index 600b1af..09aa483 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_memory -lf_console -lf_utf
+build_libraries_fll -lf_utf -lf_console -lf_memory
 build_sources_library console.c
 build_sources_program
 build_sources_headers console.h
index 5400c3e..4259a42 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_memory -lf_file
+build_libraries_fll -lf_file -lf_memory
 build_sources_library file.c
 build_sources_program 
 build_sources_headers file.h
index b7254be..65666d6 100644 (file)
@@ -1,8 +1,8 @@
 f_type
 f_status
-f_string
 f_memory
-f_file
+f_string
 f_conversion
+f_file
 f_fss
 f_utf
index 5abd997..1885271 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_conversion -lf_file -lf_memory -lf_utf
+build_libraries_fll -lf_utf -lf_file -lf_conversion -lf_memory
 build_sources_library fss.c fss_basic.c fss_basic_list.c fss_extended.c
 build_sources_program
 build_sources_headers fss.h fss_basic.h fss_basic_list.h fss_status.h fss_extended.h fss_macro.h
index abe5d93..63225f6 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll
+build_libraries_fll -lf_memory
 build_sources_library program.c
 build_sources_program
 build_sources_headers program.h
index ddc683d..d4d2ca1 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_memory -lf_utf
+build_libraries_fll -lf_utf -lf_memory
 build_sources_library serialized.c
 build_sources_program
 build_sources_headers serialized.h
index 22c22b6..6aff67a 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll
+build_libraries_fll -lf_utf -lf_memory
 build_sources_library status.c
 build_sources_program
 build_sources_headers status.h
index d5e3093..052762e 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_memory -lf_utf
+build_libraries_fll -lf_utf -lf_memory
 build_sources_library string.c
 build_sources_program
 build_sources_headers string.h
index b3c4e38..0d696e6 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lf_memory -lf_utf
+build_libraries_fll -lf_utf -lf_memory
 build_sources_library utf.c
 build_sources_program
 build_sources_headers utf.h
index 8edee6b..c45b97c 100644 (file)
@@ -1,6 +1,6 @@
 f_type
 f_status
+f_memory
 f_string
 f_colors
-f_memory
 fl_colors
index a97355a..eca2a89 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfl_colors -lf_memory
+build_libraries_fll -lfl_colors -lf_print -lf_file -lf_memory
 build_sources_library colors.c
 build_sources_program 
 build_sources_headers colors.h
index c5362ab..f8f5567 100644 (file)
@@ -1,10 +1,10 @@
 f_type
 f_status
-f_string
 f_memory
+f_string
 f_conversion
-f_utf
 f_fss
+f_utf
 fl_fss
 fl_status
 fl_string
index 8df8755..e0483f2 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfl_status -lfl_string -lfl_fss -lf_conversion -lf_file -lf_memory -lf_conversion -lf_utf
+build_libraries_fll -lfl_string -lfl_status -lfl_fss -lf_file -lf_utf -lf_conversion -lf_memory
 build_sources_library fss_basic.c fss_basic_list.c fss_extended.c fss_status.c
 build_sources_program
 build_sources_headers fss_basic.h fss_basic_list.h fss_extended.h fss_status.h
index fd37ba8..1e5b4b2 100644 (file)
@@ -1,8 +1,8 @@
 f_type
 f_status
 f_memory
-f_conversion
 f_string
+f_conversion
 f_utf
-fl_string
 fl_status
+fl_string
index 5264754..9c1ab59 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfl_status -lfl_string -lf_memory -lf_conversion -lf_utf
+build_libraries_fll -lfl_string -lfl_status -lf_utf -lf_conversion -lf_memory
 build_sources_library status.c
 build_sources_program
 build_sources_headers status.h
index 393eb9f..9e5b969 100644 (file)
@@ -1,11 +1,11 @@
-f_console
+f_type
 f_status
-f_fss
 f_memory
+f_string
+f_console
+f_fss
 f_pipe
 f_print
-f_string
-f_type
 f_utf
 fl_colors
 fl_console
@@ -13,8 +13,8 @@ fl_directory
 fl_file
 fl_fss
 fl_program
-fl_string
 fl_status
+fl_string
 fll_colors
 fll_execute
 fll_fss
index 7a4a57c..045e51c 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfll_execute -lfl_directory -lfl_colors -lfl_status -lfl_string -lfl_file -lfl_console -lfl_fss -lfl_program -lf_pipe -lf_file -lf_print -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lfl_colors -lf_file -lf_utf -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library firewall.c private-firewall.c
index 5fc6035..4823a86 100644 (file)
@@ -1,11 +1,11 @@
-f_console
+f_type
 f_status
-f_fss
 f_memory
+f_string
+f_console
+f_fss
 f_pipe
 f_print
-f_string
-f_type
 fl_colors
 fl_console
 fl_directory
index 98f7958..7c3106e 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfll_execute -lfl_directory -lfl_colors -lfl_status -lfl_string -lfl_file -lfl_console -lfl_program -lfl_fss -lf_pipe -lf_file -lf_print -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_basic_list_read.c
index 5fc6035..4823a86 100644 (file)
@@ -1,11 +1,11 @@
-f_console
+f_type
 f_status
-f_fss
 f_memory
+f_string
+f_console
+f_fss
 f_pipe
 f_print
-f_string
-f_type
 fl_colors
 fl_console
 fl_directory
index de7a17e..b9f531c 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss  -lfl_fss -lfl_file -lfl_status -lfl_string -lfl_colors -lfl_console -lfl_program -lf_file -lf_print -lf_pipe -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_basic_list_write.c
index 5fc6035..4823a86 100644 (file)
@@ -1,11 +1,11 @@
-f_console
+f_type
 f_status
-f_fss
 f_memory
+f_string
+f_console
+f_fss
 f_pipe
 f_print
-f_string
-f_type
 fl_colors
 fl_console
 fl_directory
index 7505e3f..c5e7a1e 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfll_execute -lfl_directory -lfl_colors -lfl_status -lfl_string -lfl_file -lfl_console -lfl_program -lfl_fss -lf_print -lf_file -lf_pipe -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_basic_read.c
index 5fc6035..4823a86 100644 (file)
@@ -1,11 +1,11 @@
-f_console
+f_type
 f_status
-f_fss
 f_memory
+f_string
+f_console
+f_fss
 f_pipe
 f_print
-f_string
-f_type
 fl_colors
 fl_console
 fl_directory
index b39c90e..3c39905 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfl_fss -lfl_file -lfl_colors -lfl_status -lfl_string -lfl_console -lfl_program -lf_file -lf_print -lf_pipe -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_basic_write.c
index 3da6a02..4e83b53 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfll_execute -lfl_directory -lfl_colors -lfl_status -lfl_string -lfl_file -lfl_console -lfl_program -lfl_fss -lf_pipe -lf_file -lf_print -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_extended_read.c
index 1910f66..dadf705 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfl_fss -lfl_file -lfl_colors -lfl_status -lfl_string -lfl_console -lfl_program -lf_file -lf_print -lf_pipe -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_extended_write.c
index 91bf2ab..7339ba2 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_status -lfll_fss -lfl_fss -lfl_colors -lfl_status -lfl_string -lfl_console -lfl_program -lfl_string -lf_print -lf_pipe -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_status -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library fss_status_code.c
index 9cbed99..bf9b716 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_fss -lfll_execute -lfl_directory -lfl_colors -lfl_status -lfl_string -lfl_file -lfl_console -lfl_program -lfl_fss -lf_pipe -lf_file -lf_print -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_fss -lfll_execute -lfll_colors -lfl_string -lfl_status -lfl_program -lfl_fss -lf_conversion -lfl_file -lfl_directory -lfl_console -lfl_colors -lf_file -lf_utf -lf_print -lf_pipe -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library init.c private-init.c
index 7a48e39..542fce8 100644 (file)
@@ -10,7 +10,7 @@ version_micro 0
 build_compiler gcc
 build_linker ar
 build_libraries -lc
-build_libraries_fll -lfll_colors -lfll_status -lfl_colors -lfl_status -lfl_console -lfl_program -lfl_string -lf_print -lf_pipe -lf_conversion -lf_console -lf_memory -lf_utf
+build_libraries_fll -lfll_status -lfll_colors -lfl_status -lfl_string -lfl_program -lfl_file -lfl_console -lf_utf -lfl_colors -lf_file -lf_print -lf_pipe -lf_conversion -lf_console -lf_memory
 #build_libraries_fll-level -lfll_2 -lfll_1 -lfll_0
 #build_libraries_fll-monolithic -lfll
 build_sources_library status_code.c