]> Kevux Git Server - fll/commitdiff
Feature: support custom 'defines'
authorKevin Day <thekevinday@gmail.com>
Fri, 9 Aug 2019 00:13:21 +0000 (19:13 -0500)
committerKevin Day <thekevinday@gmail.com>
Fri, 9 Aug 2019 00:13:21 +0000 (19:13 -0500)
Some libraries or packages have custom defines, such as the firewall _en_firewall_debug_.

Provide simple documentation of the defines, in the data/build/defines file.
Provide build settings values for specifying these custom defines.
Provide parameter for manually overriding defines.

Some path settings have been renamed to avoid confusion (such as '--c_path' is now '--path_c').

Enable _en_firewall_debug_ by default.

37 files changed:
build/scripts/generate.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_errors/data/build/settings
level_0/f_file/data/build/settings
level_0/f_fss/data/build/settings
level_0/f_memory/data/build/settings
level_0/f_paths/data/build/settings
level_0/f_pipe/data/build/settings
level_0/f_print/data/build/settings
level_0/f_serialized/data/build/settings
level_0/f_strings/data/build/defines [new file with mode: 0644]
level_0/f_strings/data/build/settings
level_0/f_types/data/build/settings
level_1/fl_colors/data/build/settings
level_1/fl_console/data/build/settings
level_1/fl_directory/data/build/settings
level_1/fl_errors/data/build/settings
level_1/fl_file/data/build/settings
level_1/fl_fss/data/build/settings
level_1/fl_serialized/data/build/settings
level_1/fl_strings/data/build/settings
level_2/fll_colors/data/build/settings
level_2/fll_execute/data/build/settings
level_2/fll_fss/data/build/settings
level_3/firewall/data/build/defines [new file with mode: 0644]
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_extended_read/data/build/settings
level_3/fss_extended_write/data/build/settings
level_3/fss_return_code/data/build/settings
level_3/init/data/build/settings
level_3/return_code/data/build/settings

