Gentoo Archives: gentoo-commits

From: Alexys Jacob <ultrabug@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: www-servers/uwsgi/
Date: Mon, 11 Feb 2019 22:25:42
Message-Id: 1549923758.34f115ab3a92f3fd4046aed7685669ae9cc5b76b.ultrabug@gentoo
1 commit: 34f115ab3a92f3fd4046aed7685669ae9cc5b76b
2 Author: Alexys Jacob <ultrabug <AT> gentoo <DOT> org>
3 AuthorDate: Mon Feb 11 22:22:38 2019 +0000
4 Commit: Alexys Jacob <ultrabug <AT> gentoo <DOT> org>
5 CommitDate: Mon Feb 11 22:22:38 2019 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=34f115ab
7
8 www-servers/uwsgi: version bump
9
10 Package-Manager: Portage-2.3.52, Repoman-2.3.12
11 Signed-off-by: Alexys Jacob <ultrabug <AT> gentoo.org>
12
13 www-servers/uwsgi/Manifest | 1 +
14 www-servers/uwsgi/uwsgi-2.0.18.ebuild | 400 ++++++++++++++++++++++++++++++++++
15 2 files changed, 401 insertions(+)
16
17 diff --git a/www-servers/uwsgi/Manifest b/www-servers/uwsgi/Manifest
18 index 9aa577b098b..5f167dff5e9 100644
19 --- a/www-servers/uwsgi/Manifest
20 +++ b/www-servers/uwsgi/Manifest
21 @@ -1,2 +1,3 @@
22 DIST uwsgi-2.0.17.1.tar.gz 800156 BLAKE2B a8697263e6e7689c0062a06a9fdb1101a2df72e0ac9122b5f8a0acc78bbdbdeaa96faa1c8870b9c3a43e2e1fb5fc835e708e1bc3d0171ae746467b4734dc299d SHA512 10d357961fde3a3f5f8e77986cc647313f95a33243e24c2afc482fce21df68a8ae48f90e7b5b76d7edc3cf8fd474d99823d6d60ef7477349abc65a319222f11b
23 DIST uwsgi-2.0.17.tar.gz 798642 BLAKE2B 86efb2103efaeedb37ebb00de4c01477162d119ae3dea0dc0696385216e30ff2c74eb48576f86eb181b8ada4b9eaa63b0aa761e966e3301597633d33b81142e1 SHA512 639427fbb89a1c2610c1cafb6ff009398a3c0a8e27c3de3f00829428271ba97b64b1253368dd6150912cf44441052be2a63cbe81613bbe964be27ee2e570d2b2
24 +DIST uwsgi-2.0.18.tar.gz 801555 BLAKE2B d8008e751fd699474a1b7d6276c10b3d2f1ebd0ca325e45bfb3b13f81e88de20e4e7389cd6aa9c8b3daa964d9b11524ee71e93717ed9762bf021471f6a2c09fa SHA512 6561703279bcc4a81311d033810ac066d0f113bab13b0942f3eef86cac29c584a6641b52476840d6895151aee5ed064ae2d03b18932cf7f47e62f4eeed76da61
25
26 diff --git a/www-servers/uwsgi/uwsgi-2.0.18.ebuild b/www-servers/uwsgi/uwsgi-2.0.18.ebuild
27 new file mode 100644
28 index 00000000000..08f75a25f17
29 --- /dev/null
30 +++ b/www-servers/uwsgi/uwsgi-2.0.18.ebuild
31 @@ -0,0 +1,400 @@
32 +# Copyright 1999-2019 Gentoo Authors
33 +# Distributed under the terms of the GNU General Public License v2
34 +
35 +EAPI=6
36 +
37 +PYTHON_COMPAT=( python2_7 python3_{4,5,6,7} pypy )
38 +PYTHON_REQ_USE="threads(+)"
39 +
40 +RUBY_OPTIONAL="yes"
41 +USE_RUBY="ruby23 ruby24 ruby25"
42 +
43 +PHP_EXT_INI="no"
44 +PHP_EXT_NAME="dummy"
45 +PHP_EXT_OPTIONAL_USE="php"
46 +USE_PHP="php5-6 php7-1 php7-2 php7-3" # deps must be registered separately below
47 +
48 +MY_P="${P/_/-}"
49 +
50 +inherit eapi7-ver eutils flag-o-matic multilib pax-utils php-ext-source-r3 python-r1 ruby-ng
51 +
52 +DESCRIPTION="uWSGI server for Python web applications"
53 +HOMEPAGE="http://projects.unbit.it/uwsgi/"
54 +SRC_URI="https://github.com/unbit/uwsgi/archive/${PV}.tar.gz -> ${P}.tar.gz"
55 +
56 +LICENSE="GPL-2"
57 +SLOT="0"
58 +KEYWORDS="~amd64 ~arm ~x86 ~amd64-linux"
59 +
60 +UWSGI_PLUGINS_STD=( ping cache carbon nagios rpc rrdtool
61 + http ugreen signal syslog rsyslog
62 + router_{uwsgi,redirect,basicauth,rewrite,http,cache,static,memcached,redis,hash,expires,metrics}
63 + {core,fast,raw,ssl}router
64 + redislog mongodblog log{file,socket}
65 + spooler cheaper_busyness symcall
66 + transformation_{chunked,gzip,offload,tofile}
67 + zergpool )
68 +UWSGI_PLUGINS_OPT=( alarm_{curl,xmpp} clock_{monotonic,realtime} curl_cron
69 + dumbloop echo emperor_{amqp,pg,zeromq} forkptyrouter
70 + geoip graylog2 legion_cache_fetch ldap log{crypto,pipe} notfound pam
71 + rados router_{access,radius,spnego,xmldir}
72 + sqlite ssi stats_pusher_statsd
73 + systemd_logger transformation_toupper tuntap webdav xattr xslt zabbix )
74 +
75 +LANG_SUPPORT_SIMPLE=( cgi mono perl ) # plugins which can be built in the main build process
76 +LANG_SUPPORT_EXTENDED=( go lua php pypy python python_asyncio python_gevent ruby )
77 +
78 +# plugins to be ignored (for now):
79 +# cheaper_backlog2: example plugin
80 +# coroae: TODO
81 +# cplusplus: partially example code, needs explicit class
82 +# dummy: no idea
83 +# example: example plugin
84 +# exception_log: example plugin
85 +# *java*: TODO
86 +# v8: TODO
87 +# matheval: TODO
88 +IUSE="apache2 +caps debug +embedded expat jemalloc json libressl +pcre +routing selinux +ssl +xml yajl yaml zeromq"
89 +
90 +for plugin in ${UWSGI_PLUGINS_STD[@]}; do IUSE="${IUSE} +uwsgi_plugins_${plugin}"; done
91 +for plugin in ${UWSGI_PLUGINS_OPT[@]}; do IUSE="${IUSE} uwsgi_plugins_${plugin}"; done
92 +IUSE="${IUSE} ${LANG_SUPPORT_SIMPLE[@]} ${LANG_SUPPORT_EXTENDED[@]}"
93 +
94 +REQUIRED_USE="|| ( ${LANG_SUPPORT_SIMPLE[@]} ${LANG_SUPPORT_EXTENDED[@]} )
95 + uwsgi_plugins_logcrypto? ( ssl )
96 + uwsgi_plugins_sslrouter? ( ssl )
97 + routing? ( pcre )
98 + uwsgi_plugins_emperor_zeromq? ( zeromq )
99 + uwsgi_plugins_forkptyrouter? ( uwsgi_plugins_corerouter )
100 + uwsgi_plugins_router_xmldir? ( xml !expat )
101 + pypy? ( python_targets_python2_7 )
102 + python? ( ${PYTHON_REQUIRED_USE} )
103 + python_asyncio? ( || ( python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 ) )
104 + python_gevent? ( python )
105 + expat? ( xml )"
106 +
107 +# util-linux is required for libuuid when requesting zeromq support
108 +# Order:
109 +# 1. Unconditional
110 +# 2. General features
111 +# 3. Plugins
112 +# 4. Language/app support
113 +CDEPEND="
114 + sys-libs/zlib
115 + caps? ( sys-libs/libcap )
116 + json? (
117 + !yajl? ( dev-libs/jansson )
118 + yajl? ( dev-libs/yajl )
119 + )
120 + pcre? ( dev-libs/libpcre:3 )
121 + ssl? (
122 + !libressl? ( dev-libs/openssl:0= )
123 + libressl? ( dev-libs/libressl )
124 + )
125 + xml? (
126 + !expat? ( dev-libs/libxml2 )
127 + expat? ( dev-libs/expat )
128 + )
129 + yaml? ( dev-libs/libyaml )
130 + zeromq? ( net-libs/zeromq sys-apps/util-linux )
131 + uwsgi_plugins_alarm_curl? ( net-misc/curl )
132 + uwsgi_plugins_alarm_xmpp? ( net-libs/gloox )
133 + uwsgi_plugins_curl_cron? ( net-misc/curl )
134 + uwsgi_plugins_emperor_pg? ( dev-db/postgresql:= )
135 + uwsgi_plugins_geoip? ( dev-libs/geoip )
136 + uwsgi_plugins_ldap? ( net-nds/openldap )
137 + uwsgi_plugins_pam? ( virtual/pam )
138 + uwsgi_plugins_sqlite? ( dev-db/sqlite:3 )
139 + uwsgi_plugins_rados? ( sys-cluster/ceph )
140 + uwsgi_plugins_router_access? ( sys-apps/tcp-wrappers )
141 + uwsgi_plugins_router_spnego? ( virtual/krb5 )
142 + uwsgi_plugins_systemd_logger? ( sys-apps/systemd )
143 + uwsgi_plugins_webdav? ( dev-libs/libxml2 )
144 + uwsgi_plugins_xslt? ( dev-libs/libxslt )
145 + go? ( dev-lang/go:=[gccgo] )
146 + lua? ( dev-lang/lua:= )
147 + mono? ( dev-lang/mono:= )
148 + perl? ( dev-lang/perl:= )
149 + php? (
150 + php_targets_php5-6? ( dev-lang/php:5.6[embed] )
151 + php_targets_php7-1? ( dev-lang/php:7.1[embed] )
152 + php_targets_php7-2? ( dev-lang/php:7.2[embed] )
153 + php_targets_php7-3? ( dev-lang/php:7.3[embed] )
154 + )
155 + pypy? ( virtual/pypy )
156 + python? ( ${PYTHON_DEPS} )
157 + python_asyncio? ( virtual/python-greenlet[${PYTHON_USEDEP}] )
158 + python_gevent? ( >=dev-python/gevent-1.3.5[${PYTHON_USEDEP}] )
159 + ruby? ( $(ruby_implementations_depend) )"
160 +DEPEND="${CDEPEND}
161 + virtual/pkgconfig"
162 +RDEPEND="${CDEPEND}
163 + selinux? ( sec-policy/selinux-uwsgi )
164 + uwsgi_plugins_rrdtool? ( net-analyzer/rrdtool )"
165 +
166 +S="${WORKDIR}/${MY_P}"
167 +
168 +src_unpack() {
169 + echo ${PYTHON_USEDEP}
170 + default
171 +}
172 +
173 +pkg_setup() {
174 + python_setup
175 + use ruby && ruby-ng_pkg_setup
176 +}
177 +
178 +src_prepare() {
179 + default
180 +
181 + sed -i \
182 + -e "s|'-O2', ||" \
183 + -e "s|'-Werror', ||" \
184 + -e "s|uc.get('plugin_dir')|uc.get('plugin_build_dir')|" \
185 + uwsgiconfig.py || die "sed failed"
186 +
187 + sed -i \
188 + -e "s|/lib|/$(get_libdir)|" \
189 + plugins/php/uwsgiplugin.py || die "sed failed"
190 +}
191 +
192 +src_configure() {
193 + local embedded_plugins=()
194 + local plugins=()
195 + local malloc_impl="libc"
196 + local json="false"
197 + local xml="false"
198 +
199 + for p in ${UWSGI_PLUGINS_STD[@]} ${UWSGI_PLUGINS_OPT[@]} ; do
200 + use uwsgi_plugins_${p} && embedded_plugins+=("${p}")
201 + done
202 + for p in ${LANG_SUPPORT_SIMPLE[@]} ; do
203 + use ${p} && plugins+=("${p}")
204 + done
205 +
206 + # do not embed any plugins
207 + if ! use embedded; then
208 + plugins=( ${plugins[@]} ${embedded_plugins[@]} )
209 + embedded_plugins=()
210 + fi
211 +
212 + # flatten the arrays
213 + plugins=${plugins[@]}
214 + embedded_plugins=${embedded_plugins[@]}
215 +
216 + # rename some of the use flags, language plugins are always real plugins
217 + plugins="${plugins/perl/psgi}"
218 + plugins="${plugins/sqlite/sqlite3}"
219 + embedded_plugins="${embedded_plugins/sqlite/sqlite3}"
220 +
221 + # override defaults as requested by the user
222 + if use xml; then
223 + use expat && xml="expat" || xml="libxml2"
224 + fi
225 + if use json; then
226 + use yajl && json="yajl" || json="jansson"
227 + fi
228 + use jemalloc && malloc_impl="jemalloc"
229 +
230 + # prepare the buildconf for gentoo
231 + cp "${FILESDIR}"/gentoo.buildconf buildconf/gentoo.ini || die
232 + sed -i \
233 + -e "s|VAR_XML|${xml}|" \
234 + -e "s|VAR_YAML|$(usex yaml libyaml true)|" \
235 + -e "s|VAR_JSON|${json}|" \
236 + -e "s|VAR_SSL|$(usex ssl true false)|" \
237 + -e "s|VAR_PCRE|$(usex pcre true false)|" \
238 + -e "s|VAR_ZMQ|$(usex zeromq true false)|" \
239 + -e "s|VAR_ROUTING|$(usex routing true false)|" \
240 + -e "s|VAR_DEBUG|$(usex debug true false)|" \
241 + -e "s|VAR_MALLOC|${malloc_impl}|" \
242 + -e "s|VAR_PLUGINS|${plugins// /, }|" \
243 + -e "s|VAR_PLUGIN_DIR|${EPREFIX}/usr/$(get_libdir)/uwsgi|" \
244 + -e "s|VAR_BUILD_DIR|${T}/plugins|" \
245 + -e "s|VAR_EMBEDDED|${embedded_plugins// /, }|" \
246 + buildconf/gentoo.ini || die "sed failed"
247 +
248 + if ! use caps; then
249 + sed -i -e 's|sys/capability.h|DISABLED|' uwsgiconfig.py || die "sed failed"
250 + fi
251 +
252 + if ! use zeromq; then
253 + sed -i -e 's|uuid/uuid.h|DISABLED|' uwsgiconfig.py || die "sed failed"
254 + fi
255 +
256 + if use uwsgi_plugins_emperor_pg ; then
257 + PGPV="$(best_version dev-db/postgresql)"
258 + PGSLOT="$(ver_cut 1-2 ${PGPV##dev-db/postgresql-})"
259 + sed -i \
260 + -e "s|pg_config|pg_config${PGSLOT/.}|" \
261 + plugins/emperor_pg/uwsgiplugin.py || die "sed failed"
262 + fi
263 +}
264 +
265 +each_ruby_compile() {
266 + cd "${WORKDIR}/${MY_P}" || die "sed failed"
267 +
268 + UWSGICONFIG_RUBYPATH="${RUBY}" python uwsgiconfig.py --plugin plugins/rack gentoo rack_${RUBY##*/} || die "building plugin for ${RUBY} failed"
269 + UWSGICONFIG_RUBYPATH="${RUBY}" python uwsgiconfig.py --plugin plugins/fiber gentoo fiber_${RUBY##*/}|| die "building fiber plugin for ${RUBY} failed"
270 + UWSGICONFIG_RUBYPATH="${RUBY}" python uwsgiconfig.py --plugin plugins/rbthreads gentoo rbthreads_${RUBY##*/}|| die "building rbthreads plugin for ${RUBY} failed"
271 +}
272 +
273 +python_compile_plugins() {
274 + local EPYV
275 + local PYV
276 + EPYV=${EPYTHON/.}
277 + PYV=${EPYV/python}
278 +
279 + if [[ ${EPYTHON} == pypy* ]]; then
280 + einfo "skipping because pypy is not meant to build plugins on its own"
281 + return
282 + fi
283 +
284 + ${PYTHON} uwsgiconfig.py --plugin plugins/python gentoo ${EPYV} || die "building plugin for ${EPYTHON} failed"
285 +
286 + if use python_asyncio ; then
287 + if [[ "${PYV}" != "27" ]] ; then
288 + ${PYTHON} uwsgiconfig.py --plugin plugins/asyncio gentoo asyncio${PYV} || die "building plugin for asyncio-support in ${EPYTHON} failed"
289 + fi
290 + fi
291 +
292 + if use python_gevent ; then
293 + ${PYTHON} uwsgiconfig.py --plugin plugins/gevent gentoo gevent${PYV} || die "building plugin for gevent-support in ${EPYTHON} failed"
294 + fi
295 +
296 + if use python_gevent || use python_asyncio; then
297 + ${PYTHON} uwsgiconfig.py --plugin plugins/greenlet gentoo greenlet${PYV} || die "building plugin for greenlet-support in ${EPYTHON} failed"
298 + fi
299 +
300 + if use pypy ; then
301 + if [[ "${PYV}" == "27" ]] ; then
302 + # TODO: do some proper patching ? The wiki didn't help... I gave up for now.
303 + # QA: RWX --- --- usr/lib64/uwsgi/pypy_plugin.so
304 + append-ldflags -Wl,-z,noexecstack
305 + ${PYTHON} uwsgiconfig.py --plugin plugins/pypy gentoo pypy || die "building plugin for pypy-support in ${EPYTHON} failed"
306 + fi
307 + fi
308 +}
309 +
310 +python_install_symlinks() {
311 + dosym uwsgi /usr/bin/uwsgi_${EPYTHON/.}
312 +}
313 +
314 +src_compile() {
315 + mkdir -p "${T}/plugins" || die
316 +
317 + python uwsgiconfig.py --build gentoo || die "building uwsgi failed"
318 +
319 + if use go ; then
320 + python uwsgiconfig.py --plugin plugins/gccgo gentoo || die "building plugin for go failed"
321 + fi
322 +
323 + if use lua ; then
324 + # setting the name for the pkg-config file to lua, since we don't have
325 + # slotted lua
326 + UWSGICONFIG_LUAPC="lua" python uwsgiconfig.py --plugin plugins/lua gentoo || die "building plugin for lua failed"
327 + fi
328 +
329 + if use php ; then
330 + for s in $(php_get_slots); do
331 + UWSGICONFIG_PHPDIR="/usr/$(get_libdir)/${s}" python uwsgiconfig.py --plugin plugins/php gentoo ${s/.} || die "building plugin for ${s} failed"
332 + done
333 + fi
334 +
335 + if use python ; then
336 + python_foreach_impl python_compile_plugins
337 + fi
338 +
339 + if use ruby ; then
340 + ruby-ng_src_compile
341 + fi
342 +}
343 +
344 +src_install() {
345 + dobin uwsgi
346 + pax-mark m "${D}"/usr/bin/uwsgi
347 +
348 + insinto /usr/$(get_libdir)/uwsgi
349 + doins "${T}/plugins"/*.so
350 +
351 + use cgi && dosym uwsgi /usr/bin/uwsgi_cgi
352 + use go && dosym uwsgi /usr/bin/uwsgi_go
353 + use lua && dosym uwsgi /usr/bin/uwsgi_lua
354 + use mono && dosym uwsgi /usr/bin/uwsgi_mono
355 + use perl && dosym uwsgi /usr/bin/uwsgi_psgi
356 +
357 + if use php ; then
358 + for s in $(php_get_slots); do
359 + dosym uwsgi /usr/bin/uwsgi_${s/.}
360 + done
361 + fi
362 +
363 + if use python ; then
364 + python_foreach_impl python_install_symlinks
365 + python_foreach_impl python_domodule uwsgidecorators.py
366 + fi
367 +
368 + newinitd "${FILESDIR}"/uwsgi.initd-r7 uwsgi
369 + newconfd "${FILESDIR}"/uwsgi.confd-r4 uwsgi
370 + keepdir /etc/"${PN}".d
371 + use uwsgi_plugins_spooler && keepdir /var/spool/"${PN}"
372 +}
373 +
374 +pkg_postinst() {
375 + if use apache2 ; then
376 + ewarn "As reported on bug #650776 [1], Apache module mod_proxy_uwsgi"
377 + ewarn "is being transferred to upstream Apache since 2.4.30, see [2]."
378 + ewarn "We therefore do not build them any more."
379 + ewarn " [1] https://bugs.gentoo.org/650776"
380 + ewarn " [2] https://github.com/unbit/uwsgi/issues/1636"
381 + fi
382 +
383 + elog "Append the following options to the uwsgi call to load the respective language plugin:"
384 + use cgi && elog " '--plugins cgi' for cgi"
385 + use lua && elog " '--plugins lua' for lua"
386 + use mono && elog " '--plugins mono' for mono"
387 + use perl && elog " '--plugins psgi' for perl"
388 +
389 + if use php ; then
390 + for s in $(php_get_slots); do
391 + elog " '--plugins ${s/.}' for ${s}"
392 + done
393 + fi
394 +
395 + python_pkg_postinst() {
396 + local EPYV
397 + local PYV
398 + EPYV=${EPYTHON/.}
399 + PYV=${EPYV/python}
400 +
401 + if [[ ${EPYTHON} == pypy* ]] ; then
402 + elog " '--plugins pypy' for pypy"
403 + return
404 + fi
405 +
406 + elog " "
407 + elog " '--plugins ${EPYV}' for ${EPYTHON}"
408 + if use python_asyncio ; then
409 + if [[ ${EPYV} == python34 ]] ; then
410 + elog " '--plugins ${EPYV},asyncio${PYV}' for asyncio support in ${EPYTHON}"
411 + else
412 + elog " (asyncio is only supported in python3.4)"
413 + fi
414 + fi
415 + if use python_gevent ; then
416 + elog " '--plugins ${EPYV},gevent${PYV}' for gevent support in ${EPYTHON}"
417 + fi
418 + }
419 +
420 + use python && python_foreach_impl python_pkg_postinst
421 +
422 + if use ruby ; then
423 + for ruby in $USE_RUBY; do
424 + if use ruby_targets_${ruby} ; then
425 + elog " '--plugins rack_${ruby/.}' for ${ruby}"
426 + elog " '--plugins fiber_${ruby/.}' for ${ruby} fibers"
427 + elog " '--plugins rbthreads_${ruby/.}' for ${ruby} rbthreads"
428 + fi
429 + done
430 + fi
431 +}