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

EAPI=8

inherit toolchain-funcs

MY_PV="$(ver_rs 3 -)"
PSYBNC_HOME="/var/lib/psybnc"

DESCRIPTION="A multi-user and multi-server gateway to IRC networks"
HOMEPAGE="http://www.psybnc.at/index.html"
SRC_URI="http://psybnc.org/download/psyBNC-${PV}.tar.gz"
S="${WORKDIR}"/${PN}

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~ppc ~sparc ~x86"
IUSE="ipv6 ssl oidentd scripting multinetwork"

DEPEND="
	acct-group/psybnc
	acct-user/psybnc
	net-dns/c-ares
	ssl? ( >=dev-libs/openssl-0.9.7d:= )
	oidentd? ( >=net-misc/oidentd-2.0 )
"
RDEPEND="${DEPEND}"

PATCHES=(
	"${FILESDIR}"/${PN}-2.4.3-Fix-build-with-Clang-16.patch
	"${FILESDIR}"/${PN}-2.4.3-strmncpy-lto-mismatch.patch
)

src_unpack() {
	unpack ${A}
	cd "${S}" || die

	# Useless files
	rm -f */INFO || die

	# Pretend we already have a certificate, we generate it in pkg_config
	touch key/psybnc.cert.pem || die

	if [[ -f "${EPREFIX}"/usr/share/psybnc/salt.h ]]; then
		einfo "Using existing salt.h for password encryption"
		cp "${EPREFIX}"/usr/share/psybnc/salt.h salt.h || die
	fi
}

src_prepare() {
	default

	# Add oidentd
	use oidentd && PATCHES+=( "${FILESDIR}"/${P}-oidentd.patch )

	# Add scripting support
	use scripting && PATCHES+=( "${FILESDIR}"/${P}-scripting.patch )

	# Add multinetwork support
	use multinetwork && PATCHES+=( "${FILESDIR}"/${P}-multinetwork.patch )

	# Prevent stripping the binary
	sed -i -e "/@strip/ d" tools/autoconf.c || die
}

src_compile() {
	if use ipv6; then
		rm -f tools/chkipv6.c || die
	fi

	if use ssl; then
		rm -f tools/chkssl.c || die
	fi

	emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}"
}

src_install() {
	dobin psybnc

	insinto /usr/share/psybnc
	doins -r help lang salt.h
	fperms 0600 /usr/share/psybnc/salt.h

	insinto /etc/psybnc
	doins "${FILESDIR}"/psybnc.conf

	keepdir "${PSYBNC_HOME}"/{log,motd,scripts}
	dosym ../../../usr/share/psybnc/lang "${PSYBNC_HOME}"/lang
	dosym ../../../usr/share/psybnc/help "${PSYBNC_HOME}"/help

	fowners psybnc:psybnc "${PSYBNC_HOME}"/{,log,motd,scripts} /etc/psybnc/psybnc.conf
	fperms 0750 "${PSYBNC_HOME}"/{,log,motd,scripts}
	fperms 0640 /etc/psybnc/psybnc.conf

	if use ssl; then
		keepdir /etc/psybnc/ssl
		dosym ../../../etc/psybnc/ssl "${PSYBNC_HOME}"/key
	else
		# Drop SSL listener from psybnc.conf
		sed -i -e "/^# Default SSL listener$/,+4 d" "${D}"/etc/psybnc/psybnc.conf || die
	fi

	if use oidentd; then
		insinto /etc
		doins "${FILESDIR}"/oidentd.conf.psybnc
		fperms 640 /etc/oidentd.conf.psybnc
		# Install init-script with oidentd-support
		newinitd "${FILESDIR}"/psybnc-oidentd.initd psybnc
	else
		# Install init-script without oidentd-support
		newinitd "${FILESDIR}"/psybnc.initd psybnc
	fi

	if use scripting ; then
		dodoc SCRIPTING
	fi

	newconfd "${FILESDIR}"/psybnc.confd psybnc

	dodoc CHANGES FAQ README TODO
	docinto example-script
	dodoc scripts/example/DEFAULT.SCRIPT
}

pkg_config() {
	if use ssl; then
		if [[ -f "${EROOT}"/etc/psybnc/ssl/psybnc.cert.pem || -f "${EROOT}"/etc/psybnc/ssl/psybnc.key.pem ]]; then
			ewarn "Existing /etc/psybnc/psybnc.cert.pem or /etc/psybnc/psybnc.key.pem found!"
			ewarn "Remove /etc/psybnc/psybnc.*.pem and run emerge --config =${CATEGORY}/${PF} again."
			return
		fi

		einfo "Generating certificate request..."
		openssl req -new -out "${ROOT}"/etc/psybnc/ssl/psybnc.req.pem \
			-keyout "${ROOT}"/etc/psybnc/ssl/psybnc.key.pem -nodes || die

		einfo "Generating self-signed certificate..."
		openssl req -x509 -days 365 -in "${ROOT}"/etc/psybnc/ssl/psybnc.req.pem \
			-key "${ROOT}"/etc/psybnc/ssl/psybnc.key.pem \
			-out "${ROOT}"/etc/psybnc/ssl/psybnc.cert.pem || die

		einfo "Setting permissions on files..."
		chown root:psybnc "${ROOT}"/etc/psybnc/ssl/psybnc.{cert,key,req}.pem || die
		chmod 0640 "${ROOT}"/etc/psybnc/ssl/psybnc.{cert,key,req}.pem || die
	fi
}

pkg_postinst() {
	if use ssl; then
		elog
		elog "Please run \"emerge --config =${CATEGORY}/${PF}\" to create the needed SSL certificates."
	fi

	if use oidentd; then
		elog
		elog "You have enabled oidentd-support. You will need to set"
		elog "up your ${EROOT}/etc/oident.conf file before running psybnc. An example"
		elog "for psyBNC can be found under ${EROOT}/etc/oidentd.conf.psybnc"
	fi

	elog
	elog "You can connect to psyBNC on port 23998 with user gentoo and password gentoo."
	elog "Please edit the psyBNC configuration at ${EROOT}/etc/psybnc/psybnc.conf to change this."
	elog
	elog "To be able to reuse an existing psybnc.conf, you need to make sure that the"
	elog "old salt.h is available at ${EROOT}/usr/share/psybnc/salt.h when compiling a new"
	elog "version of psyBNC. It is needed for password encryption and decryption."
	elog
}