summaryrefslogtreecommitdiff
blob: 49482396596bf186d4b41cdb3898f125e8a9b1e0 (plain)
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
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=6

PYTHON_COMPAT=( python2_7 )
DISTUTILS_OPTIONAL=1

inherit autotools distutils-r1 linux-info perl-functions systemd user

MY_P="${P/_/}"

DESCRIPTION="Access 1-Wire devices like a filesystem"
SRC_URI="mirror://sourceforge/owfs/${MY_P}.tar.gz"
HOMEPAGE="https://owfs.org/ https://sourceforge.net/projects/owfs/"
KEYWORDS="amd64 arm x86"

# Upstream uses crazy SONAME, https://github.com/owfs/owfs/commit/c696fa9b9b44f49c96b9f1c2b3159d277e0c1273
SLOT="0/${PV}"
LICENSE="GPL-2"

IUSE="debug ftdi ftpd fuse httpd parport perl python tcl usb zeroconf"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"

RDEPEND="
	ftdi? ( dev-embedded/libftdi:0 )
	fuse? ( sys-fs/fuse:0= )
	perl? ( dev-lang/perl:= )
	parport? ( sys-kernel/linux-headers )
	python? ( ${PYTHON_DEPS} )
	tcl? ( dev-lang/tcl:0= )
	usb? ( virtual/libusb:0 )
	zeroconf? ( net-dns/avahi[mdnsresponder-compat] )
"

DEPEND="${RDEPEND}
	perl? ( dev-lang/swig )
	python? ( dev-lang/swig )
"

PATCHES=(
	"${FILESDIR}"/${PN}-3.1-vendordir.patch
	"${FILESDIR}"/${PN}-3.1p4-sysmacros.patch
)

S="${WORKDIR}/${MY_P}"

OWUID="${OWUID:-owfs}"
OWGID="${OWGID:-owfs}"

pkg_setup() {
	if use kernel_linux; then
		linux-info_pkg_setup

		if linux_config_exists; then
			if ! linux_chkconfig_present W1; then
				ewarn "CONFIG_W1 isn't set. You will not be able to use 1-wire bus on this system!"
			fi
		else
			elog "Cannot find a linux kernel configuration. Continuing anyway."
		fi
	fi

	use perl && perl_set_version

	enewgroup ${OWGID} 150
	enewuser  ${OWUID} 150 -1 -1 ${OWGID}
}

src_prepare() {
	default

	# Support user's CFLAGS and LDFLAGS.
	sed -i "s/@CPPFLAGS@/@CPPFLAGS@ ${CFLAGS}/" \
		module/swig/perl5/OW/Makefile.linux.in || die
	sed -i "s/@LIBS@/@LIBS@ ${LDFLAGS}/" \
		module/swig/perl5/OW/Makefile.linux.in || die

	eautoreconf
}

src_configure() {
	# disable owpython since we can build python anyway
	# and without it, we don't have to fix the build ;)
	# disable owphp because it is not compatible with PHP-7, bug #651106
	local myeconf=(
		$(use_enable debug)
		$(use_enable fuse owfs)
		$(use_enable ftdi)
		$(use_enable ftpd owftpd)
		$(use_enable httpd owhttpd)
		$(use_enable parport)
		$(use_enable perl owperl)
		--disable-owphp
		--disable-owpython
		$(use_enable tcl owtcl)
		$(use_enable zeroconf avahi)
		$(use_enable zeroconf zero)
		$(use_enable usb)
		--with-systemdsystemunitdir=$(systemd_get_systemunitdir)
	)

	if use httpd || use ftpd || use fuse; then
		myeconf+=( --enable-owserver )
	else
		myeconf+=( --disable-owserver )
	fi

	econf ${myeconf[@]}
}

src_compile() {
	default

	if use python; then
		local CFLAGS="${CFLAGS} -fno-strict-aliasing"

		pushd module/ownet/python > /dev/null || die
		distutils-r1_src_compile
		popd > /dev/null || die

		pushd module/swig/python > /dev/null || die
		emake ow_wrap.c
		distutils-r1_src_compile
		popd > /dev/null || die
	fi
}

src_test() { :; }

src_install() {
	default

	if use httpd || use ftpd || use fuse; then
		newinitd "${FILESDIR}"/owserver.initd-r1 owserver
		newconfd "${FILESDIR}"/owserver.confd owserver

		for i in httpd ftpd; do
			if use ${i}; then
				newinitd "${FILESDIR}"/ow${i}.initd-r1 ow${i}
				newconfd "${FILESDIR}"/ow${i}.confd ow${i}
			fi
		done

		if use fuse; then
			dodir /var/lib/owfs
			dodir /var/lib/owfs/mnt
			newinitd "${FILESDIR}"/owfs.initd-r1 owfs
			newconfd "${FILESDIR}"/owfs.confd owfs
		fi
	fi

	use perl && perl_delete_localpod

	if use python; then
		pushd module/ownet/python > /dev/null || die
		distutils-r1_src_install
		popd > /dev/null || die

		pushd module/swig/python > /dev/null || die
		distutils-r1_src_install
		popd > /dev/null || die
	fi

	find "${D}" -name '*.la' -delete || die
}

pkg_postinst() {
	if use httpd || use ftpd || use fuse; then
		echo
		if [[ ${OWUID} != root ]]; then
			ewarn
			ewarn "In order to allow the OWFS daemon user '${OWUID}' to read"
			ewarn "from and/or write to a 1 wire bus controller device, make"
			ewarn "sure the user has appropriate permission to access the"
			ewarn "corresponding device node/path (e.g. /dev/ttyS0), for example"
			ewarn "by adding the user to the group 'uucp' (for serial devices)"
			ewarn "or 'usb' (for USB devices accessed via usbfs on /proc/bus/usb),"
			ewarn "or install an appropriate UDEV rules (see http://owfs.org/index.php?page=udev-and-usb"
			ewarn "for more information)."
			ewarn
			if use fuse; then
				ewarn "In order to allow regular users to read from and/or write to"
				ewarn "1 wire bus devices accessible via the owfs FUSE filesystem"
				ewarn "client and its filesystem mountpoint, make sure the user is"
				ewarn "a member of the group '${OWGID}'."
				ewarn
			fi
			echo
		fi
	fi
}