nixpkgs/pkgs/build-support/skaware/build-skaware-package.nix
Alyssa Ross 6e6c8b7338 s6-rc: fix cross builds that run s6-rc-compile
The reason for this change is explained in the long comment I added.

Here's a simple example of the problem:

	let
	  pkgs = import <nixpkgs> { crossSystem.system = "aarch64-linux"; };
	in

	pkgs.callPackage ({ stdenv, s6-rc }: stdenv.mkDerivation {
	  name = "s6-rc-compiled";

	  nativeBuildInputs = [ s6-rc ];

	  buildCommand = ''
	    mkdir in
	    s6-rc-compile $out in
	  '';
	}) {}

We're cross compiling for aarch64 here, so we'd expect the scripts
generated by this derivation to be things we could run on aarch64.
But when I build this on my x86_64 machine, without this change
applied, $out/servicedirs/s6rc-oneshot-runner/run gets generated full
of references to x86_64 non-cross store paths for execline, s6, and
s6-rc.

With this change applied, the scripts generated by the above
expression now refer to the cross-compiled aarch64 store paths for
execline, s6, and s6-rc.
2021-08-18 20:09:19 +00:00

110 lines
2.5 KiB
Nix

{ lib, stdenv, cleanPackaging, fetchurl }:
{
# : string
pname
# : string
, version
# : string
, sha256
# : string
, description
# : list Platform
, platforms ? lib.platforms.all
# : list string
, outputs ? [ "bin" "lib" "dev" "doc" "out" ]
# 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
# : list Maintainer
, maintainers ? []
}:
let
# File globs that can always be deleted
commonNoiseFiles = [
".gitignore"
"Makefile"
"INSTALL"
"configure"
"patch-for-solaris"
"src/**/*"
"tools/**/*"
"package/**/*"
"config.mak"
];
# File globs that should be moved to $doc
commonMetaFiles = [
"COPYING"
"AUTHORS"
"NEWS"
"CHANGELOG"
"README"
"README.*"
];
in stdenv.mkDerivation {
inherit pname version;
src = fetchurl {
url = "https://skarnet.org/software/${pname}/${pname}-${version}.tar.gz";
inherit sha256;
};
inherit outputs;
dontDisableStatic = true;
enableParallelBuilding = true;
configureFlags = configureFlags ++ [
"--enable-absolute-paths"
# We assume every nix-based cross target has urandom.
# This might not hold for e.g. BSD.
"--with-sysdep-devurandom=yes"
(if stdenv.isDarwin
then "--disable-shared"
else "--enable-shared")
]
# On darwin, the target triplet from -dumpmachine includes version number,
# but skarnet.org software uses the triplet to test binary compatibility.
# Explicitly setting target ensures code can be compiled against a skalibs
# binary built on a different version of darwin.
# http://www.skarnet.org/cgi-bin/archive.cgi?1:mss:623:heiodchokfjdkonfhdph
++ (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"
${cleanPackaging.commonFileActions {
noiseFiles = commonNoiseFiles;
docFiles = commonMetaFiles;
}} $doc/share/doc/${pname}
${postInstall}
'';
postFixup = ''
${cleanPackaging.checkForRemainingFiles}
'';
meta = {
homepage = "https://skarnet.org/software/${pname}/";
inherit description platforms;
license = lib.licenses.isc;
maintainers = with lib.maintainers;
[ pmahoney Profpatsch qyliss ] ++ maintainers;
};
}