Hello,

I am afraid that it is just not covered correctly by nxstyle. I was tackling 
the 
same issue few times already.

nxstyle first resolves all symlinks with `realpath` and thus no magic with 
symlinks will work.
https://github.com/apache/nuttx/blob/ed877fd494cc465671186a63a7fd9c41abf494ba/tools/nxstyle.c#L1138C37

The code checks if it is relative to NuttX directory with `strstr` which can be 
abused. The second allowed is that it relative to apps directory path. This is 
harder to abused. If neither is true then it prints tat error message. I do not 
see where it would even try to check if path is absolute and thus the message 
is 
just not correct in my eyes.
https://github.com/apache/nuttx/blob/ed877fd494cc465671186a63a7fd9c41abf494ba/tools/nxstyle.c#L1327


I know about three possible ways to get nxstyle work with external applications 
and board code.

The first one is that you can just abuse the check for NuttX root directory. If 
you have NuttX project in `/home/foo/nuttx` then `/home/foo/nuttx-myapps` and 
such is considered to be relative to the NuttX root. It is simply abused but 
sometimes it is possible to organize your project this way and get nxstyle to 
work for free.

The second is what I am using right now and that is wrapper script around 
nxstyle call that just disables that error. Appended at the end of my mail for 
inspiration.

The third and last one is to figure out how it should work and implement it 
with 
patch. I just haven't had time to do so. 😇

With regards
Karel Kočí


The promised script (placed in tool directory in our projects). It is not ideal 
but it works:

    #!/usr/bin/env bash
    set -eu
    # We want to make sure that our board sources are formatted correctly 
according
    # the NuttX code style. At the same time we can't ensure  simply that 
absolute
    # path is in header and thus we just simply mask this type of error and keep
    # path as it would be in NuttX repository.
    
    project="${0%/*}/.."
    nuttx_tools="${0%/*}/../core/tools"
    
    export CROSSDEV="arm-none-eabihf-"
    
    itype=' error'
    imessage=' Path relative to repository other than "nuttx" must begin with 
the root directory'
    
    ec=0
    while IFS=: read -r file line char type message; do
        echo -n "$file:$line:$char$type:$message" >&2
        if [[ "$type" == "$itype" ]] && [[ "$message" == "$imessage" ]]; then
                echo " (Ignored)"
        else
                echo
                ec=1
        fi
    done <<<"$(git ls-files \
        "$project/board/**" \
        "$project/project-apps/**" \
        "$project/project-libs/**" \
        | xargs "$nuttx_tools/checkpatch.sh" -f)"
    
    exit $ec



Excerpts from Nathan Hartman's message of November 23, 2023 1:58 pm:
> On Thu, Nov 23, 2023 at 6:42 AM Tim Hardisty <timhardist...@gmail.com>
> wrote:
> 
>> Hi,
>>
>> I have an out-of-tree custom board (which lives resides in my main NuttX
>> folder as  ./../CustomBoards/boardname). I use checkpatch.sh even on my
>> board software in that locations as I like to be consistent, but it
>> complains that the path (line 2 of the header comment) must begin with
>> the root directory as it's a relative path other than "nuttx".
> 
> 
> 
> I hope it is *not* requiring an absolute path here, because that would be
> unacceptable: a developer might put the NuttX tree in, e.g.,
> /home/bob/work/NuttX/... on one machine, and another team member might put
> it in /home/alice/NuttX, and if we're requiring an absolute path then the
> source files become tied to one particular machine with one particular
> layout which is not portable to other machines. This may or may not apply
> in Tim's case, but even if this doesn't apply to Tim's case, it would be
> incorrect.
> 
> I am using my phone atm so I cannot dig into the sources right now, but
> I'll try to look a little later...
> 
> Cheers
> Nathan
> 

Attachment: pgpCHVmRnG3qI.pgp
Description: PGP signature

Reply via email to