diff options
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/build-support/skaware/build-skaware-package.nix | 4 | ||||
-rw-r--r-- | pkgs/tools/system/s6-rc/default.nix | 21 |
2 files changed, 24 insertions, 1 deletions
diff --git a/pkgs/build-support/skaware/build-skaware-package.nix b/pkgs/build-support/skaware/build-skaware-package.nix index b27b65f48a59..d6f26fe908aa 100644 --- a/pkgs/build-support/skaware/build-skaware-package.nix +++ b/pkgs/build-support/skaware/build-skaware-package.nix @@ -15,6 +15,8 @@ # TODO(Profpatsch): automatically infer most of these # : list string , configureFlags + # : string +, postConfigure ? null # mostly for moving and deleting files from the build directory # : lines , postInstall @@ -79,6 +81,8 @@ in stdenv.mkDerivation { ++ (lib.optional stdenv.isDarwin "--build=${stdenv.hostPlatform.system}"); + inherit postConfigure; + # TODO(Profpatsch): ensure that there is always a $doc output! postInstall = '' echo "Cleaning & moving common files" diff --git a/pkgs/tools/system/s6-rc/default.nix b/pkgs/tools/system/s6-rc/default.nix index df2058f43a40..31b9c14257af 100644 --- a/pkgs/tools/system/s6-rc/default.nix +++ b/pkgs/tools/system/s6-rc/default.nix @@ -1,4 +1,4 @@ -{ lib, skawarePackages }: +{ lib, stdenv, skawarePackages, targetPackages }: with skawarePackages; @@ -30,6 +30,25 @@ buildPackage { "--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) |