summaryrefslogtreecommitdiff
blob: 85ed9029ecee463ce19eb441740dc550ebdd2903 (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
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit cmake optfeature virtualx xdg

DESCRIPTION="Clipboard manager with advanced features"
HOMEPAGE="
	https://hluk.github.io/CopyQ/
	https://github.com/hluk/CopyQ/
"
SRC_URI="https://github.com/hluk/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/CopyQ-${PV}"

LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~x86 ~amd64-linux ~x86-linux"

IUSE="notification qt6 test"
# Native notifications are not supported with Qt 6
# (Bumpers please check when this requirement is lifted).
# src/notifications.cmake
REQUIRED_USE="notification? ( !qt6 )"

RDEPEND="
	dev-libs/wayland
	x11-libs/libX11
	x11-libs/libXtst
	!qt6? (
		dev-qt/qtcore:5
		dev-qt/qtdeclarative:5
		dev-qt/qtgui:5
		dev-qt/qtnetwork:5
		dev-qt/qtsvg:5
		dev-qt/qtwayland:5
		dev-qt/qtwidgets:5
		dev-qt/qtx11extras:5
		notification? ( kde-frameworks/knotifications:5 )
		test? ( dev-qt/qttest:5 )
	)
	qt6? (
		dev-qt/qtbase:6=[X,gui,network,widgets,xml(+)]
		dev-qt/qtdeclarative:6
		dev-qt/qtsvg:6
		dev-qt/qtwayland:6
	)
"
DEPEND="${RDEPEND}
	x11-base/xorg-proto
"
BDEPEND="
	kde-frameworks/extra-cmake-modules:0
	!qt6? (
		dev-qt/linguist-tools:5
		dev-qt/qtwaylandscanner:5
	)
	qt6? (
		dev-qt/qttools:6[linguist]
		dev-util/wayland-scanner
	)
	test? (
		app-crypt/gnupg
		x11-wm/openbox
	)
"

PATCHES=(
	"${FILESDIR}/copyq-7.1.0-fix-qt-6.6.0-build.patch"
	"${FILESDIR}/copyq-7.1.0-fix-test-failure-due-to-invalid-regex.patch"
	"${FILESDIR}/copyq-7.1.0-fix-gpg-2.1-support.patch"
	"${FILESDIR}/copyq-7.1.0-support-plugin-dir-envvar-r1.patch"
)

src_prepare() {
	cmake_src_prepare

	# FAIL!  : Tests::actionDialogAccept() 'NO_ERRORS(m_test->runClient((Args() << "keys" << actionDialogId << "ENTER" << clipboardBrowserId), toByteArray("")))' returned FALSE.
	# FAIL!  : Tests::actionDialogSelection() 'NO_ERRORS(m_test->runClient((Args() << "keys" << actionDialogId << "ENTER" << clipboardBrowserId), toByteArray("")))' returned FALSE.
	# FAIL!  : Tests::actionDialogSelectionInputOutput() 'NO_ERRORS(m_test->runClient((Args() << "keys" << actionDialogId << "ENTER" << clipboardBrowserId), toByteArray("")))' returned FALSE.
	# FAIL!  : Tests::commandShowAt() 'NO_ERRORS(m_test->waitOnOutput((Args() << "visible"), toByteArray("true\n")))' returned FALSE.
	sed -Ei -e '
	/Tests::(actionDialog(Accept|Selection(|InputOutput))|commandShow)/,/}/ {
	/^\s*\{/ a \
	#if QT_VERSION < QT_VERSION_CHECK(6,0,0)\
	SKIP("Broken on qt5");\
	#endif
	}' src/tests/tests.cpp || die
}

src_configure() {
	local mycmakeargs=(
		-DPLUGIN_INSTALL_PREFIX="${EPREFIX}/usr/$(get_libdir)/${PN}/plugins"
		-DWITH_NATIVE_NOTIFICATIONS=$(usex notification)
		-DWITH_QT6=$(usex qt6)
		-DWITH_TESTS=$(usex test)
	)

	cmake_src_configure
}

my_src_test() {
	# Don't rerun tests and more logs
	local -x COPYQ_TESTS_RERUN_FAILED=0
	local -x COPYQ_LOG_LEVEL=DEBUG

	# Skip test that require network
	local -x COPYQ_TESTS_NO_NETWORK=1

	# Less noise from trying the wayland plugin
	local -x QT_QPA_PLATFORM=xcb

	# Make sure copyq doesn't use system installed plugins which may be incompatible.
	local -x COPYQ_PLUGIN_DIR="${BUILD_DIR}/plugins"

	# In case the users current system confuses the notification integration
	unset KDE_FULL_SESSION XDG_CURRENT_DESKTOP

	mkdir "${HOME}"/.gnupg || die

	ebegin "Starting Openbox"
	openbox & # upstream uses Openbox and it doesn't fail like IceWM
	sleep 5
	eend 0

	"${BUILD_DIR}"/copyq tests

	return $?
}

src_test() {
	virtx my_src_test
}

pkg_postinst() {
	xdg_pkg_postinst
	optfeature "encryption support" app-crypt/gnupg
}