
# cmake macros改进,及其600+包升级
## issues
https://gitee.com/src-openeuler/cmake/issues/I5OATI ##
使用cmake编译安装需要单独定义DESTDIR
cmake install ./ ##
打包时会导致安装路径不明确,打包文件不完整,所以建议改为:
DESTDIR="%{buildroot}" cmake --install ./
https://gitee.com/src-openeuler/cmake/pulls/31 **%cmake_build, %cmake_install
等相关宏的缺失, 使得从 rpm
生态的其他发行版移植软件包不便。**
部分Fedora中包,如asdcplib,SPEC文件中会使用%cmake3_build, %cmake3_install宏定义。
但是在openEuler中没有这几个定义,导致用户自行rpmbuild asdcplib.spec报错。
https://gitee.com/src-openeuler/cmake/pulls/53
由于相关宏的缺失,很多的确需要 out-of-source building
的包都会在 spec 中通过各种方式手动指定编译目录参数
Closed: 不完全兼容已有%cmake,会导致软件包批量构建失败aom等软件包批量失败。
https://gitee.com/src-openeuler/cmake/issues/IAND9Y ## cmake新增支持%cmake_build和%cmake_install的实施方案
经过多方讨论,提供如下兼容方案1
## PRs
### 方案1
<https://gitee.com/src-openeuler/cmake/pulls/81> **Support cmake_build and cmake_install**
【8月合入】
| | cmake包 |
各下游包 |
| --- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------
|
| 修改 |
定义全新 <br>%**cmake_conf**<br>%cmake_build<br>%cmake_install |
逐步修改 %cmake 为<br>%cmake_conf<br>%cmake_build<br>%cmake_install |
| 注解 | %cmake_conf
是在 %cmake 的基础上增加如下两行:<br>+ %{!?\_\_cmake_in_source_build:-S "%{\_vpath_srcdir}"}<br>+ %{!?\_\_cmake_in_source_build:-B "%{\_\_cmake_builddir}"} |
一旦定义builddir,<br>需同步修改conf/build/install三阶段 |
【归一化方法】
后续版本在条件允许的时候,将 %cmake
和 %cmake_conf 合并成一个宏
### 方案2
<https://gitee.com/src-openeuler/cmake/pulls/80> **Update cmake macro**
【讨论中】
| | cmake包 |
各下游包 |
| ------------------------- | --------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------
|
| 修改 |
重定义%cmake,<br>同时定义全局%__cmake_in_source_build为1<br><br>定义全新 <br>%cmake_build<br>%cmake_install |
逐步修改 %cmake 为<br>%cmake<br>%cmake_build<br>%cmake_install<br><br>同时定义%__cmake_in_source_build=0 |
| 后期建议(半年后, <br>等所有下游包完成改造) |
去掉全局%__cmake_in_source_build=1定义 |
移除%__cmake_in_source_build=0 |
## 决策点
1. 技术方向:方案1 or
方案2 ?直接合入PR80
2. 落地版本:面向未来 25.03 ?
是
3. 回合版本:存量版本 22.03, 24.03
收益 ? 建议:仅回合对cmake包的修改,新增宏,以方便用户rpmbuild三方包。暂不考虑。
4. 兼容性:同一个spec,
可以拿到所有版本上去构建?暂不考虑。
5. 分离目录:是最佳实践,是未来方向。但存量软件包迁移是否迫切,收益是否大,优先级是否高?
6. 在master上改,
批量暴露问题,推动下游包fix,缩短切换期,25.03分叉点前结束切换
7. release sig确认,
出倒排方案
8. oEEP:fundawang,fengguang
## 组织修改600+下游包
TODOs:
1. 确定上述技术路线(二选一)
2. 确定修改清单:在src-openeuler git上总共grep到634个包含%cmake的spec文件,
按SIG分类,发email出来
3. 提供文档与demo,目前发现有以下三类包,需要各自提供修改示例
1. %make_build、%make_install
2. %ninja_build、%ninja_install
3. %\_\_cmake --build、%\_\_cmake --install
4. 组织修改600+下游包spec,迁移到新的cmake宏,落地25.03版本
**决策点**:如何组织?专人批量修改固定套路的多数包,余下的push各个SIG组去修改?
participants (1)
-
wufengguang