summaryrefslogtreecommitdiff
blob: d4fa2257780eb8a971bb210c7507e3ce4e5f0a81 (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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="4"
PYTHON_DEPEND="python? 2:2.4:2.7 3:3.1:3.2"
PYTHON_MODNAME="uwsgidecorators"
SUPPORT_PYTHON_ABIS="1"
USE_RUBY="ruby18 ree18 ruby19"
RUBY_OPTIONAL="yes"

MY_P="${P/_/-}"

inherit apache-module python multilib ruby-ng

DESCRIPTION="uWSGI server for Python web applications"
HOMEPAGE="http://projects.unbit.it/uwsgi/"
SRC_URI="http://projects.unbit.it/downloads/${MY_P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="apache2 +caps +carbon debug json ldap lua +nagios perl +pcre python rrdtool rsyslog ruby spooler sqlite syslog +uuid +xml yaml zeromq"
REQUIRED_USE="|| ( lua perl python ruby )"

CDEPEND="caps? ( sys-libs/libcap )
	json? ( dev-libs/jansson )
	ldap? ( net-nds/openldap )
	lua? ( dev-lang/lua )
	pcre? ( dev-libs/libpcre )
	perl? ( dev-lang/perl )
	ruby? ( $(ruby_implementations_depend) )
	sqlite? ( dev-db/sqlite:3 )
	rsyslog? ( app-admin/rsyslog )
	uuid? ( sys-apps/util-linux )
	xml? ( dev-libs/libxml2 )
	yaml? ( dev-libs/libyaml )
	zeromq? ( net-libs/zeromq )"
DEPEND="${CDEPEND}
	dev-util/pkgconfig"
RDEPEND="${CDEPEND}
	rrdtool? ( net-analyzer/rrdtool )"

S="${WORKDIR}/${MY_P}"
APXS2_S="${S}/apache2"
APACHE2_MOD_CONF="42_mod_${PN}"

want_apache2_2

use_true_false() {
	if use $1 ; then
		echo "true"
	else
		echo "false"
	fi
}

src_unpack() {
	default
}

pkg_setup() {
	depend.apache_pkg_setup
	python_pkg_setup
}

src_prepare() {
	sed -i \
		-e "s|'-O2', ||" \
		-e "s|'-Werror', ||" \
		-e "s|uc.get('plugin_dir')|uc.get('plugin_build_dir')|" \
		uwsgiconfig.py || die "sed failed"

	sed -i \
		-e 's|python\([0-9].[0-9]\)-config|python-config-\1|' \
		plugins/python/uwsgiplugin.py || die "sed failed"
}

src_configure() {
	local plugins=""
	use carbon && plugins+=", carbon"
	use nagios && plugins+=", nagios"
	use rrdtool && plugins+=", rrdtool"
	use rsyslog && plugins+=", rsyslog"
	use syslog && plugins+=", syslog"

	cat > "buildconf/gentoo.ini" << EOF
[uwsgi]
xml = $(use_true_false xml)
ini = true
yaml = $(use_true_false yaml)
json = $(use_true_false json)
sqlite3 = $(use_true_false sqlite)
zeromq = $(use_true_false zeromq)
snmp = true
sctp = false
spooler = true
embedded = true
udp = true
multicast = true
threading = true
sendfile = true
minterpreters = true
async = true
evdis = false
ldap = $(use_true_false ldap)
pcre = $(use_true_false pcre)
debug = $(use_true_false debug)
unbit = false
xml_implementation = libxml2
yaml_implementation = libyaml
malloc_implementation = libc
plugins =
bin_name = uwsgi
append_version =
plugin_dir = /usr/$(get_libdir)/uwsgi
plugin_build_dir = ${T}/plugins
embedded_plugins =  ping, cache, rpc, fastrouter, http, ugreen, signal, logsocket, ${plugins:1}
as_shared_library = false

locking = auto
event = auto
timer = auto
filemonitor = auto

embed_files = 

embed_config =
[python]
paste = true
web3 = true
EOF
	use caps || sed -i -e 's|sys/capability.h|DISABLED|' uwsgiconfig.py || die "sed failed"
	use uuid || sed -i -e 's|uuid/uuid.h|DISABLED|' uwsgiconfig.py || die "sed failed"
}

each_ruby_compile() {
	cd "${WORKDIR}/${MY_P}"

	sed -i -e "s|^NAME=.*|NAME='rack_${RUBY##*/}'|" plugins/rack/uwsgiplugin.py || die "sed failed"
	UWSGICONFIG_RUBYPATH="${RUBY}" python uwsgiconfig.py --plugin plugins/rack gentoo || die "building plugin for ${RUBY} failed"

	if [[ "${RUBY}" == *ruby19 ]] ; then
		UWSGICONFIG_RUBYPATH="${RUBY}" python uwsgiconfig.py --plugin plugins/ruby19 gentoo || die "building plugin for ${RUBY} failed"
	fi
}

install_python_lib() {
	insinto $(python_get_sitedir)
	doins uwsgidecorators.py
}

src_compile() {
	python uwsgiconfig.py --build gentoo || die "building uwsgi failed"

	mkdir -p "${T}/plugins"

	if use lua ; then
		python uwsgiconfig.py --plugin plugins/lua gentoo || die "building plugin for lua failed"
	fi

	if use perl ; then
		python uwsgiconfig.py --plugin plugins/psgi gentoo || die "building plugin for perl failed"
	fi

	if use python ; then
		for a in ${PYTHON_ABIS} ; do
			python${a} uwsgiconfig.py --plugin plugins/python gentoo python${a/.} || die "building plugin for python-${a} failed"
		done
	fi

	if use ruby ; then
		ruby-ng_src_compile
	fi

	if use spooler ; then
		python uwsgiconfig.py --plugin plugins/spooler gentoo || die "building plugin for spooler failed"
	fi

	if use apache2 ; then
		for m in Ruwsgi uwsgi ; do
			APXS2_ARGS="-c mod_${m}.c"
			apache-module_src_compile
		done
	fi
}

src_install() {
	dobin uwsgi

	insinto /usr/$(get_libdir)/uwsgi
	doins "${T}/plugins"/*.so

	use lua && dosym uwsgi /usr/bin/uwsgi_lua

	use perl && dosym uwsgi /usr/bin/uwsgi_perl

	if use python ; then
		python_execute_function install_python_lib
		for a in ${PYTHON_ABIS} ; do
			dosym uwsgi /usr/bin/uwsgi_python${a/.}
		done
	fi

	if use apache2; then
		for m in Ruwsgi uwsgi ; do
			APACHE2_MOD_FILE="${APXS2_S}/.libs/mod_${m}.so"
			apache-module_src_install
		done
	fi

	newinitd "${FILESDIR}"/uwsgi.initd uwsgi
	newconfd "${FILESDIR}"/uwsgi.confd uwsgi
	keepdir /etc/"${PN}".d
	use spooler && keepdir /var/spool/"${PN}"
}

pkg_postinst() {
	if use apache2 ; then
		elog "Two Apache modules have been installed: mod_uwsgi and mod_Ruwsgi."
		elog "You can enable them with -DUWSGI or -DRUWSGI in /etc/conf.d/apache2."
		elog "Both have the same configuration interface and define the same symbols."
		elog "Therefore you can enable only one of them at a time."
		elog "mod_uwsgi is commercially supported by Unbit and stable but a bit hacky."
		elog "mod_Ruwsgi is newer and more Apache-API friendly but not commercially supported."
	fi

	if use lua || use perl || use ruby || use python; then
		elog "The lua, perl and ruby modules are built as plugins."
		elog "Use '--plugins lua', '--plugins psgi', '--plugins rack_ruby18' or '--plugins python27' to load them."
	fi
}