首页 > 其他分享 >巧用rpmbuild的expand宏实现模板功能

巧用rpmbuild的expand宏实现模板功能

时间:2023-04-02 21:13:42浏览次数:27  
标签:二进制 rpmbuild expand test packages spec 模板

需求:构建生成的二进制包的个数不确定,由某些条件决定。

比如,我们想为系统中的所有内核版本构建某个外来模块,如果系统中有2个内核版本,就生成两个2个二进制包,分别对应相应的版本,如果系统中有3个内核版本,就生成3个二进制包。

我们的需求是实现动态个数的%package

很多人在讨论spec是不是一种脚本,很显然不是,它本身没有变量,也不支持循环。但是是支持条件判断的,也支持自定义宏。

回到正题,如果以其它编程语言的逻辑来看,貌似需要的功能是一个变量和若干次循环。但是在spec文件中,就得想另外的办法了。

expand,展开,其实相当于二次执行,类似于bash的eval。它将展开的内容作为spec文件的一部分。

我们就利用bash的循环功能,构建动态个数的%package

下面给出一个demo,可以根据构建时传入的宏来生成不同个数的二进制包。

rpmbuild -D "packages a b c" -bb SPECS/test.spec将生成test-a、test-b、test-c三个二进制包。

%{!?packages: %define packages a}

Name: test
Version: 1.0
Release: 1
Summary: test
License: GPL

%description
test

%install
for sub in %packages; do
touch %{buildroot}/$sub
done

%{expand:%(/bin/bash -c "for sub in %packages; do
cat <<EOF
%package \$sub
Summary: \$sub
%description \$sub
%files \$sub
/\$sub
EOF
done")}

标签:二进制,rpmbuild,expand,test,packages,spec,模板
From: https://www.cnblogs.com/the-capricornus/p/17281354.html

相关文章

  • 【算法学习】图论模板
    注意!并查集只适用于无向图。DFS特点:当前层可以获得下层状态、向下层不断遍历处理方式:递归模板://dfs注意剪枝voiddfs(intu){if(u>n){输出路径return;}for(inti=0;i<n;i++)//遍历点{if(条件)......
  • ESPRESSIF-pip安装模板超时Read timed out
    一、问题:pip._vendor.urllib3.exceptions.ReadTimeoutError:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):Readtimedout.Commandfailed:"C:\Users\zhang\.espressif\python_env\idf4.4_py3.8_env\Scripts\python.exe"-mp......
  • 线段树模板复习
    建树voidbuild(intl,intr,intrt){ if(l==r) { t[rt]=a[l]; return; } intmid=(l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,(rt<<1)|1); t[rt]=t[rt<<1]+t[(rt<<1)|1];}标记下传voidpushdown(intl,intr,intrt){ if(lazy......
  • 洛谷P3374 【模板】树状数组 1-(单点修改,区间查询)
    题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 ......
  • 洛谷P3368 【模板】树状数组 2-(区间修改,单点查询)
    题目描述如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数加上 x;求出某一个数的值。输入格式第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来......
  • django自定义模板显示不同状态的颜色
    一般这个颜色列表是放在models.py里charge_type_class_mapping={1:"success",2:"danger",3:"default",4:"info",5:"primary",} color.pyfromdjango.templateimportLib......
  • 烟雨黑帽技术程序演示:AI智能模板在线制作制作神器-单域名版+多域名版-一键批量制作黑
    烟雨黑帽程序演示:AI智能模板制作神器,用于一键制作黑帽程序模板、零基础小白神器,可直接对接到你程序下使用,支持批量或单个模板的制作。适用于寄生虫、泛目录、站群、蜘蛛池等黑帽程序模板的制作。程序使用极其简单,只需要准备好你想要的模板链接,支持首页或内页,放程序里一键制作即......
  • 触发器模板
    --删除ifexists(select*fromdbo.sysobjectswhereid=OBJECT_ID(N'[dbo].[trig_delete_Ap_CloseBill_extradefine]')andOBJECTPROPERTY(id,N'IsTrigger')=1)dropTRIGGERtrig_delete_Ap_CloseBill_extradefinegoCREATETRIGGERtrig_dele......
  • 微信小程序使用 wxs 对模板数据格式化展示
    在小程序页面展示时,对时间、金额进行格式化处理。但是每次在js文件中处理,并setData感觉无比麻烦。是否可以直接在wxml模板文件中进行处理。正好发现了微信小程序wxs,完全满足需求。微信小程序wxs使用场景WXS(WeiXinScript)是微信创造的一套脚本语言,虽然看起来很JS异常......
  • 【模板】逆单源最短(反向建图) + spfa
    题目要求:不仅要求单源最短路径,还要求其余点到该点的最短路径做法:建立反图求逆单源最短路径,至于单源最短路径选择合适于题目即可参考题目1#include<iostream>2#include<queue>3#include<cstring>45usingnamespacestd;67typedeflonglongLL;8typ......