index 055ecb9..989a496 100644 (file)
@@ -29,15 +29,18 @@ generate_main(){
   local c_prefix="\\"
 
   local variables=
-  local settings_file=data/build/settings
+  local settings_file=
+  local settings_defines=
   local operation=
   local operation_failure=
   local path_build=build/
+  local path_build_settings=
   local path_c=sources/c/
-  local path_s=data/settings/
+  local path_settings=data/settings/
   local path_bash=sources/bash/
   local project_built=
   local work_directory=
+  local defines_override=
 
   local enable_shared=
   local enable_static=
@@ -62,17 +65,19 @@ generate_main(){
         elif [[ $p == "-b" || $p == "--build" ]] ; then
           grab_next=path_build
         elif [[ $p == "-s" || $p == "--settings" ]] ; then
-          grab_next=settings_file
-        elif [[ $p == "-B" || $p == "--bash_path" ]] ; then
+          grab_next=build_settings
+        elif [[ $p == "-B" || $p == "--path_bash" ]] ; then
           grab_next=path_bash
-        elif [[ $p == "-c" || $p == "--c_path" ]] ; then
+        elif [[ $p == "-c" || $p == "--path_c" ]] ; then
           grab_next=path_c
-        elif [[ $p == "-S" || $p == "--s_path" ]] ; then
-          grab_next=path_s
+        elif [[ $p == "-S" || $p == "--path_settings" ]] ; then
+          grab_next=path_settings
         elif [[ $p == "-p" || $p == "--project" ]] ; then
           grab_next=project_built
         elif [[ $p == "-w" || $p == "--work_directory" ]] ; then
           grab_next=work_directory
+        elif [[ $p == "-d" || $p == "--defines" ]] ; then
+          grab_next=defines_override
         elif [[ $p == "--enable-shared" ]] ; then
           enable_shared="yes"
         elif [[ $p == "--disable-shared" ]] ; then
@@ -89,18 +94,20 @@ generate_main(){
       else
         if [[ $grab_next == "path_build" ]] ; then
           path_build=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
-        elif [[ $grab_next == "settings_file" ]] ; then
-          settings_file=$(echo $p | sed -e 's|^//*|/|' -e 's|^//*|/|')
+        elif [[ $grab_next == "build_settings" ]] ; then
+          path_build_settings=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
         elif [[ $grab_next == "path_bash" ]] ; then
           path_bash=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
         elif [[ $grab_next == "path_c" ]] ; then
           path_c=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
-        elif [[ $grab_next == "path_s" ]] ; then
-          path_s=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
+        elif [[ $grab_next == "path_settings" ]] ; then
+          path_settings=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
         elif [[ $grab_next == "project_built" ]] ; then
           project_built="-$(echo $p | sed -e 's|/*$||')"
         elif [[ $grab_next == "work_directory" ]] ; then
           work_directory=$(echo $p | sed -e 's|^//*|/|' -e 's|/*$|/|')
+        elif [[ $grab_next == "defines_override" ]] ; then
+          defines_override="$p"
         fi
 
         grab_next=
@@ -110,6 +117,13 @@ generate_main(){
     p=
   fi
 
+  if [[ $path_build_settings == "" ]] ; then
+    path_build_settings=data/build/
+  fi
+
+  settings_file=${path_build_settings}settings
+  settings_defines=${path_build_settings}defines
+
   generate_handle_colors
 
   if [[ $do_help == "yes" ]] ; then
@@ -132,6 +146,11 @@ generate_main(){
     exit 1
   fi
 
+  if [[ $defines_override != "" && $(echo "$defines_override" | grep -s -o "[^_[:alnum:][:space:]]") != "" ]] ; then
+    echo -e "${c_error}ERROR: the defines override $c_notice$defines_override$c_error includes invalid characters, only alphanumeric, whitespace, and underscore are allowed.$c_reset"
+    exit 1
+  fi
+
   if [[ ! -d $path_c && ( ${variables[$(generate_id build_sources_library)]} != "" || ${variables[$(generate_id build_sources_program)]} != "" || ${variables[$(generate_id build_sources_headers)]} != "" ) ]] ; then
     echo -e "${c_error}ERROR: the c path of '$c_notice$path_c$c_error' is invalid.$c_reset"
     generate_cleanup
@@ -200,12 +219,13 @@ generate_help(){
   echo
   echo -e "${c_highlight}Generate Options:$c_reset"
   echo -e " -${c_important}b$c_reset, --${c_important}build${c_reset}           Custom build directory"
-  echo -e " -${c_important}s$c_reset, --${c_important}settings${c_reset}        Custom build settings file"
-  echo -e " -${c_important}B$c_reset, --${c_important}bash_path${c_reset}       Custom path to the bash source files"
-  echo -e " -${c_important}c$c_reset, --${c_important}c_path${c_reset}          Custom path to the c source files"
-  echo -e " -${c_important}S$c_reset, --${c_important}s_path${c_reset}          Custom path to the settings files"
+  echo -e " -${c_important}s$c_reset, --${c_important}settings${c_reset}        Custom build settings directory"
+  echo -e " -${c_important}B$c_reset, --${c_important}path_bash${c_reset}       Custom path to the bash source files"
+  echo -e " -${c_important}c$c_reset, --${c_important}path_c${c_reset}          Custom path to the c source files"
+  echo -e " -${c_important}S$c_reset, --${c_important}path_settings${c_reset}   Custom path to the settings files"
   echo -e " -${c_important}p$c_reset, --${c_important}project${c_reset}         Project name for storing built status"
   echo -e " -${c_important}w$c_reset, --${c_important}work_directory${c_reset}  Use includes/libraries from this directory instead of system"
+  echo -e " -${c_important}d$c_reset, --${c_important}defines${c_reset}         Override custom defines with these defines"
   echo
   echo -e "${c_highlight}Special Options:$c_reset"
   echo -e " --${c_important}enable-shared${c_reset}   Forcibly do install shared files"
@@ -234,11 +254,14 @@ generate_id(){
     "build_sources_settings") echo -n 12;;
     "build_shared") echo -n 13;;
     "build_static") echo -n 14;;
-    "flags_all") echo -n 15;;
-    "flags_shared") echo -n 16;;
-    "flags_static") echo -n 17;;
-    "flags_library") echo -n 18;;
-    "flags_program") echo -n 19;;
+    "defines_all") echo -n 15;;
+    "defines_shared") echo -n 16;;
+    "defines_static") echo -n 17;;
+    "flags_all") echo -n 18;;
+    "flags_shared") echo -n 19;;
+    "flags_static") echo -n 20;;
+    "flags_library") echo -n 21;;
+    "flags_program") echo -n 22;;
   esac
 }
 
