Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp3299551rdb; Sat, 9 Dec 2023 23:07:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IGaIcmUPk6SO2XOZx4Ibk03pXD/Ykt5KukFTbncGmGytxkCMuTVVfAhwOjDXzVCUfqObH2Q X-Received: by 2002:a05:6808:3a16:b0:3b8:6422:5891 with SMTP id gr22-20020a0568083a1600b003b864225891mr4305374oib.20.1702192022082; Sat, 09 Dec 2023 23:07:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702192022; cv=none; d=google.com; s=arc-20160816; b=xPDPxfFoWufHVdZWPT/S68we9eOg0KtW+FRxnJEQVlkjX6frz2wQjh3vFp3YbjEHfw WoS1OnPELnipaAUjlqM7bGpx2kzzSANb8eJQVex3/6ZoVDbWN4fjPWPxcZlaKE6wQdvG WhPtM+46EyYi36CJ+/uetr40YjlGvjrgULgTeD86RN9Fv7Z22biXNdaOerKArzYQHmH2 Be/KC2lfVnvAKEonQ3SMSs3+s4T7lYv9W61zxZe9gFjILeGw4guWxpyKl2/F57cD57xj aYuI7qjq8n5R989KzB2N7SRjHZquhPEvwtjNDVcVKNtCOcMTUPkcSn4SPaGpIIO6+Roq VN6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=YApav3tycZNnw1Ssqb+zlJ/ZwY/JFd3iXlm196YL1uY=; fh=LxvuedbCDexgPS7PCUIMReAEHuru3vKZX5hWS6CoY24=; b=IeoYoqucJ4RDjJZ7r54ZymUBZ0jPlmivxc2GUHXsJoevXOe+Cpq0BQ8ZDWoW5epKQI C3yosucitcoeWrOQAfi1u8KCDRMvCQss7507RB8Ks+hs34MRD4fkT/fsBzhZKTj6xA0U m33cp6+cNv6Q9wXt7L5fAWGprLSdwZ4UELfsWyL5KFCOhTcHkV5ixJXFRgU1OjOKCDS0 7E1p1bT8Bx8iUeSCVPXCuSXkq6Xh37nM/eSReYs6LbesVYRhyaq8SrfeZCs5b9+fi9/H HsZDj+Hqeb5nPpy1QRwFEq189Y8Wg00ui2Yx3HXEHI+zGBYyTY/rQJlH3X3FZLAKerNX bs+A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id n7-20020a654507000000b005c6bd30ec26si4138059pgq.449.2023.12.09.23.07.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Dec 2023 23:07:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 9E5938060457; Sat, 9 Dec 2023 23:06:59 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231639AbjLJHGl (ORCPT + 99 others); Sun, 10 Dec 2023 02:06:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229481AbjLJHGj (ORCPT ); Sun, 10 Dec 2023 02:06:39 -0500 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.155.65.254]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 216A9107; Sat, 9 Dec 2023 23:06:44 -0800 (PST) X-QQ-mid: bizesmtpipv601t1702191989teml Received: from localhost.localdomain ( [255.141.82.1]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 10 Dec 2023 15:05:55 +0800 (CST) X-QQ-SSF: 01200000000000B0J000000A0000000 X-QQ-FEAT: XDJ14wmgNKL+JotWPJlcmW4AloQlqtxbmipQt2oqafFm/U2XoSoYwGfl6VDI1 lT2/S6PukQdYO5Sm10cf8rMsgUFFjhEqbMg+p/jWhQ6n7ciRTBgbkC6xWILQP9u3hS37Qrl cldhL6V0TOFNUjDLQMi0IfqaTI8NBt6jeROPzKhPdIpjYtBPClO8PY+4qnK80z99vHjlDe0 MU9htik+OVMwTE27GhKy17dQsqbGmJBI9NNfRRFm/T+TVwmNapErwbffaFdD4Jk2YxbYZXL eoKcUrZ90LbVJ9QT2bZLe475dTI0TtiLiItEbon0z3hld0l0d9JraN51FRrF04Pyp4DqsdF ExPGg8Q2YuT3j8h8Jfcw8BwXp5WynrpRfmmOB9by0VXsQWWp0Si/cB4dlSDmw== X-QQ-GoodBg: 0 X-BIZMAIL-ID: 3158962225522791323 From: Jialu Xu To: masahiroy@kernel.org Cc: justinstitt@google.com, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, morbo@google.com, nathan@kernel.org, ndesaulniers@google.com, xujialu@vimux.org Subject: [PATCH v5] gen_compile_commands.py: fix path resolve with symlinks in it Date: Sun, 10 Dec 2023 15:05:34 +0800 Message-Id: <20231210070533.925534-2-xujialu@vimux.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231210070533.925534-1-xujialu@vimux.org> References: <20231210070533.925534-1-xujialu@vimux.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpipv:vimux.org:qybglogicsvrgz:qybglogicsvrgz5a-1 X-Spam-Status: No, score=0.5 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_ILLEGAL_IP,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Sat, 09 Dec 2023 23:06:59 -0800 (PST) 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: Jialu Xu --- scripts/clang-tools/gen_compile_commands.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/clang-tools/gen_compile_commands.py b/scripts/clang-tools/gen_compile_commands.py index 180952fb91c1b..5dea4479240bc 100755 --- a/scripts/clang-tools/gen_compile_commands.py +++ b/scripts/clang-tools/gen_compile_commands.py @@ -64,7 +64,7 @@ def parse_arguments(): args = parser.parse_args() return (args.log_level, - os.path.abspath(args.directory), + os.path.realpath(args.directory), args.output, args.ar, args.paths if len(args.paths) > 0 else [args.directory]) @@ -172,8 +172,8 @@ def process_line(root_directory, command_prefix, file_path): # by Make, so this code replaces the escaped version with '#'. prefix = command_prefix.replace('\#', '#').replace('$(pound)', '#') - # Use os.path.abspath() to normalize the path resolving '.' and '..' . - abs_path = os.path.abspath(os.path.join(root_directory, file_path)) + # Return the canonical path, eliminating any symbolic links encountered in the path. + abs_path = os.path.realpath(os.path.join(root_directory, file_path)) if not os.path.exists(abs_path): raise ValueError('File %s not found' % abs_path) return { -- 2.39.2