Merge pull request #176464 from Artturin/gobjecfix
This commit is contained in:
commit
ce62ff7bdf
@ -153,6 +153,24 @@ Add the following to your `mkDerivation` invocation.
|
|||||||
doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
|
doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Package using Meson needs to run binaries for the host platform during build. {#cross-meson-runs-host-code}
|
||||||
|
|
||||||
|
Add `mesonEmulatorHook` cross conditionally to `nativeBuildInputs`.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
|
||||||
|
```
|
||||||
|
nativeBuildInputs = [
|
||||||
|
meson
|
||||||
|
] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
||||||
|
mesonEmulatorHook
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
Example of an error which this fixes.
|
||||||
|
|
||||||
|
`[Errno 8] Exec format error: './gdk3-scan'`
|
||||||
|
|
||||||
## Cross-building packages {#sec-cross-usage}
|
## Cross-building packages {#sec-cross-usage}
|
||||||
|
|
||||||
Nixpkgs can be instantiated with `localSystem` alone, in which case there is no cross-compiling and everything is built by and for that system, or also with `crossSystem`, in which case packages run on the latter, but all building happens on the former. Both parameters take the same schema as the 3 (build, host, and target) platforms defined in the previous section. As mentioned above, `lib.systems.examples` has some platforms which are used as arguments for these parameters in practice. You can use them programmatically, or on the command line:
|
Nixpkgs can be instantiated with `localSystem` alone, in which case there is no cross-compiling and everything is built by and for that system, or also with `crossSystem`, in which case packages run on the latter, but all building happens on the former. Both parameters take the same schema as the 3 (build, host, and target) platforms defined in the previous section. As mentioned above, `lib.systems.examples` has some platforms which are used as arguments for these parameters in practice. You can use them programmatically, or on the command line:
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
, cairo
|
, cairo
|
||||||
, gnome
|
, gnome
|
||||||
, substituteAll
|
, substituteAll
|
||||||
|
, buildPackages
|
||||||
|
, gobject-introspection-unwrapped
|
||||||
, nixStoreDir ? builtins.storeDir
|
, nixStoreDir ? builtins.storeDir
|
||||||
, x11Support ? true
|
, x11Support ? true
|
||||||
}:
|
}:
|
||||||
@ -67,7 +69,7 @@ stdenv.mkDerivation rec {
|
|||||||
docbook_xml_dtd_45
|
docbook_xml_dtd_45
|
||||||
python3
|
python3
|
||||||
setupHook # move .gir files
|
setupHook # move .gir files
|
||||||
];
|
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ gobject-introspection-unwrapped ];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
python3
|
python3
|
||||||
@ -86,7 +88,11 @@ stdenv.mkDerivation rec {
|
|||||||
"--datadir=${placeholder "dev"}/share"
|
"--datadir=${placeholder "dev"}/share"
|
||||||
"-Ddoctool=disabled"
|
"-Ddoctool=disabled"
|
||||||
"-Dcairo=disabled"
|
"-Dcairo=disabled"
|
||||||
"-Dgtk_doc=true"
|
"-Dgtk_doc=${lib.boolToString (stdenv.hostPlatform == stdenv.buildPlatform)}"
|
||||||
|
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||||
|
"-Dgi_cross_ldd_wrapper=${buildPackages.prelink}/bin/prelink-rtld"
|
||||||
|
"-Dgi_cross_use_prebuilt_gi=true"
|
||||||
|
"-Dgi_cross_binary_wrapper=${stdenv.hostPlatform.emulator buildPackages}"
|
||||||
];
|
];
|
||||||
|
|
||||||
doCheck = !stdenv.isAarch64;
|
doCheck = !stdenv.isAarch64;
|
||||||
@ -97,6 +103,10 @@ stdenv.mkDerivation rec {
|
|||||||
patchShebangs tools/*
|
patchShebangs tools/*
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
postInstall = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
|
||||||
|
cp -r ${buildPackages.gobject-introspection-unwrapped.devdoc} $devdoc
|
||||||
|
'';
|
||||||
|
|
||||||
preCheck = ''
|
preCheck = ''
|
||||||
# Our gobject-introspection patches make the shared library paths absolute
|
# Our gobject-introspection patches make the shared library paths absolute
|
||||||
# in the GIR files. When running tests, the library is not yet installed,
|
# in the GIR files. When running tests, the library is not yet installed,
|
||||||
@ -122,7 +132,7 @@ stdenv.mkDerivation rec {
|
|||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "A middleware layer between C libraries and language bindings";
|
description = "A middleware layer between C libraries and language bindings";
|
||||||
homepage = "https://gi.readthedocs.io/";
|
homepage = "https://gi.readthedocs.io/";
|
||||||
maintainers = teams.gnome.members ++ (with maintainers; [ lovek323 ]);
|
maintainers = teams.gnome.members ++ (with maintainers; [ lovek323 artturin ]);
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
license = with licenses; [ gpl2 lgpl2 ];
|
license = with licenses; [ gpl2 lgpl2 ];
|
||||||
|
|
||||||
|
29
pkgs/development/libraries/gobject-introspection/wrapper.nix
Normal file
29
pkgs/development/libraries/gobject-introspection/wrapper.nix
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, buildPackages
|
||||||
|
, gobject-introspection-unwrapped
|
||||||
|
, targetPackages
|
||||||
|
}:
|
||||||
|
|
||||||
|
# to build, run
|
||||||
|
# `nix build ".#pkgsCross.aarch64-multiplatform.buildPackages.gobject-introspection"`
|
||||||
|
gobject-introspection-unwrapped.overrideAttrs (_previousAttrs: {
|
||||||
|
pname = "gobject-introspection-wrapped";
|
||||||
|
postFixup = ''
|
||||||
|
mv $dev/bin/g-ir-compiler $dev/bin/.g-ir-compiler-wrapped
|
||||||
|
mv $dev/bin/g-ir-scanner $dev/bin/.g-ir-scanner-wrapped
|
||||||
|
|
||||||
|
(
|
||||||
|
export bash="${buildPackages.bash}/bin/bash"
|
||||||
|
export emulator=${lib.escapeShellArg (stdenv.targetPlatform.emulator buildPackages)}
|
||||||
|
export buildprelink="${buildPackages.prelink}/bin/prelink-rtld"
|
||||||
|
|
||||||
|
export targetgir="${lib.getDev targetPackages.gobject-introspection-unwrapped}"
|
||||||
|
|
||||||
|
substituteAll "${./wrappers/g-ir-compiler.sh}" "$dev/bin/g-ir-compiler"
|
||||||
|
substituteAll "${./wrappers/g-ir-scanner.sh}" "$dev/bin/g-ir-scanner"
|
||||||
|
chmod +x "$dev/bin/g-ir-compiler"
|
||||||
|
chmod +x "$dev/bin/g-ir-scanner"
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
})
|
@ -0,0 +1,4 @@
|
|||||||
|
#! @bash@
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
exec @emulator@ @targetgir@/bin/g-ir-compiler "$@"
|
@ -0,0 +1,7 @@
|
|||||||
|
#! @bash@
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
exec @dev@/bin/.g-ir-scanner-wrapped \
|
||||||
|
--use-binary-wrapper=@emulator@ \
|
||||||
|
--use-ldd-wrapper=@buildprelink@ \
|
||||||
|
"$@"
|
@ -0,0 +1,5 @@
|
|||||||
|
add_meson_exe_wrapper_cross_flag() {
|
||||||
|
mesonFlagsArray+=(--cross-file=@crossFile@)
|
||||||
|
}
|
||||||
|
|
||||||
|
preConfigureHooks+=(add_meson_exe_wrapper_cross_flag)
|
@ -1,22 +1,54 @@
|
|||||||
{ lib, stdenv, fetchurl, libelf }:
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, fetchgit
|
||||||
|
, autoreconfHook
|
||||||
|
, libelf
|
||||||
|
, libiberty
|
||||||
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "prelink";
|
pname = "prelink";
|
||||||
version = "20130503";
|
version = "unstable-2019-06-24";
|
||||||
|
|
||||||
buildInputs = [
|
src = fetchgit {
|
||||||
libelf stdenv.cc.libc (lib.getOutput "static" stdenv.cc.libc)
|
url = "https://git.yoctoproject.org/git/prelink-cross";
|
||||||
|
branchName = "cross_prelink";
|
||||||
|
rev = "f9975537dbfd9ade0fc813bd5cf5fcbe41753a37";
|
||||||
|
sha256 = "sha256-O9/oZooLRyUBBZX3SFcB6LFMmi2vQqkUlqtZnrq5oZc=";
|
||||||
|
};
|
||||||
|
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
|
configurePlatforms = [ "build" "host" ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
autoreconfHook
|
||||||
];
|
];
|
||||||
|
|
||||||
src = fetchurl {
|
buildInputs = [
|
||||||
url = "https://people.redhat.com/jakub/prelink/prelink-${version}.tar.bz2";
|
stdenv.cc.libc
|
||||||
sha256 = "1w20f6ilqrz8ca51qhrn1n13h7q1r34k09g33d6l2vwvbrhcffb3";
|
libelf
|
||||||
};
|
libiberty
|
||||||
|
];
|
||||||
|
|
||||||
meta = {
|
# Disable some tests because they're failing
|
||||||
homepage = "https://people.redhat.com/jakub/prelink/";
|
preCheck = ''
|
||||||
license = "GPL";
|
for f in reloc2 layout1 unprel1 tls3 cxx2 cxx3 quick1 quick2 deps1 deps2; do
|
||||||
|
echo '#' > testsuite/''${f}.sh
|
||||||
|
done
|
||||||
|
patchShebangs --build testsuite
|
||||||
|
'';
|
||||||
|
|
||||||
|
# most tests fail
|
||||||
|
doCheck = !stdenv.isAarch64;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
meta = with lib;{
|
||||||
description = "ELF prelinking utility to speed up dynamic linking";
|
description = "ELF prelinking utility to speed up dynamic linking";
|
||||||
platforms = lib.platforms.linux;
|
homepage = "https://wiki.yoctoproject.org/wiki/Cross-Prelink";
|
||||||
|
license = licenses.gpl2Plus;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = with maintainers; [ artturin ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3965,6 +3965,24 @@ with pkgs;
|
|||||||
|
|
||||||
meson = callPackage ../development/tools/build-managers/meson { };
|
meson = callPackage ../development/tools/build-managers/meson { };
|
||||||
|
|
||||||
|
# while building documentation meson may want to run binaries for host
|
||||||
|
# which needs an emulator
|
||||||
|
# example of an error which this fixes
|
||||||
|
# [Errno 8] Exec format error: './gdk3-scan'
|
||||||
|
mesonEmulatorHook =
|
||||||
|
if (stdenv.buildPlatform != stdenv.targetPlatform) then
|
||||||
|
makeSetupHook
|
||||||
|
{
|
||||||
|
name = "mesonEmulatorHook";
|
||||||
|
substitutions = {
|
||||||
|
crossFile = writeText "cross-file.conf" ''
|
||||||
|
[binaries]
|
||||||
|
exe_wrapper = ${lib.escapeShellArg (stdenv.targetPlatform.emulator buildPackages)}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
} ../development/tools/build-managers/meson/emulator-hook.sh
|
||||||
|
else throw "mesonEmulatorHook has to be in a cross conditional i.e. (stdenv.buildPlatform != stdenv.hostPlatform)";
|
||||||
|
|
||||||
meson-tools = callPackage ../misc/meson-tools { };
|
meson-tools = callPackage ../misc/meson-tools { };
|
||||||
|
|
||||||
metabase = callPackage ../servers/metabase { };
|
metabase = callPackage ../servers/metabase { };
|
||||||
@ -17630,7 +17648,10 @@ with pkgs;
|
|||||||
gns3-gui = gns3Packages.guiStable;
|
gns3-gui = gns3Packages.guiStable;
|
||||||
gns3-server = gns3Packages.serverStable;
|
gns3-server = gns3Packages.serverStable;
|
||||||
|
|
||||||
gobject-introspection = callPackage ../development/libraries/gobject-introspection {
|
gobject-introspection = if (stdenv.hostPlatform != stdenv.targetPlatform)
|
||||||
|
then callPackage ../development/libraries/gobject-introspection/wrapper.nix { } else gobject-introspection-unwrapped;
|
||||||
|
|
||||||
|
gobject-introspection-unwrapped = callPackage ../development/libraries/gobject-introspection {
|
||||||
nixStoreDir = config.nix.storeDir or builtins.storeDir;
|
nixStoreDir = config.nix.storeDir or builtins.storeDir;
|
||||||
inherit (darwin) cctools;
|
inherit (darwin) cctools;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user