diff options
author | Artturin <Artturin@artturin.com> | 2022-11-09 00:33:42 +0200 |
---|---|---|
committer | Artturin <Artturin@artturin.com> | 2022-11-09 20:58:38 +0200 |
commit | b2f9cd34e75409bd7cd68a90f8754e63f92f4738 (patch) | |
tree | 57a04e8ec92fcb0822432ef84b467f2169280b44 /pkgs/development/libraries/gobject-introspection | |
parent | 9f1f990aee8ca8bc847bf41feabe0d91d8a59dc4 (diff) |
gobject-introspection: use wrapper.nix for the native package too
so we can propagate the dev output during the build of i3ipc-glib with strictDeps enabled i noticed that gobject-introspection was not being detected and it was due to gobject-introspection path not being in the PKG_CONFIG_PATH variable this commit makes gobject-introspection get detected when build==host
Diffstat (limited to 'pkgs/development/libraries/gobject-introspection')
-rw-r--r-- | pkgs/development/libraries/gobject-introspection/default.nix | 8 | ||||
-rw-r--r-- | pkgs/development/libraries/gobject-introspection/wrapper.nix | 128 |
2 files changed, 87 insertions, 49 deletions
diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix index bb306fb3a8591..ec109cbee8dc9 100644 --- a/pkgs/development/libraries/gobject-introspection/default.nix +++ b/pkgs/development/libraries/gobject-introspection/default.nix @@ -138,14 +138,6 @@ stdenv.mkDerivation (finalAttrs: { rm $out/lib/libregress-1.0${stdenv.targetPlatform.extensions.sharedLibrary} ''; - # add self to buildInputs to avoid needing to add gobject-introspection to buildInputs in addition to nativeBuildInputs - # builds use target-pkg-config to look for gobject-introspection instead of just looking for binaries in $PATH - # wrapper uses depsTargetTargetPropagated so ignore it - preFixup = lib.optionalString (!lib.hasSuffix "-wrapped" finalAttrs.pname) '' - mkdir -p $dev/nix-support - echo "$out" > $dev/nix-support/propagated-target-target-deps - ''; - setupHook = ./setup-hook.sh; passthru = { diff --git a/pkgs/development/libraries/gobject-introspection/wrapper.nix b/pkgs/development/libraries/gobject-introspection/wrapper.nix index f887b7d18c77a..518dda781a642 100644 --- a/pkgs/development/libraries/gobject-introspection/wrapper.nix +++ b/pkgs/development/libraries/gobject-introspection/wrapper.nix @@ -9,50 +9,96 @@ # to build, run # `nix build ".#pkgsCross.aarch64-multiplatform.buildPackages.gobject-introspection"` +# a comment for both depsTargetTargetPropagated's +# add self to buildInputs to avoid needing to add gobject-introspection to buildInputs in addition to nativeBuildInputs +# builds use target-pkg-config to look for gobject-introspection instead of just looking for binaries in $PATH + let - # ensure that `.override` works when gobject-introspection == gobject-introspection-wrapped + # ensure that `.override` works args = builtins.removeAttrs _args [ "buildPackages" "targetPackages" "gobject-introspection-unwrapped" ]; # passing this stdenv to `targetPackages...` breaks due to splicing not working in `.override`` argsForTarget = builtins.removeAttrs args [ "stdenv" ]; + + overridenUnwrappedGir = gobject-introspection-unwrapped.override args; + # if we have targetPackages.gobject-introspection then propagate that + overridenTargetUnwrappedGir = + if targetPackages ? gobject-introspection-unwrapped + then targetPackages.gobject-introspection-unwrapped.override argsForTarget + else overridenUnwrappedGir; in -(gobject-introspection-unwrapped.override args).overrideAttrs (previousAttrs: { - pname = "gobject-introspection-wrapped"; - depsTargetTargetPropagated = [ gobject-introspection-unwrapped ]; - postFixup = (previousAttrs.postFixup or "") + '' - 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}" - export emulator=${lib.escapeShellArg (stdenv.targetPlatform.emulator buildPackages)} - export emulatorwrapper="$dev/bin/g-ir-scanner-qemuwrapper" - export buildlddtree="${buildPackages.pax-utils}/bin/lddtree" - - export targetgir="${lib.getDev (targetPackages.gobject-introspection-unwrapped.override argsForTarget)}" - - substituteAll "${./wrappers/g-ir-compiler.sh}" "$dev/bin/g-ir-compiler" - substituteAll "${./wrappers/g-ir-scanner.sh}" "$dev/bin/g-ir-scanner" - substituteAll "${./wrappers/g-ir-scanner-lddwrapper.sh}" "$dev/bin/g-ir-scanner-lddwrapper" - substituteAll "${./wrappers/g-ir-scanner-qemuwrapper.sh}" "$dev/bin/g-ir-scanner-qemuwrapper" - chmod +x $dev/bin/g-ir-* - ) - '' - # when cross-compiling and using the wrapper then when a package looks up the g_ir_X - # variable with pkg-config they'll get the host version which can't be run - # override the variable to use the absolute path to g_ir_X in PATH which can be run - + '' - cat >> $dev/nix-support/setup-hook <<-'EOF' - override-pkg-config-gir-variables() { - PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER="$(type -p g-ir-scanner)" - PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER="$(type -p g-ir-compiler)" - PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE="$(type -p g-ir-generate)" - export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER - export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER - export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE - } - - preConfigureHooks+=(override-pkg-config-gir-variables) - EOF - ''; -}) +# wrap both pkgsCrossX.buildPackages.gobject-introspection and {pkgs,pkgsSomethingExecutableOnBuildSystem).buildPackages.gobject-introspection +if (!stdenv.hostPlatform.canExecute stdenv.targetPlatform) && stdenv.targetPlatform.emulatorAvailable buildPackages +then + stdenv.mkDerivation + (builtins.removeAttrs overridenUnwrappedGir.drvAttrs [ "name" ] # so we can get a fresh name generated from the pname + // { + pname = "gobject-introspection-wrapped"; + passthru = overridenUnwrappedGir.passthru // { + unwrapped = overridenUnwrappedGir; + }; + phases = [ "fixupPhase" ]; # don't remove, it is valid to set phases here. + dontStrip = true; + depsTargetTargetPropagated = [ overridenTargetUnwrappedGir ]; + postFixup = '' + ${lib.concatMapStrings (output: '' + mkdir -p ${"$" + "${output}"} + ${lib.getExe buildPackages.xorg.lndir} ${gobject-introspection-unwrapped.${output}} ${"$" + "${output}"} + '') gobject-introspection-unwrapped.outputs} + + cp $dev/bin/g-ir-compiler $dev/bin/.g-ir-compiler-wrapped + cp $dev/bin/g-ir-scanner $dev/bin/.g-ir-scanner-wrapped + + ( + rm "$dev/bin/g-ir-compiler" + rm "$dev/bin/g-ir-scanner" + export bash="${buildPackages.bash}" + export emulator=${lib.escapeShellArg (stdenv.targetPlatform.emulator buildPackages)} + export emulatorwrapper="$dev/bin/g-ir-scanner-qemuwrapper" + export buildlddtree="${buildPackages.pax-utils}/bin/lddtree" + + export targetgir="${lib.getDev overridenTargetUnwrappedGir}" + + substituteAll "${./wrappers/g-ir-compiler.sh}" "$dev/bin/g-ir-compiler" + substituteAll "${./wrappers/g-ir-scanner.sh}" "$dev/bin/g-ir-scanner" + substituteAll "${./wrappers/g-ir-scanner-lddwrapper.sh}" "$dev/bin/g-ir-scanner-lddwrapper" + substituteAll "${./wrappers/g-ir-scanner-qemuwrapper.sh}" "$dev/bin/g-ir-scanner-qemuwrapper" + chmod +x $dev/bin/g-ir-compiler + chmod +x $dev/bin/g-ir-scanner* + ) + '' + # when cross-compiling and using the wrapper then when a package looks up the g_ir_X + # variable with pkg-config they'll get the host version which can't be run + # override the variable to use the absolute path to g_ir_X in PATH which can be run + + '' + cat >> $dev/nix-support/setup-hook <<-'EOF' + override-pkg-config-gir-variables() { + PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER="$(type -p g-ir-scanner)" + PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER="$(type -p g-ir-compiler)" + PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE="$(type -p g-ir-generate)" + export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER + export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER + export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE + } + + preConfigureHooks+=(override-pkg-config-gir-variables) + EOF + ''; + }) +else + stdenv.mkDerivation (builtins.removeAttrs overridenUnwrappedGir.drvAttrs [ "name" ] # so we can get a fresh name generated from the pname + // { + pname = "gobject-introspection-wrapped"; + passthru = overridenUnwrappedGir.passthru // { + unwrapped = overridenUnwrappedGir; + }; + phases = [ "fixupPhase" ]; # don't remove, it is valid to set phases here. + dontStrip = true; + depsTargetTargetPropagated = [ overridenTargetUnwrappedGir ]; + postFixup = '' + ${lib.concatMapStrings (output: '' + mkdir -p ${"$" + "${output}"} + ${lib.getExe buildPackages.xorg.lndir} ${gobject-introspection-unwrapped.${output}} ${"$" + "${output}"} + '') gobject-introspection-unwrapped.outputs} + ''; + }) |