Gentoo 的軟件包管理器——Portage 中最有用的特性之一就是可以靈活的解決軟件包的依賴問題,由於它解決了其餘發行版的包管理系統很差解決的一些問題。本文只關注如何在 ebuild 文件中設定軟件包的幾種常規性依賴。至於 Portage 究竟有多麼強大,可認真閱讀 Portage 指南。git
在 Gentoo 中,全部的軟件包在編譯及運行時期都會存在一種隱性的依賴,被依賴的軟件包都居於 system
這個軟件包集中。這個軟件包集在安裝 Gentoo 期間便落地生根,與 Gentoo 系統共存亡,因此它們就變成了 Gentoo 軟件包的隱性依賴。github
若想看一下這些幕後的英雄,下面這條命令可以使之浮出水面:segmentfault
root # emerge --pretend @system
在 ebuild 文件中,能夠經過 DEPEND
這個變量來指定在解包、打補丁、編譯以及安裝軟件包過程當中的依賴。大部分軟件包在構建期間均須要一些程序庫的頭文件與庫文件,若是系統中沒有安裝相應的程序庫,那麼就沒法在系統中構建這些軟件包。ui
其餘 Linux 發行版一般不須要設定軟件包構建期間的依賴關係,由於它們是直接發佈已經構建好的軟件包,即特定版本的源碼包的編譯結果。code
將軟件源碼包的編譯結果安裝到系統中後,能夠將此刻的狀態視爲軟件已經安裝至系統中,可是在運行軟件的期間,可能仍是須要其餘軟件包的支持,這就是軟件包運行時依賴。這種依賴,也是大部分 Linux 發行版都致力解決的問題。xml
在 ebuild 文件中,RDEPEND
這個變量用於指定軟件包運行時依賴。ci
若是肯定軟件包的運行時依賴與構建期依賴相同,那麼直接將 DEPEND
的值賦於 RDEPEND
變量便可。get
如今來解決上一次 oce-9999.ebuild 中的遺留問題,即 OCE 包的構建期依賴與運行時依賴。源碼
可否爲某個軟件包設定完備的依賴關係,主要是憑藉本身對這個軟件包構建環境的熟悉程度。所以,這裏面不存在什麼規律。如今,我對 OCE 包的構建環境也不是很熟悉,可是好在 Gentoo 官方的 Portage 樹中有 OpenCascade 的 ebuild。鑑於 OCE 項目本質上是 OpenCascade 項目的 fork,兩者構建環境的依賴應該存在高度的類似性。所以,我決定從 OpenCascade 的 ebuild 中得到一些依賴信息。it
我從 /usr/portage/sci-libs/opencascade
目錄中找到了最新版本的 ebuild 文件,從中選擇了部分關鍵性的依賴添加到了 oce-9999.ebuild 文件中。如今,完整的 oce-9999.ebuild 內容以下:
# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=5 inherit git-2 cmake-utils DESCRIPTION="This project aims at gathering patches/changes/improvements from the OCC community over the latest release" HOMEPAGE="https://github.com/tpaviot/oce" EGIT_REPO_URI="git://github.com/tpaviot/oce.git" LICENSE="LGPL" SLOT="0" KEYWORDS="~amd64" DEPEND="media-libs/ftgl virtual/glu virtual/opengl x11-libs/libXmu" RDEPEND="${DEPEND}" src_configure() { local mycmakeargs=( -DOCE_INSTALL_PREFIX=/usr ) cmake-utils_src_configure }
目前,oce-9999.ebuild 還沒法支持 USE 旗標(USE Flag),這意味着這個 ebuild 的用戶沒法在外圍經過 USE 標籤來定製 oce 軟件包的功能。鑑於 USE 標籤是 Portage 系統頗引覺得豪特性,因此 oce-9999.ebuild 若是不支持這一特性,那就太遺憾了。