@@ -247,8 +270,8 @@ generate_load_settings(){
   local i=
   local key=
 
-  if [[ $settings_file == "" ]] ; then
-    echo -e "${c_error}ERROR: no settings file has been defined.$c_reset"
+  if [[ ! -d $path_build_settings ]] ; then
+    echo -e "${c_error}ERROR: no build settings directory $c_notice$path_build_settings$c_error could not be found or is not a valid directory.$c_reset"
     failure=1
   elif [[ ! -f $settings_file ]] ; then
     echo -e "${c_error}ERROR: no settings file $c_notice$settings_file$c_error could not be found or is not a valid file.$c_reset"
@@ -260,7 +283,7 @@ generate_load_settings(){
     exit $failure
   fi
 
-  for i in project_name project_level version_major version_minor version_micro build_compiler build_linker build_libraries build_libraries_fll build_sources_library build_sources_program build_sources_headers build_sources_settings build_shared build_static flags_all flags_shared flags_static flags_library flags_program ; do
+  for i in project_name project_level version_major version_minor version_micro build_compiler build_linker build_libraries build_libraries_fll build_sources_library build_sources_program build_sources_headers build_sources_settings build_shared build_static defines_all defines_shared defines_static flags_all flags_shared flags_static flags_library flags_program ; do
     variables[$(generate_id $i)]=$(grep -s -o "^[[:space:]]*$i\>.*$" $settings_file | sed -e "s|^[[:space:]]*$i\>||" -e 's|^[[:space:]]*||')
   done
 
@@ -322,6 +345,9 @@ generate_operation_build(){
   local sources_headers=${variables[$(generate_id build_sources_headers)]}
   local sources_settings=${variables[$(generate_id build_sources_settings)]}
   local sources=
+  local defines=${variables[$(generate_id defines_all)]}
+  local defines_shared=${variables[$(generate_id defines_shared)]}
+  local defines_static=${variables[$(generate_id defines_static)]}
   local flags_all=${variables[$(generate_id flags_all)]}
   local flags_shared=${variables[$(generate_id flags_shared)]}
   local flags_static=${variables[$(generate_id flags_static)]}
@@ -336,6 +362,33 @@ generate_operation_build(){
     flags_static="-L${work_directory}libraries/static/ $flags_static"
   fi
 
+  if [[ $defines_override != "" ]] ; then
+    defines="$defines_override"
+    defines_shared=
+    defines_static=
+  fi
+
+  if [[ $defines != "" ]] ; then
+    flags_all="$flags_all "
+    for i in $defines ; do
+      flags_all="${flags_all}-D$i "
+    done
+  fi
+
+  if [[ $defines_shared != "" ]] ; then
+    flags_shared="$flags_shared "
+    for i in $defines_shared ; do
+      flags_shared="${flags_shared}-D$i "
+    done
+  fi
+
+  if [[ $defines_static != "" ]] ; then
+    flags_static="$flags_static "
+    for i in $defines_static ; do
+      flags_static="${flags_static}-D$i "
+    done
+  fi
+
   if [[ $enable_shared == "yes" ]] ; then
     shared="yes"
   elif [[ $enable_shared == "no" ]] ; then
@@ -356,7 +409,7 @@ generate_operation_build(){
 
   if [[ $sources_settings != "" ]] ; then
     for i in $sources_settings ; do
-      cp -vR $path_s$i ${path_build}settings/ || failure=1
+      cp -vR $path_settings$i ${path_build}settings/ || failure=1
     done
   fi
 
index f97c573..eb32c98 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers colors.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index a82e77e..d63cc7b 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers console.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index b2c9a4c..099ccb7 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers conversion.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index bf231cc..05d2791 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers errors.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 5a24b8c..38a4e54 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers file.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 5e67154..adf2f0c 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers fss.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index acd8ec4..1778145 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers memory.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index a8d1f02..a6bd3a5 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers fll_paths.h filesystem_paths.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 1e3ccf7..0fe52af 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers pipe.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 124d715..4491e99 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers print.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 21b644e..5e37bd8 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers serialized.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
diff --git a/level_0/f_strings/data/build/defines b/level_0/f_strings/data/build/defines
new file mode 100644 (file)
index 0000000..6cee6e6
--- /dev/null
@@ -0,0 +1,3 @@
+# fss-0000
+
+_en_BUG_strnlen_ (deprecated) work-around bug where strnlen is not defined on some systems.
index 24ed1a1..4260270 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers strings.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 410c49b..256c6fc 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers types.h types_array.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 95a0bf9..7da62c0 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers colors.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index c7395f5..fe983ee 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers console.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index ba9b2e5..4d6dc70 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers directory.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 0bfcf93..2603b2d 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers errors.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index baca63b..c2276cc 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers file.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 05d3d6f..fda1b01 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers fss.h fss_basic.h fss_basic_list.h fss_errors.h fss_extend
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 7dd830d..15f84f5 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers serialized.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 4958575..fe1eeec 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers strings.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 16fdb34..f3152ce 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers colors.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index ecf922d..53b8193 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers execute.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 1265d73..98874c8 100644 (file)
@@ -17,6 +17,10 @@ build_sources_headers fss_basic.h fss_basic_list.h fss_extended.h fss_errors.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
diff --git a/level_3/firewall/data/build/defines b/level_3/firewall/data/build/defines
new file mode 100644 (file)
index 0000000..c16fcf9
--- /dev/null
@@ -0,0 +1,3 @@
+# fss-0000
+
+_en_firewall_debug_ Enable '++debug' parameter for outputting firewall commands as they are being executed.
index 158033a..daef26d 100644 (file)
@@ -20,6 +20,10 @@ build_sources_settings default-blacklist default-whitelist example-device-firewa
 build_shared yes
 build_static yes
 
+defines_all _en_firewall_debug_
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 41d8d2d..a1b2ada 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_basic_list_read.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 6a69862..defe035 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_basic_list_write.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 31dc437..be40484 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_basic_read.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index f2d02e7..8733b3c 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_basic_write.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index c243c90..dcb9034 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_extended_read.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 033ad1b..c1f6cf2 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_extended_write.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 329ec03..c65ede0 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers fss_return_code.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 5887c2c..e280e45 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers init.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static
index 869c096..e48a4af 100644 (file)
@@ -19,6 +19,10 @@ build_sources_headers return_code.h
 build_shared yes
 build_static yes
 
+defines_all
+defines_static
+defines_shared
+
 flags_all -z now
 flags_shared
 flags_static