1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="6"
KV_min=2.6.39
inherit autotools linux-info multilib multilib-minimal
if [[ ${PV} = 9999* ]]; then
EGIT_REPO_URI="https://github.com/gentoo/eudev.git"
inherit git-r3
else
SRC_URI="https://dev.gentoo.org/~blueness/${PN}/${P}.tar.gz"
KEYWORDS="~alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 ~riscv s390 sh sparc x86"
fi
DESCRIPTION="Linux dynamic and persistent device naming support (aka userspace devfs)"
HOMEPAGE="https://github.com/gentoo/eudev"
LICENSE="LGPL-2.1 MIT GPL-2"
SLOT="0"
IUSE="+hwdb +kmod introspection rule-generator selinux static-libs test"
RESTRICT="!test? ( test )"
COMMON_DEPEND=">=sys-apps/util-linux-2.20
introspection? ( >=dev-libs/gobject-introspection-1.38 )
kmod? ( >=sys-apps/kmod-16 )
selinux? ( >=sys-libs/libselinux-2.1.9 )
!<sys-libs/glibc-2.11
!sys-apps/gentoo-systemd-integration
!sys-apps/systemd"
DEPEND="${COMMON_DEPEND}
dev-util/gperf
virtual/os-headers
virtual/pkgconfig
>=sys-devel/make-3.82-r4
>=sys-kernel/linux-headers-${KV_min}
>=dev-util/intltool-0.50
test? ( app-text/tree dev-lang/perl )"
RDEPEND="${COMMON_DEPEND}
acct-group/input
acct-group/kvm
acct-group/render
!<sys-fs/lvm2-2.02.103
!<sec-policy/selinux-base-2.20120725-r10
!sys-fs/udev
!sys-apps/systemd"
PDEPEND=">=sys-fs/udev-init-scripts-26
hwdb? ( >=sys-apps/hwids-20140304[udev] )"
MULTILIB_WRAPPED_HEADERS=(
/usr/include/udev.h
)
pkg_pretend() {
ewarn
ewarn "As of 2013-01-29, ${P} provides the new interface renaming functionality,"
ewarn "as described in the URL below:"
ewarn "https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames"
ewarn
ewarn "This functionality is enabled BY DEFAULT because eudev has no means of synchronizing"
ewarn "between the default or user-modified choice of sys-fs/udev. If you wish to disable"
ewarn "this new iface naming, please be sure that /etc/udev/rules.d/80-net-name-slot.rules"
ewarn "exists: touch /etc/udev/rules.d/80-net-name-slot.rules"
ewarn
}
pkg_setup() {
CONFIG_CHECK="~BLK_DEV_BSG ~DEVTMPFS ~!IDE ~INOTIFY_USER ~!SYSFS_DEPRECATED ~!SYSFS_DEPRECATED_V2 ~SIGNALFD ~EPOLL ~FHANDLE ~NET ~UNIX"
linux-info_pkg_setup
get_running_version
# These are required kernel options, but we don't error out on them
# because you can build under one kernel and run under another.
if kernel_is lt ${KV_min//./ }; then
ewarn
ewarn "Your current running kernel version ${KV_FULL} is too old to run ${P}."
ewarn "Make sure to run udev under kernel version ${KV_min} or above."
ewarn
fi
}
src_prepare() {
# change rules back to group uucp instead of dialout for now
sed -e 's/GROUP="dialout"/GROUP="uucp"/' -i rules/*.rules \
|| die "failed to change group dialout to uucp"
eapply_user
eautoreconf
}
multilib_src_configure() {
tc-export CC #463846
export cc_cv_CFLAGS__flto=no #502950
# Keep sorted by ./configure --help and only pass --disable flags
# when *required* to avoid external deps or unnecessary compile
local econf_args
econf_args=(
ac_cv_search_cap_init=
ac_cv_header_sys_capability_h=yes
DBUS_CFLAGS=' '
DBUS_LIBS=' '
--with-rootprefix=
--with-rootrundir=/run
--exec-prefix="${EPREFIX}"
--bindir="${EPREFIX}"/bin
--includedir="${EPREFIX}"/usr/include
--libdir="${EPREFIX}"/usr/$(get_libdir)
--with-rootlibexecdir="${EPREFIX}"/lib/udev
--enable-split-usr
--enable-manpages
--disable-hwdb
)
# Only build libudev for non-native_abi, and only install it to libdir,
# that means all options only apply to native_abi
if multilib_is_native_abi; then
econf_args+=(
--with-rootlibdir="${EPREFIX}"/$(get_libdir)
$(use_enable introspection)
$(use_enable kmod)
$(use_enable static-libs static)
$(use_enable selinux)
$(use_enable rule-generator)
)
else
econf_args+=(
--disable-static
--disable-introspection
--disable-kmod
--disable-selinux
--disable-rule-generator
)
fi
ECONF_SOURCE="${S}" econf "${econf_args[@]}"
}
multilib_src_compile() {
if multilib_is_native_abi; then
emake
else
emake -C src/shared
emake -C src/libudev
fi
}
multilib_src_install() {
if multilib_is_native_abi; then
emake DESTDIR="${D}" install
else
emake -C src/libudev DESTDIR="${D}" install
fi
}
multilib_src_test() {
# make sandbox get out of the way
# these are safe because there is a fake root filesystem put in place,
# but sandbox seems to evaluate the paths of the test i/o instead of the
# paths of the actual i/o that results.
# also only test for native abi
if multilib_is_native_abi; then
addread /sys
addwrite /dev
addwrite /run
default_src_test
fi
}
multilib_src_install_all() {
find "${D}" -name '*.la' -delete || die
insinto /lib/udev/rules.d
doins "${FILESDIR}"/40-gentoo.rules
use rule-generator && doinitd "${FILESDIR}"/udev-postmount
}
pkg_postinst() {
mkdir -p "${EROOT}"run
# "losetup -f" is confused if there is an empty /dev/loop/, Bug #338766
# So try to remove it here (will only work if empty).
rmdir "${EROOT}"dev/loop 2>/dev/null
if [[ -d ${EROOT}dev/loop ]]; then
ewarn "Please make sure your remove /dev/loop,"
ewarn "else losetup may be confused when looking for unused devices."
fi
# REPLACING_VERSIONS should only ever have zero or 1 values but in case it doesn't,
# process it as a list. We only care about the zero case (new install) or the case where
# the same version is being re-emerged. If there is a second version, allow it to abort.
local rv rvres=doitnew
for rv in ${REPLACING_VERSIONS} ; do
if [[ ${rvres} == doit* ]]; then
if [[ ${rv%-r*} == ${PV} ]]; then
rvres=doit
else
rvres=${rv}
fi
fi
done
if use hwdb && has_version 'sys-apps/hwids[udev]'; then
udevadm hwdb --update --root="${ROOT%/}"
# https://cgit.freedesktop.org/systemd/systemd/commit/?id=1fab57c209035f7e66198343074e9cee06718bda
# reload database after it has be rebuilt, but only if we are not upgrading
# also pass if we are -9999 since who knows what hwdb related changes there might be
if [[ ${rvres} == doit* ]] && [[ ${ROOT%/} == "" ]] && [[ ${PV} != "9999" ]]; then
udevadm control --reload
fi
fi
if [[ ${rvres} != doitnew ]]; then
ewarn
ewarn "You need to restart eudev as soon as possible to make the"
ewarn "upgrade go into effect:"
ewarn "\t/etc/init.d/udev --nodeps restart"
fi
if use rule-generator && \
[[ -x $(type -P rc-update) ]] && rc-update show | grep udev-postmount | grep -qsv 'boot\|default\|sysinit'; then
ewarn
ewarn "Please add the udev-postmount init script to your default runlevel"
ewarn "to ensure the legacy rule-generator functionality works as reliably"
ewarn "as possible."
ewarn "\trc-update add udev-postmount default"
fi
elog
elog "For more information on eudev on Gentoo, writing udev rules, and"
elog "fixing known issues visit: https://wiki.gentoo.org/wiki/Eudev"
}
|