现象
一个 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.h 与 mcpp_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.h。include_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。
现象
一个 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 里的一项)。本地核实(linux):neutral 项 key=
mcpp_generated/libavutil/avconfig.h与mcpp_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.h。include_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。