ceedling 1.1.9 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +3 -0
- data/.simplecov +73 -0
- data/GIT_COMMIT_SHA +1 -1
- data/Gemfile +84 -8
- data/Gemfile.lock +38 -8
- data/README.md +53 -30
- data/Rakefile +768 -16
- data/assets/{project.yml → features/project.yml} +4 -1
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.c +24 -0
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.h +14 -0
- data/assets/fixtures/bullseye_branch_coverage/test/test_branchy.c +18 -0
- data/assets/fixtures/cppcheck_findings/findings.c +23 -0
- data/assets/fixtures/cppcheck_findings/findings.h +13 -0
- data/assets/fixtures/header_include_path_validation/alt_drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/bar.h +6 -0
- data/assets/fixtures/header_include_path_validation/drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/other_inc/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/test_ambiguous_mock.c +15 -0
- data/assets/fixtures/header_include_path_validation/test_bare_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_mock_path.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_vanilla_path.c +10 -0
- data/assets/fixtures/header_include_path_validation/test_include_outranks_test_include_path.c +16 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock_ambiguous.c +14 -0
- data/assets/fixtures/header_include_path_validation/test_test_include_path_outranks_include.c +17 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/gamma/dup_gamma.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_alpha.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_bare.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_beta.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_override.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive_noop.c +16 -0
- data/assets/fixtures/parent_directory_references/alpha/extra.c +4 -0
- data/assets/fixtures/parent_directory_references/common/helper.c +6 -0
- data/assets/fixtures/parent_directory_references/common/helper.h +6 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_include.c +10 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_source.c +16 -0
- data/assets/fixtures/plain_inline_module.h +9 -0
- data/assets/fixtures/same_named_modules/include/drivers/spi/config.h +6 -0
- data/assets/fixtures/same_named_modules/include/drivers/uart/config.h +6 -0
- data/assets/fixtures/same_named_modules/src/drivers/spi/config.c +8 -0
- data/assets/fixtures/same_named_modules/src/drivers/uart/config.c +10 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs.c +26 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked.c +20 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked_traditional.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_both_modules.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_bare.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_partial_only.c +20 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/main.c +11 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_baz_bar.c +10 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_both_bars.c +12 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_foo_bar.c +10 -0
- data/assets/{test_example_file_boom.c → fixtures/test_nosanitize_boom.c} +9 -0
- data/assets/{test_example_file_crash_assert.c → fixtures/test_nosanitize_crash_assert.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv.c → fixtures/test_nosanitize_crash_sigsegv.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv_with_param.c → fixtures/test_nosanitize_crash_sigsegv_with_param.c} +8 -0
- data/assets/fixtures/test_nosanitize_heap_buffer_overflow.c +31 -0
- data/assets/fixtures/test_nosanitize_leak.c +34 -0
- data/assets/fixtures/test_nosanitize_two_findings.c +36 -0
- data/assets/{test_example_file_ub_shift_overflow.c → fixtures/test_nosanitize_ub_shift_overflow.c} +9 -0
- data/assets/fixtures/test_plain_inline_module.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/alpha/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/beta/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_alpha.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_ambiguous.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_beta.c +15 -0
- data/assets/fixtures/tests_with_conditional_includes/src/feature_extra2.h +13 -0
- data/assets/fixtures/tests_with_conditional_includes/src/macro_target_extra.h +13 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.c +19 -3
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.h +1 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.c +17 -1
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget.c +12 -4
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget_feature.c +8 -5
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/FeatureConfig.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Gpt.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModuleConfig.h +17 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart1.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart2.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/drivers/widget.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01.c +21 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01_legacy.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_02.c +31 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_FeatureConfig.c +15 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_reader.c +13 -0
- data/assets/fixtures/tests_with_duplicate_test_names/integration/test_foo.c +21 -0
- data/assets/fixtures/tests_with_duplicate_test_names/unit/test_foo.c +21 -0
- data/assets/fixtures/tests_with_fallback_conditionals/src/conditional_module.c +28 -0
- data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/test/test_conditionals.c +8 -1
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_lower.s +2 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_upper.S +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.c +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.h +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/test/test_counter_module.c +27 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/app/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/drivers/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.c +30 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/shared/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/test/test_sensor.c +32 -0
- data/bin/actionator.rb +234 -0
- data/bin/app_cfg.rb +7 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +89 -57
- data/bin/cli_helper.rb +90 -49
- data/bin/cli_options_transform.rb +22 -0
- data/bin/{configinator.rb → composinator.rb} +39 -32
- data/bin/mixin_resolvinator.rb +124 -0
- data/bin/mixin_standardizer.rb +31 -61
- data/bin/mixinator.rb +27 -29
- data/bin/mixins.rb +0 -5
- data/bin/objects.yml +20 -7
- data/bin/path_validator.rb +6 -5
- data/bin/projectinator.rb +51 -142
- data/bin/rake_patches.rb +36 -2
- data/bin/recursive_merger.rb +7 -1
- data/bin/versionator.rb +2 -3
- data/ceedling.gemspec +83 -12
- data/docs/BreakingChanges.md +46 -2
- data/docs/CONTRIBUTING.md +45 -29
- data/docs/CeedlingPullRequestChecklist.md +10 -9
- data/docs/Changelog.md +337 -37
- data/docs/KnownIssues.md +39 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +86 -4
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +32 -0
- data/examples/temp_sensor/mixin/add_bullseye.yml +19 -0
- data/examples/wondrous_forest/README.md +3 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.c +21 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.h +14 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.c +23 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.h +14 -0
- data/examples/wondrous_forest/test/TestCalibration.c +39 -0
- data/lib/ceedling/batchinator.rb +81 -22
- data/lib/ceedling/c_extractor/README.md +61 -0
- data/lib/ceedling/c_extractor/c_extractor.rb +33 -2
- data/lib/ceedling/c_extractor/c_extractor_code_text.rb +18 -10
- data/lib/ceedling/c_extractor/c_extractor_constants.rb +10 -10
- data/lib/ceedling/c_extractor/c_extractor_declarations.rb +14 -14
- data/lib/ceedling/c_extractor/c_extractor_functions.rb +10 -13
- data/lib/ceedling/c_extractor/c_extractor_preprocessing.rb +77 -0
- data/lib/ceedling/c_extractor/c_extractor_types.rb +8 -5
- data/lib/ceedling/ceedling.h +33 -0
- data/lib/ceedling/config/config_matchinator.rb +36 -13
- data/lib/ceedling/config/configurator.rb +366 -530
- data/lib/ceedling/config/configurator_builder.rb +253 -365
- data/lib/ceedling/config/configurator_plugins.rb +68 -102
- data/lib/ceedling/config/configurator_setup.rb +343 -610
- data/lib/ceedling/config/configurator_validator.rb +114 -142
- data/lib/ceedling/config/line_marker_suppressors.rb +67 -0
- data/lib/ceedling/constants.rb +60 -6
- data/lib/ceedling/defaults.rb +28 -14
- data/lib/ceedling/defineinator.rb +9 -4
- data/lib/ceedling/dependencies/README.md +69 -0
- data/lib/ceedling/dependencies/dependency_cache_store.rb +160 -0
- data/lib/ceedling/dependencies/dependency_debug_tree.rb +129 -0
- data/lib/ceedling/dependencies/dependency_differ.rb +127 -0
- data/lib/ceedling/dependencies/dependency_hasher.rb +94 -0
- data/lib/ceedling/dependencies/dependency_path_normalizer.rb +80 -0
- data/lib/ceedling/dependencies/dependency_tracker.rb +405 -0
- data/lib/ceedling/dependencies/dependinator.rb +65 -0
- data/lib/ceedling/dependencies/gcc_dependency_parser.rb +86 -0
- data/lib/ceedling/encodinator.rb +23 -11
- data/lib/ceedling/file_finder.rb +373 -89
- data/lib/ceedling/file_finder_helper.rb +44 -33
- data/lib/ceedling/file_path_collection_utils.rb +17 -4
- data/lib/ceedling/file_path_utils.rb +310 -52
- data/lib/ceedling/file_wrapper.rb +245 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +202 -75
- data/lib/ceedling/generators/generator_helper.rb +116 -69
- data/lib/ceedling/generators/generator_mocks.rb +13 -8
- data/lib/ceedling/generators/generator_partials.rb +93 -25
- data/lib/ceedling/generators/generator_test_results.rb +29 -17
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +199 -107
- data/lib/ceedling/generators/generator_test_results_sanity_checker.rb +1 -1
- data/lib/ceedling/includes/include_factory.rb +21 -6
- data/lib/ceedling/includes/include_pathinator.rb +40 -4
- data/lib/ceedling/includes/includes.rb +215 -61
- data/lib/ceedling/loginator.rb +13 -4
- data/lib/ceedling/objects.yml +218 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +272 -117
- data/lib/ceedling/partials/partializer_config.rb +141 -8
- data/lib/ceedling/partials/partializer_helper.rb +88 -2
- data/lib/ceedling/partials/partializer_utils.rb +1 -1
- data/lib/ceedling/partials/partials.rb +4 -4
- data/lib/ceedling/path_matcher.rb +163 -0
- data/lib/ceedling/path_mirror.rb +73 -0
- data/lib/ceedling/plugins/plugin.rb +1 -1
- data/lib/ceedling/plugins/plugin_manager.rb +31 -15
- data/lib/ceedling/plugins/plugin_manager_helper.rb +5 -1
- data/lib/ceedling/plugins/plugin_reportinator.rb +36 -7
- data/lib/ceedling/plugins/plugin_reportinator_helper.rb +3 -3
- data/lib/ceedling/plugins/report_log_writer_plugin.rb +66 -0
- data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +18 -5
- data/lib/ceedling/preprocess/README.md +135 -120
- data/lib/ceedling/preprocess/c_comment_scanner.rb +9 -7
- data/lib/ceedling/preprocess/c_preprocessor_conditionals.rb +27 -10
- data/lib/ceedling/preprocess/preprocessinator.rb +253 -217
- data/lib/ceedling/preprocess/preprocessinator_bare_includes_extractor.rb +7 -10
- data/lib/ceedling/preprocess/preprocessinator_code_finder.rb +8 -6
- data/lib/ceedling/preprocess/preprocessinator_comment_stripper.rb +5 -3
- data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +86 -82
- data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +182 -163
- data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +174 -8
- data/lib/ceedling/preprocess/preprocessinator_reconstructor.rb +41 -20
- data/lib/ceedling/quote_include_isolator.rb +129 -0
- data/lib/ceedling/rake_app/rake_task_registry.rb +9 -9
- data/lib/ceedling/rake_app/rake_wrapper.rb +0 -13
- data/lib/ceedling/rake_app/rakefile_component_resolver.rb +24 -12
- data/lib/ceedling/rakefile.rb +2 -1
- data/lib/ceedling/{tasks_base.rake → rakefiles/base/tasks_base.rake} +1 -1
- data/lib/ceedling/{tasks_filesystem.rake → rakefiles/base/tasks_filesystem.rake} +3 -0
- data/lib/ceedling/rakefiles/release/rules_release.rake +52 -0
- data/lib/ceedling/{erb_wrapper.rb → rakefiles/release/tasks_release.rake} +5 -8
- data/lib/ceedling/rakefiles/tests/rules_tests.rake +43 -0
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +80 -0
- data/lib/ceedling/{tasks_tests.rake → rakefiles/tests/tasks_tests.rake} +11 -20
- data/lib/ceedling/rakefiles/tests/tasks_tests_generate.rake +55 -0
- data/lib/ceedling/release_invoker/README.md +35 -0
- data/lib/ceedling/release_invoker/release_build_executor.rb +263 -0
- data/lib/ceedling/release_invoker/release_build_planner.rb +80 -0
- data/lib/ceedling/release_invoker/release_invoker.rb +78 -0
- data/lib/ceedling/release_invoker/release_invoker_types.rb +40 -0
- data/lib/ceedling/reportinator.rb +18 -2
- data/lib/ceedling/ruby_expandinator.rb +40 -1
- data/lib/ceedling/setupinator.rb +9 -3
- data/lib/ceedling/system_wrapper.rb +17 -0
- data/lib/ceedling/templateinator.rb +146 -0
- data/lib/ceedling/test_context_extractor.rb +59 -28
- data/lib/ceedling/test_invoker/HEADER_COLLISIONS.md +41 -0
- data/lib/ceedling/test_invoker/PIPELINE.md +142 -0
- data/lib/ceedling/test_invoker/README.md +6 -0
- data/lib/ceedling/test_invoker/mock_locator.rb +49 -0
- data/lib/ceedling/test_invoker/partials_manager.rb +426 -0
- data/lib/ceedling/test_invoker/standin_headerinator.rb +136 -0
- data/lib/ceedling/test_invoker/test_bare_includes_extractinator.rb +117 -0
- data/lib/ceedling/test_invoker/test_build_executor.rb +783 -415
- data/lib/ceedling/test_invoker/test_build_planner.rb +175 -70
- data/lib/ceedling/test_invoker/test_build_setup.rb +132 -241
- data/lib/ceedling/test_invoker/test_build_validations.rb +102 -0
- data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +148 -0
- data/lib/ceedling/test_invoker/test_includes_extractinator.rb +34 -0
- data/lib/ceedling/test_invoker/test_includes_preprocessinator.rb +118 -0
- data/lib/ceedling/test_invoker/test_includes_reconcilinator.rb +149 -0
- data/lib/ceedling/test_invoker/test_invoker.rb +16 -183
- data/lib/ceedling/test_invoker/test_invoker_types.rb +85 -16
- data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +121 -0
- data/lib/ceedling/test_invoker/test_pipeline_manager.rb +303 -0
- data/lib/ceedling/test_invoker/test_runner_generatinator.rb +105 -0
- data/lib/ceedling/test_invoker/test_search_paths.rb +73 -0
- data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +78 -0
- data/lib/ceedling/tool_executor.rb +42 -13
- data/lib/ceedling/tool_executor_helper.rb +1 -1
- data/lib/ceedling/tool_validator.rb +124 -123
- data/lib/ceedling/yaml_wrapper.rb +5 -3
- data/lib/version.rb +19 -2
- data/mkdocs.prerelease.yml +42 -0
- data/mkdocs.yml +10 -2
- data/plugins/bullseye/bullseye.rake +70 -107
- data/plugins/bullseye/config/defaults.yml +12 -54
- data/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/plugins/bullseye/lib/bullseye.rb +511 -120
- data/plugins/bullseye/lib/bullseye_constants.rb +100 -0
- data/plugins/command_hooks/lib/command_hooks.rb +117 -199
- data/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb +72 -27
- data/plugins/cppcheck/config/defaults.yml +6 -1
- data/plugins/cppcheck/config/defaults_cppcheck.rb +5 -1
- data/plugins/cppcheck/cppcheck.rake +7 -1
- data/plugins/cppcheck/lib/cppcheck.rb +175 -26
- data/plugins/cppcheck/lib/cppcheck_constants.rb +12 -0
- data/plugins/cppcheck/lib/cppcheck_reports.rb +5 -1
- data/plugins/dependencies/Rakefile +14 -2
- data/plugins/dependencies/config/defaults.yml +9 -6
- data/plugins/dependencies/dependencies.rake +46 -76
- data/plugins/dependencies/example/boss/project.yml +1 -1
- data/plugins/dependencies/example/supervisor/project.yml +1 -1
- data/plugins/dependencies/example/version.tar.gzip +0 -0
- data/plugins/dependencies/lib/dependencies.rb +232 -427
- data/plugins/dependencies/lib/dependency_commands.rb +72 -0
- data/plugins/dependencies/lib/dependency_environment.rb +57 -0
- data/plugins/dependencies/lib/dependency_spec.rb +145 -0
- data/plugins/fff/.rspec +1 -0
- data/plugins/fff/Rakefile +14 -2
- data/plugins/fff/examples/fff_example/project.yml +1 -1
- data/plugins/fff/lib/fff.rb +30 -9
- data/plugins/fff/lib/fff_mock_generator.rb +142 -128
- data/plugins/fff/spec/fff_mock_header_generator_spec.rb +15 -0
- data/plugins/fff/spec/fff_mock_source_generator_spec.rb +14 -0
- data/plugins/fff/spec/spec_helper.rb +45 -0
- data/plugins/fff/src/fff_unity_helper.h +5 -0
- data/plugins/fff/vendor/fff/fakegen.rb +5 -4
- data/plugins/fff/vendor/fff/fff.h +4 -4
- data/plugins/gcov/config/defaults.yml +5 -0
- data/plugins/gcov/gcov.rake +12 -8
- data/plugins/gcov/lib/console_reportinator.rb +140 -20
- data/plugins/gcov/lib/gcov.rb +155 -60
- data/plugins/gcov/lib/gcov_constants.rb +4 -7
- data/plugins/gcov/lib/gcov_reportinator.rb +90 -0
- data/plugins/gcov/lib/gcov_types.rb +62 -1
- data/plugins/gcov/lib/gcovr_reportinator.rb +255 -213
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +122 -44
- data/plugins/module_generator/Rakefile +4 -4
- data/plugins/module_generator/config/module_generator.yml +0 -1
- data/plugins/module_generator/example/project.yml +1 -1
- data/plugins/module_generator/lib/module_generator.rb +117 -87
- data/plugins/module_generator/lib/module_generator_options.rb +150 -0
- data/plugins/module_generator/lib/module_generator_project.rb +45 -0
- data/plugins/module_generator/lib/module_generator_request.rb +83 -0
- data/plugins/module_generator/lib/module_generator_test_file.rb +68 -0
- data/plugins/module_generator/lib/module_generator_unity.rb +24 -0
- data/plugins/module_generator/module_generator.rake +24 -46
- data/plugins/report_build_warnings_log/config/defaults.yml +4 -1
- data/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb +47 -55
- data/plugins/report_build_warnings_log/lib/warning_collector.rb +140 -0
- data/plugins/report_build_warnings_log/lib/warning_reports.rb +135 -0
- data/plugins/report_tests_gtestlike_stdout/assets/test_results.template +3 -0
- data/{spec/units/configurator_builder_spec.rb → plugins/report_tests_gtestlike_stdout/config/defaults.yml} +6 -10
- data/plugins/report_tests_gtestlike_stdout/lib/gtestlike_report.rb +168 -0
- data/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb +25 -1
- data/plugins/report_tests_ide_stdout/assets/test_results.template +50 -0
- data/plugins/report_tests_ide_stdout/config/defaults.yml +13 -0
- data/plugins/report_tests_ide_stdout/lib/ide_report_lines.rb +103 -0
- data/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb +12 -4
- data/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb +33 -51
- data/plugins/report_tests_log_factory/lib/html_tests_reporter.rb +286 -295
- data/plugins/report_tests_log_factory/lib/json_tests_reporter.rb +22 -35
- data/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb +91 -133
- data/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb +72 -86
- data/plugins/report_tests_log_factory/lib/tests_reporter.rb +31 -12
- data/plugins/report_tests_pretty_stdout/assets/{template.erb → test_results.template} +8 -8
- data/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb +18 -48
- data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +13 -2
- data/plugins/sanitize/config/defaults.yml +44 -0
- data/plugins/sanitize/config/defaults_sanitize.rb +20 -0
- data/plugins/sanitize/lib/sanitize.rb +174 -0
- data/plugins/sanitize/lib/sanitize_config.rb +110 -0
- data/plugins/sanitize/lib/sanitize_constants.rb +13 -0
- data/plugins/sanitize/lib/sanitize_findings.rb +85 -0
- data/plugins/sanitize/lib/sanitize_records.rb +115 -0
- data/plugins/sanitize/lib/sanitize_reports.rb +135 -0
- data/plugins/sanitize/sanitize.rake +108 -0
- data/plugins/valgrind/config/defaults.yml +7 -1
- data/plugins/valgrind/config/defaults_valgrind.rb +6 -1
- data/plugins/valgrind/lib/valgrind.rb +202 -39
- data/plugins/valgrind/lib/valgrind_constants.rb +4 -0
- data/plugins/valgrind/lib/valgrind_report.rb +52 -0
- data/plugins/valgrind/valgrind.rake +33 -11
- data/site-local/404.html +248 -14
- data/site-local/configuration/environment-vars.html +248 -14
- data/site-local/configuration/global-collections.html +248 -19
- data/site-local/configuration/index.html +249 -15
- data/site-local/configuration/loading.html +260 -22
- data/site-local/configuration/mixins.html +252 -17
- data/site-local/configuration/parallel-builds.html +248 -14
- data/site-local/configuration/project-file.html +275 -30
- data/site-local/configuration/reference/cexception.html +255 -20
- data/site-local/configuration/reference/cmock.html +281 -14
- data/site-local/configuration/reference/defines.html +262 -19
- data/site-local/configuration/reference/environment.html +251 -17
- data/site-local/configuration/reference/extension.html +361 -16
- data/site-local/configuration/reference/files.html +262 -14
- data/site-local/configuration/reference/flags.html +270 -19
- data/site-local/configuration/reference/index.html +248 -14
- data/site-local/configuration/reference/libraries.html +248 -14
- data/site-local/configuration/reference/mixins.html +248 -14
- data/site-local/configuration/reference/partials.html +249 -19
- data/site-local/configuration/reference/paths.html +275 -15
- data/site-local/configuration/reference/plugins.html +248 -14
- data/site-local/configuration/reference/project.html +291 -14
- data/site-local/configuration/reference/release-build.html +256 -14
- data/site-local/configuration/reference/test-build.html +290 -24
- data/site-local/configuration/reference/test-runner.html +288 -17
- data/site-local/configuration/reference/tools.html +254 -14
- data/site-local/configuration/reference/unity.html +280 -15
- data/site-local/configuration/which-ceedling.html +248 -14
- data/site-local/development/index.html +261 -14
- data/site-local/development/plugins/configuration.html +269 -17
- data/site-local/development/plugins/index.html +267 -15
- data/site-local/development/plugins/plugin-subclass.html +906 -154
- data/site-local/development/plugins/rake-tasks.html +276 -14
- data/site-local/development/releases.html +4708 -0
- data/site-local/development/workflow.html +1030 -51
- data/site-local/getting-started/builds.html +4607 -0
- data/site-local/getting-started/command-line.html +418 -34
- data/site-local/getting-started/example-projects/cipher-quest.html +248 -14
- data/site-local/getting-started/example-projects/index.html +249 -15
- data/site-local/getting-started/example-projects/temp-sensor.html +248 -14
- data/site-local/getting-started/example-projects/wondrous-forest.html +248 -14
- data/site-local/getting-started/index.html +255 -14
- data/site-local/getting-started/installation.html +258 -22
- data/site-local/getting-started/quick-start.html +251 -15
- data/site-local/help.html +255 -14
- data/site-local/index.html +292 -22
- data/site-local/overview/build-system.html +249 -15
- data/site-local/overview/index.html +248 -14
- data/site-local/overview/test-environments.html +257 -14
- data/site-local/overview/tools-and-frameworks.html +248 -14
- data/site-local/plugins/beep.html +251 -14
- data/site-local/plugins/bullseye/index.html +5079 -0
- data/site-local/plugins/bullseye/licensing.html +4840 -0
- data/site-local/plugins/command-hooks.html +265 -27
- data/site-local/plugins/compile-commands-json-db.html +256 -17
- data/site-local/plugins/cppcheck.html +1081 -262
- data/site-local/plugins/dependencies.html +934 -242
- data/site-local/plugins/fff.html +297 -16
- data/site-local/plugins/gcov/examples.html +251 -14
- data/site-local/plugins/gcov/gcovr.html +686 -31
- data/site-local/plugins/gcov/index.html +251 -14
- data/site-local/plugins/gcov/overview.html +259 -18
- data/site-local/plugins/gcov/reportgenerator.html +563 -28
- data/site-local/plugins/gcov/reporting.html +348 -100
- data/site-local/plugins/gcov/setup.html +253 -15
- data/site-local/plugins/gcov/tool-versions.html +301 -19
- data/site-local/plugins/gcov/troubleshooting.html +273 -36
- data/site-local/plugins/index.html +294 -36
- data/site-local/plugins/module-generator.html +779 -195
- data/site-local/plugins/report-build-warnings-log.html +578 -33
- data/site-local/plugins/report-tests-gtestlike-stdout.html +467 -84
- data/site-local/plugins/report-tests-ide-stdout.html +654 -51
- data/site-local/plugins/report-tests-log-factory.html +337 -70
- data/site-local/plugins/report-tests-pretty-stdout.html +251 -14
- data/site-local/plugins/report-tests-raw-output-log.html +251 -14
- data/site-local/plugins/report-tests-teamcity-stdout.html +251 -14
- data/site-local/plugins/sanitize.html +5332 -0
- data/site-local/plugins/valgrind.html +416 -26
- data/site-local/{plugins/bullseye.html → project/index.html} +297 -217
- data/site-local/project/release-history.html +251 -17
- data/site-local/project/sbom.html +4726 -0
- data/site-local/project/upgrade.html +250 -16
- data/site-local/reference/build-directives.html +257 -14
- data/site-local/reference/command-line.html +373 -16
- data/site-local/reference/environment-vars.html +248 -14
- data/site-local/reference/gcov-plugin.html +492 -18
- data/site-local/reference/global-collections.html +249 -15
- data/site-local/reference/index.html +248 -14
- data/site-local/reference/partials-macros.html +258 -14
- data/site-local/reference/project-configuration.html +248 -14
- data/site-local/sitemap.xml.gz +0 -0
- data/site-local/snapshot/assets/{project.yml → features/project.yml} +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +248 -14
- data/site-local/snapshot/examples/temp_sensor/index.html +248 -14
- data/site-local/snapshot/examples/wondrous_forest/index.html +265 -25
- data/site-local/snapshot/plugins/bullseye/config/defaults.yml +24 -0
- data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/site-local/snapshot/plugins/gcov/config/defaults.yml +5 -0
- data/site-local/testing-guide/build-directives.html +332 -22
- data/site-local/testing-guide/conventions.html +678 -153
- data/site-local/testing-guide/frameworks.html +248 -14
- data/site-local/testing-guide/index.html +248 -21
- data/site-local/testing-guide/partials/configuration.html +248 -14
- data/site-local/testing-guide/partials/conventions.html +316 -17
- data/site-local/testing-guide/partials/directives.html +456 -48
- data/site-local/testing-guide/partials/example.html +248 -14
- data/site-local/testing-guide/partials/index.html +255 -14
- data/site-local/testing-guide/partials/overview.html +248 -14
- data/site-local/testing-guide/partials/variables.html +248 -14
- data/site-local/testing-guide/test-cases.html +248 -14
- data/site-local/testing-guide/test-sample.html +248 -14
- data/site-local/testing-guide/test-suite-anatomy.html +248 -14
- data/spec/integration/actionator_file_operations_spec.rb +287 -0
- data/spec/integration/analysis_tool_output_spec.rb +204 -0
- data/spec/{units/c_extractor/c_extractor_integration_spec.rb → integration/c_extractor_composition_spec.rb} +196 -17
- data/spec/integration/command_hooks_plugin_spec.rb +152 -0
- data/spec/integration/compile_commands_json_db_spec.rb +76 -0
- data/spec/integration/configurator_pipeline_spec.rb +180 -0
- data/spec/integration/configurator_plugins_spec.rb +122 -0
- data/spec/integration/configurator_validation_spec.rb +98 -0
- data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +396 -0
- data/spec/integration/dependencies/dependency_tracker_core_spec.rb +244 -0
- data/spec/integration/dependencies/dependency_tracker_diagnose_spec.rb +224 -0
- data/spec/integration/dependencies/dependency_tracker_filename_handling_spec.rb +118 -0
- data/spec/integration/dependencies/dependency_tracker_gcc_deps_spec.rb +199 -0
- data/spec/integration/dependencies/dependency_tracker_pruning_spec.rb +167 -0
- data/spec/integration/dependencies_plugin_spec.rb +473 -0
- data/spec/integration/erb_dependency_removed_spec.rb +167 -0
- data/spec/integration/includes_extraction_spec.rb +612 -0
- data/spec/integration/mixin_loading_spec.rb +414 -0
- data/spec/integration/module_generator_spec.rb +436 -0
- data/spec/integration/partials_fallback_preprocessing_spec.rb +316 -0
- data/spec/integration/partials_header_composition_spec.rb +889 -0
- data/spec/integration/partials_module_resolution_spec.rb +372 -0
- data/spec/integration/partials_symbol_linkage_spec.rb +371 -0
- data/spec/integration/preprocessing_transient_io_retry_spec.rb +135 -0
- data/spec/integration/quote_include_isolator_spec.rb +167 -0
- data/spec/integration/report_build_warnings_log_spec.rb +170 -0
- data/spec/integration/report_tests_log_factory_spec.rb +100 -0
- data/spec/integration/sanitizer_exclusions_spec.rb +126 -0
- data/spec/integration/system_harness_sanitizers_spec.rb +104 -0
- data/spec/integration/test_build_parallel_barrier_spec.rb +89 -0
- data/spec/integration/test_executable_manifest_spec.rb +118 -0
- data/spec/integration/test_includes_extractinator_spec.rb +293 -0
- data/spec/integration/tool_executor_spec.rb +224 -0
- data/spec/integration/tool_validator_spec.rb +133 -0
- data/spec/integration/vendor_copy_transient_io_retry_spec.rb +130 -0
- data/spec/manual/stress_test.rb +1 -1
- data/spec/support/config_yaml_helper.rb +17 -0
- data/spec/support/fixtures/sanitizer_reports/clang_asan_heap.txt +45 -0
- data/spec/support/fixtures/sanitizer_reports/clang_ubsan_shift.txt +5 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_heap.txt +47 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_leak.txt +10 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_segv.txt +6 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_ubsan_shift.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__all_pass.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_branches_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_functions_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_none.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__empty.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__gcov_context.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__mixed_all.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_matching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_multiline.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_nonmatching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_with_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__stdout_only.txt +6 -0
- data/spec/support/fixtures/templates/ide__all_pass.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_branches_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_functions_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_none.txt +10 -0
- data/spec/support/fixtures/templates/ide__empty.txt +8 -0
- data/spec/support/fixtures/templates/ide__gcov_context.txt +28 -0
- data/spec/support/fixtures/templates/ide__mixed_all.txt +29 -0
- data/spec/support/fixtures/templates/ide__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/ide__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__stdout_only.txt +16 -0
- data/spec/support/fixtures/templates/pretty__all_pass.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_branches_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_functions_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_none.txt +8 -0
- data/spec/support/fixtures/templates/pretty__empty.txt +6 -0
- data/spec/support/fixtures/templates/pretty__gcov_context.txt +31 -0
- data/spec/support/fixtures/templates/pretty__mixed_all.txt +35 -0
- data/spec/support/fixtures/templates/pretty__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/pretty__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__stdout_only.txt +15 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.log +51 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.xml +182 -0
- data/spec/support/include_guard_helper.rb +20 -0
- data/spec/support/integration/configurator_integration_helper.rb +159 -0
- data/spec/support/integration/dependency_tracker_integration_helper.rb +136 -0
- data/spec/support/integration/partials_generation_integration_helper.rb +726 -0
- data/spec/support/integration/spec_integration_helper.rb +285 -0
- data/spec/support/integration/test_includes_harness.rb +259 -0
- data/spec/support/integration/tool_executor_integration_helper.rb +55 -0
- data/spec/support/spec_helper.rb +41 -0
- data/spec/support/system/sanitizers/asan_ubsan.yml +82 -0
- data/spec/support/system/sanitizers/asan_ubsan_leaks.yml +57 -0
- data/spec/support/system/simplecov_boot.rb +66 -0
- data/spec/support/system/spec_system_helper.rb +376 -16
- data/spec/support/system/system_context.rb +181 -59
- data/spec/support/template_render_cases.rb +166 -0
- data/spec/system/bracket_path_handling_spec.rb +175 -0
- data/spec/system/build_output_mirroring_spec.rb +89 -0
- data/spec/system/build_recovery_spec.rb +382 -0
- data/spec/system/bullseye_deployment_spec.rb +102 -0
- data/spec/system/cli_surface_spec.rb +245 -0
- data/spec/system/command_hooks_spec.rb +117 -0
- data/spec/system/conditional_include_macro_visibility_spec.rb +32 -124
- data/spec/system/conditional_mock_includes_spec.rb +181 -0
- data/spec/system/cppcheck_deployment_spec.rb +26 -8
- data/spec/system/delta_builds_spec.rb +751 -0
- data/spec/system/deployment_as_gem_spec.rb +7 -0
- data/spec/system/deployment_as_vendor_spec.rb +29 -145
- data/spec/system/dumpconfig_spec.rb +137 -0
- data/spec/system/encoding_stress_spec.rb +7 -4
- data/spec/system/example_cipher_quest_spec.rb +25 -100
- data/spec/system/example_temp_sensor_spec.rb +30 -172
- data/spec/system/example_wondrous_forest_spec.rb +25 -62
- data/spec/system/extension_multiple_values_spec.rb +75 -0
- data/spec/system/files_paths_reporting_spec.rb +154 -0
- data/spec/system/gcov_deployment_spec.rb +72 -3
- data/spec/system/header_include_path_validation_spec.rb +222 -0
- data/spec/system/implicit_source_header_correspondence_disambiguation_spec.rb +100 -0
- data/spec/system/include_path_reconciliation_spec.rb +64 -0
- data/spec/system/mixin_ordering_spec.rb +30 -415
- data/spec/system/mocks_partials_configuration_validation_spec.rb +126 -0
- data/spec/system/parent_directory_reference_spec.rb +114 -0
- data/spec/system/partials_module_disambiguation_spec.rb +143 -0
- data/spec/system/pinned_thread_count_spec.rb +102 -0
- data/spec/system/plugin_delta_builds_spec.rb +179 -0
- data/spec/system/preprocessing_encoding_spec.rb +87 -4
- data/spec/system/preprocessing_fallback_conditionals_spec.rb +19 -25
- data/spec/system/preprocessing_parameterized_tests_spec.rb +2 -2
- data/spec/system/rake_release_task_path_disambiguation_spec.rb +97 -0
- data/spec/system/rake_test_task_path_disambiguation_spec.rb +118 -0
- data/spec/system/report_and_tooling_plugins_spec.rb +327 -0
- data/spec/system/ruby_replacement_spec.rb +1 -1
- data/spec/system/same_named_modules_spec.rb +115 -0
- data/spec/system/sanitize_deployment_spec.rb +64 -0
- data/spec/system/shuffle_tests_spec.rb +139 -0
- data/spec/system/sibling_header_collision_spec.rb +620 -0
- data/spec/system/subdir_include_preservation_spec.rb +63 -0
- data/spec/system/support/bullseye_common_test_cases.rb +369 -0
- data/spec/system/support/bullseye_helpers.rb +70 -0
- data/spec/system/support/common_test_cases.rb +167 -43
- data/spec/system/support/cppcheck_common_test_cases.rb +80 -0
- data/spec/system/support/cppcheck_helpers.rb +10 -8
- data/spec/system/support/gcov_common_test_cases.rb +173 -37
- data/spec/system/support/gcov_helpers.rb +3 -3
- data/spec/system/support/gcov_partials_test_cases.rb +48 -2
- data/spec/system/support/sanitize_common_test_cases.rb +222 -0
- data/spec/system/support/sanitize_helpers.rb +27 -0
- data/spec/system/support/valgrind_common_test_cases.rb +116 -16
- data/spec/system/support/valgrind_helpers.rb +3 -4
- data/spec/system/test_pipeline_stop_points_spec.rb +160 -0
- data/spec/system/test_runner_system_include_spec.rb +19 -41
- data/spec/system/test_source_file_directive_spec.rb +235 -0
- data/spec/system/upgrade_as_vendor_spec.rb +25 -46
- data/spec/system/valgrind_deployment_spec.rb +41 -0
- data/spec/units/batchinator_spec.rb +314 -0
- data/spec/units/bin/actionator_spec.rb +412 -0
- data/spec/units/bin/app_cfg_spec.rb +90 -0
- data/spec/units/bin/cli_handler_spec.rb +204 -0
- data/spec/units/bin/cli_helper_spec.rb +238 -10
- data/spec/units/bin/cli_options_transform_spec.rb +49 -0
- data/spec/units/bin/composinator_spec.rb +236 -0
- data/spec/units/bin/{projectinator_mixin_spec.rb → mixin_resolvinator_spec.rb} +122 -83
- data/spec/units/bin/mixin_standardizer_spec.rb +4 -3
- data/spec/units/bin/mixinator_spec.rb +58 -22
- data/spec/units/bin/path_validator_spec.rb +112 -0
- data/spec/units/bin/projectinator_spec.rb +223 -0
- data/spec/units/bin/rake_patches_spec.rb +52 -0
- data/spec/units/bin/recursive_merger_spec.rb +22 -0
- data/spec/units/bin/versionator_spec.rb +104 -0
- data/spec/units/c_extractor/c_extractor_code_text_spec.rb +4 -4
- data/spec/units/c_extractor/c_extractor_declarations_spec.rb +70 -0
- data/spec/units/c_extractor/c_extractor_functions_spec.rb +75 -1
- data/spec/units/c_extractor/c_extractor_preprocessing_spec.rb +158 -0
- data/spec/units/c_extractor/c_extractor_spec.rb +236 -6
- data/spec/units/ceedling/templateinator_golden_spec.rb +84 -0
- data/spec/units/ceedling/templateinator_spec.rb +188 -0
- data/spec/units/config/configurator_builder_spec.rb +444 -0
- data/spec/units/config/configurator_plugins_spec.rb +160 -0
- data/spec/units/config/configurator_setup_spec.rb +706 -6
- data/spec/units/config/configurator_spec.rb +952 -0
- data/spec/units/config/configurator_validator_spec.rb +259 -0
- data/spec/units/config/line_marker_suppressors_spec.rb +89 -0
- data/spec/units/config_matchinator_spec.rb +103 -0
- data/spec/units/defineinator_spec.rb +158 -0
- data/spec/units/dependencies/dependency_cache_store_spec.rb +364 -0
- data/spec/units/dependencies/dependency_debug_tree_spec.rb +189 -0
- data/spec/units/dependencies/dependency_differ_spec.rb +139 -0
- data/spec/units/dependencies/dependency_hasher_spec.rb +141 -0
- data/spec/units/dependencies/dependency_path_normalizer_spec.rb +111 -0
- data/spec/units/dependencies/dependency_tracker_spec.rb +905 -0
- data/spec/units/dependencies/dependinator_spec.rb +99 -0
- data/spec/units/dependencies/gcc_dependency_parser_spec.rb +152 -0
- data/spec/units/encodinator_spec.rb +92 -0
- data/spec/units/file_finder_helper_spec.rb +99 -15
- data/spec/units/file_finder_spec.rb +495 -0
- data/spec/units/file_path_collection_utils_spec.rb +9 -0
- data/spec/units/file_path_utils_spec.rb +736 -0
- data/spec/units/file_wrapper_spec.rb +447 -0
- data/spec/units/filename_extension_spec.rb +120 -0
- data/spec/units/flaginator_spec.rb +114 -0
- data/spec/units/generators/generator_helper_spec.rb +113 -0
- data/spec/units/generators/generator_mocks_spec.rb +131 -0
- data/spec/units/generators/generator_partials_spec.rb +366 -77
- data/spec/units/generators/generator_spec.rb +317 -0
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +169 -9
- data/spec/units/generators/generator_test_results_sanity_checker_spec.rb +14 -6
- data/spec/units/generators/generator_test_results_spec.rb +65 -8
- data/spec/units/generators/generator_test_runner_spec.rb +1 -1
- data/spec/units/includes/include_factory_spec.rb +53 -0
- data/spec/units/includes/include_pathinator_spec.rb +269 -0
- data/spec/units/includes/include_spec.rb +8 -4
- data/spec/units/includes/includes_spec.rb +326 -18
- data/spec/units/mock_locator_spec.rb +74 -0
- data/spec/units/parsing_parcels_spec.rb +65 -0
- data/spec/units/partials/partializer_config_spec.rb +284 -18
- data/spec/units/partials/partializer_helper_spec.rb +122 -0
- data/spec/units/partials/partializer_spec.rb +474 -36
- data/spec/units/partials/partializer_utils_spec.rb +4 -4
- data/spec/units/partials_manager_spec.rb +539 -0
- data/spec/units/path_matcher_spec.rb +193 -0
- data/spec/units/path_mirror_spec.rb +103 -0
- data/spec/units/plugin_manager_spec.rb +77 -0
- data/spec/units/plugin_reportinator_spec.rb +78 -3
- data/spec/units/plugins/bullseye_spec.rb +1068 -0
- data/spec/units/plugins/command_hooks_spec.rb +157 -0
- data/spec/units/plugins/compile_commands_json_db_spec.rb +145 -0
- data/spec/units/plugins/console_reportinator_spec.rb +370 -0
- data/spec/units/plugins/cppcheck_spec.rb +330 -4
- data/spec/units/plugins/cppunit_tests_reporter_spec.rb +118 -0
- data/spec/units/plugins/dependencies_spec.rb +295 -0
- data/spec/units/plugins/dependency_commands_spec.rb +83 -0
- data/spec/units/plugins/dependency_environment_spec.rb +64 -0
- data/spec/units/plugins/dependency_spec_spec.rb +170 -0
- data/spec/units/plugins/gcov_reportinator_spec.rb +272 -0
- data/spec/units/plugins/gcov_spec.rb +521 -0
- data/spec/units/plugins/gcovr_reportinator_spec.rb +795 -0
- data/spec/units/plugins/gtestlike_report_spec.rb +363 -0
- data/spec/units/plugins/html_tests_reporter_spec.rb +158 -0
- data/spec/units/plugins/ide_report_lines_spec.rb +229 -0
- data/spec/units/plugins/json_tests_reporter_spec.rb +87 -0
- data/spec/units/plugins/junit_tests_reporter_spec.rb +237 -0
- data/spec/units/plugins/module_generator_options_spec.rb +185 -0
- data/spec/units/plugins/module_generator_project_spec.rb +55 -0
- data/spec/units/plugins/module_generator_request_spec.rb +107 -0
- data/spec/units/plugins/module_generator_spec.rb +214 -0
- data/spec/units/plugins/module_generator_test_file_spec.rb +102 -0
- data/spec/units/plugins/module_generator_unity_spec.rb +37 -0
- data/spec/units/plugins/report_build_warnings_log_spec.rb +199 -0
- data/spec/units/plugins/report_log_writer_plugin_spec.rb +94 -0
- data/spec/units/plugins/report_tests_gtestlike_stdout_spec.rb +274 -0
- data/spec/units/plugins/report_tests_ide_stdout_spec.rb +140 -0
- data/spec/units/plugins/report_tests_log_factory_spec.rb +210 -0
- data/spec/units/plugins/report_tests_pretty_stdout_spec.rb +83 -0
- data/spec/units/plugins/report_tests_raw_output_log_spec.rb +98 -0
- data/spec/units/plugins/report_tests_stdout_plugin_spec.rb +145 -0
- data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +121 -0
- data/spec/units/plugins/reportgenerator_reportinator_spec.rb +410 -0
- data/spec/units/plugins/sanitize_config_spec.rb +119 -0
- data/spec/units/plugins/sanitize_findings_spec.rb +69 -0
- data/spec/units/plugins/sanitize_records_spec.rb +114 -0
- data/spec/units/plugins/sanitize_reports_spec.rb +84 -0
- data/spec/units/plugins/sanitize_spec.rb +300 -0
- data/spec/units/plugins/tests_reporter_spec.rb +89 -0
- data/spec/units/plugins/valgrind_spec.rb +560 -0
- data/spec/units/plugins/warning_collector_spec.rb +185 -0
- data/spec/units/plugins/warning_reports_spec.rb +150 -0
- data/spec/units/preprocess/c_comment_scanner_spec.rb +17 -17
- data/spec/units/preprocess/c_preprocessor_conditionals_spec.rb +94 -0
- data/spec/units/preprocess/preprocessinator_bare_includes_extractor_spec.rb +73 -0
- data/spec/units/preprocess/preprocessinator_code_finder_spec.rb +35 -16
- data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +129 -48
- data/spec/units/preprocess/preprocessinator_file_assembler_spec.rb +292 -9
- data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +294 -16
- data/spec/units/preprocess/preprocessinator_line_marker_includes_extractor_spec.rb +356 -6
- data/spec/units/preprocess/preprocessinator_reconstructor_spec.rb +58 -4
- data/spec/units/preprocess/preprocessinator_spec.rb +693 -5
- data/spec/units/quote_include_isolator_spec.rb +176 -0
- data/spec/units/rake_app/rake_invocation_tracker_spec.rb +94 -0
- data/spec/units/rake_app/rake_task_registry_spec.rb +263 -0
- data/spec/units/rake_app/rake_utils_spec.rb +54 -0
- data/spec/units/rake_app/rake_wrapper_spec.rb +64 -0
- data/spec/units/rake_app/rakefile_component_resolver_spec.rb +182 -0
- data/spec/units/release_build_executor_spec.rb +404 -0
- data/spec/units/release_build_planner_spec.rb +144 -0
- data/spec/units/release_invoker_spec.rb +127 -0
- data/spec/units/reportinator_spec.rb +35 -0
- data/spec/units/ruby_expandinator_spec.rb +36 -0
- data/spec/units/standin_headerinator_spec.rb +168 -0
- data/spec/units/system_wrapper_spec.rb +16 -0
- data/spec/units/test_build_executor_spec.rb +1653 -8
- data/spec/units/test_build_planner_spec.rb +878 -0
- data/spec/units/test_build_setup_spec.rb +583 -0
- data/spec/units/test_context_extractor_spec.rb +51 -3
- data/spec/units/test_file_preprocessinator_spec.rb +206 -0
- data/spec/units/test_includes_extractinator_spec.rb +764 -0
- data/spec/units/test_invoker/objects_wiring_spec.rb +31 -0
- data/spec/units/test_invoker_spec.rb +147 -0
- data/spec/units/test_invoker_types_spec.rb +182 -0
- data/spec/units/test_pipeline_helpers_spec.rb +100 -0
- data/spec/units/test_pipeline_manager_spec.rb +415 -0
- data/spec/units/test_runner_generatinator_spec.rb +215 -0
- data/spec/units/test_runner_manager_spec.rb +70 -0
- data/spec/units/test_search_paths_spec.rb +84 -0
- data/spec/units/test_source_file_directive_resolver_spec.rb +239 -0
- data/spec/units/tool_executor_helper_spec.rb +1 -1
- data/spec/units/tool_executor_spec.rb +571 -2
- data/spec/units/tool_validator_spec.rb +303 -24
- data/spec/units/version_spec.rb +74 -0
- data/spec/units/yaml_wrapper_spec.rb +4 -1
- data/vendor/cmock/docs/CMock_Summary.md +11 -0
- data/vendor/cmock/lib/cmock_config.rb +1 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +31 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +8 -2
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +2 -2
- data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +7 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +4 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
- data/vendor/cmock/vendor/unity/test/Makefile +9 -2
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/cmock/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/cmock/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +78 -0
- data/vendor/cmock/vendor/unity/test/tests/test_unity_test_summary.rb +58 -0
- data/vendor/diy/lib/diy/factory.rb +5 -4
- data/vendor/diy/lib/diy.rb +5 -4
- data/vendor/diy/sample_code/car.rb +5 -4
- data/vendor/diy/sample_code/chassis.rb +5 -4
- data/vendor/diy/sample_code/diy_example.rb +5 -4
- data/vendor/diy/sample_code/engine.rb +5 -4
- data/vendor/diy/sample_code/objects.yml +5 -4
- data/vendor/diy/test/constructor.rb +5 -4
- data/vendor/diy/test/diy_test.rb +5 -4
- data/vendor/diy/test/factory_test.rb +5 -4
- data/vendor/diy/test/files/broken_construction.yml +5 -4
- data/vendor/diy/test/files/cat/cat.rb +5 -4
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -4
- data/vendor/diy/test/files/cat/heritage.rb +5 -4
- data/vendor/diy/test/files/cat/needs_input.yml +5 -4
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +5 -4
- data/vendor/diy/test/files/dog/dog_model.rb +5 -4
- data/vendor/diy/test/files/dog/dog_presenter.rb +5 -4
- data/vendor/diy/test/files/dog/dog_view.rb +5 -4
- data/vendor/diy/test/files/dog/file_resolver.rb +5 -4
- data/vendor/diy/test/files/dog/other_thing.rb +5 -4
- data/vendor/diy/test/files/dog/simple.yml +5 -4
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +5 -4
- data/vendor/diy/test/files/donkey/foo.rb +5 -4
- data/vendor/diy/test/files/factory/beef.rb +5 -4
- data/vendor/diy/test/files/factory/dog.rb +5 -4
- data/vendor/diy/test/files/factory/factory.yml +5 -4
- data/vendor/diy/test/files/factory/farm/llama.rb +5 -4
- data/vendor/diy/test/files/factory/farm/pork.rb +5 -4
- data/vendor/diy/test/files/factory/kitten.rb +5 -4
- data/vendor/diy/test/files/fud/objects.yml +5 -4
- data/vendor/diy/test/files/fud/toy.rb +5 -4
- data/vendor/diy/test/files/functions/attached_things_builder.rb +5 -4
- data/vendor/diy/test/files/functions/invalid_method.yml +5 -4
- data/vendor/diy/test/files/functions/method_extractor.rb +5 -4
- data/vendor/diy/test/files/functions/nonsingleton_objects.yml +5 -4
- data/vendor/diy/test/files/functions/objects.yml +5 -4
- data/vendor/diy/test/files/functions/thing.rb +5 -4
- data/vendor/diy/test/files/functions/thing_builder.rb +5 -4
- data/vendor/diy/test/files/functions/things_builder.rb +5 -4
- data/vendor/diy/test/files/gnu/objects.yml +5 -4
- data/vendor/diy/test/files/gnu/thinger.rb +5 -4
- data/vendor/diy/test/files/goat/base.rb +5 -4
- data/vendor/diy/test/files/goat/can.rb +5 -4
- data/vendor/diy/test/files/goat/goat.rb +5 -4
- data/vendor/diy/test/files/goat/objects.yml +5 -4
- data/vendor/diy/test/files/goat/paper.rb +5 -4
- data/vendor/diy/test/files/goat/plane.rb +5 -4
- data/vendor/diy/test/files/goat/shirt.rb +5 -4
- data/vendor/diy/test/files/goat/wings.rb +5 -4
- data/vendor/diy/test/files/horse/holder_thing.rb +5 -4
- data/vendor/diy/test/files/horse/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/animal/bird.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/cat.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +5 -4
- data/vendor/diy/test/files/namespace/bad_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/class_name_combine.yml +5 -4
- data/vendor/diy/test/files/namespace/no_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/road.rb +5 -4
- data/vendor/diy/test/files/namespace/sky.rb +5 -4
- data/vendor/diy/test/files/namespace/subcontext.yml +5 -4
- data/vendor/diy/test/files/non_singleton/air.rb +5 -4
- data/vendor/diy/test/files/non_singleton/fat_cat.rb +5 -4
- data/vendor/diy/test/files/non_singleton/objects.yml +5 -4
- data/vendor/diy/test/files/non_singleton/pig.rb +5 -4
- data/vendor/diy/test/files/non_singleton/thread_spinner.rb +5 -4
- data/vendor/diy/test/files/non_singleton/tick.rb +5 -4
- data/vendor/diy/test/files/non_singleton/yard.rb +5 -4
- data/vendor/diy/test/files/yak/core_model.rb +5 -4
- data/vendor/diy/test/files/yak/core_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/core_view.rb +5 -4
- data/vendor/diy/test/files/yak/data_source.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_model.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_view.rb +5 -4
- data/vendor/diy/test/files/yak/giant_squid.rb +5 -4
- data/vendor/diy/test/files/yak/krill.rb +5 -4
- data/vendor/diy/test/files/yak/my_objects.yml +5 -4
- data/vendor/diy/test/files/yak/sub_sub_context_test.yml +5 -4
- data/vendor/diy/test/test_helper.rb +5 -4
- data/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/unity/auto/generate_test_runner.rb +5 -1
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/unity/test/tests/test_generate_test_runner.rb +29 -0
- metadata +770 -285
- data/assets/tests_with_fallback_conditionals/src/conditional_module.c +0 -18
- data/bin/actions_wrapper.rb +0 -51
- data/docs/mkdocs/assets/images/ceedling-logo-circle.png +0 -0
- data/docs/mkdocs/assets/images/ceedling.svg +0 -90
- data/docs/mkdocs/assets/images/favicon.png +0 -0
- data/docs/mkdocs/assets/stylesheets/admonitions.css +0 -152
- data/docs/mkdocs/assets/stylesheets/fixes-local.css +0 -15
- data/docs/mkdocs/assets/stylesheets/styling.css +0 -102
- data/docs/mkdocs/configuration/environment-vars.md +0 -14
- data/docs/mkdocs/configuration/global-collections.md +0 -156
- data/docs/mkdocs/configuration/index.md +0 -75
- data/docs/mkdocs/configuration/loading.md +0 -89
- data/docs/mkdocs/configuration/mixins.md +0 -607
- data/docs/mkdocs/configuration/parallel-builds.md +0 -97
- data/docs/mkdocs/configuration/project-file.md +0 -216
- data/docs/mkdocs/configuration/reference/cexception.md +0 -35
- data/docs/mkdocs/configuration/reference/cmock.md +0 -106
- data/docs/mkdocs/configuration/reference/defines.md +0 -352
- data/docs/mkdocs/configuration/reference/environment.md +0 -55
- data/docs/mkdocs/configuration/reference/extension.md +0 -63
- data/docs/mkdocs/configuration/reference/files.md +0 -154
- data/docs/mkdocs/configuration/reference/flags.md +0 -296
- data/docs/mkdocs/configuration/reference/index.md +0 -176
- data/docs/mkdocs/configuration/reference/libraries.md +0 -82
- data/docs/mkdocs/configuration/reference/mixins.md +0 -24
- data/docs/mkdocs/configuration/reference/partials.md +0 -38
- data/docs/mkdocs/configuration/reference/paths.md +0 -276
- data/docs/mkdocs/configuration/reference/plugins.md +0 -60
- data/docs/mkdocs/configuration/reference/project.md +0 -333
- data/docs/mkdocs/configuration/reference/release-build.md +0 -62
- data/docs/mkdocs/configuration/reference/test-build.md +0 -55
- data/docs/mkdocs/configuration/reference/test-runner.md +0 -61
- data/docs/mkdocs/configuration/reference/tools.md +0 -457
- data/docs/mkdocs/configuration/reference/unity.md +0 -49
- data/docs/mkdocs/configuration/which-ceedling.md +0 -77
- data/docs/mkdocs/development/index.md +0 -50
- data/docs/mkdocs/development/plugins/configuration.md +0 -164
- data/docs/mkdocs/development/plugins/index.md +0 -84
- data/docs/mkdocs/development/plugins/plugin-subclass.md +0 -513
- data/docs/mkdocs/development/plugins/rake-tasks.md +0 -54
- data/docs/mkdocs/development/workflow.md +0 -284
- data/docs/mkdocs/getting-started/command-line.md +0 -477
- data/docs/mkdocs/getting-started/example-projects/cipher-quest.md +0 -65
- data/docs/mkdocs/getting-started/example-projects/index.md +0 -49
- data/docs/mkdocs/getting-started/example-projects/temp-sensor.md +0 -60
- data/docs/mkdocs/getting-started/example-projects/wondrous-forest.md +0 -45
- data/docs/mkdocs/getting-started/index.md +0 -41
- data/docs/mkdocs/getting-started/installation.md +0 -179
- data/docs/mkdocs/getting-started/quick-start.md +0 -86
- data/docs/mkdocs/help.md +0 -49
- data/docs/mkdocs/index.md +0 -222
- data/docs/mkdocs/overview/build-system.md +0 -115
- data/docs/mkdocs/overview/index.md +0 -29
- data/docs/mkdocs/overview/test-environments.md +0 -33
- data/docs/mkdocs/overview/tools-and-frameworks.md +0 -115
- data/docs/mkdocs/plugins/beep.md +0 -134
- data/docs/mkdocs/plugins/bullseye.md +0 -83
- data/docs/mkdocs/plugins/command-hooks.md +0 -268
- data/docs/mkdocs/plugins/compile-commands-json-db.md +0 -42
- data/docs/mkdocs/plugins/cppcheck.md +0 -377
- data/docs/mkdocs/plugins/dependencies.md +0 -310
- data/docs/mkdocs/plugins/fff.md +0 -247
- data/docs/mkdocs/plugins/gcov/examples.md +0 -92
- data/docs/mkdocs/plugins/gcov/gcovr.md +0 -412
- data/docs/mkdocs/plugins/gcov/index.md +0 -74
- data/docs/mkdocs/plugins/gcov/overview.md +0 -145
- data/docs/mkdocs/plugins/gcov/reportgenerator.md +0 -140
- data/docs/mkdocs/plugins/gcov/reporting.md +0 -147
- data/docs/mkdocs/plugins/gcov/setup.md +0 -232
- data/docs/mkdocs/plugins/gcov/tool-versions.md +0 -60
- data/docs/mkdocs/plugins/gcov/troubleshooting.md +0 -78
- data/docs/mkdocs/plugins/index.md +0 -261
- data/docs/mkdocs/plugins/module-generator.md +0 -267
- data/docs/mkdocs/plugins/report-build-warnings-log.md +0 -42
- data/docs/mkdocs/plugins/report-tests-gtestlike-stdout.md +0 -98
- data/docs/mkdocs/plugins/report-tests-ide-stdout.md +0 -63
- data/docs/mkdocs/plugins/report-tests-log-factory.md +0 -454
- data/docs/mkdocs/plugins/report-tests-pretty-stdout.md +0 -56
- data/docs/mkdocs/plugins/report-tests-raw-output-log.md +0 -52
- data/docs/mkdocs/plugins/report-tests-teamcity-stdout.md +0 -96
- data/docs/mkdocs/plugins/sample_html_report.png +0 -0
- data/docs/mkdocs/plugins/valgrind.md +0 -198
- data/docs/mkdocs/project/release-history.md +0 -61
- data/docs/mkdocs/project/upgrade.md +0 -85
- data/docs/mkdocs/reference/build-directives.md +0 -37
- data/docs/mkdocs/reference/command-line.md +0 -323
- data/docs/mkdocs/reference/environment-vars.md +0 -60
- data/docs/mkdocs/reference/gcov-plugin.md +0 -600
- data/docs/mkdocs/reference/global-collections.md +0 -160
- data/docs/mkdocs/reference/index.md +0 -65
- data/docs/mkdocs/reference/partials-macros.md +0 -79
- data/docs/mkdocs/reference/project-configuration.md +0 -46
- data/docs/mkdocs/snapshot/assets/project.yml +0 -404
- data/docs/mkdocs/snapshot/examples/cipher_quest/README.md +0 -210
- data/docs/mkdocs/snapshot/examples/temp_sensor/README.md +0 -283
- data/docs/mkdocs/snapshot/examples/wondrous_forest/README.md +0 -92
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -32
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults_gcov.rb +0 -136
- data/docs/mkdocs/snapshot.yml +0 -20
- data/docs/mkdocs/testing-guide/build-directives.md +0 -153
- data/docs/mkdocs/testing-guide/conventions.md +0 -616
- data/docs/mkdocs/testing-guide/frameworks.md +0 -192
- data/docs/mkdocs/testing-guide/index.md +0 -80
- data/docs/mkdocs/testing-guide/partials/configuration.md +0 -67
- data/docs/mkdocs/testing-guide/partials/conventions.md +0 -68
- data/docs/mkdocs/testing-guide/partials/directives.md +0 -212
- data/docs/mkdocs/testing-guide/partials/example.md +0 -149
- data/docs/mkdocs/testing-guide/partials/index.md +0 -88
- data/docs/mkdocs/testing-guide/partials/overview.md +0 -81
- data/docs/mkdocs/testing-guide/partials/variables.md +0 -244
- data/docs/mkdocs/testing-guide/test-cases.md +0 -194
- data/docs/mkdocs/testing-guide/test-sample.md +0 -94
- data/docs/mkdocs/testing-guide/test-suite-anatomy.md +0 -58
- data/lib/ceedling/cacheinator.rb +0 -53
- data/lib/ceedling/cacheinator_helper.rb +0 -60
- data/lib/ceedling/dependinator.rb +0 -31
- data/lib/ceedling/makefile.rb +0 -52
- data/lib/ceedling/release_invoker.rb +0 -112
- data/lib/ceedling/rules_release.rake +0 -109
- data/lib/ceedling/rules_tests.rake +0 -40
- data/lib/ceedling/tasks_release.rake +0 -36
- data/plugins/fff/vendor/fff/Makefile +0 -10
- data/plugins/fff/vendor/fff/buildandtest +0 -15
- data/plugins/fff/vendor/fff/examples/Makefile +0 -7
- data/plugins/fff/vendor/fff/examples/driver_testing/Makefile +0 -64
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.c +0 -32
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.h +0 -21
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp +0 -58
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp +0 -70
- data/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h +0 -25
- data/plugins/fff/vendor/fff/examples/driver_testing/registers.h +0 -23
- data/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h +0 -27
- data/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt +0 -25
- data/plugins/fff/vendor/fff/examples/embedded_ui/Makefile +0 -67
- data/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h +0 -31
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.c +0 -56
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.h +0 -22
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c +0 -191
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp +0 -144
- data/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c +0 -42
- data/plugins/fff/vendor/fff/gtest/Makefile +0 -22
- data/plugins/fff/vendor/fff/gtest/gtest-all.cc +0 -9118
- data/plugins/fff/vendor/fff/gtest/gtest-main.cc +0 -6
- data/plugins/fff/vendor/fff/gtest/gtest.h +0 -19547
- data/plugins/fff/vendor/fff/test/Makefile +0 -81
- data/plugins/fff/vendor/fff/test/c_test_framework.h +0 -25
- data/plugins/fff/vendor/fff/test/fff_test_c.c +0 -116
- data/plugins/fff/vendor/fff/test/fff_test_cpp.cpp +0 -53
- data/plugins/fff/vendor/fff/test/fff_test_global_c.c +0 -84
- data/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp +0 -31
- data/plugins/fff/vendor/fff/test/global_fakes.c +0 -21
- data/plugins/fff/vendor/fff/test/global_fakes.h +0 -47
- data/plugins/fff/vendor/fff/test/test_cases.include +0 -276
- data/plugins/report_tests_gtestlike_stdout/assets/template.erb +0 -83
- data/spec/units/configurator_spec.rb +0 -232
- /data/assets/{ceedling → features/ceedling} +0 -0
- /data/assets/{ceedling.cmd → features/ceedling.cmd} +0 -0
- /data/assets/{default_gitignore → features/default_gitignore} +0 -0
- /data/assets/{broken_uncovered_file.c → fixtures/broken_uncovered_file.c} +0 -0
- /data/assets/{example_file.c → fixtures/example_file.c} +0 -0
- /data/assets/{example_file.h → fixtures/example_file.h} +0 -0
- /data/assets/{example_file_call.c → fixtures/example_file_call.c} +0 -0
- /data/assets/{example_file_call.h → fixtures/example_file_call.h} +0 -0
- /data/assets/{example_file_with_statics.c → fixtures/example_file_with_statics.c} +0 -0
- /data/assets/{example_file_with_stdio.c → fixtures/example_file_with_stdio.c} +0 -0
- /data/assets/{example_file_with_stdio.h → fixtures/example_file_with_stdio.h} +0 -0
- /data/assets/{fake_crash_test_fixture.rb → fixtures/fake_crash_test_fixture.rb} +0 -0
- /data/assets/{partial_all_module.h → fixtures/partial_all_module.h} +0 -0
- /data/assets/{run_with_ubsan.rb → fixtures/run_with_ubsan.rb} +0 -0
- /data/assets/{same_dir_pairing_module.c → fixtures/same_dir_pairing_module.c} +0 -0
- /data/assets/{same_dir_pairing_module.h → fixtures/same_dir_pairing_module.h} +0 -0
- /data/assets/{same_dir_pairing_module_func.h → fixtures/same_dir_pairing_module_func.h} +0 -0
- /data/assets/{same_dir_pairing_other.c → fixtures/same_dir_pairing_other.c} +0 -0
- /data/assets/{same_dir_pairing_other.h → fixtures/same_dir_pairing_other.h} +0 -0
- /data/assets/{test_example_file.c → fixtures/test_example_file.c} +0 -0
- /data/assets/{test_example_file_2.c → fixtures/test_example_file_2.c} +0 -0
- /data/assets/{test_example_file_source_include.c → fixtures/test_example_file_source_include.c} +0 -0
- /data/assets/{test_example_file_success.c → fixtures/test_example_file_success.c} +0 -0
- /data/assets/{test_example_file_unity_printf.c → fixtures/test_example_file_unity_printf.c} +0 -0
- /data/assets/{test_example_file_verbose.c → fixtures/test_example_file_verbose.c} +0 -0
- /data/assets/{test_example_file_with_mock.c → fixtures/test_example_file_with_mock.c} +0 -0
- /data/assets/{test_example_file_with_stdio.c → fixtures/test_example_file_with_stdio.c} +0 -0
- /data/assets/{test_example_with_parameterized_tests.c → fixtures/test_example_with_parameterized_tests.c} +0 -0
- /data/assets/{test_partial_all_module.c → fixtures/test_partial_all_module.c} +0 -0
- /data/assets/{test_same_dir_pairing.c → fixtures/test_same_dir_pairing.c} +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_config.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/local_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_wrapper.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/project_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware_special.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.h +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder_partial.c +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/conditional_module.h +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/optional_dep.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_decorators.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareC.c +0 -0
- /data/assets/{uncovered_example_file.c → fixtures/uncovered_example_file.c} +0 -0
- /data/plugins/bullseye/assets/{template.erb → coverage.template} +0 -0
|
@@ -13,59 +13,50 @@ end
|
|
|
13
13
|
|
|
14
14
|
namespace TEST_SYM do
|
|
15
15
|
|
|
16
|
-
TOOL_COLLECTION_TEST_TASKS = {
|
|
17
|
-
:test_compiler => TOOLS_TEST_COMPILER,
|
|
18
|
-
:test_assembler => TOOLS_TEST_ASSEMBLER,
|
|
19
|
-
:test_linker => TOOLS_TEST_LINKER,
|
|
20
|
-
:test_fixture => TOOLS_TEST_FIXTURE
|
|
21
|
-
}
|
|
22
|
-
|
|
23
16
|
desc "Run all unit tests (also just 'test' works)."
|
|
24
17
|
task :all => [:prepare] do
|
|
25
|
-
@ceedling[:test_invoker].setup_and_invoke(
|
|
26
|
-
tests:COLLECTION_ALL_TESTS,
|
|
27
|
-
options:{:force_run => true, :build_only => false}.merge(TOOL_COLLECTION_TEST_TASKS))
|
|
18
|
+
@ceedling[:test_invoker].setup_and_invoke(tests: COLLECTION_ALL_TESTS, options: [:refresh_dependencies])
|
|
28
19
|
end
|
|
29
20
|
|
|
30
|
-
desc "Run single test ([*] test or source file name,
|
|
21
|
+
desc "Run single test ([*] test or source file name, with optional path)."
|
|
31
22
|
task :* do
|
|
32
23
|
message = "Oops! '#{TEST_ROOT_NAME}:*' isn't a real task. " +
|
|
33
|
-
"Use a real test or source file name
|
|
34
|
-
"
|
|
24
|
+
"Use a real test or source file name in place of the wildcard, " +
|
|
25
|
+
"adding as much of its path as needed to identify one file among any same-named tests.\n" +
|
|
26
|
+
"Example: `ceedling #{TEST_ROOT_NAME}:foo.c` or `ceedling #{TEST_ROOT_NAME}:unit/foo.c`"
|
|
35
27
|
|
|
36
28
|
@ceedling[:loginator].log( message, Verbosity::ERRORS )
|
|
37
29
|
end
|
|
38
30
|
|
|
39
31
|
desc "Just build tests without running."
|
|
40
32
|
task :build_only => [:prepare] do
|
|
41
|
-
@ceedling[:test_invoker].setup_and_invoke(tests:COLLECTION_ALL_TESTS, options:
|
|
33
|
+
@ceedling[:test_invoker].setup_and_invoke(tests: COLLECTION_ALL_TESTS, options: [:build_only])
|
|
42
34
|
end
|
|
43
35
|
|
|
44
36
|
desc "Run tests by matching regular expression pattern."
|
|
45
|
-
task :pattern, [:regex] => [:prepare] do |
|
|
37
|
+
task :pattern, [:regex] => [:prepare] do |_t, args|
|
|
46
38
|
matches = []
|
|
47
39
|
|
|
48
40
|
COLLECTION_ALL_TESTS.each { |test| matches << test if (test =~ /#{args.regex}/) }
|
|
49
41
|
|
|
50
42
|
if (matches.size > 0)
|
|
51
|
-
@ceedling[:test_invoker].setup_and_invoke(tests:matches, options:
|
|
43
|
+
@ceedling[:test_invoker].setup_and_invoke(tests: matches, options: [])
|
|
52
44
|
else
|
|
53
45
|
@ceedling[:loginator].log( "Found no tests matching pattern /#{args.regex}/", Verbosity::ERRORS )
|
|
54
46
|
end
|
|
55
47
|
end
|
|
56
48
|
|
|
57
49
|
desc "Run tests whose test path contains [dir] or [dir] substring."
|
|
58
|
-
task :path, [:dir] => [:prepare] do |
|
|
50
|
+
task :path, [:dir] => [:prepare] do |_t, args|
|
|
59
51
|
matches = []
|
|
60
52
|
|
|
61
|
-
COLLECTION_ALL_TESTS.each { |test| matches << test if File.dirname(test).include?(args.dir.
|
|
53
|
+
COLLECTION_ALL_TESTS.each { |test| matches << test if File.dirname(test).include?(args.dir.tr("\\", '/')) }
|
|
62
54
|
|
|
63
55
|
if (matches.size > 0)
|
|
64
|
-
@ceedling[:test_invoker].setup_and_invoke(tests:matches, options:
|
|
56
|
+
@ceedling[:test_invoker].setup_and_invoke(tests: matches, options: [])
|
|
65
57
|
else
|
|
66
58
|
@ceedling[:loginator].log( "Found no tests including the given path or path component", Verbosity::ERRORS )
|
|
67
59
|
end
|
|
68
60
|
end
|
|
69
61
|
|
|
70
62
|
end
|
|
71
|
-
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/constants'
|
|
9
|
+
|
|
10
|
+
namespace GEN_SYM do
|
|
11
|
+
|
|
12
|
+
task :mocks => [:prepare] do
|
|
13
|
+
Rake.application['gen:mocks:all'].invoke
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# A single `namespace GEN_SYM do` level, not one nested per gen: sub-namespace --
|
|
17
|
+
# see rules_release.rake's own identical reasoning: RakeTaskRegistry resolves a
|
|
18
|
+
# task's semantic tags from its *nearest* enclosing namespace, so nesting one
|
|
19
|
+
# level deeper than necessary here would make gen: tasks resolve to "mocks"/
|
|
20
|
+
# "test_runner" instead of "gen" itself, going unrecognized as test/build tasks.
|
|
21
|
+
desc "Generate mocks for every test without further building or running."
|
|
22
|
+
task 'mocks:all' => [:prepare] do
|
|
23
|
+
@ceedling[:test_invoker].setup_and_invoke(tests: COLLECTION_ALL_TESTS, options: [:mocking])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
desc "Generate mocks for single test ([*] test or source file name, with optional path)."
|
|
27
|
+
task 'mocks:*' do
|
|
28
|
+
message = "Oops! '#{GENERATE_MOCKS_TASK_ROOT}*' isn't a real task. " +
|
|
29
|
+
"Use a real test or source file name in place of the wildcard, " +
|
|
30
|
+
"adding as much of its path as needed to identify one file among any same-named tests.\n" +
|
|
31
|
+
"Example: `ceedling #{GENERATE_MOCKS_TASK_ROOT}foo.c` or `ceedling #{GENERATE_MOCKS_TASK_ROOT}unit/foo.c`"
|
|
32
|
+
|
|
33
|
+
@ceedling[:loginator].log( message, Verbosity::ERRORS )
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
task :test_runner => [:prepare] do
|
|
37
|
+
Rake.application['gen:test_runner:all'].invoke
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
desc "Generate up through test runners for every test without further building or running."
|
|
41
|
+
task 'test_runner:all' => [:prepare] do
|
|
42
|
+
@ceedling[:test_invoker].setup_and_invoke(tests: COLLECTION_ALL_TESTS, options: [:test_runner])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
desc "Generate up through test runner for a single test ([*] test or source file name, with optional path)."
|
|
46
|
+
task 'test_runner:*' do
|
|
47
|
+
message = "Oops! '#{GENERATE_TEST_RUNNER_TASK_ROOT}*' isn't a real task. " +
|
|
48
|
+
"Use a real test or source file name in place of the wildcard, " +
|
|
49
|
+
"adding as much of its path as needed to identify one file among any same-named tests.\n" +
|
|
50
|
+
"Example: `ceedling #{GENERATE_TEST_RUNNER_TASK_ROOT}foo.c` or `ceedling #{GENERATE_TEST_RUNNER_TASK_ROOT}unit/foo.c`"
|
|
51
|
+
|
|
52
|
+
@ceedling[:loginator].log( message, Verbosity::ERRORS )
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# The Release Build Pipeline
|
|
2
|
+
|
|
3
|
+
A release build compiles and links exactly one artifact from a flat list of objects, using compile/assemble/link inputs that are resolved once and shared alike by every object, rather than the test pipeline's model of many independent, per-file records.
|
|
4
|
+
|
|
5
|
+
That one difference in shape -- one artifact instead of many independent test files -- is what makes the release pipeline so much smaller than the test pipeline: there's nothing here analogous to a `Testable`, no per-item struct at all, and no dedicated stage-sequencing class, because there's no per-item variation across a run for one to manage. Where the test pipeline earns its `TestPipelineManager` and its four independently composable stop-point flags by fanning out over N test files with real conditional structure between them, a release build is a fixed handful of steps every single time.
|
|
6
|
+
|
|
7
|
+
## The pipeline's shape
|
|
8
|
+
|
|
9
|
+
Three classes divide the work:
|
|
10
|
+
|
|
11
|
+
- **`ReleaseInvoker`** owns the whole run, lifecycle and sequencing both. It fires the `pre_release_build`/`post_release_build` plugin hooks, opens and flushes the dependency cache around the run, catches and logs any exception raised anywhere in the pipeline rather than letting it propagate, and calls the four steps below directly, in order. There's no separate pipeline-manager class the way the test pipeline has `TestPipelineManager`, precisely because there's no stop-point or conditional stage-skipping here for a dedicated class to own.
|
|
12
|
+
- **`ReleaseBuildPlanner`** decides *what* to build: the object list, and the compile/assemble/link flags, defines, and search paths every one of those objects will share alike. It never invokes a tool and never talks to the dependency tracker -- it only figures out the plan.
|
|
13
|
+
- **`ReleaseBuildExecutor`** does the actual work the plan calls for: compiling objects, linking the artifact, and copying the result into place. It's the only one of the three that invokes a tool or talks to the dependency tracker.
|
|
14
|
+
|
|
15
|
+
## `ReleaseState`
|
|
16
|
+
|
|
17
|
+
`ReleaseState` is the release pipeline's one state object, playing the same role `PipelineState` plays for the test pipeline -- except that since there's exactly one artifact here, not N independent ones, it holds both the flat object list and the shared, once-resolved compile/link inputs every object uses alike, rather than a collection of many separate per-item records. It carries the object list, the compile/assemble/link flags, defines, and search paths the planner resolves once, and `executable_rebuilt`. That last field is carried on the struct rather than re-derived later for exactly the same reason `Testable#executable_rebuilt` is on the test side: by the time anything downstream would ask "was this just rebuilt?", the dependency tracker has already been told the executable is fresh, so asking it again would always answer "no."
|
|
18
|
+
|
|
19
|
+
## The four steps, in order
|
|
20
|
+
|
|
21
|
+
**Planning** is `ReleaseBuildPlanner#plan`. It resolves the full object list (every configured release source plus any extra link-only objects), tailors the compiler/linker tool configuration for a shared-library or static-archive target if the project is still using Ceedling's own default release tools, and resolves the flags, defines, and search paths every object compiled in this run will use alike.
|
|
22
|
+
|
|
23
|
+
**Building objects** is `ReleaseBuildExecutor#compile_objects`, which compiles or assembles every object in the plan's list in parallel, each independently checked against the dependency tracker so only what's actually stale gets rebuilt.
|
|
24
|
+
|
|
25
|
+
**Building the release artifact** is `ReleaseBuildExecutor#link`. It separates any precompiled libraries or archives out of the object list, formats them (and any project-configured system or release-only libraries) as linker arguments, and links the executable if the dependency tracker reports it stale -- recording whether a real link just happened for the next step to use.
|
|
26
|
+
|
|
27
|
+
**Collecting artifacts** is `ReleaseBuildExecutor#artifactinate`, which copies the built executable, its map file, and any project-configured extra artifacts into the release artifacts directory -- but only when linking actually just happened; otherwise there's nothing new to collect.
|
|
28
|
+
|
|
29
|
+
## The single-file compile-check mode
|
|
30
|
+
|
|
31
|
+
The release pipeline has exactly one way to run less than the full sequence, and it's a parameter, not a set of flags the way the test pipeline's stop-points are: `ReleaseInvoker#setup_and_invoke` accepts an optional `files:` argument, and when it's a single-element Array rather than `nil`, planning and object-building still run against that one file, but linking and artifact-collection are skipped entirely. This is what backs the ad hoc `release:compile:<file>`/`release:assemble:<file>` Rake tasks, which exist so a project can compile one file in isolation -- to check it for syntax or compile errors during development -- without linking anything or touching the artifacts directory. Where the test pipeline's stop-points are several independently composable Symbols answering "how far should this run go," the release pipeline only ever answers a single yes-or-no question: is this a real, full release build, or a scoped single-file compile check?
|
|
32
|
+
|
|
33
|
+
## Shared vocabulary with the test pipeline
|
|
34
|
+
|
|
35
|
+
A handful of things carry over directly from the test pipeline's own conventions, worth knowing if you've read that pipeline's README first: `Batchinator`'s `#build_step` (for step framing) and `#exec` (for parallel per-object compilation) are the exact same collaborator, used the same way; the `Dependinator` register/`stale?`/`mark_fresh` pattern for deciding what actually needs (re)doing is identical; `executable_rebuilt`, as already mentioned, is the same carried-rather-than-requeried pattern under the same name; and both pipelines' classes are wired together through the same `constructor`-gem dependency-injection convention.
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/constants'
|
|
9
|
+
require 'ceedling/release_invoker/release_invoker_types'
|
|
10
|
+
|
|
11
|
+
# Does the actual work of a release build: compiling objects, linking the
|
|
12
|
+
# artifact, and copying it into place -- the only class in this subsystem
|
|
13
|
+
# that invokes tools or talks to the dependency tracker.
|
|
14
|
+
class ReleaseBuildExecutor
|
|
15
|
+
|
|
16
|
+
include ReleaseInvokerTypes
|
|
17
|
+
|
|
18
|
+
constructor(
|
|
19
|
+
:configurator,
|
|
20
|
+
:loginator,
|
|
21
|
+
:reportinator,
|
|
22
|
+
:batchinator,
|
|
23
|
+
:generator,
|
|
24
|
+
:file_finder,
|
|
25
|
+
:file_wrapper,
|
|
26
|
+
:file_path_utils,
|
|
27
|
+
:dependinator
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
def compile_objects(state)
|
|
31
|
+
skipped = 0
|
|
32
|
+
|
|
33
|
+
@batchinator.exec(workload: :compile, things: state.objects) do |object|
|
|
34
|
+
compiled = compile_release_component( object: object, state: state )
|
|
35
|
+
# Worker threads share `skipped` -- a bare `+= 1` here is a read-modify-write
|
|
36
|
+
# across threads and can silently lose an increment under MRI's GVL, same as
|
|
37
|
+
# the test pipeline's own equivalent counter (test_build_executor.rb).
|
|
38
|
+
state.lock.synchronize { skipped += 1 } unless compiled
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
log_skip_summary( task: "compilation", count: skipped, noun: "objects" )
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def link(state)
|
|
45
|
+
objects, libraries = sort_objects_and_libraries( state.objects )
|
|
46
|
+
lib_args = convert_libraries_to_arguments( libraries )
|
|
47
|
+
lib_paths = get_library_paths_to_arguments()
|
|
48
|
+
target = @configurator.project_release_build_target
|
|
49
|
+
|
|
50
|
+
@dependinator.register(
|
|
51
|
+
target,
|
|
52
|
+
files: objects,
|
|
53
|
+
meta: { flags: state.link_flags, lib_args: lib_args, lib_paths: lib_paths, tools: [@configurator.tools_release_linker] }
|
|
54
|
+
)
|
|
55
|
+
stale = @dependinator.stale?( target )
|
|
56
|
+
|
|
57
|
+
if stale
|
|
58
|
+
@generator.generate_executable_file(
|
|
59
|
+
@configurator.tools_release_linker,
|
|
60
|
+
RELEASE_SYM,
|
|
61
|
+
objects,
|
|
62
|
+
state.link_flags,
|
|
63
|
+
target,
|
|
64
|
+
@configurator.project_release_build_map,
|
|
65
|
+
lib_args,
|
|
66
|
+
lib_paths
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
@dependinator.mark_fresh( target )
|
|
70
|
+
else
|
|
71
|
+
msg = @reportinator.generate_progress( "Skipping linking for #{File.basename( target )}" )
|
|
72
|
+
@loginator.log( msg, Verbosity::OBNOXIOUS )
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
log_skip_summary( task: "linking", count: (stale ? 0 : 1), noun: "executables" )
|
|
76
|
+
|
|
77
|
+
# #artifactinate relies on this rather than a second `stale?` call -- by
|
|
78
|
+
# now `mark_fresh` above (when `stale` was true) has already updated the
|
|
79
|
+
# cache entry to match the executable's current state, so a fresh
|
|
80
|
+
# `stale?` query would always answer false.
|
|
81
|
+
state.executable_rebuilt = stale
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def artifactinate(state)
|
|
85
|
+
artifacts = [
|
|
86
|
+
@configurator.project_release_build_target,
|
|
87
|
+
@configurator.project_release_build_map,
|
|
88
|
+
@configurator.release_build_artifacts
|
|
89
|
+
].flatten
|
|
90
|
+
|
|
91
|
+
unless state.executable_rebuilt
|
|
92
|
+
log_skip_summary( task: "artifact collection", count: artifacts.size, noun: "artifacts" )
|
|
93
|
+
return
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
artifacts.each do |file|
|
|
97
|
+
# `file` was just linked/generated by this same build -- exist_with_retry? rides
|
|
98
|
+
# out it briefly not yet being visible right after that shell-out exits.
|
|
99
|
+
@file_wrapper.cp( file, @configurator.project_release_artifacts_path ) if @file_wrapper.exist_with_retry?( file )
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
# Compile a single C or assembly source file into an object file. Returns
|
|
106
|
+
# whether a real compile actually happened, so the caller can report how
|
|
107
|
+
# many objects across the whole build needed nothing done.
|
|
108
|
+
def compile_release_component(object:, state:)
|
|
109
|
+
source = @file_finder.find_build_input_file( filepath: object, context: RELEASE_SYM )
|
|
110
|
+
dependencies = @file_path_utils.form_release_dependencies_filepath( object )
|
|
111
|
+
|
|
112
|
+
if !@configurator.extension_assembly.match?( source )
|
|
113
|
+
flags = state.compile_flags
|
|
114
|
+
stale = register_and_check_object_staleness( object: object, source: source, dependencies: dependencies, flags: flags, defines: state.defines, search_paths: state.search_paths, tool: @configurator.tools_release_compiler )
|
|
115
|
+
|
|
116
|
+
return log_compile_skip( source: source ) unless stale
|
|
117
|
+
|
|
118
|
+
# A source mirrored into its own subdirectory needs that subdirectory (and its
|
|
119
|
+
# dependencies-file counterpart) to actually exist before the compiler can write there.
|
|
120
|
+
# Object and dependency paths can nest arbitrarily deep depending on where the source
|
|
121
|
+
# itself lives; only the flat top-level build roots are pre-created via `directory()`
|
|
122
|
+
# tasks, not every mirrored subdirectory beneath them.
|
|
123
|
+
@file_wrapper.mkdir( File.dirname( object ) )
|
|
124
|
+
@file_wrapper.mkdir( File.dirname( dependencies ) )
|
|
125
|
+
|
|
126
|
+
@generator.generate_object_file_c(
|
|
127
|
+
tool: @configurator.tools_release_compiler,
|
|
128
|
+
module_name: File.basename( source ).ext(),
|
|
129
|
+
context: RELEASE_SYM,
|
|
130
|
+
source: source,
|
|
131
|
+
object: object,
|
|
132
|
+
search_paths: state.search_paths,
|
|
133
|
+
flags: flags,
|
|
134
|
+
defines: state.defines,
|
|
135
|
+
list: @file_path_utils.form_release_build_list_filepath( object ),
|
|
136
|
+
dependencies: dependencies
|
|
137
|
+
)
|
|
138
|
+
else
|
|
139
|
+
flags = state.assemble_flags
|
|
140
|
+
stale = register_and_check_object_staleness( object: object, source: source, dependencies: dependencies, flags: flags, defines: state.defines, search_paths: state.search_paths, tool: @configurator.tools_release_assembler )
|
|
141
|
+
|
|
142
|
+
return log_compile_skip( source: source ) unless stale
|
|
143
|
+
|
|
144
|
+
@file_wrapper.mkdir( File.dirname( object ) )
|
|
145
|
+
@file_wrapper.mkdir( File.dirname( dependencies ) )
|
|
146
|
+
|
|
147
|
+
@generator.generate_object_file_asm(
|
|
148
|
+
tool: @configurator.tools_release_assembler,
|
|
149
|
+
module_name: File.basename( source ).ext(),
|
|
150
|
+
context: RELEASE_SYM,
|
|
151
|
+
source: source,
|
|
152
|
+
object: object,
|
|
153
|
+
search_paths: state.search_paths,
|
|
154
|
+
flags: flags,
|
|
155
|
+
defines: state.defines,
|
|
156
|
+
list: @file_path_utils.form_release_build_list_filepath( object ),
|
|
157
|
+
dependencies: dependencies
|
|
158
|
+
)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# A real (re)compile just happened -- register_gcc_deps_file again to pick
|
|
162
|
+
# up the freshly-written `.d` file's current header set (only produced for
|
|
163
|
+
# C compiles; a no-op call for assembly, whose tool has no -MMD/-MF) before
|
|
164
|
+
# recording this target's new baseline. exist_with_retry? rides out the file
|
|
165
|
+
# briefly not yet being visible right after the shell-out exits.
|
|
166
|
+
@dependinator.register_gcc_deps_file( dependencies ) if @file_wrapper.exist_with_retry?( dependencies )
|
|
167
|
+
@dependinator.mark_fresh( object )
|
|
168
|
+
|
|
169
|
+
true
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Reports that a single object file needed no recompiling, at a verbosity
|
|
173
|
+
# meant for readers who want every target accounted for individually
|
|
174
|
+
# rather than just the batch total.
|
|
175
|
+
def log_compile_skip(source:)
|
|
176
|
+
msg = @reportinator.generate_progress( "Skipping compilation for #{File.basename( source )}" )
|
|
177
|
+
@loginator.log( msg, Verbosity::OBNOXIOUS )
|
|
178
|
+
false
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Registers `object`'s antecedents (its source file, plus whatever headers
|
|
182
|
+
# gcc's `-MMD -MF` discovered on the *previous* successful compile, if any)
|
|
183
|
+
# and reports whether it needs (re)building. The previous run's `.d` file is
|
|
184
|
+
# the only header list available before this run's compile has happened --
|
|
185
|
+
# if headers changed, that's exactly what makes this stale. Nothing has just
|
|
186
|
+
# written that file, so one look suffices: a clean build has none, and a missed
|
|
187
|
+
# one leaves the object stale, forcing a recompile.
|
|
188
|
+
def register_and_check_object_staleness(object:, source:, dependencies:, flags:, defines:, search_paths:, tool:)
|
|
189
|
+
@dependinator.register( object, files: [source], meta: { flags: flags, defines: defines, search_paths: search_paths, tools: [tool] } )
|
|
190
|
+
@dependinator.register_gcc_deps_file( dependencies ) if @file_wrapper.exist?( dependencies )
|
|
191
|
+
@dependinator.stale?( object )
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def convert_libraries_to_arguments(libraries)
|
|
195
|
+
args =
|
|
196
|
+
(libraries || []) +
|
|
197
|
+
((defined? LIBRARIES_SYSTEM) ? LIBRARIES_SYSTEM : []) +
|
|
198
|
+
((defined? LIBRARIES_RELEASE) ? LIBRARIES_RELEASE : [])
|
|
199
|
+
|
|
200
|
+
args.flatten!
|
|
201
|
+
args.compact!
|
|
202
|
+
|
|
203
|
+
if (defined? LIBRARIES_FLAG)
|
|
204
|
+
args.map! { |v| LIBRARIES_FLAG.gsub(/\$\{1\}/, v) }
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
return args
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def get_library_paths_to_arguments()
|
|
211
|
+
paths = (defined? PATHS_LIBRARIES) ? (PATHS_LIBRARIES || []).clone : []
|
|
212
|
+
if (defined? LIBRARIES_PATH_FLAG)
|
|
213
|
+
paths.map! { |v| LIBRARIES_PATH_FLAG.gsub(/\$\{1\}/, v) }
|
|
214
|
+
end
|
|
215
|
+
return paths
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# A release's object list can include precompiled libraries/archives
|
|
219
|
+
# alongside plain compiled objects (via :libraries ↳ :release or extra
|
|
220
|
+
# link-only entries) -- these need to reach the linker as -l-style
|
|
221
|
+
# arguments rather than as ordinary link inputs, so they're split out here
|
|
222
|
+
# by file extension before linking.
|
|
223
|
+
def sort_objects_and_libraries(both)
|
|
224
|
+
# A library type may be named by several extensions at once (.a and .so, say), so its
|
|
225
|
+
# regex alternation is built from however many are configured -- one entry needs no
|
|
226
|
+
# alternation at all, several are joined into one. Enumerable is the test rather than
|
|
227
|
+
# Array specifically, since a library-type extension is a FilenameExtension by the time
|
|
228
|
+
# it reaches here, not a raw Array, even though both are iterable the same way.
|
|
229
|
+
extension = if ((defined? EXTENSION_SUBPROJECTS) && (defined? EXTENSION_LIBRARIES))
|
|
230
|
+
extension_libraries = if (EXTENSION_LIBRARIES.is_a? Enumerable)
|
|
231
|
+
EXTENSION_LIBRARIES.to_a.join(")|(?:\\")
|
|
232
|
+
else
|
|
233
|
+
EXTENSION_LIBRARIES
|
|
234
|
+
end
|
|
235
|
+
"(?:\\#{EXTENSION_SUBPROJECTS})|(?:\\#{extension_libraries})"
|
|
236
|
+
elsif (defined? EXTENSION_SUBPROJECTS)
|
|
237
|
+
"\\#{EXTENSION_SUBPROJECTS}"
|
|
238
|
+
elsif (defined? EXTENSION_LIBRARIES)
|
|
239
|
+
if (EXTENSION_LIBRARIES.is_a? Enumerable)
|
|
240
|
+
"(?:\\#{EXTENSION_LIBRARIES.to_a.join(")|(?:\\")})"
|
|
241
|
+
else
|
|
242
|
+
"\\#{EXTENSION_LIBRARIES}"
|
|
243
|
+
end
|
|
244
|
+
else
|
|
245
|
+
"\\.LIBRARY"
|
|
246
|
+
end
|
|
247
|
+
# Compile once rather than once per entry in `both`
|
|
248
|
+
library_pattern = /.+#{extension}$/
|
|
249
|
+
sorted_objects = both.group_by { |v| v.match?( library_pattern ) ? :libraries : :objects }
|
|
250
|
+
libraries = sorted_objects[:libraries] || []
|
|
251
|
+
objects = sorted_objects[:objects] || []
|
|
252
|
+
return objects, libraries
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# States, in one line, how many targets a build step left untouched because nothing
|
|
256
|
+
# about them needed attention this run. Silent when nothing was skipped, so a full
|
|
257
|
+
# rebuild's output isn't cluttered with zero counts.
|
|
258
|
+
def log_skip_summary(task:, count:, noun:, reason: "nothing changed")
|
|
259
|
+
msg = @reportinator.generate_skip_summary( task: task, count: count, noun: noun, reason: reason )
|
|
260
|
+
@loginator.log( msg ) unless msg.nil?
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/constants'
|
|
9
|
+
require 'ceedling/defaults'
|
|
10
|
+
require 'ceedling/release_invoker/release_invoker_types'
|
|
11
|
+
|
|
12
|
+
# Determines what a release build needs: the object list and the compile/
|
|
13
|
+
# assemble/link inputs every one of those objects shares alike. No tool
|
|
14
|
+
# invocation and no dependency-tracker registration happens here -- that's
|
|
15
|
+
# ReleaseBuildExecutor's concern; this class only figures out the plan.
|
|
16
|
+
class ReleaseBuildPlanner
|
|
17
|
+
|
|
18
|
+
include ReleaseInvokerTypes
|
|
19
|
+
|
|
20
|
+
constructor(
|
|
21
|
+
:configurator,
|
|
22
|
+
:loginator,
|
|
23
|
+
:reportinator,
|
|
24
|
+
:flaginator,
|
|
25
|
+
:defineinator,
|
|
26
|
+
:file_path_utils,
|
|
27
|
+
:file_wrapper
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# files: nil for a full release build (every configured release source, plus
|
|
31
|
+
# extra link-only objects); an Array of one filepath to scope down to a
|
|
32
|
+
# single object, as the ad hoc release:compile:<file>/release:assemble:<file>
|
|
33
|
+
# tasks do.
|
|
34
|
+
def plan(state, files: nil)
|
|
35
|
+
tailor_release_tools()
|
|
36
|
+
|
|
37
|
+
sources =
|
|
38
|
+
if files.nil?
|
|
39
|
+
@configurator.collection_release_build_input +
|
|
40
|
+
@configurator.collection_release_artifact_extra_link_objects
|
|
41
|
+
else
|
|
42
|
+
files.dup
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
state.objects = @file_path_utils.form_release_build_objects_filelist( sources )
|
|
46
|
+
state.compile_flags = @flaginator.flag_down( context: RELEASE_SYM, operation: OPERATION_COMPILE_SYM )
|
|
47
|
+
state.assemble_flags = @flaginator.flag_down( context: RELEASE_SYM, operation: OPERATION_ASSEMBLE_SYM )
|
|
48
|
+
state.link_flags = @flaginator.flag_down( context: RELEASE_SYM, operation: OPERATION_LINK_SYM )
|
|
49
|
+
state.defines = @defineinator.defines( subkey: RELEASE_SYM )
|
|
50
|
+
state.search_paths = @configurator.collection_paths_include
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
# Shared libraries and static archives need compiler/linker argument tags
|
|
56
|
+
# (-fPIC, -shared, or swapping the linker for `ar` outright) that a plain
|
|
57
|
+
# executable target doesn't -- derived once per build from the release
|
|
58
|
+
# target's own file extension, mutating the resolved tool config in place
|
|
59
|
+
# exactly as gcc's own default release tools expect to be used. Skipped
|
|
60
|
+
# entirely for a project that's already configured its own compiler tool
|
|
61
|
+
# (a custom :tools ↳ :release_compiler means these Ceedling-authored
|
|
62
|
+
# defaults-only tags would be presumptuous to apply).
|
|
63
|
+
def tailor_release_tools()
|
|
64
|
+
compiler = @configurator.tools_release_compiler
|
|
65
|
+
linker = @configurator.tools_release_linker
|
|
66
|
+
|
|
67
|
+
return unless compiler[:executable] == DEFAULT_RELEASE_COMPILER_TOOL[:executable]
|
|
68
|
+
|
|
69
|
+
case File.extname( @configurator.project_release_build_target )
|
|
70
|
+
when '.so'
|
|
71
|
+
compiler[:arguments] << '-fPIC' unless compiler[:arguments].include?('-fPIC')
|
|
72
|
+
linker[:arguments] << '-shared' unless linker[:arguments].include?('-shared')
|
|
73
|
+
when '.a'
|
|
74
|
+
compiler[:arguments] << '-fPIC' unless compiler[:arguments].include?('-fPIC')
|
|
75
|
+
linker[:executable] = 'ar'
|
|
76
|
+
linker[:arguments] = ['rcs', '${2}', '${1}']
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/constants'
|
|
9
|
+
require 'ceedling/release_invoker/release_invoker_types'
|
|
10
|
+
|
|
11
|
+
# Thin entry point for a release build -- lifecycle, error handling, and
|
|
12
|
+
# dependency-cache open/flush live here; ReleaseBuildPlanner/ReleaseBuildExecutor
|
|
13
|
+
# do the actual work. There's no dedicated pipeline-manager class the way
|
|
14
|
+
# TestInvoker has TestPipelineManager: a release build has no stop-points or
|
|
15
|
+
# conditional stage-skipping to validate or gate, just a fixed handful of
|
|
16
|
+
# steps, so sequencing them directly here is proportionate.
|
|
17
|
+
class ReleaseInvoker
|
|
18
|
+
|
|
19
|
+
include ReleaseInvokerTypes
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
:application,
|
|
23
|
+
:plugin_manager,
|
|
24
|
+
:dependinator,
|
|
25
|
+
:loginator,
|
|
26
|
+
:batchinator,
|
|
27
|
+
:release_build_planner,
|
|
28
|
+
:release_build_executor
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# files: nil for a full release build; an Array of one filepath to scope down
|
|
32
|
+
# to a single object -- the ad hoc release:compile:<file>/release:assemble:<file>
|
|
33
|
+
# tasks, which exist to let a project compile one file in isolation without
|
|
34
|
+
# linking or touching artifacts, e.g. for quick syntax/compile-error checking
|
|
35
|
+
# during development.
|
|
36
|
+
def setup_and_invoke(files: nil)
|
|
37
|
+
timestamp_s = SystemWrapper.time_stopwatch_s()
|
|
38
|
+
@plugin_manager.pre_release_build( timestamp_s )
|
|
39
|
+
|
|
40
|
+
@dependinator.open( identifier: :release )
|
|
41
|
+
|
|
42
|
+
state = ReleaseState.new()
|
|
43
|
+
|
|
44
|
+
begin
|
|
45
|
+
@batchinator.build_step( "Determining Objects to be Built", heading: false ) do
|
|
46
|
+
@release_build_planner.plan( state, files: files )
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@batchinator.build_step( "Building Objects" ) do
|
|
50
|
+
@release_build_executor.compile_objects( state )
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if files.nil?
|
|
54
|
+
@batchinator.build_step( "Building Release Artifact" ) do
|
|
55
|
+
@release_build_executor.link( state )
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
@batchinator.build_step( "Collecting Artifacts", heading: false ) do
|
|
59
|
+
@release_build_executor.artifactinate( state )
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rescue StandardError => ex
|
|
64
|
+
@application.register_build_failure
|
|
65
|
+
|
|
66
|
+
@loginator.log( ex.message, Verbosity::ERRORS, LogLabels::EXCEPTION )
|
|
67
|
+
@loginator.log_debug_backtrace( ex )
|
|
68
|
+
ensure
|
|
69
|
+
# Only a run that touched every release target (the full `release` task,
|
|
70
|
+
# not a single-file compile:/assemble: task) may safely prune cache
|
|
71
|
+
# entries for targets it didn't see this time -- mirrors TestInvoker's
|
|
72
|
+
# own :refresh_dependencies precedent for test:all vs. a partial build.
|
|
73
|
+
@dependinator.flush( refresh_dependencies: files.nil? )
|
|
74
|
+
@plugin_manager.post_release_build( SystemWrapper.time_stopwatch_s() )
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
module ReleaseInvokerTypes
|
|
9
|
+
|
|
10
|
+
# Carries all state for a single release build invocation. Unlike TestInvokerTypes'
|
|
11
|
+
# PipelineState/Testable pair, there's exactly one artifact here, not N independent
|
|
12
|
+
# ones, so this one struct holds both the flat build plan and the shared,
|
|
13
|
+
# once-resolved compile/link inputs every object uses alike.
|
|
14
|
+
ReleaseState = Struct.new(
|
|
15
|
+
:objects, # Array<String> — object filepaths to compile/link; each
|
|
16
|
+
# object's real source is resolved at compile time via
|
|
17
|
+
# FileFinder, mirroring TestBuildExecutor#stage_build_objects
|
|
18
|
+
:compile_flags, :assemble_flags, :link_flags,
|
|
19
|
+
:defines,
|
|
20
|
+
:search_paths,
|
|
21
|
+
:executable_rebuilt, # Boolean — set by ReleaseBuildExecutor#link, read by
|
|
22
|
+
# #artifactinate to decide whether to copy the artifact.
|
|
23
|
+
# Carried here rather than re-querying the dependency
|
|
24
|
+
# tracker: by then the executable has already been marked
|
|
25
|
+
# fresh (if it was rebuilt), so a fresh staleness query
|
|
26
|
+
# would always answer false regardless of what happened.
|
|
27
|
+
:lock, # Mutex for thread-safe shared-counter writes
|
|
28
|
+
keyword_init: true
|
|
29
|
+
) do
|
|
30
|
+
def initialize(**kwargs)
|
|
31
|
+
kwargs[:objects] ||= []
|
|
32
|
+
# Defaulted here, unlike PipelineState's explicit-at-call-site convention --
|
|
33
|
+
# ReleaseState has exactly one construction site, so there's no risk of a
|
|
34
|
+
# caller forgetting to supply it.
|
|
35
|
+
kwargs[:lock] ||= Mutex.new
|
|
36
|
+
super(**kwargs)
|
|
37
|
+
end
|
|
38
|
+
end unless const_defined?(:ReleaseState, false)
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# =========================================================================
|
|
7
7
|
|
|
8
8
|
require 'unicode/display_width'
|
|
9
|
+
require 'ceedling/constants'
|
|
9
10
|
|
|
10
11
|
##
|
|
11
12
|
# Pretifies reports
|
|
@@ -128,11 +129,26 @@ class Reportinator
|
|
|
128
129
|
# Sanitze -- ensure it's a string and strip any filename extension
|
|
129
130
|
_module_name = module_name.to_s().ext('')
|
|
130
131
|
|
|
131
|
-
# If filename is the module name, don't add the module label
|
|
132
|
-
|
|
132
|
+
# If filename is the module name, don't add the module label. A module name
|
|
133
|
+
# mirroring its file's path below a configured root (e.g. `adc/TestFoo`) is
|
|
134
|
+
# still the same module as far as this comparison is concerned, so only its
|
|
135
|
+
# own last segment is weighed against filename's bare basename.
|
|
136
|
+
label = (File.basename(filename).ext('') == File.basename(_module_name)) ? '' : "#{_module_name}::"
|
|
133
137
|
return generate_progress("#{operation} #{label}#{filename}")
|
|
134
138
|
end
|
|
135
139
|
|
|
140
|
+
# States, in one line, how many targets a build step left untouched because
|
|
141
|
+
# nothing about them needed attention this run -- shared by every build stage
|
|
142
|
+
# that skips individual targets (test and release alike), so this wording and
|
|
143
|
+
# its singular/plural handling live in exactly one place. Returns nil when
|
|
144
|
+
# nothing was skipped, so a full rebuild's output isn't cluttered with zero
|
|
145
|
+
# counts; callers only log when a message comes back.
|
|
146
|
+
def generate_skip_summary(task:, count:, noun:, reason: "nothing changed")
|
|
147
|
+
return nil if count == 0
|
|
148
|
+
singular_noun = noun.sub(/s$/, '')
|
|
149
|
+
generate_progress( "Skipping #{task} for #{count} #{count == 1 ? singular_noun : noun} (#{reason})" )
|
|
150
|
+
end
|
|
151
|
+
|
|
136
152
|
def generate_config_walk(keys, depth=0)
|
|
137
153
|
# :key ↳ :key ↳ :key
|
|
138
154
|
|