about summary refs log tree commit diff
path: root/pkgs/development/skaware-packages/s6-rc/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/skaware-packages/s6-rc/default.nix')
-rw-r--r--pkgs/development/skaware-packages/s6-rc/default.nix61
1 files changed, 61 insertions, 0 deletions
diff --git a/pkgs/development/skaware-packages/s6-rc/default.nix b/pkgs/development/skaware-packages/s6-rc/default.nix
new file mode 100644
index 0000000000000..0f2662fd72405
--- /dev/null
+++ b/pkgs/development/skaware-packages/s6-rc/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, skawarePackages, targetPackages }:
+
+with skawarePackages;
+
+buildPackage {
+  pname = "s6-rc";
+  version = "0.5.3.2";
+  sha256 = "sha256-TySklmpKo1PSvRqK/Km4jHt70pxGs6Gn9TBWhrnW4Dg=";
+
+  description = "A service manager for s6-based systems";
+  platforms = lib.platforms.unix;
+
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  configureFlags = [
+    "--libdir=\${lib}/lib"
+    "--libexecdir=\${lib}/libexec"
+    "--dynlibdir=\${lib}/lib"
+    "--bindir=\${bin}/bin"
+    "--includedir=\${dev}/include"
+    "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+    "--with-include=${skalibs.dev}/include"
+    "--with-include=${execline.dev}/include"
+    "--with-include=${s6.dev}/include"
+    "--with-lib=${skalibs.lib}/lib"
+    "--with-lib=${execline.lib}/lib"
+    "--with-lib=${s6.out}/lib"
+    "--with-dynlib=${skalibs.lib}/lib"
+    "--with-dynlib=${execline.lib}/lib"
+    "--with-dynlib=${s6.out}/lib"
+  ];
+
+  # s6-rc-compile generates built-in service definitions containing
+  # absolute paths to execline, s6, and s6-rc programs.  If we're
+  # running s6-rc-compile as part of a Nix derivation, and we want to
+  # cross-compile that derivation, those paths will be wrong --
+  # they'll be for execline, s6, and s6-rc on the platform we're
+  # running s6-rc-compile on, not the platform we're targeting.
+  #
+  # We can detect this special case of s6-rc being used at build time
+  # in a derivation that's being cross-compiled, because that's the
+  # only time hostPlatform != targetPlatform.  When that happens we
+  # modify s6-rc-compile to use the configuration headers for the
+  # system we're cross-compiling for.
+  postConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.targetPlatform) ''
+    substituteInPlace src/s6-rc/s6-rc-compile.c \
+        --replace '<execline/config.h>' '"${targetPackages.execline.dev}/include/execline/config.h"' \
+        --replace '<s6/config.h>' '"${targetPackages.s6.dev}/include/s6/config.h"' \
+        --replace '<s6-rc/config.h>' '"${targetPackages.s6-rc.dev}/include/s6-rc/config.h"'
+  '';
+
+  postInstall = ''
+    # remove all s6 executables from build directory
+    rm $(find -name "s6-rc-*" -type f -mindepth 1 -maxdepth 1 -executable)
+    rm s6-rc libs6rc.*
+
+    mv doc $doc/share/doc/s6-rc/html
+    mv examples $doc/share/doc/s6-rc/examples
+  '';
+
+}