改进lablin的解压函数Unpack()
本帖最后由 CaoFuAng 于 2010-03-04 13:05 编辑
很多包解压解压后的名字跟包名不一致,需要分别对这些包进行重命名才能进入安装,而不同的包解压后的名字没有规律,因此需要对每个包分别进行不同的处理,这样做很麻烦,在分析lablin的安装脚本时,想到一个简单的方法:在bulid目录下新建一个临时的空目录,然后把包解压到里面,此时临时目录里只有一个子目录,无论子目录的名字是什么,我们总可以用ls命令得到子目录的名字,然后再把子目录移动到build目录下同时命名为我们想要的包名。以下是我的代码,有不足之处敬请高手们多多指教
Unpack()
{
local pkg="${1}"
local upkg=""
cd ${BUILD_PATH}/${2}
echo -n "Extracting \"${pkg}\" ."
# if test -d ${pkg}
# then
# echo "pkg ${pkg} is exists skiping ..."
# cd ${pkg} || exit 1
# return 0
# fi
if [ -z "${2}" ]; then
echo "target dir NOT specified!"
exit 1
fi
echo -n "."
if test -d .__temp__
then
rm -rf .__temp__/*
else
rm -rf .__temp__
mkdir .__temp__
fi
if test -f ${SRC_PATH}/${pkg}.tar.bz2; then
tar jxf ${SRC_PATH}/${pkg}.tar.bz2 -C .__temp__ || exit 1
elif test -f ${SRC_PATH}/${pkg}.tar.gz; then
tar zxf ${SRC_PATH}/${pkg}.tar.gz -C .__temp__ || exit 1
else
tar xf ${SRC_PATH}/${pkg}* -C .__temp__ || exit 1
fi
echo -n "."
rm -rf ${pkg}
mv .__temp__/* ${pkg} || exit 1
echo -n "."
if [ "${pkg}" = "${MWP_GLIBC}" ]
then
echo "Extracting pkg glibc-ports-${GLIBC_VER}"
tar xf ${SRC_PATH}/glibc-ports-${GLIBC_VER}.tar.* -C .__temp__ || exit 1
mv .__temp__/* ${MWP_GLIBC}/ports || exit 1
fi
echo " OK."
cd ${pkg} || exit 1
which patch > /dev/null 2>&1 && \
{
for fpatch in `ls ${MW_TOP_DIR}/${2}/${pkg}/*.patch 2>/dev/null`
do
patch -p1 -i ${fpatch} || exit 1
done
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
great! 不过请先用git生成patch,然后以附件形式重发一遍
patch如下:
很好!不过有两个地方需要改
1、下面这部分代码可以再简化一下:
if test -d .__temp__
then
rm -rf .__temp__/*
else
rm -rf .__temp__
mkdir .__temp__
fi
2、glibc-ports-${GLIBC_VER}解压部分代码应保持原样。特定软件包,而且名字固定
回复 4# conke
多谢指教,代码已经改好了,下面的是新的patch
applied