about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/uwsgi
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/uwsgi')
-rw-r--r--nixpkgs/pkgs/servers/uwsgi/default.nix101
-rw-r--r--nixpkgs/pkgs/servers/uwsgi/nixos.ini6
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