summaryrefslogtreecommitdiffstats
path: root/tinyusb/test/vendor/ceedling/lib/ceedling/flaginator.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tinyusb/test/vendor/ceedling/lib/ceedling/flaginator.rb')
-rwxr-xr-xtinyusb/test/vendor/ceedling/lib/ceedling/flaginator.rb74
1 files changed, 74 insertions, 0 deletions
diff --git a/tinyusb/test/vendor/ceedling/lib/ceedling/flaginator.rb b/tinyusb/test/vendor/ceedling/lib/ceedling/flaginator.rb
new file mode 100755
index 00000000..31d62c46
--- /dev/null
+++ b/tinyusb/test/vendor/ceedling/lib/ceedling/flaginator.rb
@@ -0,0 +1,74 @@
+require 'rubygems'
+require 'rake' # for ext()
+require 'fileutils'
+require 'ceedling/constants'
+
+
+# :flags:
+# :release:
+# :compile:
+# :'test_.+'
+# - -pedantic # add '-pedantic' to every test file
+# :*: # add '-foo' to compilation of all files not main.c
+# - -foo
+# :main: # add '-Wall' to compilation of main.c
+# - -Wall
+# :test:
+# :link:
+# :test_main: # add '--bar --baz' to linking of test_main.exe
+# - --bar
+# - --baz
+
+def partition(hash, &predicate)
+ hash.partition(&predicate).map(&:to_h)
+end
+
+class Flaginator
+
+ constructor :configurator
+
+ def get_flag(hash, file_name)
+ file_key = file_name.to_sym
+
+ # 1. try literals
+ literals, magic = partition(hash) { |k, v| k.to_s =~ /^\w+$/ }
+ return literals[file_key] if literals.include?(file_key)
+
+ any, regex = partition(magic) { |k, v| (k == :'*') || (k == :'.*') } # glob or regex wild card
+
+ # 2. try regexes
+ find_res = regex.find { |k, v| file_name =~ /^#{k.to_s}$/ }
+ return find_res[1] if find_res
+
+ # 3. try anything
+ find_res = any.find { |k, v| file_name =~ /.*/ }
+ return find_res[1] if find_res
+
+ # 4. well, we've tried
+ return []
+ end
+
+ def flag_down( operation, context, file )
+ # create configurator accessor method
+ accessor = ('flags_' + context.to_s).to_sym
+
+ # create simple filename key from whatever filename provided
+ file_name = File.basename( file ).ext('')
+ file_key = File.basename( file ).ext('').to_sym
+
+ # if no entry in configuration for flags for this context, bail out
+ return [] if not @configurator.respond_to?( accessor )
+
+ # get flags sub hash associated with this context
+ flags = @configurator.send( accessor )
+
+ # if operation not represented in flags hash, bail out
+ return [] if not flags.include?( operation )
+
+ # redefine flags to sub hash associated with the operation
+ flags = flags[operation]
+
+ return get_flag(flags, file_name)
+ end
+
+end