diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/uwsgi')
-rw-r--r-- | nixpkgs/pkgs/servers/uwsgi/default.nix | 101 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/uwsgi/nixos.ini | 6 |
2 files changed, 107 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/uwsgi/default.nix b/nixpkgs/pkgs/servers/uwsgi/default.nix new file mode 100644 index 000000000000..074b19724d28 --- /dev/null +++ b/nixpkgs/pkgs/servers/uwsgi/default.nix @@ -0,0 +1,101 @@ +{ stdenv, lib, fetchurl, pkgconfig, jansson, pcre +# plugins: list of strings, eg. [ "python2" "python3" ] +, plugins +, pam, withPAM ? false +, systemd, withSystemd ? false +, python2, python3, ncurses +, ruby, php-embed, mysql +}: + +let pythonPlugin = pkg : lib.nameValuePair "python${if pkg ? isPy2 then "2" else "3"}" { + interpreter = pkg.interpreter; + path = "plugins/python"; + inputs = [ pkg ncurses ]; + install = '' + install -Dm644 uwsgidecorators.py $out/${pkg.sitePackages}/uwsgidecorators.py + ${pkg.executable} -m compileall $out/${pkg.sitePackages}/ + ${pkg.executable} -O -m compileall $out/${pkg.sitePackages}/ + ''; + }; + + available = lib.listToAttrs [ + (pythonPlugin python2) + (pythonPlugin python3) + (lib.nameValuePair "rack" { + path = "plugins/rack"; + inputs = [ ruby ]; + }) + (lib.nameValuePair "cgi" { + # usage: https://uwsgi-docs.readthedocs.io/en/latest/CGI.html?highlight=cgi + path = "plugins/cgi"; + inputs = [ ]; + }) + (lib.nameValuePair "php" { + # usage: https://uwsgi-docs.readthedocs.io/en/latest/PHP.html#running-php-apps-with-nginx + path = "plugins/php"; + inputs = [ php-embed ] ++ php-embed.buildInputs; + NIX_CFLAGS_LINK = [ "-L${mysql.connector-c}/lib/mysql" ]; + }) + ]; + + getPlugin = name: + let all = lib.concatStringsSep ", " (lib.attrNames available); + in if lib.hasAttr name available + then lib.getAttr name available // { inherit name; } + else throw "Unknown UWSGI plugin ${name}, available : ${all}"; + + needed = builtins.map getPlugin plugins; +in + +stdenv.mkDerivation rec { + name = "uwsgi-${version}"; + version = "2.0.17.1"; + + src = fetchurl { + url = "https://projects.unbit.it/downloads/${name}.tar.gz"; + sha256 = "0xxjb9dyivq5531birvxq2gnyxf2x5q7gz54440acra6qwsq4cfj"; + }; + + nativeBuildInputs = [ python3 pkgconfig ]; + + buildInputs = [ jansson pcre ] + ++ lib.optional withPAM pam + ++ lib.optional withSystemd systemd + ++ lib.concatMap (x: x.inputs) needed + ; + + basePlugins = lib.concatStringsSep "," + ( lib.optional withPAM "pam" + ++ lib.optional withSystemd "systemd_logger" + ); + + passthru = { + inherit python2 python3; + }; + + configurePhase = '' + export pluginDir=$out/lib/uwsgi + substituteAll ${./nixos.ini} buildconf/nixos.ini + ''; + + buildPhase = '' + mkdir -p $pluginDir + python3 uwsgiconfig.py --build nixos + ${lib.concatMapStringsSep ";" (x: "${x.preBuild or ""}\n ${x.interpreter or "python3"} uwsgiconfig.py --plugin ${x.path} nixos ${x.name}") needed} + ''; + + installPhase = '' + install -Dm755 uwsgi $out/bin/uwsgi + ${lib.concatMapStringsSep "\n" (x: x.install or "") needed} + ''; + + NIX_CFLAGS_LINK = lib.optional withSystemd "-lsystemd" ++ lib.concatMap (x: x.NIX_CFLAGS_LINK or []) needed; + + meta = with stdenv.lib; { + homepage = https://uwsgi-docs.readthedocs.org/en/latest/; + description = "A fast, self-healing and developer/sysadmin-friendly application container server coded in pure C"; + license = licenses.gpl2; + maintainers = with maintainers; [ abbradar schneefux ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/servers/uwsgi/nixos.ini b/nixpkgs/pkgs/servers/uwsgi/nixos.ini new file mode 100644 index 000000000000..51bc6da33f6c --- /dev/null +++ b/nixpkgs/pkgs/servers/uwsgi/nixos.ini @@ -0,0 +1,6 @@ +[uwsgi] +plugin_dir = @pluginDir@ +main_plugin = @basePlugins@ +json = true +yaml = false +inherit = base |