• Jialu Xu's avatar
    gen_compile_commands.py: fix path resolve with symlinks in it · 88094615
    Jialu Xu authored
    When a path contains relative symbolic links, os.path.abspath() might
    not follow the symlinks and instead return the absolute path with just
    the relative paths resolved, resulting in an incorrect path.
    
    1. Say "drivers/hdf/" has some symlinks:
    
        # ls -l drivers/hdf/
        total 364
        drwxrwxr-x 2 ...   4096 ... evdev
        lrwxrwxrwx 1 ...     44 ... framework -> ../../../../../../drivers/hdf_core/framework
        -rw-rw-r-- 1 ... 359010 ... hdf_macro_test.h
        lrwxrwxrwx 1 ...     55 ... inner_api -> ../../../../../../drivers/hdf_core/interfaces/inner_api
        lrwxrwxrwx 1 ...     53 ... khdf -> ../../../../../../drivers/hdf_core/adapter/khdf/linux
        -rw-r--r-- 1 ...     74 ... Makefile
        drwxrwxr-x 3 ...   4096 ... wifi
    
    2. One .cmd file records that:
    
        # head -1 ./framework/core/manager/src/.devmgr_service.o.cmd
        cmd_drivers/hdf/khdf/manager/../../../../framework/core/manager/src/devmgr_service.o := ... \
        /path/to/src/drivers/hdf/khdf/manager/../../../../framework/core/manager/src/devmgr_service.c
    
    3. os.path.abspath returns "/path/to/src/framework/core/manager/src/devmgr_service.c", not correct:
    
        # ./scripts/clang-tools/gen_compile_commands.py
        INFO: Could not add line from ./framework/core/manager/src/.devmgr_service.o.cmd: File \
            /path/to/src/framework/core/manager/src/devmgr_service.c not found
    
    Use os.path.realpath(), which resolves the symlinks and normalizes the paths correctly.
    
        # cat compile_commands.json
        ...
        {
          "command": ...
          "directory": ...
          "file": "/path/to/bla/drivers/hdf_core/framework/core/manager/src/devmgr_service.c"
        },
        ...
    
    Also fix it in parse_arguments().
    Signed-off-by: default avatarJialu Xu <xujialu@vimux.org>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    88094615
gen_compile_commands.py 7.9 KB