src_install

函数 src_install
用途 将软件包安装到 ${D}
沙盒 启用
权限 root
调用时机 ebuild

默认 src_install

对于 EAPI 4 及更高版本,默认的 src_install 函数如下所示

src_install() {
	if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]] ; then
		emake DESTDIR="${D}" install
	fi

	if ! declare -p DOCS >/dev/null 2>&1 ; then
		local d
		for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS \
				FAQ CREDITS CHANGELOG ; do
			[[ -s "${d}" ]] && dodoc "${d}"
		done
	elif [[ $(declare -p DOCS) == "declare -a"* ]] ; then
		dodoc "${DOCS[@]}"
	else
		dodoc ${DOCS}
	fi
}

对于 EAPI 6 及更高版本,默认的 src_install 函数如下所示

src_install() {
	if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]] ; then
		emake DESTDIR="${D}" install
	fi
	einstalldocs
}

示例 src_install

src_install() {
	emake DESTDIR="${D}" install
	dodoc README CHANGES
}

简单安装

通常,尤其是在使用 autotools 驱动的软件包时,会有一个 Makefile install 目标,它将遵守 DESTDIR 变量以告知它安装到非根目录位置。如果可能,应该使用此方法。

	emake DESTDIR="${D}" install

通常,软件包的构建系统不会安装 READMEChangeLog 等文件,因此需要为它们包含额外的 dodoc 语句。

	emake DESTDIR="${D}" install
	dodoc README CHANGES
	dodoc -r doc

dodoc 支持 -r 作为第一个参数,这允许递归安装目录。

基本安装

对于一些没有 Makefile 且仅安装少量文件的软件包,使用 cp 手动安装是最简单的选择。例如,要简单安装一些(无需编译)主题

	dodir /usr/share/foo-styles/
	cp -R "${S}/" "${D}/" || die "Install failed!"

或者有时 insintodoins(以及相关函数 - 请参阅 安装函数参考)的组合 - 以下内容基于 sys-fs/udev 安装

src_install() {
	dobin udevinfo
	dobin udevtest
	into /
	dosbin udev
	dosbin udevd
	dosbin udevsend
	dosbin udevstart
	dosbin extras/scsi_id/scsi_id
	dosbin extras/volume_id/udev_volume_id

	exeinto /etc/udev/scripts
	doexe extras/ide-devfs.sh
	doexe extras/scsi-devfs.sh
	doexe extras/cdsymlinks.sh
	doexe extras/dvb.sh

	insinto /etc/udev
	newins "${FILESDIR}/udev.conf.post_050" udev.conf
	doins extras/cdsymlinks.conf

	# For devfs style layout
	insinto /etc/udev/rules.d/
	newins etc/udev/gentoo/udev.rules 50-udev.rules

	# scsi_id configuration
	insinto /etc
	doins extras/scsi_id/scsi_id.config

	# set up symlinks in /etc/hotplug.d/default
	dodir /etc/hotplug.d/default
	dosym ../../../sbin/udevsend /etc/hotplug.d/default/10-udev.hotplug

	# set up the /etc/dev.d directory tree
	dodir /etc/dev.d/default
	dodir /etc/dev.d/net
	exeinto /etc/dev.d/net
	doexe etc/dev.d/net/hotplug.dev

	doman *.8
	doman extras/scsi_id/scsi_id.8

	dodoc ChangeLog FAQ HOWTO-udev_for_dev README TODO
	dodoc docs/{overview,udev-OLS2003.pdf,udev_vs_devfs,RFC-dev.d,libsysfs.txt}
	dodoc docs/persistent_naming/* docs/writing_udev_rules/*

	newdoc extras/volume_id/README README_volume_id
}

当然,这比简单的 Makefile 驱动的安装要难处理得多。

其他安装

有时,会有一个 Makefile 不遵守 DESTDIR 并且需要安装大量文件。在这些情况下,最好修补 Makefile 并联系上游向他们说明情况。

src_install 过程

以下小节涵盖了编写 src_install 函数时经常遇到的不同主题。