Skip to content

build: add diagnostic logging to debian/rules for package debugging#287

Merged
deepin-bot[bot] merged 1 commit into
linuxdeepin:develop/tmpfrom
liyigang1:develop/tmp
May 8, 2026
Merged

build: add diagnostic logging to debian/rules for package debugging#287
deepin-bot[bot] merged 1 commit into
linuxdeepin:develop/tmpfrom
liyigang1:develop/tmp

Conversation

@liyigang1
Copy link
Copy Markdown
Contributor

Added diagnostic output to override_dh_auto_configure in debian/rules Prints version detection results (MAJOR_VERSION, USE_QT6, QT_SUFFIX) Displays control package names and matching .install file status Lists build artifacts in debian/tmp (.so files, headers, pkg-config) Helps diagnose dh_install warnings caused by QT_SUFFIX mismatch Previously libdfm6-io.install referenced libdfm6-io*.so* but build produces libdfm-io.so* without the version suffix, causing warnings

Influence:

  1. Build output will now include diagnostic info at configure stage
  2. No functional change to package build process
  3. Helps identify .install file and build artifact name mismatches
  4. Useful for debugging future packaging issues related to QT_SUFFIX

build: 在 debian/rules 中添加打包诊断日志

在 debian/rules 的 override_dh_auto_configure 中添加了诊断输出 打印版本检测结果 (MAJOR_VERSION、USE_QT6、QT_SUFFIX)
显示 control 包名以及匹配的 .install 文件状态
列出 debian/tmp 中的构建产物 (.so 文件、头文件、pkg-config)
帮助诊断由 QT_SUFFIX 不匹配导致的 dh_install 警告
此前 libdfm6-io.install 引用了 libdfm6-io*.so* 但构建产物为
libdfm-io.so*(无版本后缀),导致打包警告

Influence:

  1. 构建输出将在 configure 阶段包含诊断信息
  2. 不影响包构建过程的功能
  3. 有助于识别 .install 文件与构建产物名称不匹配的问题
  4. 方便排查未来与 QT_SUFFIX 相关的打包问题

Added diagnostic output to override_dh_auto_configure in debian/rules
Prints version detection results (MAJOR_VERSION, USE_QT6, QT_SUFFIX)
Displays control package names and matching .install file status
Lists build artifacts in debian/tmp (.so files, headers, pkg-config)
Helps diagnose dh_install warnings caused by QT_SUFFIX mismatch
Previously libdfm6-io.install referenced libdfm6-io*.so* but build
produces libdfm-io.so* without the version suffix, causing warnings

Influence:
1. Build output will now include diagnostic info at configure stage
2. No functional change to package build process
3. Helps identify .install file and build artifact name mismatches
4. Useful for debugging future packaging issues related to QT_SUFFIX

build: 在 debian/rules 中添加打包诊断日志

在 debian/rules 的 override_dh_auto_configure 中添加了诊断输出
打印版本检测结果 (MAJOR_VERSION、USE_QT6、QT_SUFFIX)
显示 control 包名以及匹配的 .install 文件状态
列出 debian/tmp 中的构建产物 (.so 文件、头文件、pkg-config)
帮助诊断由 QT_SUFFIX 不匹配导致的 dh_install 警告
此前 libdfm6-io.install 引用了 libdfm6-io*.so* 但构建产物为
libdfm-io.so*(无版本后缀),导致打包警告

Influence:
1. 构建输出将在 configure 阶段包含诊断信息
2. 不影响包构建过程的功能
3. 有助于识别 .install 文件与构建产物名称不匹配的问题
4. 方便排查未来与 QT_SUFFIX 相关的打包问题
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 8, 2026

  • 检测到debian目录文件有变更: debian/rules

@github-actions github-actions Bot requested a review from liujianqiang-niu May 8, 2026 07:46
@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: Johnson-zs, liyigang1

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@liyigang1
Copy link
Copy Markdown
Contributor Author

/forcemerge

@deepin-bot
Copy link
Copy Markdown

deepin-bot Bot commented May 8, 2026

This pr force merged! (status: unstable)

@deepin-bot deepin-bot Bot merged commit ce8469e into linuxdeepin:develop/tmp May 8, 2026
17 of 21 checks passed
@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

这段代码是一个 debian/rules 文件(Makefile 格式)的补丁,主要是在 override_dh_auto_configure 目标中添加了大量的调试诊断信息。

以下是针对这段代码的详细审查意见,包括语法逻辑、代码质量、代码性能和代码安全方面的改进建议:

1. 语法逻辑

  • Makefile 语法正确性

    • 代码使用了标准的 Makefile 语法,变量引用(如 $(QT_SUFFIX))和 Shell 命令(如 @echo, @for)的使用方式基本正确。
    • @ 前缀的使用得当,可以抑制命令本身的回显,使输出更干净。
    • || true 的使用在 find 命令中是很好的防御性编程,防止因找不到文件而导致构建失败。
  • Shell 脚本逻辑

    • @for 循环中,使用了 case 语句来筛选文件。逻辑是通顺的,用于检测残留的 .install 文件。
    • find 命令配合 2>/dev/null 能够优雅地处理目录不存在的情况。

