新的、更通用的脚本
#!/usr/bin/env bash
# P is the package name
P=sed-3.02
# A is the archive name
A=$.tar.gz
export ORIGDIR=`pwd`
export WORKDIR=$/work
export SRCDIR=$/$
if [ -z "$DISTDIR" ]
then
# set DISTDIR to /usr/src/distfiles if not already set
DISTDIR=/usr/src/distfiles
fi
export DISTDIR
if [ -d $ ]
then
# remove old work directory if it exists
rm -rf $
fi
mkdir $
cd $
tar xzf $/$
cd $
./configure --prefix=/usr
make
|
已向代码中添加了很多环境变量,但是,他基本上还是执行同一功能。但是,假如现在要要编译任何标准的 GNU 基于 autoconf 的源代码 tar 压缩包,只需简单地将该文档复制到一个新文档(用合适的名称来反映他所编译的新包名),然后将 "$A" 和 "$P" 的值更改成新值即可。任何其他环境变量都自动调整成正确配置,并且脚本按预想工作。虽然这很方便,但是代码更有改进余地。这段代码比我们开始创建的 "transcript" 脚本要长很多。既然任何编程项目的目标之一是减少用户复杂度,所以最好大幅度缩短代码,或至少更好地组织代码。能够用一个巧妙的方法来做到这点 -- 将代码拆成两个单独文档。将该文档存为 "sed-3.02.ebuild":
sed-3.02.ebuild
#the sed ebuild file -- very simple!
P=sed-3.02
A=$.tar.gz
|
第一个文档不重要,只包含那些必须在每个包中配置的环境变量。下面是第二个文档,他包含操作的主要部分。将他存为 "ebuild",并使他成为可执行文档:
ebuild 脚本
#!/usr/bin/env bash
if [ $# -ne 1 ]
then
echo "one argument expected."
exit 1
fi
if [ -e "" ]
then
source
else
echo "ebuild file not found."
exit 1
fi
export ORIGDIR=`pwd`
export WORKDIR=$/work
export SRCDIR=$/$
if [ -z "$DISTDIR" ]
then
# set DISTDIR to /usr/src/distfiles if not already set
DISTDIR=/usr/src/distfiles
fi
export DISTDIR
if [ -d $ ]
then
# remove old work directory if it exists
rm -rf $
fi
mkdir $
cd $
tar xzf $/$
cd $
./configure --prefix=/usr
make
|
既然已将构建系统拆成两个文档,我敢打赌,您一定在想他的工作原理。基本上,要编译 sed,输入:
$ ./ebuild sed-3.02.ebuild
|
当执行 "ebuild" 时,他首先试图 "source" 变量 ""。这是什么意思?还记得 前一篇文章 所讲的吗:"" 是第一个命令行自变量 -- 在这里,是 "sed-3.02.ebuild"。在 bash 中,"source" 命令从文档中读入 bash 语句,然后执行他们,就好象他们直接出现在 "source" 命令所在的文档中相同。因此,"source " 导致 "ebuild" 脚本执行在 "sed-3.02.ebuild" 中定义 "$P" 和 "$A" 的命令。这种设计更改确实方便,因为假如要编译另一个程式,而不是 sed,能够简单地创建一个新的 .ebuild 文档,然后将其作为自变量传递给 "ebuild" 脚本。通过这种方式,.ebuild 文档最终很简单,而将 ebuild 系统复杂的操作部分存在一处,即 "ebuild" 脚本中。通过这种方式,只需编辑 "ebuild" 脚本就能够升级或增强 ebuild 系统,同时将实现细节保留在 ebuild 文档之外。这里有一个 gzip 的样本 ebuild 文档:
gzip-1.2.4a.ebuild
#another really simple ebuild script!
P=gzip-1.2.4a
A=$.tar.gz
|
添加功能性
好,我们正在取得进展。但是,我还想添加某些额外功能性。我希望 ebuild 脚本再接受一个命令行自变量:"compile"、"unpack" 或 "all"。这个命令行自变量告诉 ebuild 脚本要执行构建过程的哪一步。通过这种方式,能够告诉 ebuild 解包档案,但不进行编译(以便在开始编译之前查看源代码档案)。要做到这点,将添加一条 case 语句,该语句将测试 "",然后根据其值执行不同操作。代码如下:
ebuild,修定本 2
#!/usr/bin/env bash
if [ $# -ne 2 ]
then
echo "Please specify two args - .ebuild file and unpack, compile or all"
exit 1
fi
if [ -z "$DISTDIR" ]
then
# set DISTDIR to /usr/src/distfiles if not already set
DISTDIR=/usr/src/distfiles
fi
export DISTDIR
ebuild_unpack() {
#make sure we're in the right directory
cd $
if [ -d $ ]
then
rm -rf $
fi
mkdir $
cd $
if [ ! -e $/$ ]
then
echo "$/$ does not exist. Please download first."
exit 1
fi
tar xzf $/$
echo "Unpacked $/$."
#source is now correctly unpacked
}
ebuild_compile() {
#make sure we're in the right directory
cd $
if [ ! -d "$" ]
then
echo "$ does not exist -- please unpack first."
exit 1
fi
./configure --prefix=/usr
make
}
export ORIGDIR=`pwd`
export WORKDIR=$/work
if [ -e "" ]
then
source
else
echo "Ebuild file not found."
exit 1
fi
export SRCDIR=$/$
case "" in
unpack)
ebuild_unpack
;;
compile)
ebuild_compile
;;
all)
ebuild_unpack
ebuild_compile
;;
*)
echo "Please specify unpack, compile or all as the second arg"
exit 1
;;
esac
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
| | 版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2007 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86263408 86263960 86264018 86267838 86262244 86263408 售前咨询:总机转201 202 203 204 205 206 207 208 售后服务:总机转211
212 213 214 217 218 晚上0点以后拔分机225 |
| 财务咨询:总机转224
223 传真:028-86264041 财务QQ: 635483282
售前咨询QQ: 327314358 241975952 275026793 408235859 2182518 499513144 售后服务QQ: 634349278 809071471 307742704 512359778 287976517 363783715 在线咨询
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号
|
|