【发布时间】:2015-10-08 09:09:46
【问题描述】:
我想将许多宏传递给rpmuild,而不必手动输入每个宏,甚至不需要多次使用-D 'foo bar' -D 'foo bar' -D 'foo bar' 生成一个很长的makefile。我想“一次性”将这些宏传递给 rpmbuild。
让我描述一下我的用例 - 我有一个名为 buildid 的脚本,它报告有关构建的信息;
user@host: buildid -k tag
1.8.0-1444293343
user@host: buildid -k buildhost.platform
Linux-4.0.7-300.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two
user@host: buildid -k version.formatted.gnu
1.8.0
我在这样的 RPM .spec 文件中使用这些值;
rpmbuild -ba foo.spec -D "tag `buildid -k tag`" -D "buildhost_platform `buildid -k buildhost.platform`" -D "version `buildid -k version.formatted.gnu`"
这是最糟糕的部分 - 一个很长的命令行,有很多输入。即使我使用 Makefile,它仍然很难看。
我的 buildid 脚本非常灵活,可以将这些 buildid 值保存到文件 (.buildid_rpmmacros) 或其他文件中,但更好的是,可以像这样以漂亮的格式将它们打印出来;
user@host: buildid -f rpmmacros
%buildhost.hostname myhost.example.com
%buildhost.platform Linux-4.0.7-300.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two
%buildhost.release 4.0.7-300.fc22.x86_64
%buildhost.system Linux
%buildhost.version #1 SMP Mon Jun 29 22:15:06 UTC 2015
%git.branch master
%git.revision 48a30d610cf1ab57dcc6947b2366b6a5e9a1fcc6
%git.revision.short 48a30d6
%tag 1.8.0-1444293343
%timestamp 1444293343
%version.formatted.gnu 1.8.0
%version.formatted.short 1.8.0
%version.formatted.win 1.8.0.0
%version.major 1
%version.minor 8
%version.release
%version.revision 0
如果我能做这样的事情,那就太理想了;
rpmbuild -ba foo.spec --macros-stdin < `buildid -f rpmmacros`
最后,宏是项目/RPM 特定的,而不是全局的。这意味着将它们存储在 ~/.rpmmacros 中不是一个可行的解决方案。我可以轻松保存到文件(buildid -nF rpmmacros),但我已经将它们保存到ini 格式的文件中,并且只想以 RPM 宏格式(buildid -f rpmmacro)暂时输出它们
无耻插件 - 如果您对 buildid 工具感兴趣; https://github.com/jamesread/buildid
【问题讨论】: