command_hooks.rb 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. require 'ceedling/plugin'
  2. require 'ceedling/constants'
  3. class CommandHooks < Plugin
  4. attr_reader :config
  5. def setup
  6. @config = {
  7. :pre_mock_generate => ((defined? TOOLS_PRE_MOCK_GENERATE) ? TOOLS_PRE_MOCK_GENERATE : nil ),
  8. :post_mock_generate => ((defined? TOOLS_POST_MOCK_GENERATE) ? TOOLS_POST_MOCK_GENERATE : nil ),
  9. :pre_runner_generate => ((defined? TOOLS_PRE_RUNNER_GENERATE) ? TOOLS_PRE_RUNNER_GENERATE : nil ),
  10. :post_runner_generate => ((defined? TOOLS_POST_RUNNER_GENERATE) ? TOOLS_POST_RUNNER_GENERATE : nil ),
  11. :pre_compile_execute => ((defined? TOOLS_PRE_COMPILE_EXECUTE) ? TOOLS_PRE_COMPILE_EXECUTE : nil ),
  12. :post_compile_execute => ((defined? TOOLS_POST_COMPILE_EXECUTE) ? TOOLS_POST_COMPILE_EXECUTE : nil ),
  13. :pre_link_execute => ((defined? TOOLS_PRE_LINK_EXECUTE) ? TOOLS_PRE_LINK_EXECUTE : nil ),
  14. :post_link_execute => ((defined? TOOLS_POST_LINK_EXECUTE) ? TOOLS_POST_LINK_EXECUTE : nil ),
  15. :pre_test_fixture_execute => ((defined? TOOLS_PRE_TEST_FIXTURE_EXECUTE) ? TOOLS_PRE_TEST_FIXTURE_EXECUTE : nil ),
  16. :post_test_fixture_execute => ((defined? TOOLS_POST_TEST_FIXTURE_EXECUTE) ? TOOLS_POST_TEST_FIXTURE_EXECUTE : nil ),
  17. :pre_test => ((defined? TOOLS_PRE_TEST) ? TOOLS_PRE_TEST : nil ),
  18. :post_test => ((defined? TOOLS_POST_TEST) ? TOOLS_POST_TEST : nil ),
  19. :pre_release => ((defined? TOOLS_PRE_RELEASE) ? TOOLS_PRE_RELEASE : nil ),
  20. :post_release => ((defined? TOOLS_POST_RELEASE) ? TOOLS_POST_RELEASE : nil ),
  21. :pre_build => ((defined? TOOLS_PRE_BUILD) ? TOOLS_PRE_BUILD : nil ),
  22. :post_build => ((defined? TOOLS_POST_BUILD) ? TOOLS_POST_BUILD : nil ),
  23. :post_error => ((defined? TOOLS_POST_ERROR) ? TOOLS_POST_ERROR : nil ),
  24. }
  25. @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
  26. end
  27. def pre_mock_generate(arg_hash); run_hook(:pre_mock_generate, arg_hash[:header_file] ); end
  28. def post_mock_generate(arg_hash); run_hook(:post_mock_generate, arg_hash[:header_file] ); end
  29. def pre_runner_generate(arg_hash); run_hook(:pre_runner_generate, arg_hash[:source ] ); end
  30. def post_runner_generate(arg_hash); run_hook(:post_runner_generate, arg_hash[:runner_file] ); end
  31. def pre_compile_execute(arg_hash); run_hook(:pre_compile_execute, arg_hash[:source_file] ); end
  32. def post_compile_execute(arg_hash); run_hook(:post_compile_execute, arg_hash[:object_file] ); end
  33. def pre_link_execute(arg_hash); run_hook(:pre_link_execute, arg_hash[:executable] ); end
  34. def post_link_execute(arg_hash); run_hook(:post_link_execute, arg_hash[:executable] ); end
  35. def pre_test_fixture_execute(arg_hash); run_hook(:pre_test_fixture_execute, arg_hash[:executable] ); end
  36. def post_test_fixture_execute(arg_hash); run_hook(:post_test_fixture_execute, arg_hash[:executable] ); end
  37. def pre_test(test); run_hook(:pre_test, test ); end
  38. def post_test(test); run_hook(:post_test, test ); end
  39. def pre_release; run_hook(:pre_release ); end
  40. def post_release; run_hook(:post_release ); end
  41. def pre_build; run_hook(:pre_build ); end
  42. def post_build; run_hook(:post_build ); end
  43. def post_error; run_hook(:post_error ); end
  44. private
  45. ##
  46. # Run a hook if its available.
  47. #
  48. # :args:
  49. # - hook: Name of the hook to run
  50. # - name: Name of file (default: "")
  51. #
  52. # :return:
  53. # shell_result.
  54. #
  55. def run_hook_step(hook, name="")
  56. if (hook[:executable])
  57. # Handle argument replacemant ({$1}), and get commandline
  58. cmd = @ceedling[:tool_executor].build_command_line( hook, [], name )
  59. shell_result = @ceedling[:tool_executor].exec(cmd[:line], cmd[:options])
  60. end
  61. end
  62. ##
  63. # Run a hook if its available.
  64. #
  65. # If __which_hook__ is an array, run each of them sequentially.
  66. #
  67. # :args:
  68. # - which_hook: Name of the hook to run
  69. # - name: Name of file
  70. #
  71. def run_hook(which_hook, name="")
  72. if (@config[which_hook])
  73. @ceedling[:streaminator].stdout_puts("Running Hook #{which_hook}...", Verbosity::NORMAL)
  74. if (@config[which_hook].is_a? Array)
  75. @config[which_hook].each do |hook|
  76. run_hook_step(hook, name)
  77. end
  78. elsif (@config[which_hook].is_a? Hash)
  79. run_hook_step( @config[which_hook], name )
  80. else
  81. @ceedling[:streaminator].stdout_puts("Hook #{which_hook} was poorly formed", Verbosity::COMPLAINT)
  82. end
  83. end
  84. end
  85. end