1 # Copyright 1999-2018 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
5 PYTHON_COMPAT=( python{2_7,3_{4,5,6,7}} )
7 inherit autotools linux-info flag-o-matic python-any-r1 readme.gentoo-r1 systemd virtualx user multilib-minimal
9 DESCRIPTION="A message bus system, a simple way for applications to talk to each other"
10 HOMEPAGE="https://dbus.freedesktop.org/"
11 SRC_URI="https://dbus.freedesktop.org/releases/dbus/${P}.tar.gz"
13 LICENSE="|| ( AFL-2.1 GPL-2 )"
15 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x86-solaris"
16 IUSE="debug doc elogind selinux static-libs systemd test user-session X"
21 ?? ( elogind systemd )
25 >=dev-libs/expat-2.1.0
26 selinux? ( sys-libs/libselinux )
27 elogind? ( sys-auth/elogind )
28 systemd? ( sys-apps/systemd:0= )
36 app-text/docbook-xml-dtd:4.4
38 sys-devel/autoconf-archive
39 doc? ( app-doc/doxygen )
41 >=dev-libs/glib-2.40:2
46 selinux? ( sec-policy/selinux-dbus )
54 Some applications require a session bus in addition to the system
55 bus. Please see \`man dbus-launch\` for more information.
58 # out of sources build dir for make check
59 TBD="${WORKDIR}/${P}-tests-build"
62 "${FILESDIR}/${PN}-enable-elogind.patch"
67 enewuser messagebus -1 -1 -1 messagebus
69 use test && python-any-r1_pkg_setup
71 if use kernel_linux; then
78 # Tests were restricted because of this
80 -e 's/.*bus_dispatch_test.*/printf ("Disabled due to excess noise\\n");/' \
82 bus/test-main.c || die
86 if [[ ${CHOST} == *-solaris* ]]; then
87 # fix standards conflict, due to gcc being c99 by default nowadays
89 -e 's/_XOPEN_SOURCE=500/_XOPEN_SOURCE=600/' \
90 configure.ac configure || die
93 # required for bug 263909, cross-compile so don't remove eautoreconf
97 multilib_src_configure() {
98 local docconf myconf testconf
100 # so we can get backtraces from apps
103 # error: unrecognized command line option '-rdynamic' wrt #488036
106 append-flags -rdynamic
110 # libaudit is *only* used in DBus wrt SELinux support, so disable it, if
111 # not on an SELinux profile.
113 --localstatedir="${EPREFIX}/var"
114 --docdir="${EPREFIX}/usr/share/doc/${PF}"
115 --htmldir="${EPREFIX}/usr/share/doc/${PF}/html"
116 $(use_enable static-libs static)
117 $(use_enable debug verbose-mode)
120 $(use_enable selinux)
121 $(use_enable selinux libaudit)
123 $(use_enable kernel_linux inotify)
124 $(use_enable kernel_FreeBSD kqueue)
125 $(use_enable elogind)
126 $(use_enable systemd)
127 $(use_enable user-session)
128 --disable-embedded-tests
129 --disable-modular-tests
130 $(use_enable debug stats)
131 --with-session-socket-dir="${EPREFIX}"/tmp
132 --with-system-pid-file="${EPREFIX}"/var/run/dbus.pid
133 --with-system-socket="${EPREFIX}"/var/run/dbus/system_bus_socket
134 --with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
135 --with-dbus-user=messagebus
139 if [[ ${CHOST} == *-darwin* ]]; then
142 --with-launchd-agent-dir="${EPREFIX}"/Library/LaunchAgents
146 if multilib_is_native_abi; then
149 $(use_enable doc doxygen-docs)
154 --disable-doxygen-docs
163 # expat is used for the daemon only
164 # fake the check for multilib library build
165 ac_cv_lib_expat_XML_ParserCreate_MM=yes
169 einfo "Running configure in ${BUILD_DIR}"
170 ECONF_SOURCE="${S}" econf "${myconf[@]}" "${docconf[@]}"
172 if multilib_is_native_abi && use test; then
173 mkdir "${TBD}" || die
176 $(use_enable test asserts)
177 $(use_enable test checks)
178 $(use_enable test embedded-tests)
179 $(use_enable test stats)
180 $(has_version dev-libs/dbus-glib && echo --enable-modular-tests)
182 einfo "Running configure in ${TBD}"
183 ECONF_SOURCE="${S}" econf "${myconf[@]}" "${testconf[@]}"
187 multilib_src_compile() {
188 if multilib_is_native_abi; then
189 # after the compile, it uses a selinuxfs interface to
190 # check if the SELinux policy has the right support
191 use selinux && addwrite /selinux/access
193 einfo "Running make in ${BUILD_DIR}"
197 einfo "Running make in ${TBD}"
201 emake -C dbus libdbus-1.la
206 DBUS_VERBOSE=1 virtx emake -j1 -C "${TBD}" check
209 multilib_src_install() {
210 if multilib_is_native_abi; then
211 emake DESTDIR="${D}" install
213 emake DESTDIR="${D}" install-pkgconfigDATA
214 emake DESTDIR="${D}" -C dbus \
215 install-libLTLIBRARIES install-dbusincludeHEADERS \
216 install-nodist_dbusarchincludeHEADERS
220 multilib_src_install_all() {
221 newinitd "${FILESDIR}"/dbus.initd-r1 dbus
224 # dbus X session script (#77504)
225 # turns out to only work for GDM (and startx). has been merged into
226 # other desktop (kdm and such scripts)
227 exeinto /etc/X11/xinit/xinitrc.d
228 doexe "${FILESDIR}"/80-dbus
231 # needs to exist for dbus sessions to launch
232 keepdir /usr/share/dbus-1/services
233 keepdir /etc/dbus-1/{session,system}.d
234 # machine-id symlink from pkg_postinst()
235 keepdir /var/lib/dbus
236 # let the init script create the /var/run/dbus directory
237 rm -rf "${ED}"/var/run
239 dodoc AUTHORS ChangeLog NEWS README doc/TODO
240 readme.gentoo_create_doc
242 find "${ED}" -name '*.la' -delete || die
246 readme.gentoo_print_elog
248 # Ensure unique id is generated and put it in /etc wrt #370451 but symlink
249 # for DBUS_MACHINE_UUID_FILE (see tools/dbus-launch.c) and reverse
250 # dependencies with hardcoded paths (although the known ones got fixed already)
251 dbus-uuidgen --ensure="${EROOT}"/etc/machine-id
252 ln -sf "${EPREFIX}"/etc/machine-id "${EROOT}"/var/lib/dbus/machine-id
254 if [[ ${CHOST} == *-darwin* ]]; then
255 local plist="org.freedesktop.dbus-session.plist"
258 elog "For MacOS/Darwin we now ship launchd support for dbus."
259 elog "This enables autolaunch of dbus at session login and makes"
260 elog "dbus usable under MacOS/Darwin."
262 elog "The launchd plist file ${plist} has been"
263 elog "installed in ${EPREFIX}/Library/LaunchAgents."
264 elog "For it to be used, you will have to do all of the following:"
265 elog " + cd ~/Library/LaunchAgents"
266 elog " + ln -s ${EPREFIX}/Library/LaunchAgents/${plist}"
267 elog " + logout and log back in"
269 elog "If your application needs a proper DBUS_SESSION_BUS_ADDRESS"
270 elog "specified and refused to start otherwise, then export the"
271 elog "the following to your environment:"
272 elog " DBUS_SESSION_BUS_ADDRESS=\"launchd:env=DBUS_LAUNCHD_SESSION_BUS_SOCKET\""
275 if use user-session; then
276 ewarn "You have enabled user-session. Please note this can cause"
277 ewarn "bogus behaviors in several dbus consumers that are not prepared"
278 ewarn "for this dbus activation method yet."
280 ewarn "See the following link for background on this change:"
281 ewarn "https://lists.freedesktop.org/archives/systemd-devel/2015-January/027711.html"
283 ewarn "Known issues are tracked here:"
284 ewarn "https://bugs.gentoo.org/show_bug.cgi?id=576028"