2. 代码质量

  • 可读性与可维护性

    • 优点:注释和分隔符(======= ... =======)非常清晰,使得日志输出易于阅读和定位。这对于调试打包过程中的多版本(如 Qt5/Qt6)共存问题非常有帮助。
    • 缺点:这段调试代码直接嵌入到了构建流程中。如果这些信息仅用于临时调试,建议在正式发布前移除,或者通过一个环境变量(例如 DEB_BUILD_OPTIONS=verbose)来控制是否显示这些信息,以免在常规构建中产生过多的噪音。
  • 硬编码路径

    • 代码中出现了 debian/tmp/usr/libdebian/tmp/usr/include。虽然这是 Debian 打包的标准约定,但如果 DESTDIR 或构建输出目录发生变化,这些硬编码路径可能会导致检查失效。建议使用变量(如果有的话)代替,或者确认这是项目的标准规范。

3. 代码性能

  • 执行开销
    • find 命令在每次 configure 阶段都会执行。虽然对于中小型项目来说,这通常可以忽略不计,但 find 遍历文件系统确实存在 I/O 开销。
    • 建议:由于这是在 configure 阶段,此时 debian/tmp 目录通常还不存在(除非是增量构建或清理不彻底),所以大部分 find 命令会直接返回 "(debian/tmp 尚未生成)",性能影响较小。但在大型项目中,频繁的文件系统查找仍需注意。

4. 代码安全

  • 路径遍历与注入

    • 代码主要使用的是预定义变量(如 $(QT_SUFFIX)),且主要用于匹配和显示,没有直接作为命令执行参数,因此不存在明显的命令注入风险。
    • find 命令的路径是相对固定的,不存在用户可控的路径遍历风险。
  • 信息泄露

    • 这些调试信息会打印构建环境的具体路径、架构和依赖版本。在 CI/CD 环境中,这是标准做法。但在某些高度安全敏感的环境中,详细的构建环境信息可能被视为敏感信息。不过对于开源软件打包来说,这通常不是问题。

5. 改进建议与重构代码

为了提高代码的健壮性和可维护性,建议对代码进行以下优化:

  1. 增加条件控制:建议通过一个变量(如 VERBOSE_BUILD)来控制是否打印这些诊断信息,避免在常规构建中刷屏。
  2. 提取变量:将 debian/tmp 定义为变量,便于统一管理。
  3. Shell 兼容性:虽然 Debian 环境通常默认为 /bin/bash,但 debian/rules 理论上应兼容 /bin/sh(POSIX shell)。目前的写法基本兼容,但需注意 case 语句中的通配符使用。

优化后的代码示例:

# 可以在文件开头定义一个开关,或者依赖 dh 的 verbose 选项
# 如果 DEB_BUILD_OPTIONS 包含 verbose,则打印详细信息
ifeq ($(filter verbose,$(DEB_BUILD_OPTIONS)),)
    DIAGNOSE = @true
else
    DIAGNOSE = @echo
endif

override_dh_auto_configure:
	@echo "======= [debian/rules] 打包诊断信息 ======="
	@echo "  MAJOR_VERSION  = $(MAJOR_VERSION)"
	@echo "  USE_QT6        = $(USE_QT6)"
	@echo "  QT_SUFFIX      = $(QT_SUFFIX)"
	@echo "  QT_SELECT      = $$QT_SELECT"
	@echo "  DEB_HOST_MULTIARCH = $(DEB_HOST_MULTIARCH)"
	@echo ""
	@echo "--- control 中的包名 (QT_SUFFIX=$(QT_SUFFIX)) ---"
	@grep "^Package:" debian/control | sed 's/^/  /'
	@echo ""
	@echo "--- 匹配到的 .install 文件 ---"
	@for f in debian/libdfm*$(QT_SUFFIX)*.install; do \
		[ -f "$$f" ] && echo "  [匹配] $$f" || true; \
	done
	@for f in debian/libdfm*.install; do \
		case "$$f" in \
			*$(QT_SUFFIX)*) ;; \
			*) echo "  [残留] $$f (QT_SUFFIX=$(QT_SUFFIX) 时不会被 dh_install 使用)";; \
		esac; \
	done
	@echo ""
	@echo "--- 构建产物 (debian/tmp 中的库文件) ---"
	@find debian/tmp/usr/lib -name 'libdfm*.so*' 2>/dev/null | sed 's/^/  /' || echo "  (debian/tmp 尚未生成,将在 build 阶段出现)"
	@echo ""
	@echo "--- 构建产物 (debian/tmp 中的头文件目录) ---"
	@find debian/tmp/usr/include -maxdepth 1 -type d 2>/dev/null | sed 's|debian/tmp/usr/include/|  /usr/include/|' || echo "  (debian/tmp 尚未生成)"
	@echo ""
	@echo "--- 构建产物 (debian/tmp 中的 pkg-config) ---"
	@find debian/tmp/usr/lib -name 'dfm*.pc' 2>/dev/null | sed 's/^/  /' || echo "  (debian/tmp 尚未生成)"
	@echo "==========================================="
	dh_auto_configure -- \
	  -DHOST_MULTIARCH="$(DEB_HOST_MULTIARCH)"

或者,如果这段代码只是为了调试而不应进入生产环境,建议添加注释明确说明:

# TODO: 下面的诊断代码仅用于调试多版本构建问题,问题解决后请移除
override_dh_auto_configure:
	...

总结

这段代码在逻辑上是正确的,对于调试 Debian 打包过程中的文件匹配问题非常有效。主要的问题在于它增加了构建日志的冗长度。建议根据实际需求,决定是保留它作为长期辅助工具,还是作为临时调试代码在问题解决后移除。如果保留,建议增加条件开关控制其输出。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants