Ceedling icon indicating copy to clipboard operation
Ceedling copied to clipboard

ceedling module:stub[<Path:>Filename] failing to find file

Open nscooling opened this issue 2 years ago • 6 comments

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?

nscooling avatar Feb 08 '23 08:02 nscooling

Can you paste your project.yml, as you probably did not add it to :includes: directive in there?

Letme avatar Feb 08 '23 08:02 Letme

---

# 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/
...

nscooling avatar Feb 08 '23 09:02 nscooling

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/

nscooling avatar Feb 08 '23 17:02 nscooling

Have you tried eedling module:stub\[include:lcd\] ? Note the /[ and \]

cjoecker avatar May 22 '24 09:05 cjoecker

Same here. May '22... is this project abandoned?

mvimercati avatar Jul 10 '24 10:07 mvimercati

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?

Letme avatar Jul 10 '24 10:07 Letme