*/*: [QA] Remove redundant `|| die` guards
[gentoo.git] / net-dialup / freeradius / freeradius-3.0.15.ebuild
1 # Copyright 1999-2019 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 PYTHON_COMPAT=( python2_7 )
7 inherit autotools pam python-single-r1 systemd user
8
9 MY_P="${PN}-server-${PV}"
10
11 DESCRIPTION="Highly configurable free RADIUS server"
12 SRC_URI="
13         ftp://ftp.freeradius.org/pub/radius/${MY_P}.tar.gz
14         ftp://ftp.freeradius.org/pub/radius/old/${MY_P}.tar.gz
15 "
16 HOMEPAGE="http://www.freeradius.org/"
17
18 KEYWORDS="amd64 ~arm ~ppc ~ppc64 ~sparc x86"
19 LICENSE="GPL-2"
20 SLOT="0"
21
22 IUSE="
23         debug firebird iodbc kerberos ldap libressl mysql odbc oracle pam pcap
24         postgres python readline sqlite ssl
25 "
26 RESTRICT="test firebird? ( bindist )"
27
28 RDEPEND="!net-dialup/cistronradius
29         !net-dialup/gnuradius
30         sys-devel/libtool
31         dev-lang/perl:=
32         sys-libs/gdbm:=
33         sys-libs/talloc
34         python? ( ${PYTHON_DEPS} )
35         readline? ( sys-libs/readline:0= )
36         pcap? ( net-libs/libpcap )
37         mysql? ( dev-db/mysql-connector-c:= )
38         postgres? ( dev-db/postgresql:= )
39         firebird? ( dev-db/firebird )
40         pam? ( sys-libs/pam )
41         ssl? (
42                 !libressl? ( dev-libs/openssl:0= )
43                 libressl? ( dev-libs/libressl:0= )
44         )
45         ldap? ( net-nds/openldap )
46         kerberos? ( virtual/krb5 )
47         sqlite? ( dev-db/sqlite:3 )
48         odbc? ( dev-db/unixODBC )
49         iodbc? ( dev-db/libiodbc )
50         oracle? ( dev-db/oracle-instantclient-basic )"
51 DEPEND="${RDEPEND}"
52
53 REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
54
55 S="${WORKDIR}/${MY_P}"
56
57 pkg_setup() {
58         enewgroup radius
59         enewuser radius -1 -1 /var/log/radius radius
60
61         python-single-r1_pkg_setup
62         export PYTHONBIN="${EPYTHON}"
63 }
64
65 src_prepare() {
66         # most of the configuration options do not appear as ./configure
67         # switches. Instead it identifies the directories that are available
68         # and run through them. These might check for the presence of
69         # various libraries, in which case they are not built.  To avoid
70         # automagic dependencies, we just remove all the modules that we're
71         # not interested in using.
72
73         use ssl || { rm -r src/modules/rlm_eap/types/rlm_eap_{tls,ttls,peap} || die ; }
74         use ldap || { rm -r src/modules/rlm_ldap || die ; }
75         use kerberos || { rm -r src/modules/rlm_krb5 || die ; }
76         use pam || { rm -r src/modules/rlm_pam || die ; }
77         use python || { rm -r src/modules/rlm_python || die ; }
78         # Do not install ruby rlm module, bug #483108
79         rm -r src/modules/rlm_ruby || die
80
81         # these are all things we don't have in portage/I don't want to deal
82         # with myself
83         rm -r src/modules/rlm_eap/types/rlm_eap_tnc || die # requires TNCS library
84         rm -r src/modules/rlm_eap/types/rlm_eap_ikev2 || die # requires libeap-ikev2
85         rm -r src/modules/rlm_opendirectory || die # requires some membership.h
86         rm -r src/modules/rlm_redis{,who} || die # requires redis
87         rm -r src/modules/rlm_sql/drivers/rlm_sql_{db2,freetds} || die
88
89         # sql drivers that are not part of experimental are loaded from a
90         # file, so we have to remove them from the file itself when we
91         # remove them.
92         usesqldriver() {
93                 local flag=$1
94                 local driver=rlm_sql_${2:-${flag}}
95
96                 if ! use ${flag}; then
97                         rm -r src/modules/rlm_sql/drivers/${driver} || die
98                         sed -i -e /${driver}/d src/modules/rlm_sql/stable || die
99                 fi
100         }
101
102         sed -i \
103                 -e 's:^#\tuser = :\tuser = :g' \
104                 -e 's:^#\tgroup = :\tgroup = :g' \
105                 -e 's:/var/run/radiusd:/run/radiusd:g' \
106                 -e '/^run_dir/s:${localstatedir}::g' \
107                 raddb/radiusd.conf.in || die
108
109         # verbosity
110         # build shared libraries using jlibtool --shared
111         sed -i \
112                 -e '/$(LIBTOOL)/s|--quiet ||g' \
113                 -e 's:--mode=\(compile\|link\):& --shared:g' \
114                 Make.inc.in || die
115
116         sed -i \
117                 -e 's|--silent ||g' \
118                 -e 's:--mode=\(compile\|link\):& --shared:g' \
119                 scripts/libtool.mk || die
120
121         # crude measure to stop jlibtool from running ranlib and ar
122         sed -i \
123                 -e '/LIBRARIAN/s|".*"|"true"|g' \
124                 -e '/RANLIB/s|".*"|"true"|g' \
125                 scripts/jlibtool.c || die
126
127         usesqldriver mysql
128         usesqldriver postgres postgresql
129         usesqldriver firebird
130         usesqldriver iodbc
131         usesqldriver odbc unixodbc
132         usesqldriver oracle
133         usesqldriver sqlite
134
135         default
136
137         eautoreconf
138 }
139
140 src_configure() {
141         # fix bug #77613
142         local myeconfargs=()
143         if has_version app-crypt/heimdal; then
144                 myeconfargs+=( --enable-heimdal-krb5 )
145         fi
146
147         use readline || export ac_cv_lib_readline=no
148         use pcap || export ac_cv_lib_pcap_pcap_open_live=no
149
150         # do not try to enable static with static-libs; upstream is a
151         # massacre of libtool best practices so you also have to make sure
152         # to --enable-shared explicitly.
153         myeconfargs+=(
154                 --enable-shared
155                 --disable-static
156                 --disable-ltdl-install
157                 --with-system-libtool
158                 --with-system-libltdl
159                 --with-ascend-binary
160                 --with-udpfromto
161                 --with-dhcp
162                 --with-iodbc-include-dir=/usr/include/iodbc
163                 --with-experimental-modules
164                 --with-docdir=/usr/share/doc/${PF}
165                 --with-logdir=/var/log/radius
166                 $(use_enable debug developer)
167                 $(use_with ldap edir)
168                 $(use_with ssl openssl)
169         )
170         econf "${myeconfargs[@]}"
171 }
172
173 src_compile() {
174         # verbose, do not generate certificates
175         emake \
176                 Q='' ECHO=true \
177                 LOCAL_CERT_PRODUCTS=''
178 }
179
180 src_install() {
181         dodir /etc
182         diropts -m0750 -o root -g radius
183         dodir /etc/raddb
184         diropts -m0750 -o radius -g radius
185         dodir /var/log/radius
186         keepdir /var/log/radius/radacct
187         diropts
188
189         # verbose, do not install certificates
190         # Parallel install fails (#509498)
191         emake -j1 \
192                 Q='' ECHO=true \
193                 LOCAL_CERT_PRODUCTS='' \
194                 R="${D}" \
195                 install
196
197         fowners -R root:radius /etc/raddb
198
199         pamd_mimic_system radiusd auth account password session
200
201         dodoc CREDITS
202
203         rm "${D}/usr/sbin/rc.radiusd" || die
204
205         newinitd "${FILESDIR}/radius.init-r3" radiusd
206         newconfd "${FILESDIR}/radius.conf-r4" radiusd
207
208         systemd_newtmpfilesd "${FILESDIR}"/freeradius.tmpfiles freeradius.conf
209         systemd_dounit "${FILESDIR}"/freeradius.service
210
211         find "${ED}" \( -name "*.a" -o -name "*.la" \) -delete || die
212 }
213
214 pkg_config() {
215         if use ssl; then
216                 cd "${ROOT}"/etc/raddb/certs || die
217                 ./bootstrap || die "Error while running ./bootstrap script."
218                 fowners -R root:radius "${ROOT}"/etc/raddb/certs
219         fi
220 }
221
222 pkg_preinst() {
223         if ! has_version ${CATEGORY}/${PN} && use ssl; then
224                 elog "You have to run \`emerge --config =${CATEGORY}/${PF}\` to be able"
225                 elog "to start the radiusd service."
226         fi
227 }