ceedling module:stub[<Path:>Filename] failing to find file
In the project root I have a directory /include
I would like to create stubs for headers in this directory.
Assuming I have a header lcd.h when I try
$ ceedling module:stub[include:lcd]
I get the following error indicating it is not parsing the Path:
ceedling module:stub[include:lcd]
WARNING: :includes should be an array.
Creating skeleton for include...
rake aborted!
Errno::ENOTDIR: Not a directory @ rb_sysopen - /workspaces/controller/src/lcd.h/include
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/lib/cmock.rb:54:in `read'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/lib/cmock.rb:54:in `generate_skeleton'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/lib/cmock.rb:38:in `block in setup_skeletons'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/lib/cmock.rb:37:in `each'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/lib/cmock.rb:37:in `setup_skeletons'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/plugins/module_generator/lib/module_generator.rb:26:in `stub_from_header'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/plugins/module_generator/module_generator.rake:40:in `block (3 levels) in <top (required)>'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/plugins/module_generator/module_generator.rake:33:in `each'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/plugins/module_generator/module_generator.rake:33:in `block (2 levels) in <top (required)>'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/bin/ceedling:345:in `block in <top (required)>'
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/bin/ceedling:332:in `<top (required)>'
/usr/local/bin/ceedling:23:in `load'
/usr/local/bin/ceedling:23:in `<main>'
Tasks: TOP => module:stub
(See full trace by running task with --trace)
ERROR: Ceedling Failed
When the header is in the src directory stubbing works fine.
Any ideas?
Can you paste your project.yml, as you probably did not add it to :includes: directive in there?
---
# Notes:
# Sample project C code is not presently written to produce a release artifact.
# As such, release build options are disabled.
# This sample, therefore, only demonstrates running a collection of unit tests.
:project:
:use_exceptions: FALSE
:use_test_preprocessor: TRUE
:use_auxiliary_dependencies: TRUE
:build_root: build
# :release_build: TRUE
:test_file_prefix: test_
:which_ceedling: gem
:ceedling_version: 0.31.1
:default_tasks:
- test:all
#:test_build:
# :use_assembly: TRUE
#:release_build:
# :output: MyApp.out
# :use_assembly: FALSE
:environment:
:extension:
:executable: .out
:paths:
:test:
- +:test/**
- -:test/support
:source:
- src/**
- include/**
:support:
- test/support
:libraries: []
:defines:
# in order to add common defines:
# 1) remove the trailing [] from the :common: section
# 2) add entries to the :common: section (e.g. :test: has TEST defined)
:common: &common_defines []
:test:
- *common_defines
- TEST
:test_preprocess:
- *common_defines
- TEST
:cmock:
:mock_prefix: mock_
:when_no_prototypes: :warn
:enforce_strict_ordering: TRUE
:plugins:
- :ignore
- :callback
:treat_as:
uint8: HEX8
uint16: HEX16
uint32: UINT32
int8: INT8
bool: UINT8
# Add -gcov to the plugins list to make sure of the gcov plugin
# You will need to have gcov and gcovr both installed to make it work.
# For more information on these options, see docs in plugins/gcov
:gcov:
:reports:
- HtmlDetailed
:gcovr:
:html_medium_threshold: 75
:html_high_threshold: 90
#:tools:
# Ceedling defaults to using gcc for compiling, linking, etc.
# As [:tools] is blank, gcc will be used (so long as it's in your system path)
# See documentation to configure a given toolchain for use
# LIBRARIES
# These libraries are automatically injected into the build process. Those specified as
# common will be used in all types of builds. Otherwise, libraries can be injected in just
# tests or releases. These options are MERGED with the options in supplemental yaml files.
:libraries:
:placement: :end
:flag: "-l${1}"
:path_flag: "-L ${1}"
:system: [] # for example, you might list 'm' to grab the math library
:test: []
:release: []
:plugins:
:load_paths:
- "#{Ceedling.load_path}"
:enabled:
- stdout_pretty_tests_report
- module_generator
- xml_tests_report
- gcov
:module_generator:
:inc_root: include/
...
from what I can infer (I'm not a Ruby programmer), the route problem is in
def stub_from_header(module_name, optz={})
when opt is not {}
the function call to
stuboptz = divine_options(optz)
is expanding the {} to
:path_src=>"src", :path_inc=>"src", :path_tst=>"test"
etc,
but if given a path, e.g. [include:lcd] then it expands to:
:path_src=>"include/src", :path_inc=>"include/src", :path_tst=>"include/test"
and then this screws up the later filename generation, to
{project_dir}/src/lcd.h/include
rather than
{project_dir}/include/lcd.h/
Have you tried eedling module:stub\[include:lcd\] ? Note the /[ and \]
Same here. May '22... is this project abandoned?
The 1.0.0 release was announced by end of this month, so it is not abandoned, but it changed a lot. Can you test this with the new pre-release to confirm it is still an issue?