Skip to content

[bug] neutral 顶层 generated_files 与 per-OS 段并存时前缀被剥、materialize 到错误路径(挡住 0.0.100 设计文档推荐的 common/delta 瘦身) #251

Description

@Sunrisepeak

现象

一个 xpkg 描述符同时有 per-OS 段(mcpp.{linux,macosx,windows}) neutral 顶层 generated_files 时,neutral 的 generated_files 在构建期落不到 -I 能找到的位置 → 消费者编译 fatal error: 'libavutil/avconfig.h' file not found(该文件是 neutral generated_files 里的一项)。

.../compat.ffmpeg/8.1.2/ffmpeg-8.1.2/libavutil/macros.h:28:10:
  fatal error: 'libavutil/avconfig.h' file not found

本地核实(linux):neutral 项 key=mcpp_generated/libavutil/avconfig.hmcpp_generated/config.base.h 实际 materialize 到了 <verdir>/libavutil/avconfig.h<verdir>/config.base.h——mcpp_generated/ 前缀被剥掉,落在 verdir 根而非 <verdir>/mcpp_generated/。而 per-OS 段里 key=mcpp_generated/config.h 的项前缀保留,落在 mcpp_generated/config.hinclude_dirs 里是 mcpp_generated(→-I <builddir>/mcpp_generated),所以 per-OS 项找得到、neutral 项找不到。

影响

挡住 v0.0.100 设计文档 §2.1-C「数据/逻辑分家」自己推荐的 common/delta 瘦身:多平台大型源码包(compat.ffmpeg 三平台)想把跨 OS 相同的 config_components.h 公共部分、9 个相同的 *_list.c、common base 提到 neutral 顶层只存一份(17.5k→~9k 行),就撞这个。现状只能把所有 generated_files 逐 OS 复制(3 份),3 平台 ~21k 行。是 compat.ffmpeg/opencv 描述符复杂度治理的正解通道。

mcpp xpkg parse --all-os 对该描述符三段全过(parse 层 emplace 正确合并了 neutral+per-OS,macos 段报 generated 17=12 neutral+5 per-OS),所以 bug 在 materialize 的路径解析(neutral 段的 mcpp_generated/ 前缀处理),不在 parse。

期望

neutral(顶层 mcpp.generated_files)与 per-OS(mcpp.<os>.generated_files)的项应同规则 materialize(key 原样落到 <builddir>/<key>,即 mcpp_generated/... 都保留前缀),两者按 emplace 合并后统一物化。这样 common/delta 的 neutral base + 相同 list 文件才能只存一份被 per-OS 的 #include "config.base.h" 命中。

复现

mcpp-index PR#94(feat/compat-ffmpeg-3os):compat.ffmpeg 3-OS,config.{h,asm}/config_components.{h,asm} common/delta 拆分(neutral base + per-OS delta)+ 9 个相同 list 文件提 neutral。CI macos/windows 腿 avconfig.h not found;linux 腿本地可见 neutral 项落在 <verdir>/(掉前缀)。生成器 tools/compat-ffmpeg/gen_multiplatform.py。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions