summaryrefslogtreecommitdiff
blob: 5f559ce94e008c85f7c74f87a45f8e90a9c76bfd (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
# Copyright 2019-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit desktop linux-mod xdg

DESCRIPTION="Use your phone or tablet as webcam with a v4l device driver and app"
HOMEPAGE="https://www.dev47apps.com/droidcam/linux/"
SRC_URI="https://github.com/dev47apps/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"

KEYWORDS="~amd64"
LICENSE="GPL-2"
SLOT="0"

IUSE="gtk"

# Requires connection to phone/tablet
RESTRICT="test"

DEPEND="
	app-pda/libplist
	app-pda/libusbmuxd
	dev-libs/glib
	dev-libs/libappindicator:3
	dev-libs/libxml2
	dev-util/android-tools
	media-libs/alsa-lib
	media-libs/libjpeg-turbo
	>=media-libs/speex-1.2.0-r1
	media-video/ffmpeg
	gtk? (
		x11-libs/gdk-pixbuf
		x11-libs/gtk+:3
		x11-libs/libX11
		x11-libs/pango
	)
"
RDEPEND="${DEPEND}"
BDEPEND="virtual/pkgconfig"

BUILD_TARGETS="all"
MODULE_NAMES="v4l2loopback-dc(video:${S}/v4l2loopback:${S}/v4l2loopback)"
MODULESD_V4L2LOOPBACK_DC_ENABLED="yes"

CONFIG_CHECK="~SND_ALOOP VIDEO_DEV VIDEO_V4L2 MEDIA_SUPPORT MEDIA_CAMERA_SUPPORT"
ERROR_SND_ALOOP="CONFIG_SND_ALOOP is optionally required for audio support"

PATCHES="${FILESDIR}/${PN}-makefile-fixes.patch"

src_prepare() {
	if ! use gtk; then
		default
		sed -i -e '/cflags gtk+/d' Makefile || die
	else
		xdg_src_prepare
		# remove path and extension from Icon and Exec entry
		sed -i -e 's/Icon=\/opt\/droidcam-icon.png/Icon=droidcam/g' \
			-e 's/\/usr\/local\/bin\/droidcam/droidcam/g' \
			droidcam.desktop || die
		sed -i -e 's%/opt/droidcam-icon.png%/usr/share/icons/hicolor/96x96/apps/droidcam.png%g' src/droidcam.c || die
	fi
}

src_configure() {
	set_arch_to_kernel
	default
}

src_compile() {
	if use gtk; then
		emake droidcam
	fi
	emake droidcam-cli

	if linux_chkconfig_present CC_IS_CLANG; then
		BUILD_PARAMS+=' CC=${CHOST}-clang'
		if linux_chkconfig_present LD_IS_LLD; then
			BUILD_PARAMS+=' LD=ld.lld'
			if linux_chkconfig_present LTO_CLANG_THIN; then
				# kernel enables cache by default leading to sandbox violations
				BUILD_PARAMS+=' ldflags-y=--thinlto-cache-dir= LDFLAGS_MODULE=--thinlto-cache-dir='
			fi
		fi
	fi
	export KERNEL_DIR || die
	linux-mod_src_compile
}

src_test() {
	pushd "v4l2loopback" || die
	default
	./test || die
	popd || die
}

src_install() {
	if use gtk; then
		dobin droidcam
		newicon -s 32 icon.png droidcam.png
		newicon -s 96 icon2.png droidcam.png
		domenu droidcam.desktop
	fi
	dobin droidcam-cli

	# The cli and gui do not auto load the module if unloaded (why not though?)
	# so we just put it in modules-load.d to make sure it always works
	insinto /etc/modules-load.d
	if linux_config_exists; then
		if linux_chkconfig_module SND_ALOOP; then
			newins - "${PN}.conf" <<-EOF
				v4l2loopback-dc
				snd_aloop
			EOF
		else
			newins - "${PN}.conf" <<-EOF
				v4l2loopback-dc
			EOF
		fi
	fi

	einstalldocs
	linux-mod_src_install
}

pkg_preinst() {
	linux-mod_pkg_preinst
	if use gtk; then
		xdg_pkg_preinst
	fi
}

pkg_postinst() {
	linux-mod_pkg_postinst
	if use gtk; then
		xdg_pkg_postinst
	else
		elog
		elog "Only droidcam-cli has been installed since 'gtk' flag was not set"
		elog
	fi

	elog "The default resolution for v4l2loopback-dc (i.e. droidcam) is 640x480."
	elog "You can change this value in /etc/modprobe.d/v4l2loopback-dc.conf"
	elog
	elog "Links to the Android/iPhone/iPad apps can be found at"
	elog "https://www.dev47apps.com/"
}

pkg_postrm() {
	linux-mod_pkg_postrm
	if use gtk; then
		xdg_pkg_postrm
	fi
}