diff options
Diffstat (limited to 'tests/vendor/ceedling/lib/flaginator.rb')
| -rw-r--r-- | tests/vendor/ceedling/lib/flaginator.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/vendor/ceedling/lib/flaginator.rb b/tests/vendor/ceedling/lib/flaginator.rb new file mode 100644 index 000000000..0693447f9 --- /dev/null +++ b/tests/vendor/ceedling/lib/flaginator.rb @@ -0,0 +1,54 @@ +require 'rubygems' +require 'rake' # for ext() +require 'fileutils' +require 'constants' + + +# :flags: +# :release: +# :compile: +# :*: # 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 + + +class Flaginator + + constructor :configurator + + 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_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] + + # if our file is in the flags hash, extract the array of flags + if (flags.include?( file_key )) then return flags[file_key] + # if our file isn't in the flags hash, but there is default for all other files, extract array of flags + elsif (flags.include?( :* )) then return flags[:*] + end + + # fall through: flags were specified but none applying to present file + return [] + end + +end |
