-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Vadim Misbakh-Soloviov <[email protected]>
- Loading branch information
Showing
1 changed file
with
206 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,206 @@ | ||
# Copyright 1999-2024 Gentoo Authors | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=8 | ||
|
||
PYTHON_COMPAT=( python3_{8..12} pypy3 ) | ||
PYTHON_REQ_USE="threads(+)" | ||
|
||
RUBY_OPTIONAL="yes" | ||
USE_RUBY="ruby31 ruby32 ruby33" | ||
|
||
PHP_EXT_INI="no" | ||
PHP_EXT_NAME="dummy" | ||
PHP_EXT_OPTIONAL_USE="unit_modules_php" | ||
PHP_EXT_NEEDED_USE="embed" | ||
USE_PHP="php8-1 php8-2" | ||
|
||
inherit systemd php-ext-source-r3 python-r1 ruby-ng toolchain-funcs flag-o-matic patches | ||
# golang-base | ||
|
||
DESCRIPTION="Dynamic web and application server" | ||
HOMEPAGE="https://unit.nginx.org/" | ||
LICENSE="Apache-2.0" | ||
SLOT="0" | ||
|
||
if [[ "${PV}" = 9999 ]]; then | ||
EGIT_REPO_URI="https://github.com/nginx/unit" | ||
MY_P="${P}" | ||
inherit git-r3 | ||
else | ||
MY_P="${P//nginx-}" | ||
SRC_URI="https://unit.nginx.org/download/${MY_P}.tar.gz" | ||
KEYWORDS="~amd64 ~arm ~arm64 ~x86" | ||
fi | ||
|
||
UNIT_MODULES="perl php python ruby" | ||
# go java nodejs | ||
# ^ not needed, as unit stuf normally installs with language package managers as vendored dependency of application | ||
IUSE="debug examples ipv6 ssl +unix-sockets" | ||
|
||
for mod in $UNIT_MODULES; do | ||
IUSE="${IUSE} unit_modules_${mod}" | ||
done | ||
|
||
REQUIRED_USE="unit_modules_python? ( ${PYTHON_REQUIRED_USE} )" | ||
|
||
DEPEND=" | ||
unit_modules_perl? ( | ||
dev-lang/perl:= | ||
) | ||
unit_modules_python? ( | ||
${PYTHON_DEPS} | ||
) | ||
unit_modules_ruby? ( | ||
$(ruby_implementations_depend) | ||
) | ||
ssl? ( | ||
dev-libs/openssl:0= | ||
) | ||
" | ||
# unit_modules_go? ( | ||
# dev-lang/go:* | ||
# ) | ||
# unit_modules_nodejs? ( | ||
# net-libs/nodejs:* | ||
# ) | ||
# unit_modules_java? ( | ||
# virtual/jre:* | ||
# ) | ||
# unit_modules_wasm? ( | ||
# dev-util/wasmer | ||
# ) | ||
RDEPEND="${DEPEND}" | ||
S="${WORKDIR}/${MY_P}" | ||
|
||
my_econf() { | ||
echo ./configure "${@}" | ||
./configure "${@}" | ||
} | ||
|
||
pkg_setup() { | ||
use unit_modules_ruby && ruby-ng_pkg_setup | ||
} | ||
|
||
src_unpack() { | ||
# prevent ruby-ng | ||
if [[ "${PV}" == 9999 ]]; then | ||
git-r3_src_unpack | ||
else | ||
default | ||
fi | ||
} | ||
|
||
src_prepare() { | ||
sed -r \ | ||
-e 's@-Werror@@g' \ | ||
-i auto/cc/test || die | ||
|
||
sed -i '/^CFLAGS/d' auto/make || die | ||
|
||
sed \ | ||
-e '/NXT_LOGDIR/d' \ | ||
-e '/NXT_RUNSTATEDIR/d' \ | ||
-i auto/make || die "Failed to monkeypatch QA issues with installation" | ||
|
||
patches_src_prepare | ||
tc-export_build_env | ||
} | ||
|
||
_unit_java_configure() { | ||
unset _JAVA_OPTIONS # breaks the build if defined | ||
my_econf java --home="${NGINX_UNIT_JAVA_HOME:-/etc/java-config-2/current-system-vm}" # multislot? | ||
# ^ if we will use just ${JAVA_HOME}, then it will be the same result | ||
# as if we called it without the --home (it takes that by itself) | ||
# Also, JAVA_HOME can be inherited from user's environment (so, | ||
# user-vm will be used instead of system-vm). | ||
# That's why I decided to manually set system-vm, but still | ||
# give user a way to specify exact the vm they want. | ||
} | ||
# _unit_go_configure() { | ||
# # Actually, it is used as external, so all the configuration made on app (and go) side | ||
# # ./configure go --go-path="$(get_golibdir_gopath)" # deprecated golang-base eclass | ||
# my_econf go --go-path="${EPREFIX}/usr/lib/go" # multislot? | ||
# } | ||
#_unit_nodejs_configure() { | ||
# # Actually, it is used as external, so all the configuration made on app (and nodejs) side | ||
# # my_econf nodejs --node-gyp="/usr/$(get_libdir)/node_modules/npm/bin/node-gyp-bin/node-gyp" | ||
#} | ||
#_unit_wasm_configure() { | ||
# # there is only wasmer on gentoo repo ATM. Default wasmtime is only on 3party overlay | ||
# my_econf wasm \ | ||
# --runtime="wasmer" \ | ||
# --include=... \ | ||
# --lib-path=... \ | ||
#} | ||
_unit_perl_configure() { | ||
my_econf perl | ||
} | ||
_unit_php_configure() { | ||
for impl in $(php_get_slots); do | ||
my_econf php \ | ||
--config="/usr/$(get_libdir)/${impl}/bin/php-config" \ | ||
--module="${impl/.}" \ | ||
--lib-path="/usr/$(get_libdir)/${impl}/$(get_libdir)" \ | ||
|| die "Failed to configure PHP module for ${impl} target" | ||
done | ||
} | ||
_unit_python_configure() { | ||
_unit_python_configure_each() { | ||
my_econf python --config="${EPYTHON}-config" --module="${EPYTHON/.}" | ||
} | ||
python_foreach_impl _unit_python_configure_each | ||
} | ||
_unit_ruby_configure() { | ||
each_ruby_configure() { | ||
cd "${WORKDIR}/${MY_P}" | ||
my_econf ruby --ruby="${RUBY}" --module="$(basename ${RUBY})" | ||
} | ||
ruby-ng_src_configure | ||
} | ||
|
||
src_configure() { | ||
append-cflags $(test-flags-CC -fPIC) | ||
local opt=( | ||
--prefix="/usr" | ||
--modulesdir="/usr/$(get_libdir)/${PN}" | ||
--libdir="/usr/$(get_libdir)" | ||
--localstatedir="/var" | ||
--runstatedir="/run/${PN}" | ||
--statedir="/var/lib/${PN}" | ||
--logdir="/var/log" | ||
--tmpdir="/tmp" | ||
--pid="/run/${PN}.pid" | ||
--log="/var/log/${PN}.log" | ||
$(usex ipv6 '' "--no-ipv6") | ||
$(usex unix-sockets "--control=unix:/run/${PN}.sock" "--no-unix-sockets") | ||
$(usex ssl "--openssl" "") | ||
$(usex debug "--debug" "") | ||
# --njs | ||
) | ||
my_econf \ | ||
${opt[@]} \ | ||
--cc="$(tc-getCC)" \ | ||
--cc-opt="${CFLAGS}" \ | ||
--ld-opt="${LDFLAGS}" \ | ||
|| die "Core configuration failed!" | ||
|
||
for mod in $UNIT_MODULES; do | ||
use "unit_modules_${mod}" && "_unit_${mod}_configure" | ||
done | ||
} | ||
|
||
src_compile() { | ||
# Prevent ruby-ng, and also force to use "all" target | ||
emake all | ||
} | ||
|
||
src_install() { | ||
emake DESTDIR="${D}" install libunit-install | ||
diropts -m 0770 | ||
keepdir /var/lib/"${PN}" | ||
systemd_dounit "${FILESDIR}"/init/"${PN}".service | ||
systemd_install_dropin "${PN}".service "${FILESDIR}"/init/"${PN}".service.conf | ||
newconfd "${FILESDIR}"/init/"${PN}".confd "${PN}" | ||
newinitd "${FILESDIR}"/init/"${PN}".initd "${PN}" | ||
} |