# 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}" }