ceedling 1.1.10 → 1.2.1
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 +64 -45
- data/Rakefile +769 -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 +28 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +96 -58
- data/bin/cli_helper.rb +95 -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 +30 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +46 -2
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +35 -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 +370 -531
- 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 +360 -616
- 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 +275 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +192 -70
- 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 +47 -15
- 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 +216 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +118 -26
- 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/rake_app/test_task_name.rb +29 -0
- data/lib/ceedling/rakefile.rb +3 -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/{rules_tests.rake → rakefiles/tests/rules_tests.rake} +4 -18
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +54 -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 +13 -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 +800 -429
- 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 +71 -111
- 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 +16 -15
- 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 +37 -15
- data/site-local/404.html +239 -19
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js → bundle.c21346df.min.js} +3 -3
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js.map → bundle.c21346df.min.js.map} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js → search.a7633da7.min.js} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js.map → search.a7633da7.min.js.map} +1 -1
- data/site-local/assets/stylesheets/main.57a0d79d.min.css +6 -0
- data/site-local/assets/stylesheets/main.57a0d79d.min.css.map +1 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css +4 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css.map +1 -0
- data/site-local/configuration/environment-vars.html +239 -19
- data/site-local/configuration/global-collections.html +239 -24
- data/site-local/configuration/index.html +240 -20
- data/site-local/configuration/loading.html +251 -27
- data/site-local/configuration/mixins.html +247 -26
- data/site-local/configuration/parallel-builds.html +239 -19
- data/site-local/configuration/project-file.html +268 -37
- data/site-local/configuration/reference/cexception.html +246 -25
- data/site-local/configuration/reference/cmock.html +272 -19
- data/site-local/configuration/reference/defines.html +263 -34
- data/site-local/configuration/reference/environment.html +246 -26
- data/site-local/configuration/reference/extension.html +352 -21
- data/site-local/configuration/reference/files.html +258 -24
- data/site-local/configuration/reference/flags.html +268 -31
- data/site-local/configuration/reference/index.html +239 -19
- data/site-local/configuration/reference/libraries.html +239 -19
- data/site-local/configuration/reference/mixins.html +239 -19
- data/site-local/configuration/reference/partials.html +240 -24
- data/site-local/configuration/reference/paths.html +269 -23
- data/site-local/configuration/reference/plugins.html +239 -19
- data/site-local/configuration/reference/project.html +292 -29
- data/site-local/configuration/reference/release-build.html +247 -19
- data/site-local/configuration/reference/test-build.html +281 -29
- data/site-local/configuration/reference/test-runner.html +279 -22
- data/site-local/configuration/reference/tools.html +257 -31
- data/site-local/configuration/reference/unity.html +271 -20
- data/site-local/configuration/which-ceedling.html +239 -19
- data/site-local/development/index.html +245 -19
- data/site-local/development/plugins/configuration.html +260 -22
- data/site-local/development/plugins/index.html +258 -20
- data/site-local/development/plugins/plugin-subclass.html +912 -174
- data/site-local/development/plugins/rake-tasks.html +269 -21
- data/site-local/development/releases.html +4759 -0
- data/site-local/development/workflow.html +1023 -58
- data/site-local/getting-started/builds.html +4593 -0
- data/site-local/getting-started/command-line.html +409 -39
- data/site-local/getting-started/example-projects/cipher-quest.html +239 -19
- data/site-local/getting-started/example-projects/index.html +240 -20
- data/site-local/getting-started/example-projects/temp-sensor.html +239 -19
- data/site-local/getting-started/example-projects/wondrous-forest.html +239 -19
- data/site-local/getting-started/index.html +246 -19
- data/site-local/getting-started/installation.html +249 -27
- data/site-local/getting-started/quick-start.html +242 -20
- data/site-local/help.html +246 -19
- data/site-local/index.html +284 -27
- data/site-local/overview/build-system.html +240 -20
- data/site-local/overview/index.html +239 -19
- data/site-local/overview/test-environments.html +248 -19
- data/site-local/overview/tools-and-frameworks.html +239 -19
- data/site-local/plugins/beep.html +242 -19
- data/site-local/plugins/bullseye/index.html +5068 -0
- data/site-local/plugins/bullseye/licensing.html +4826 -0
- data/site-local/plugins/command-hooks.html +258 -34
- data/site-local/plugins/compile-commands-json-db.html +247 -22
- data/site-local/plugins/cppcheck.html +1073 -268
- data/site-local/plugins/dependencies.html +927 -249
- data/site-local/plugins/fff.html +288 -21
- data/site-local/plugins/gcov/examples.html +243 -20
- data/site-local/plugins/gcov/gcovr.html +559 -71
- data/site-local/plugins/gcov/index.html +242 -19
- data/site-local/plugins/gcov/overview.html +253 -23
- data/site-local/plugins/gcov/reportgenerator.html +380 -46
- data/site-local/plugins/gcov/reporting.html +339 -105
- data/site-local/plugins/gcov/setup.html +244 -20
- data/site-local/plugins/gcov/tool-versions.html +292 -24
- data/site-local/plugins/gcov/troubleshooting.html +265 -42
- data/site-local/plugins/index.html +285 -41
- data/site-local/plugins/module-generator.html +770 -200
- data/site-local/plugins/report-build-warnings-log.html +569 -38
- data/site-local/plugins/report-tests-gtestlike-stdout.html +458 -89
- data/site-local/plugins/report-tests-ide-stdout.html +645 -56
- data/site-local/plugins/report-tests-log-factory.html +364 -111
- data/site-local/plugins/report-tests-pretty-stdout.html +243 -20
- data/site-local/plugins/report-tests-raw-output-log.html +242 -19
- data/site-local/plugins/report-tests-teamcity-stdout.html +252 -29
- data/site-local/plugins/sanitize.html +5322 -0
- data/site-local/plugins/valgrind.html +414 -34
- data/site-local/{plugins/bullseye.html → project/index.html} +288 -222
- data/site-local/project/release-history.html +242 -22
- data/site-local/project/sbom.html +4712 -0
- data/site-local/project/upgrade.html +241 -21
- data/site-local/reference/build-directives.html +248 -19
- data/site-local/reference/command-line.html +364 -21
- data/site-local/reference/environment-vars.html +239 -19
- data/site-local/reference/gcov-plugin.html +483 -23
- data/site-local/reference/global-collections.html +240 -20
- data/site-local/reference/index.html +239 -19
- data/site-local/reference/partials-macros.html +249 -19
- data/site-local/reference/project-configuration.html +239 -19
- data/site-local/sitemap.xml.gz +0 -0
- data/{docs/mkdocs/snapshot/assets → site-local/snapshot/assets/features}/project.yml +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +249 -29
- data/site-local/snapshot/examples/temp_sensor/index.html +241 -21
- data/site-local/snapshot/examples/wondrous_forest/index.html +256 -30
- 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 +331 -35
- data/site-local/testing-guide/conventions.html +671 -160
- data/site-local/testing-guide/frameworks.html +244 -24
- data/site-local/testing-guide/index.html +239 -26
- data/site-local/testing-guide/partials/configuration.html +241 -21
- data/site-local/testing-guide/partials/conventions.html +308 -23
- data/site-local/testing-guide/partials/directives.html +452 -58
- data/site-local/testing-guide/partials/example.html +247 -27
- data/site-local/testing-guide/partials/index.html +246 -19
- data/site-local/testing-guide/partials/overview.html +239 -19
- data/site-local/testing-guide/partials/variables.html +244 -24
- data/site-local/testing-guide/test-cases.html +246 -26
- data/site-local/testing-guide/test-sample.html +245 -25
- data/site-local/testing-guide/test-suite-anatomy.html +239 -19
- 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 +190 -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 +284 -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/rake_task_registry_plugins_spec.rb +95 -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 +178 -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 +162 -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 +100 -0
- data/spec/units/bin/cli_handler_spec.rb +205 -0
- data/spec/units/bin/cli_helper_spec.rb +248 -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 +724 -6
- data/spec/units/config/configurator_spec.rb +961 -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 +486 -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 +336 -160
- 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 +346 -71
- 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/rake_app/test_task_name_spec.rb +47 -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 +1693 -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 +783 -295
- 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 -61
- 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 -526
- 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 -246
- 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/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/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/site-local/assets/stylesheets/main.ec1eaa64.min.css +0 -1
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css.map +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
- data/site-local/snapshot/assets/project.yml +0 -404
- data/spec/system/partials_types_header_spec.rb +0 -166
- 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
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# =========================================================================
|
|
7
7
|
|
|
8
8
|
require 'ceedling/includes/includes'
|
|
9
|
+
require 'ceedling/path_matcher'
|
|
9
10
|
require 'ceedling/preprocess/preprocessinator_bare_includes_extractor'
|
|
10
11
|
require 'ceedling/preprocess/preprocessinator_line_marker_includes_extractor'
|
|
11
12
|
require 'ceedling/preprocess/c_preprocessor_conditionals'
|
|
@@ -22,6 +23,7 @@ class PreprocessinatorIncludesHandler
|
|
|
22
23
|
:file_path_utils,
|
|
23
24
|
:yaml_wrapper,
|
|
24
25
|
:parsing_parcels,
|
|
26
|
+
:quote_include_isolator,
|
|
25
27
|
:loginator,
|
|
26
28
|
:reportinator
|
|
27
29
|
)
|
|
@@ -31,87 +33,19 @@ class PreprocessinatorIncludesHandler
|
|
|
31
33
|
@line_marker_includes_extractor = @preprocessinator_line_marker_includes_extractor
|
|
32
34
|
end
|
|
33
35
|
|
|
36
|
+
# GCC's make rule (-M -MG -MP) for an isolated copy of `filepath`, listing every header
|
|
37
|
+
# the file names. Only Ceedling's vendor paths are searched, which serves a Partials
|
|
38
|
+
# directive macro, and a header not found is taken as one to be generated. A macro
|
|
39
|
+
# another header defines is invisible here, so an #include it guards can drop out; the
|
|
40
|
+
# text scan and computed #includes make up for that. Nil when the run gives no rule at
|
|
41
|
+
# all: errors in the file's own code still give one, so the tool itself failed.
|
|
34
42
|
def extract_bare_includes(test:, filepath:, search_paths:, flags:, defines:)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
operation: "Extracting bare #includes via preprocessing from",
|
|
39
|
-
module_name: test,
|
|
40
|
-
filename: filename
|
|
41
|
-
)
|
|
42
|
-
@loginator.log( msg, Verbosity::OBNOXIOUS )
|
|
43
|
-
|
|
44
|
-
# Creation:
|
|
45
|
-
# - This output is created with the -MM -MG -MP command line options.
|
|
46
|
-
# - Limited search paths are used towards shallow extracting of only the user #include statements of the file.
|
|
47
|
-
# This preprocessor mode assumes any includes discovered outside of a search path will be generated.
|
|
48
|
-
#
|
|
49
|
-
# Notes:
|
|
50
|
-
# - This approach can have gaps with advacnced user-level macros like `#include <MACRO>`.
|
|
51
|
-
# By including Ceedling's vendor search path, we support Partials macros of this sort.
|
|
52
|
-
# - Gaps can be minimized with proper defines in the project file. However, needed, complex macros
|
|
53
|
-
# located in other header files could still gum up the works.
|
|
54
|
-
# - Many errors can occur but may not necessarily prevent usable results.
|
|
55
|
-
#
|
|
56
|
-
# GCC's quoted #include resolution always checks the directory of the file it's currently
|
|
57
|
-
# processing, independent of search paths -- a real sibling header on disk is opened and
|
|
58
|
-
# recursed into regardless of the restricted search paths above. Staging an isolated,
|
|
59
|
-
# sibling-free copy of the file being scanned keeps this pass's output limited to genuine
|
|
60
|
-
# top-level #include statements only. The isolation directory is minted directly inside the
|
|
61
|
-
# test's own preprocess-files build directory (already created in an earlier build stage) --
|
|
62
|
-
# no dedicated subdirectory or filename-based naming, to keep the resulting path as short as
|
|
63
|
-
# possible for platforms with tight path length limits.
|
|
64
|
-
isolation_parent = @file_path_utils.form_test_preprocess_files_path( test )
|
|
65
|
-
isolation_dir = @file_wrapper.mkdir_tmp( nil, isolation_parent )
|
|
66
|
-
isolated_filepath = File.join( isolation_dir, filename )
|
|
67
|
-
|
|
68
|
-
begin
|
|
69
|
-
@file_wrapper.cp( filepath, isolated_filepath )
|
|
70
|
-
|
|
71
|
-
msg = @reportinator.generate_module_progress(
|
|
72
|
-
operation: "Isolating a sibling-free copy for bare-includes extraction at",
|
|
73
|
-
module_name: test,
|
|
74
|
-
filename: isolated_filepath
|
|
75
|
-
)
|
|
76
|
-
@loginator.log( msg, Verbosity::OBNOXIOUS )
|
|
77
|
-
|
|
78
|
-
command =
|
|
79
|
-
@tool_executor.build_command_line(
|
|
80
|
-
@configurator.tools_test_bare_includes_preprocessor,
|
|
81
|
-
# No additional arguments
|
|
82
|
-
[],
|
|
83
|
-
# Argument replacement
|
|
84
|
-
isolated_filepath,
|
|
85
|
-
defines,
|
|
86
|
-
flags,
|
|
87
|
-
search_paths
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
# Assume possible errors so we have best shot at extracting results from preprocessing.
|
|
91
|
-
# Full code compilation will catch any breaking code errors
|
|
92
|
-
command[:options][:boom] = false
|
|
93
|
-
shell_result = @tool_executor.exec( command )
|
|
94
|
-
ensure
|
|
95
|
-
@file_wrapper.rm_rf( isolation_dir )
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
make_rules = shell_result[:output]
|
|
99
|
-
|
|
100
|
-
# Do not check exit code for success. In some error conditions we still get usable output.
|
|
101
|
-
# Look for the first line of the make rule output.
|
|
102
|
-
if not make_rules =~ PreprocessinatorBareIncludesExtractor::MAKE_RULE_MATCHER
|
|
103
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
104
|
-
"Preprocessor bare #include extraction failed: #{shell_result[:output]}"
|
|
105
|
-
end
|
|
106
|
-
return []
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
includes = PreprocessinatorBareIncludesExtractor.extract_includes( make_rules )
|
|
110
|
-
includes = clean_self_reference(filepath, includes)
|
|
111
|
-
|
|
112
|
-
header = "Extracted bare #includes from #{filepath}:"
|
|
113
|
-
@loginator.log_list( includes, header, Verbosity::DEBUG )
|
|
43
|
+
_log_extraction_progress( 'Extracting bare #includes via preprocessing from', test, filepath )
|
|
44
|
+
output = run_bare_includes_preprocessor( test, filepath, [defines, flags, search_paths] )
|
|
45
|
+
return log_bare_failure( filepath, output ) unless output.to_s.match?( PreprocessinatorBareIncludesExtractor::MAKE_RULE_MATCHER )
|
|
114
46
|
|
|
47
|
+
includes = clean_self_reference( filepath, PreprocessinatorBareIncludesExtractor.extract_includes( output ) )
|
|
48
|
+
@loginator.log_list( includes, "Extracted bare #includes from #{filepath}:", Verbosity::DEBUG )
|
|
115
49
|
return includes
|
|
116
50
|
end
|
|
117
51
|
|
|
@@ -135,8 +69,9 @@ class PreprocessinatorIncludesHandler
|
|
|
135
69
|
def extract_bare_includes_from_text(filepath:)
|
|
136
70
|
includes = []
|
|
137
71
|
|
|
138
|
-
# Open in binary mode: code_lines
|
|
139
|
-
#
|
|
72
|
+
# Open in binary mode: code_lines cleans the whole buffer via clean_encoding
|
|
73
|
+
# before ever splitting into lines, but a text-mode read could itself raise
|
|
74
|
+
# on invalid byte sequences before clean_encoding gets the chance.
|
|
140
75
|
@file_wrapper.open(filepath, 'rb') do |input|
|
|
141
76
|
@parsing_parcels.code_lines( input ) do |line|
|
|
142
77
|
_include = @include_factory.user_include_from_directive( line ) ||
|
|
@@ -148,104 +83,82 @@ class PreprocessinatorIncludesHandler
|
|
|
148
83
|
return clean_self_reference( filepath, includes )
|
|
149
84
|
end
|
|
150
85
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
86
|
+
# User and system extraction are the same shape twice over -- once against the
|
|
87
|
+
# accurate directives-only line-marker stream, once against the original file's own
|
|
88
|
+
# text as a fallback. The public methods below stay as the four call sites callers
|
|
89
|
+
# and specs know; the two private helpers hold the body each pair shares.
|
|
155
90
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
91
|
+
def extract_user_includes_preprocess(name:, filepath:, preprocessed_filepath:)
|
|
92
|
+
_log_extraction_progress( 'Extracting user #includes from preprocessed output', name, filepath )
|
|
93
|
+
|
|
94
|
+
# No depth limit: a user include matters however deeply it nests. `test:` lets the
|
|
95
|
+
# extractor strip this test's own mock subdirectory off a resolved mock include.
|
|
96
|
+
includes = @line_marker_includes_extractor.extract_includes_from_file(
|
|
97
|
+
preprocessed_filepath,
|
|
98
|
+
PreprocessinatorLineMarkerIncludesExtractor::USER,
|
|
99
|
+
test: name
|
|
160
100
|
)
|
|
161
|
-
@loginator.log(msg, Verbosity::OBNOXIOUS)
|
|
162
101
|
|
|
163
|
-
includes
|
|
164
|
-
@line_marker_includes_extractor.extract_includes_from_file(
|
|
165
|
-
preprocessed_filepath,
|
|
166
|
-
PreprocessinatorLineMarkerIncludesExtractor::USER
|
|
167
|
-
# Note: No limit to max depth to search for user includes
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
return clean_self_reference( filepath, includes )
|
|
102
|
+
clean_self_reference( filepath, includes )
|
|
171
103
|
end
|
|
172
104
|
|
|
173
|
-
def
|
|
174
|
-
includes
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
105
|
+
def extract_system_includes_preprocess(name:, filepath:, preprocessed_filepath:)
|
|
106
|
+
_log_extraction_progress( 'Extracting system #includes from preprocessed output', name, filepath )
|
|
107
|
+
|
|
108
|
+
# A practical ceiling: system headers nest deeply through their own wrappers and
|
|
109
|
+
# everything past a handful of levels is noise, not a project dependency.
|
|
110
|
+
includes = @line_marker_includes_extractor.extract_includes_from_file(
|
|
111
|
+
preprocessed_filepath,
|
|
112
|
+
PreprocessinatorLineMarkerIncludesExtractor::SYSTEM,
|
|
113
|
+
SYSTEM_INCLUDE_MAX_DEPTH
|
|
182
114
|
)
|
|
183
|
-
@loginator.log( msg, Verbosity::OBNOXIOUS, LogLabels::WARNING )
|
|
184
|
-
|
|
185
|
-
cond_tracker = CPreprocessorConditionals.new( defines )
|
|
186
|
-
|
|
187
|
-
# Open in binary mode: code_lines applies clean_encoding per-line, but each_line
|
|
188
|
-
# itself can raise on invalid byte sequences before clean_encoding is reached.
|
|
189
|
-
@file_wrapper.open(filepath, 'rb') do |input|
|
|
190
|
-
@parsing_parcels.code_lines( input ) do |line|
|
|
191
|
-
cond_tracker.process_directive( line )
|
|
192
|
-
next unless cond_tracker.active?
|
|
193
|
-
_include = @include_factory.user_include_from_directive( line )
|
|
194
|
-
includes << _include if !_include.nil?
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
115
|
|
|
198
|
-
|
|
116
|
+
clean_self_reference( filepath, includes )
|
|
199
117
|
end
|
|
200
118
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
119
|
+
# The user files a preprocessor's output entered, from its line markers. Any output
|
|
120
|
+
# that keeps them serves: directives-only output, or a full -E expansion.
|
|
121
|
+
def extract_preprocessed_dependencies(preprocessed_filepath:)
|
|
122
|
+
return @line_marker_includes_extractor.extract_entered_files_from_file( preprocessed_filepath )
|
|
123
|
+
end
|
|
205
124
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
125
|
+
# Resolve every `#include` in the original file whose target is a macro invocation
|
|
126
|
+
# rather than a literal `"..."` / `<...>` filename. Neither bare pass above can see
|
|
127
|
+
# such a directive: the gcc dep pass runs against an isolated copy and can't evaluate
|
|
128
|
+
# a sibling-header guard around it, and the text scan has no literal filename to
|
|
129
|
+
# match. A real preprocessor pass DID resolve it -- it opened the header and emitted
|
|
130
|
+
# an ordinary entering line marker. That pass is directives-only output, or for a test
|
|
131
|
+
# file in fallback, a plain expansion read as a best effort. This method finds each
|
|
132
|
+
# non-literal `#include`'s source line, then asks the line-marker extractor which
|
|
133
|
+
# header the preprocessor entered at that line, and returns those as base `Include`
|
|
134
|
+
# objects to union into `bare` (see Preprocessinator#preprocess_file_includes_common).
|
|
135
|
+
# Meaningful only with line-marker output to read; a nil `directives_only_filepath`
|
|
136
|
+
# (a header in fallback, or a per-file failure) yields an empty list -- a documented
|
|
137
|
+
# limitation.
|
|
138
|
+
#
|
|
139
|
+
# @return [Array<Include>] base Include objects, one per resolved computed #include
|
|
140
|
+
def extract_computed_includes(filepath:, directives_only_filepath:)
|
|
141
|
+
return [] if directives_only_filepath.nil?
|
|
142
|
+
|
|
143
|
+
computed_lines = computed_include_source_lines( filepath )
|
|
144
|
+
return [] if computed_lines.empty?
|
|
145
|
+
|
|
146
|
+
resolved = @line_marker_includes_extractor.resolve_computed_includes(
|
|
147
|
+
preprocessed_filepath: directives_only_filepath,
|
|
148
|
+
source_basename: File.basename( filepath ),
|
|
149
|
+
source_lines: computed_lines
|
|
210
150
|
)
|
|
211
|
-
@loginator.log(msg, Verbosity::OBNOXIOUS)
|
|
212
151
|
|
|
213
|
-
includes =
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
PreprocessinatorLineMarkerIncludesExtractor::SYSTEM,
|
|
217
|
-
5 # Practical max depth limit for system headers (to avoid noisy length)
|
|
218
|
-
)
|
|
152
|
+
includes = resolved.values.map { |path| Include.new( path ) }
|
|
153
|
+
clean_self_reference( filepath, includes )
|
|
154
|
+
end
|
|
219
155
|
|
|
220
|
-
|
|
156
|
+
def extract_user_includes_from_text(name:, filepath:, defines: [])
|
|
157
|
+
_extract_includes_from_text( :user_include_from_directive, 'user', name: name, filepath: filepath, defines: defines )
|
|
221
158
|
end
|
|
222
159
|
|
|
223
160
|
def extract_system_includes_from_text(name:, filepath:, defines: [])
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
filename = File.basename(filepath)
|
|
227
|
-
|
|
228
|
-
msg = @reportinator.generate_module_progress(
|
|
229
|
-
operation: "Extracting system #includes from original file using fallback method",
|
|
230
|
-
module_name: name,
|
|
231
|
-
filename: filename
|
|
232
|
-
)
|
|
233
|
-
@loginator.log( msg, Verbosity::OBNOXIOUS, LogLabels::WARNING )
|
|
234
|
-
|
|
235
|
-
cond_tracker = CPreprocessorConditionals.new( defines )
|
|
236
|
-
|
|
237
|
-
# Open in binary mode: code_lines applies clean_encoding per-line, but each_line
|
|
238
|
-
# itself can raise on invalid byte sequences before clean_encoding is reached.
|
|
239
|
-
@file_wrapper.open(filepath, 'rb') do |input|
|
|
240
|
-
@parsing_parcels.code_lines( input ) do |line|
|
|
241
|
-
cond_tracker.process_directive( line )
|
|
242
|
-
next unless cond_tracker.active?
|
|
243
|
-
_include = @include_factory.system_include_from_directive( line )
|
|
244
|
-
includes << _include if !_include.nil?
|
|
245
|
-
end
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
return clean_self_reference( filepath, includes )
|
|
161
|
+
_extract_includes_from_text( :system_include_from_directive, 'system', name: name, filepath: filepath, defines: defines )
|
|
249
162
|
end
|
|
250
163
|
|
|
251
164
|
# Write to disk a yaml representation of a list of includes
|
|
@@ -270,6 +183,112 @@ class PreprocessinatorIncludesHandler
|
|
|
270
183
|
### Private ###
|
|
271
184
|
private
|
|
272
185
|
|
|
186
|
+
# GCC's quoted #include resolution always checks the directory of the file it is
|
|
187
|
+
# processing, whatever the search paths say, so a real sibling header would be opened and
|
|
188
|
+
# followed. An isolated, sibling-free copy keeps the rule to the file's own #includes.
|
|
189
|
+
# The copy sits directly in the test's preprocess directory, with no name drawn from the
|
|
190
|
+
# file, to keep paths short where their length is limited.
|
|
191
|
+
def run_bare_includes_preprocessor(test, filepath, tool_args)
|
|
192
|
+
output = nil
|
|
193
|
+
@quote_include_isolator.within( parent: @file_path_utils.form_test_preprocess_files_path( test ), files: [filepath] ) do |isolation|
|
|
194
|
+
output = exec_bare_includes_tool( test, isolation.copy_of( filepath ), tool_args )
|
|
195
|
+
end
|
|
196
|
+
return output
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Errors in the file's own code still leave a usable rule, so a failing run's output is
|
|
200
|
+
# read all the same
|
|
201
|
+
def exec_bare_includes_tool(test, isolated_filepath, tool_args)
|
|
202
|
+
operation = 'Isolating a sibling-free copy for bare-includes extraction at'
|
|
203
|
+
@loginator.log( @reportinator.generate_module_progress( operation: operation, module_name: test, filename: isolated_filepath ), Verbosity::OBNOXIOUS )
|
|
204
|
+
|
|
205
|
+
command = @tool_executor.build_command_line( @configurator.tools_test_bare_includes_preprocessor, [], isolated_filepath, *tool_args )
|
|
206
|
+
command[:options][:boom] = false
|
|
207
|
+
return @tool_executor.exec( command )[:output]
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# The tool's own output, since the command line alone wouldn't say why it failed
|
|
211
|
+
def log_bare_failure(filepath, output)
|
|
212
|
+
@loginator.log( "Failed to extract bare #includes (text-scan #includes will stand in) for #{filepath}:\n#{output.to_s.strip}", Verbosity::OBNOXIOUS, LogLabels::ERROR )
|
|
213
|
+
return nil
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Practical max depth for the system-header line-marker walk (see
|
|
217
|
+
# extract_system_includes_preprocess).
|
|
218
|
+
SYSTEM_INCLUDE_MAX_DEPTH = 5 unless const_defined?(:SYSTEM_INCLUDE_MAX_DEPTH, false)
|
|
219
|
+
|
|
220
|
+
# Fallback text scan for user or system includes -- identical but for which directive
|
|
221
|
+
# form IncludeFactory recognizes. `#if`/`#ifdef` state is tracked so a guarded include
|
|
222
|
+
# is only kept when its guard is actually true given `defines`.
|
|
223
|
+
def _extract_includes_from_text(directive_method, noun, name:, filepath:, defines:)
|
|
224
|
+
_log_extraction_progress(
|
|
225
|
+
"Extracting #{noun} #includes from original file using fallback method",
|
|
226
|
+
name, filepath, label: LogLabels::WARNING
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
includes = active_includes_in_text( directive_method, filepath, CPreprocessorConditionals.new( defines ) )
|
|
230
|
+
clean_self_reference( filepath, includes )
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Binary read: code_lines runs clean_encoding over the whole buffer, but a text-mode
|
|
234
|
+
# read can raise on an invalid byte sequence before that ever happens.
|
|
235
|
+
def active_includes_in_text(directive_method, filepath, conditionals)
|
|
236
|
+
includes = []
|
|
237
|
+
@file_wrapper.open( filepath, 'rb' ) do |input|
|
|
238
|
+
@parsing_parcels.code_lines( input ) do |line|
|
|
239
|
+
conditionals.process_directive( line )
|
|
240
|
+
next unless conditionals.active?
|
|
241
|
+
include = @include_factory.public_send( directive_method, line )
|
|
242
|
+
includes << include.anchored( File.dirname( filepath ) ) unless include.nil?
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
return includes
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# An `#include` directive with an argument of some kind. `\S` after the whitespace
|
|
249
|
+
# rejects a malformed `#include` with nothing after it.
|
|
250
|
+
INCLUDE_DIRECTIVE = /^\s*#\s*include\s+\S/ unless const_defined?(:INCLUDE_DIRECTIVE, false)
|
|
251
|
+
|
|
252
|
+
# 1-indexed source line numbers of every `#include` in `filepath` whose argument is
|
|
253
|
+
# a bare token rather than a literal `"..."` or `<...>` -- i.e. a macro the
|
|
254
|
+
# preprocessor must expand before any filename exists. `code_lines_with_num` has
|
|
255
|
+
# already stripped comments and folded backslash continuations, so a commented-out
|
|
256
|
+
# or string-embedded `#include` never reaches here.
|
|
257
|
+
#
|
|
258
|
+
# The line reported is the directive's ENDING physical line, not its first --
|
|
259
|
+
# `-fdirectives-only` attributes a consumed multi-line directive's own entering
|
|
260
|
+
# marker to the last physical line it spans (the marker literally replaces that
|
|
261
|
+
# line in the output stream; see PreprocessinatorLineMarkerIncludesExtractor's own
|
|
262
|
+
# correlation walk and preprocess/README.md), so this must name the same line or
|
|
263
|
+
# resolve_computed_includes never finds a match. For an ordinary, single-line
|
|
264
|
+
# directive the start and end line are identical, so this is a no-op there.
|
|
265
|
+
def computed_include_source_lines(filepath)
|
|
266
|
+
lines = []
|
|
267
|
+
|
|
268
|
+
# Binary read for the same reason the sibling text scans use it: a text-mode read
|
|
269
|
+
# can raise on an invalid byte sequence before code_lines' encoding cleanup runs.
|
|
270
|
+
@file_wrapper.open( filepath, 'rb' ) do |input|
|
|
271
|
+
@parsing_parcels.code_lines_with_num( input ) do |line, _line_num, end_line_num|
|
|
272
|
+
next unless line.match?( INCLUDE_DIRECTIVE )
|
|
273
|
+
next if line.match?( PATTERNS::USER_INCLUDE_DIRECTIVE_FILENAME )
|
|
274
|
+
next if line.match?( PATTERNS::SYSTEM_INCLUDE_DIRECTIVE_FILENAME )
|
|
275
|
+
lines << end_line_num
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
lines
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# Shared progress line for the four extraction methods above.
|
|
283
|
+
def _log_extraction_progress(operation, name, filepath, label: nil)
|
|
284
|
+
msg = @reportinator.generate_module_progress(
|
|
285
|
+
operation: operation, module_name: name, filename: File.basename( filepath )
|
|
286
|
+
)
|
|
287
|
+
args = [msg, Verbosity::OBNOXIOUS]
|
|
288
|
+
args << label unless label.nil?
|
|
289
|
+
@loginator.log( *args )
|
|
290
|
+
end
|
|
291
|
+
|
|
273
292
|
# Remove any filepath in the includes list that is identical to the filepath being processed.
|
|
274
293
|
# We want to prevent an includes list containing an unnecessary self-reference.
|
|
275
294
|
# Use normalized paths for comparison to handle variations (relative vs absolute, different separators, etc.)
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
# =========================================================================
|
|
7
7
|
|
|
8
8
|
require 'ceedling/exceptions'
|
|
9
|
+
require 'ceedling/path_matcher'
|
|
9
10
|
require 'set'
|
|
11
|
+
require 'stringio'
|
|
10
12
|
|
|
11
13
|
##
|
|
12
14
|
## System Includes Directives-only Preprocessor Output Parsing
|
|
@@ -92,12 +94,14 @@ class PreprocessinatorLineMarkerIncludesExtractor
|
|
|
92
94
|
SYSTEM = :system unless const_defined?(:SYSTEM)
|
|
93
95
|
USER = :user unless const_defined?(:USER)
|
|
94
96
|
|
|
95
|
-
constructor :include_factory
|
|
97
|
+
constructor :include_factory, :file_wrapper
|
|
96
98
|
|
|
97
99
|
# Parse preprocessor output from a file (production use)
|
|
98
100
|
# @param filepath [String] Path to the preprocessor output file
|
|
101
|
+
# @param test [String, nil] Current test's identity, needed to correctly strip its
|
|
102
|
+
# own mock subdirectory from a resolved mock include's filepath
|
|
99
103
|
# @return [Array<UserInclude, SystemInclude>]
|
|
100
|
-
def extract_includes_from_file(filepath, type, max_depth=nil)
|
|
104
|
+
def extract_includes_from_file(filepath, type, max_depth=nil, test: nil)
|
|
101
105
|
validate_type_argument( type )
|
|
102
106
|
includes = []
|
|
103
107
|
begin
|
|
@@ -110,8 +114,10 @@ class PreprocessinatorLineMarkerIncludesExtractor
|
|
|
110
114
|
# their first byte is 0x3C — ASCII '<' — regardless of the surrounding encoding.
|
|
111
115
|
# NOTE: binary mode means \r\n line endings are NOT translated on Windows; the
|
|
112
116
|
# extract_includes method calls line.chomp! before regex matching to handle this.
|
|
113
|
-
|
|
114
|
-
|
|
117
|
+
# `filepath` is this same build's own gcc output -- open_with_retry rides out
|
|
118
|
+
# the file briefly not yet being visible right after the shell-out exits.
|
|
119
|
+
@file_wrapper.open_with_retry(filepath, 'rb') do |file|
|
|
120
|
+
includes = extract_includes(io: file, filepath: filepath, type: type, max_depth: max_depth, test: test)
|
|
115
121
|
end
|
|
116
122
|
rescue StandardError => e
|
|
117
123
|
raise CeedlingException.new("Failed to extract #{type} includes from preprocessor output file '#{filepath}' ⏩️ #{e.message}")
|
|
@@ -119,18 +125,171 @@ class PreprocessinatorLineMarkerIncludesExtractor
|
|
|
119
125
|
return includes
|
|
120
126
|
end
|
|
121
127
|
|
|
128
|
+
# Every user file the preprocessor entered, once each, in the order entered: the files
|
|
129
|
+
# its output depends on. System headers (marker flag 3) and the preprocessor's own
|
|
130
|
+
# markers, such as "<built-in>", are left out.
|
|
131
|
+
def extract_entered_files_from_string(content)
|
|
132
|
+
return extract_entered_files( StringIO.new( content ) )
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# As extract_entered_files_from_string, reading this build's own preprocessor output
|
|
136
|
+
def extract_entered_files_from_file(filepath)
|
|
137
|
+
files = []
|
|
138
|
+
@file_wrapper.open_with_retry( filepath, 'rb' ) { |file| files = extract_entered_files( file ) }
|
|
139
|
+
return files
|
|
140
|
+
end
|
|
141
|
+
|
|
122
142
|
# Parse preprocessor output from a string (testing use)
|
|
123
143
|
# @param content [String] Preprocessor output as a string
|
|
124
144
|
# @return [Array<UserInclude, SystemInclude>]
|
|
125
|
-
def extract_includes_from_string(content, filepath, type, max_depth=nil)
|
|
145
|
+
def extract_includes_from_string(content, filepath, type, max_depth=nil, test: nil)
|
|
126
146
|
validate_type_argument( type )
|
|
127
147
|
require 'stringio'
|
|
128
148
|
io = StringIO.new(content)
|
|
129
|
-
return extract_includes(io: io, filepath: filepath, type: type, max_depth: max_depth)
|
|
149
|
+
return extract_includes(io: io, filepath: filepath, type: type, max_depth: max_depth, test: test)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Correlate `-fdirectives-only` entering line markers back to the raw source lines
|
|
153
|
+
# that produced them, for a set of lines of interest. Used to recover GCC's own
|
|
154
|
+
# resolution of an `#include` whose target is a macro invocation: the directive
|
|
155
|
+
# carries no literal filename to scan for, but the accurate directives-only pass
|
|
156
|
+
# still resolves it and emits an ordinary entering marker for the header.
|
|
157
|
+
#
|
|
158
|
+
# @param preprocessed_filepath [String] raw directives-only output (line markers
|
|
159
|
+
# intact, comments stripped or not -- physical line count is 1:1 with the source
|
|
160
|
+
# either way, which is all this walk needs), or a test file's plain fallback
|
|
161
|
+
# expansion, read as a best effort (see correlate_computed_includes)
|
|
162
|
+
# @param source_basename [String] basename of the original source file, used to
|
|
163
|
+
# recognize its own line markers in the stream
|
|
164
|
+
# @param source_lines [Enumerable<Integer>] 1-indexed source line numbers to report
|
|
165
|
+
# a resolution for (the lines carrying a non-literal `#include`)
|
|
166
|
+
# @return [Hash{Integer => String}] source line number => path GCC resolved that
|
|
167
|
+
# line's `#include` to; only lines that actually produced an entering marker appear
|
|
168
|
+
def resolve_computed_includes(preprocessed_filepath:, source_basename:, source_lines:)
|
|
169
|
+
wanted = source_lines.to_a
|
|
170
|
+
return {} if wanted.empty?
|
|
171
|
+
|
|
172
|
+
begin
|
|
173
|
+
# Binary mode for the same reason extract_includes_from_file uses it: GCC output
|
|
174
|
+
# under a non-C locale carries non-ASCII bytes, and \r\n must survive untranslated
|
|
175
|
+
# for the per-line chomp! below to normalize.
|
|
176
|
+
# `preprocessed_filepath` is this same build's own gcc output -- open_with_retry
|
|
177
|
+
# rides out the file briefly not yet being visible right after the shell-out exits.
|
|
178
|
+
@file_wrapper.open_with_retry( preprocessed_filepath, 'rb' ) do |file|
|
|
179
|
+
return correlate_computed_includes( io: file, source_basename: source_basename, wanted: Set.new( wanted ) )
|
|
180
|
+
end
|
|
181
|
+
rescue StandardError => e
|
|
182
|
+
raise CeedlingException.new("Failed to correlate computed #includes from preprocessor output file '#{preprocessed_filepath}' ⏩️ #{e.message}")
|
|
183
|
+
end
|
|
130
184
|
end
|
|
131
185
|
|
|
132
186
|
private
|
|
133
187
|
|
|
188
|
+
# Walk the directives-only stream tracking which source line of the file of interest
|
|
189
|
+
# the current physical line maps to, and report the resolved path for every entering
|
|
190
|
+
# marker attributed to a `wanted` source line.
|
|
191
|
+
#
|
|
192
|
+
# `src_line` names the source line the NEXT non-marker physical line will be. A
|
|
193
|
+
# `# n "<file of interest>"` marker sets it to `n`; each subsequent body line of that
|
|
194
|
+
# file bumps it by one. The macro-target `#include` directive is REPLACED by the
|
|
195
|
+
# entering marker for the header it pulled in, so it never shows up as a body line --
|
|
196
|
+
# `src_line` therefore still reads that directive's own line number when its entering
|
|
197
|
+
# marker appears. Body lines and markers of any OTHER file are skipped entirely, so
|
|
198
|
+
# a header's own nesting can't drift the count.
|
|
199
|
+
#
|
|
200
|
+
# A plain expansion, fallback's stand-in for directives-only output, drops runs of lines
|
|
201
|
+
# it has no use for, but it ends each such gap with a `# n` marker for the file, which
|
|
202
|
+
# resets the count. Fallback reads it as a best effort.
|
|
203
|
+
def correlate_computed_includes(io:, source_basename:, wanted:)
|
|
204
|
+
resolved = {}
|
|
205
|
+
in_file_of_interest = false
|
|
206
|
+
src_line = 0
|
|
207
|
+
|
|
208
|
+
io.each_line do |line|
|
|
209
|
+
line.chomp!
|
|
210
|
+
|
|
211
|
+
match = LINE_MARKER_REGEX.match(line)
|
|
212
|
+
|
|
213
|
+
# A non-marker line advances the counter only while inside the file of interest.
|
|
214
|
+
unless match
|
|
215
|
+
src_line += 1 if in_file_of_interest
|
|
216
|
+
next
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
marker_path = match[2]
|
|
220
|
+
next if marker_path.start_with?('<') # <built-in>, <command-line>
|
|
221
|
+
|
|
222
|
+
marker_path = canonicalize_marker_path( marker_path )
|
|
223
|
+
flags = match[3] ? match[3].split.map(&:to_i) : []
|
|
224
|
+
|
|
225
|
+
if File.basename(marker_path) == source_basename
|
|
226
|
+
# Entering or resuming the file of interest: its own markers carry the
|
|
227
|
+
# authoritative line number for whatever comes next.
|
|
228
|
+
src_line = match[1].to_i
|
|
229
|
+
in_file_of_interest = true
|
|
230
|
+
elsif in_file_of_interest && flags.include?(1)
|
|
231
|
+
# An entering marker for another file, standing in for a directive on the
|
|
232
|
+
# file-of-interest line the counter currently names.
|
|
233
|
+
resolved[src_line] = marker_path if wanted.include?(src_line)
|
|
234
|
+
in_file_of_interest = false
|
|
235
|
+
else
|
|
236
|
+
# Any other marker (returning to an intermediate header, a nested entry):
|
|
237
|
+
# we're no longer tracking file-of-interest body lines until its own marker
|
|
238
|
+
# brings us back.
|
|
239
|
+
in_file_of_interest = false
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
resolved
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# GCC's own marker text is real and complete but sometimes left uncanonicalized:
|
|
247
|
+
# PathMatcher.resolve_relative deliberately leaves an ABSOLUTE query's own `..`
|
|
248
|
+
# untouched (its own documented contract defers that case to a File.expand_path-
|
|
249
|
+
# based comparison elsewhere) -- reachable whenever the file actually being
|
|
250
|
+
# preprocessed has an absolute path of its own, which makes GCC's marker for a
|
|
251
|
+
# directory-relative include absolute too. Collapsed here with a plain segment
|
|
252
|
+
# walk rather than File.expand_path, which is CWD- and drive-dependent on Windows
|
|
253
|
+
# and would silently inject the current process's own drive letter into an
|
|
254
|
+
# already-absolute Unix-style path instead of leaving it alone. Only reached when
|
|
255
|
+
# the result is still absolute AND still carries a literal `..` segment -- a no-op
|
|
256
|
+
# for the ordinary, already-clean case.
|
|
257
|
+
def canonicalize_marker_path(path)
|
|
258
|
+
resolved = PathMatcher.resolve_relative( path, anchor: '' )
|
|
259
|
+
segments = resolved.split(%r{[\\/]}).reject(&:empty?)
|
|
260
|
+
|
|
261
|
+
# A relative result keeps only the leading .. segments naming a path above the
|
|
262
|
+
# project root, which are already as collapsed as they can be
|
|
263
|
+
return resolved unless segments.include?('..') and PathMatcher.absolute?( resolved )
|
|
264
|
+
|
|
265
|
+
# Absolute forms this can see: a leading "/" (Unix), or a drive letter
|
|
266
|
+
# ("C:\..." / "C:/..."). Either way, remember the prefix so the collapsed
|
|
267
|
+
# result stays just as absolute as it started -- neither form's own marker is
|
|
268
|
+
# ever a bare relative path once resolve_relative has already left it untouched.
|
|
269
|
+
drive_match = resolved.match(/\A([A-Za-z]:)[\\\/]/)
|
|
270
|
+
prefix = drive_match ? "#{drive_match[1]}/" : '/'
|
|
271
|
+
segments.shift if drive_match
|
|
272
|
+
|
|
273
|
+
collapsed = []
|
|
274
|
+
segments.each { |segment| segment == '..' ? collapsed.pop : collapsed << segment }
|
|
275
|
+
|
|
276
|
+
"#{prefix}#{collapsed.join('/')}"
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def extract_entered_files(io)
|
|
280
|
+
return io.each_line.filter_map { |line| entered_user_file( LINE_MARKER_REGEX.match( line.chomp ) ) }.uniq
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# The user file a line marker enters (flag 1), or nil for any other line or marker
|
|
284
|
+
def entered_user_file(match)
|
|
285
|
+
return nil if match.nil? or match[2].start_with?( '<' )
|
|
286
|
+
|
|
287
|
+
flags = match[3] ? match[3].split.map( &:to_i ) : []
|
|
288
|
+
return nil if !flags.include?( 1 ) or flags.include?( 3 )
|
|
289
|
+
|
|
290
|
+
return canonicalize_marker_path( match[2] )
|
|
291
|
+
end
|
|
292
|
+
|
|
134
293
|
def validate_type_argument(type)
|
|
135
294
|
unless [SYSTEM, USER].include?(type)
|
|
136
295
|
raise CeedlingException.new("Invalid type argument: #{type.inspect}. Must be :#{SYSTEM} or :#{USER}")
|
|
@@ -139,7 +298,7 @@ class PreprocessinatorLineMarkerIncludesExtractor
|
|
|
139
298
|
|
|
140
299
|
# Extracts includes from directives-only preprocessor output
|
|
141
300
|
# Returns an array of Include-derived objects
|
|
142
|
-
def extract_includes(io:, filepath:, type:, max_depth:)
|
|
301
|
+
def extract_includes(io:, filepath:, type:, max_depth:, test: nil)
|
|
143
302
|
includes = []
|
|
144
303
|
seen_paths = Set.new
|
|
145
304
|
initial_file_seen = false
|
|
@@ -167,6 +326,13 @@ class PreprocessinatorLineMarkerIncludesExtractor
|
|
|
167
326
|
# Skip special markers like "<built-in>" and "<command-line>"
|
|
168
327
|
next if filepath.start_with?('<')
|
|
169
328
|
|
|
329
|
+
# GCC forms a directory-relative quoted include's own line marker by
|
|
330
|
+
# concatenating the including file's directory onto the literal include
|
|
331
|
+
# text -- real and complete, but left uncanonicalized. Collapsing any ..
|
|
332
|
+
# here, once, means this path can correspond to the project's own real,
|
|
333
|
+
# ..-free file list the same way any other candidate already does.
|
|
334
|
+
filepath = canonicalize_marker_path( filepath )
|
|
335
|
+
|
|
170
336
|
# Integer line number
|
|
171
337
|
line_number = match[1].to_i
|
|
172
338
|
|
|
@@ -204,7 +370,7 @@ class PreprocessinatorLineMarkerIncludesExtractor
|
|
|
204
370
|
# Extract user includes
|
|
205
371
|
elsif type == USER
|
|
206
372
|
unless flags.include?(3)
|
|
207
|
-
includes << @include_factory.user_include_from_filepath( filepath )
|
|
373
|
+
includes << @include_factory.user_include_from_filepath( filepath, test: test )
|
|
208
374
|
end
|
|
209
375
|
end
|
|
210
376
|
# Flag 2 means returning to a previous file
|