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

EAPI=8

LUA_COMPAT=( lua5-{1..4} luajit )
LUA_REQ_USE="deprecated(+)"

inherit lua-single systemd tmpfiles toolchain-funcs

DESCRIPTION="Prosody is a modern XMPP communication server"
HOMEPAGE="https://prosody.im/"
SRC_URI="https://prosody.im/downloads/source/${P}.tar.gz"

LICENSE="MIT"
SLOT="0"
KEYWORDS="amd64 ~arm ~arm64 x86"
IUSE="icu +idn +libevent ldap mysql postgres selinux +sqlite +ssl test +zlib"
REQUIRED_USE="
	^^ ( icu idn )
	${LUA_REQUIRED_USE}
"
RESTRICT="!test? ( test )"

DEPEND="
	acct-group/prosody
	acct-user/prosody
	$(lua_gen_cond_dep 'dev-lua/luaexpat[${LUA_USEDEP}]')
	$(lua_gen_cond_dep 'dev-lua/luafilesystem[${LUA_USEDEP}]')
	dev-lua/luarocks[${LUA_SINGLE_USEDEP}]
	$(lua_gen_cond_dep 'dev-lua/luasocket[${LUA_USEDEP}]')
	$(lua_gen_cond_dep 'dev-lua/lua-unbound[${LUA_USEDEP}]')
	$(lua_gen_cond_dep 'dev-lua/readline[${LUA_USEDEP}]')
	icu? ( dev-libs/icu:= )
	idn? ( net-dns/libidn:= )
	ldap? ( $(lua_gen_cond_dep 'dev-lua/lualdap[${LUA_USEDEP}]') )
	libevent? ( $(lua_gen_cond_dep 'dev-lua/luaevent[${LUA_USEDEP}]') )
	dev-libs/openssl:0=
	lua_single_target_lua5-1? ( $(lua_gen_cond_dep 'dev-lua/lua-bit32[lua_targets_lua5-1(-)]') )
	mysql? ( $(lua_gen_cond_dep 'dev-lua/luadbi[mysql,${LUA_USEDEP}]') )
	postgres? ( $(lua_gen_cond_dep 'dev-lua/luadbi[postgres,${LUA_USEDEP}]') )
	sqlite? ( $(lua_gen_cond_dep 'dev-lua/luadbi[sqlite,${LUA_USEDEP}]') )
	ssl? ( $(lua_gen_cond_dep 'dev-lua/luasec[${LUA_USEDEP}]') )
	zlib? ( $(lua_gen_cond_dep 'dev-lua/lua-zlib[${LUA_USEDEP}]') )
	${LUA_DEPS}
"

RDEPEND="
	${DEPEND}
	selinux? ( sec-policy/selinux-jabber )
"

BDEPEND="
	virtual/pkgconfig
	test? ( $(lua_gen_cond_dep 'dev-lua/busted[${LUA_USEDEP}]') )
"

PATCHES=( "${FILESDIR}/${PN}-0.12.0-gentoo.patch" )

src_prepare() {
	default

	# Set correct plugin path for optional net-im/prosody-modules package
	sed -e "s/GENTOO_LIBDIR/$(get_libdir)/g" -i prosody.cfg.lua.dist || die
}

src_configure() {
	local myeconfargs=(
		--add-cflags="${CFLAGS}"
		--add-ldflags="${LDFLAGS}"
		--c-compiler="$(tc-getCC)"
		--datadir="${EPREFIX}/var/lib/prosody"
		--idn-library="$(usex idn 'idn' 'icu')"
		--libdir="${EPREFIX}/usr/$(get_libdir)"
		--linker="$(tc-getCC)"
		--lua-version="$(usex lua_single_target_luajit '5.1' $(ver_cut 1-2 $(lua_get_version)))"
		--no-example-certs
		--ostype="linux"
		--prefix="${EPREFIX}/usr"
		--runwith="${ELUA}"
		--sysconfdir="${EPREFIX}/etc/prosody"
		--with-lua-include="${EPREFIX}/$(lua_get_include_dir)"
		--with-lua-lib="${EPREFIX}/$(lua_get_cmod_dir)"
	)

	# Since the configure script is handcrafted,
	# and yells at unknown options, do not use 'econf'.
	./configure "${myeconfargs[@]}" || die

	rm makefile || die
	mv GNUmakefile Makefile || die
}

src_install() {
	default

	keepdir /var/lib/prosody

	newinitd "${FILESDIR}"/prosody.initd-r6 prosody
	systemd_newunit "${FILESDIR}"/prosody.service-r3 prosody.service

	newtmpfiles "${FILESDIR}"/prosody.tmpfilesd-r2 prosody.conf
}

pkg_postinst() {
	local migrate_to_prosody_user="false"
	tmpfiles_process prosody.conf

	if [[ ${REPLACING_VERSIONS} ]]; then
		for v in ${REPLACING_VERSIONS}; do
			if ver_test "${v}" -lt 0.12.0; then
				migrate_to_prosody_user="true"
				break
			fi
		done
	fi

	# Sarting with >=0.12.0, the prosody configuration is now in
	# /etc/prosody and no longer in /etc/jabber.
	# See if we need to migrate the configuration. Furthermore,
	# prosody no longer runs under the, shared via net-im/jabber-base,
	# 'jabber' use, but under its own user.
	# This increase isolation and hence robustness and security.
	if ${migrate_to_prosody_user}; then
		local -A dirs_to_migrate=(
			[/etc/jabber]=/etc/prosody
			[/var/log/jabber]=/var/log/prosody
			[/var/spool/jabber]=/var/lib/prosody
		)

		for src_dir in "${!dirs_to_migrate[@]}"; do
			local eroot_src_dir="${EROOT}/${src_dir}"
			local eroot_dst_dir="${EROOT}/${dirs_to_migrate[${src_dir}]}"

			cp -r "${eroot_src_dir}"/. "${eroot_dst_dir}" || die "Could not copy ${eroot_src_dir} to ${eroot_dst_dir}"

			if [[ -f "${eroot_dst_dir}"/.keep_net-im_jabber-base-0 ]]; then
				rm "${eroot_dst_dir}"/.keep_net-im_jabber-base-0 || die
			fi

			if ! use prefix; then
				chown --recursive prosody:prosody "${eroot_dst_dir}" || die
			fi
		done

		# Update configuration file to match new pathes and permissions
		local mysedargs=(
			-e "'s#/etc/jabber#/etc/prosody#g'"
			-e "'s#/run/jabber#/run/prosody#g'"
			-e "'s#/var/log/jabber#/var/log/prosody#g'"
			-e "'s/prosody_user.*/prosody_user = \"prosody\";/g'"
			-e "'s/prosody_group.*/prosody_group = \"prosody\";/g'"
			-i /etc/prosody/prosody.cfg.lua
		)

		eval sed "${mysedargs[@]}" || die

		ewarn "Newer versions of the prosody (Gentoo) package use ${EROOT}/etc/prosody"
		ewarn "(just as upstream) and *not* anymore ${EROOT}/etc/jabber."
		ewarn "The files from ${EROOT}/etc/jabber where copied to ${EROOT}/etc/prosody."
		ewarn "Also prosody's spool directory became ${EROOT}/var/lib/prosody (was ${EROOT}/var/spool/jabbber)."
		ewarn "Please check your configuration."
	fi
}