第三章.复杂的porting工作

内容列表
3.1 原理
3.2 获取源代码
3.3 修改源代码
3.4 打补丁
3.5 Configuring
3.6 处理用户输入

好了,现在的工作不是那么的简单,port需要一些修改才能在FreeBSD平台运行.在这一章里,我们将一步一步的介绍怎样完成这些工作.

3.1 原理

当使用者在您的port目录输入make命令时,发生了一系列的事情,如果你读一下bsd.port.mk可能有助于你的理解.

也不用担心你不理解这个文件,很多人是不理解的:-)

1.fetch行为将会被执行,首先检查DISTDIR存不存在需要的tar包,如果没有fetch就会到Makefile中定义的参数URL_MASTER_SITES去取回,包括我们的FTPftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,在那里我们备份了所有获得认可的port.如果成功的连接并取回需要的tar包,就会把他放在DISTDIR,缺省为/usr/ports/distfiles.

2.extract行为会被执行,他会在DISTDIR中寻找你的tar包,并解开到WRKDIR,缺省为work目录.

3.接下来patch行为会被执行,首先Makefile中定义的PATCHFILES会被patch.然后如果在PATCHDIR(缺声为files目录)中存在patch-*文件,也会被按照文件名的先后应用.

4.configure行为会被执行,这里有几种情况:

a.如果存在scripts/configure,首先执行.

b.如果Makefile中定义了HAS_CONFIGURE或GNU_CONFIGURE,则WRKSRC/configure会被执行

c.如果Makefile中定义了USE_IMAKE,XMKMF(缺省为xmkmf -a)

4.build行为会被执行.进入WRKSRC目录编译.如果Makefile中定义了USE_GMAKE,GNU make会被使用.否则使用make命令.

以上行为是系统缺省的.你可以定义pre-*和post-*或者把以此命名的脚本放在scrpts目录,他会在缺省行为之前或之后执行.

举个例子,如果你在Makefile中定义了post-extract, 还建立了scripts目录, 放入一个脚本pre-build. pre-build.那么,在解开tar包后,post-extract会被调用,同样,pre-build会在编译之前调用.推荐你在Makefile中定义所有的行为(如果不是很复杂),这样使用者可能更容易知道您作了什么.

缺省的行为由bsd.port.mk定义.举个例子,extract行为由do-extract定义,如果你对缺省的定义不满意,可以自己在Makefile中定义do-something.

 

注意:几个主要的行为(如,extract,configure等)负责调用相关的脚本,最好不要修改缺省的4个行为

好了,现在你明白port到底是怎么回事了.我们就可以继续深入的学习.