blob: af2792a743d0cec007c1e4b4fd9a9482399e84dd (
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
|
# Maintainer (arch): Bruno Pagani <archange@archlinux.org>
# Maintainer: Parabola Hackers <dev@lists.parabola.nu>
# parabola changes and rationale:
# - build without qt6-webengine
# - pin to strongly-coupled dependency versions
# - build from source-ball rather than VCS
# - build as split package ('jami-daemon'+'jami-qt' PKGBUILDs)
# jami-{daemon,qt} versions are tightly inter-dependent;
# so they always need rebuild together anyways
# the release source-ball includes both;
# so separate PKGBUILDs and build jobs are not necessary
pkgbase=jami
pkgname=(jami-daemon jami-qt)
pkgver=20240125.0
pkgrel=1
pkgrel+=.parabola1
pkgdesc="Free and universal communication platform which preserves the users’ privacy and freedoms (Qt client)"
arch=(x86_64)
arch+=(armv7h i686)
url="https://jami.net"
license=(GPL3)
groups=(jami)
depends=(glibc opendht gnutls nettle libgit2 libsecp256k1 libsecp256k1.so ffmpeg speexdsp
fmt yaml-cpp jsoncpp zlib alsa-lib libpulse jack libupnp libnatpmp
openssl webrtc-audio-processing systemd-libs libarchive) # daemon
depends+=(jami-daemon glib2 gdk-pixbuf2 libnm libnotify qrencode
qt6-declarative qt6-multimedia qt6-svg qt6-5compat qt6-webengine
qt6-webchannel qt6-shadertools) # client
depends=( ${depends[*]/qt6-webengine/} )
depends=( ${depends[*]/jami-daemon/} )
# depends+=( qt6-positioning )
makedepends=(git cmake perl asio msgpack-c msgpack-cxx restinio systemd meson) # daemon
makedepends+=(git cmake python qt6-networkauth qt6-tools) # client
makedepends=( ${makedepends[*]/git/} )
source=(https://ftp.gnu.org/gnu/jami/jami-${pkgver}.tar.gz{,.sig}
qt-6.6.patch)
# _pjprojectver=311bd018fc07aaf62d4c2d2494e08b5ee97e6846 # 2023-10-19 (arch PKGBUILD)
# _pjprojectver=8d32e0b87ee3c747412be34fc9916a4e209f2e8f # 2024-01-08
_pjprojectver=e12ea3bfa81cc4f46031599f80707e81133f1353 # 2024-02-18
# _dhtnetver=fe79669b400d5e6a521fd1408dae02e0d4e50a5b # 2023-10-31 (arch PKGBUILD)
# _dhtnetver=41848a2c770d7eb0940d731014b81643f85e0d07 # 2024-01-22
_dhtnetver=18d344dce9bc9a683d73721a6efbc5cd8eb33828 # 2024-03-02
source+=(https://github.com/savoirfairelinux/pjproject/archive/${_pjprojectver}/pjproject-${_pjprojectver}.tar.gz
dhtnet-$_dhtnetver.tar.gz::https://review.jami.net/plugins/gitiles/dhtnet/+archive/$_dhtnetver.tar.gz)
noextract=(pjproject-${_pjprojectver}.tar.gz
dhtnet-${_dhtnetver}.tar.gz)
sha256sums=('27a5d689db39a5f23a1f57cc258898abdb56c3426c1a9280d3d1b2e96551c3f2' # 20240125.0
'SKIP'
'61d7ca804ed18650274f233cd60a811518859b4c6739ecc246414c35c4b8d906')
# sha256sums+=('7416e3879eb6c20b4a86f4bc86ca91053c580c7641a3f938a4a196183e9a80b4' # 2024-01-08
# '5b25af3dbd3a6f9c423062e58356e8e56f5bdeb9e342b79b2baf1ee623b3ee4d') # 2024-01-22
sha256sums+=('9e1e6362f144eaa743da79c6b818349eb188943e24e0553efd178a220346ab19' # 2024-02-18
'76ed18742c496814d2aa5e0f953a38adbd0e7c8b51ddb8be68bbdb8502d054ec') # 2024-03-02
validpgpkeys=('BE6273738E616D6D1B3A08E8A21A020248816103')
_version_constraint() # (dep_pkgname [precision])
{
Log() { [[ "${FUNCNAME[2]}" == package ]] && echo "$@" >&2 || : ; }
local dep_pkgname=$1
declare -i req_precision=$2
local full_version=$(pacman -S --print-format='%v' ${dep_pkgname} 2> /dev/null | tail -n 1)
local n_dots=$(tmp=${full_version%-*} ; tmp=${tmp//[^\.]} ; echo "${#tmp}" ;)
local def_precision=$(( n_dots + 1 ))
local is_prec_valid=$(( req_precision > 0 && req_precision <= def_precision ))
local precision=$((( is_prec_valid )) && echo ${req_precision} || echo ${def_precision})
local pkgver_rx='[0-9A-Za-z_]+'
pkgver_rx=$(sed 's|\]|\+]|' <<<${pkgver_rx}) # according to the wiki, '+' is not allowed,
# but some pkgver have it (eg: 5.15.10+kde+r130)
local subver_rx='\.'${pkgver_rx}
local pkgrel_rx='[0-9]+'
local garbage_rx='[^0-9].*'
local capture_rx=${pkgver_rx}
for (( n_dots=1 ; n_dots < precision ; ++n_dots )) ; do capture_rx+=${subver_rx} ; done ;
local version pkgrel has_dot_char version_min version_max constraint_string
declare -i subver subver_inc pkgrel_inc
if [[ "${full_version}" =~ ^(${capture_rx})(${subver_rx})*-(${pkgrel_rx}).*$ ]]
then version=${BASH_REMATCH[1]} # pkgver cut to the requested precision
#unused=${BASH_REMATCH[2]} # discarded pkgver segments
pkgrel=${BASH_REMATCH[3]} # pkgrel with non-numerics right-trimmed
has_dot_char=$([[ "${version}" =~ \. ]] ; echo $(( ! $? )) ; )
subver=$(sed "s|${garbage_rx}||" <<<${version##*.}) # right-trim from any non-numeric
version=$( (( has_dot_char )) && echo ${version%.*}.${subver} || echo ${subver} )
subver_inc=$(( subver + 1 ))
pkgrel_inc=$(( pkgrel + 1 ))
version_min=$( (( ! is_prec_valid )) && echo ${full_version%-*}-${pkgrel} || \
echo ${version} )
version_max=$( ( (( ! is_prec_valid )) && echo ${full_version%-*}-${pkgrel_inc} ) || \
( [[ "${version}" =~ \. ]] && echo ${version%.*}.${subver_inc} ) || \
echo ${subver_inc} )
constraint_string="${dep_pkgname}>=${version_min} ${dep_pkgname}<${version_max}"
Log "Applied version constraint: '${constraint_string}'"
else Log "ERROR: in _version_constraint() parsing: dep_pkgname='${dep_pkgname}' full_version='${full_version}'"
exit 1
fi
unset -f Log
echo -n "${constraint_string}"
}
prepare() {
## prepare daemon ##
cd "${srcdir}"/${pkgbase}-${pkgver}/daemon
cp "${srcdir}"/pjproject-${_pjprojectver}.tar.gz contrib/tarballs/
cp "${srcdir}"/dhtnet-$_dhtnetver.tar.gz contrib/tarballs/
mkdir contrib/native
## prepare client ##
cd "${srcdir}"/${pkgbase}-${pkgver}
# Drop strict Qt version check. Qt is ABI stable and jami is not using any private API
# corresponds to arch patch: 'drop-qt-version-check.patch'
sed -i '/Qt build version mismatch!/d' src/app/mainapplication.cpp
! grep "Qt build version mismatch!" src/app/mainapplication.cpp ||
! echo "ERROR: patches need re-working" || return 1
# Workaround for running with Qt 6.6 https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1397
echo "applying qt-6.6.patch"
patch -p1 < "${srcdir}"/qt-6.6.patch
}
build() {
echo "building dependencies" # diff this section against 'jami-daemon' PKGBUILD
cd "${srcdir}"/${pkgbase}-${pkgver}/daemon/contrib/native
../bootstrap \
--disable-downloads \
--disable-all \
--enable-pjproject \
--enable-dhtnet
make DEPS_pjproject= DEPS_dhtnet=pjproject
echo "building daemon" # diff this section against 'jami-daemon' PKGBUILD
cd "${srcdir}"/${pkgbase}-${pkgver}/daemon
arch-meson . build -D interfaces=library -D opensl=disabled -D portaudio=disabled \
$( ((CHECKFUNC)) && echo -D tests=true) \
-D pkg_config_path="${PWD}/contrib/$(cc -dumpmachine)/lib/pkgconfig"
meson compile -C build
echo "building client" # diff this section against 'jami-qt' PKGBUILD
cd "${srcdir}"/${pkgbase}-${pkgver}
cmake -B build -S ${pkgbase}-${pkgver} \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_DAEMON_SUBMODULE=false \
-DENABLE_LIBWRAP=OFF \
-DWITH_WEBENGINE=false \
-Wno-dev
make -C build
}
package_jami-daemon() {
: # TODO: fails to build
# ../src/jamidht/archive_account_manager.cpp:660:29: error: ‘aesGetKey’ is not a member of ‘dht::crypto’
# tried with the both of the unversioned external dependencies at the revisions the arch PKGBUILD uses
# and also the revisions which were apparently current when the jami source-ball was made,
# and also the current revisions today - all fail with same error
}
package_jami-qt() {
# pin to current 'qt5-base' libs
depends+=( $(_version_constraint 'qt5-base' 3) )
replaces=(jami-gnome jami-libclient)
conflicts=(jami-gnome jami-libclient)
make -C build DESTDIR="${pkgdir}" install
}
|