nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix

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

Artturin b2f9cd34 9f1f990a

+84 -47
-8
pkgs/development/libraries/gobject-introspection/default.nix
··· 138 138 rm $out/lib/libregress-1.0${stdenv.targetPlatform.extensions.sharedLibrary} 139 139 ''; 140 140 141 - # add self to buildInputs to avoid needing to add gobject-introspection to buildInputs in addition to nativeBuildInputs 142 - # builds use target-pkg-config to look for gobject-introspection instead of just looking for binaries in $PATH 143 - # wrapper uses depsTargetTargetPropagated so ignore it 144 - preFixup = lib.optionalString (!lib.hasSuffix "-wrapped" finalAttrs.pname) '' 145 - mkdir -p $dev/nix-support 146 - echo "$out" > $dev/nix-support/propagated-target-target-deps 147 - ''; 148 - 149 141 setupHook = ./setup-hook.sh; 150 142 151 143 passthru = {
+83 -37
pkgs/development/libraries/gobject-introspection/wrapper.nix
··· 9 9 # to build, run 10 10 # `nix build ".#pkgsCross.aarch64-multiplatform.buildPackages.gobject-introspection"` 11 11 12 + # a comment for both depsTargetTargetPropagated's 13 + # add self to buildInputs to avoid needing to add gobject-introspection to buildInputs in addition to nativeBuildInputs 14 + # builds use target-pkg-config to look for gobject-introspection instead of just looking for binaries in $PATH 15 + 12 16 let 13 - # ensure that `.override` works when gobject-introspection == gobject-introspection-wrapped 17 + # ensure that `.override` works 14 18 args = builtins.removeAttrs _args [ "buildPackages" "targetPackages" "gobject-introspection-unwrapped" ]; 15 19 # passing this stdenv to `targetPackages...` breaks due to splicing not working in `.override`` 16 20 argsForTarget = builtins.removeAttrs args [ "stdenv" ]; 21 + 22 + overridenUnwrappedGir = gobject-introspection-unwrapped.override args; 23 + # if we have targetPackages.gobject-introspection then propagate that 24 + overridenTargetUnwrappedGir = 25 + if targetPackages ? gobject-introspection-unwrapped 26 + then targetPackages.gobject-introspection-unwrapped.override argsForTarget 27 + else overridenUnwrappedGir; 17 28 in 18 29 19 - (gobject-introspection-unwrapped.override args).overrideAttrs (previousAttrs: { 20 - pname = "gobject-introspection-wrapped"; 21 - depsTargetTargetPropagated = [ gobject-introspection-unwrapped ]; 22 - postFixup = (previousAttrs.postFixup or "") + '' 23 - mv $dev/bin/g-ir-compiler $dev/bin/.g-ir-compiler-wrapped 24 - mv $dev/bin/g-ir-scanner $dev/bin/.g-ir-scanner-wrapped 30 + # wrap both pkgsCrossX.buildPackages.gobject-introspection and {pkgs,pkgsSomethingExecutableOnBuildSystem).buildPackages.gobject-introspection 31 + if (!stdenv.hostPlatform.canExecute stdenv.targetPlatform) && stdenv.targetPlatform.emulatorAvailable buildPackages 32 + then 33 + stdenv.mkDerivation 34 + (builtins.removeAttrs overridenUnwrappedGir.drvAttrs [ "name" ] # so we can get a fresh name generated from the pname 35 + // { 36 + pname = "gobject-introspection-wrapped"; 37 + passthru = overridenUnwrappedGir.passthru // { 38 + unwrapped = overridenUnwrappedGir; 39 + }; 40 + phases = [ "fixupPhase" ]; # don't remove, it is valid to set phases here. 41 + dontStrip = true; 42 + depsTargetTargetPropagated = [ overridenTargetUnwrappedGir ]; 43 + postFixup = '' 44 + ${lib.concatMapStrings (output: '' 45 + mkdir -p ${"$" + "${output}"} 46 + ${lib.getExe buildPackages.xorg.lndir} ${gobject-introspection-unwrapped.${output}} ${"$" + "${output}"} 47 + '') gobject-introspection-unwrapped.outputs} 25 48 26 - ( 27 - export bash="${buildPackages.bash}" 28 - export emulator=${lib.escapeShellArg (stdenv.targetPlatform.emulator buildPackages)} 29 - export emulatorwrapper="$dev/bin/g-ir-scanner-qemuwrapper" 30 - export buildlddtree="${buildPackages.pax-utils}/bin/lddtree" 49 + cp $dev/bin/g-ir-compiler $dev/bin/.g-ir-compiler-wrapped 50 + cp $dev/bin/g-ir-scanner $dev/bin/.g-ir-scanner-wrapped 31 51 32 - export targetgir="${lib.getDev (targetPackages.gobject-introspection-unwrapped.override argsForTarget)}" 52 + ( 53 + rm "$dev/bin/g-ir-compiler" 54 + rm "$dev/bin/g-ir-scanner" 55 + export bash="${buildPackages.bash}" 56 + export emulator=${lib.escapeShellArg (stdenv.targetPlatform.emulator buildPackages)} 57 + export emulatorwrapper="$dev/bin/g-ir-scanner-qemuwrapper" 58 + export buildlddtree="${buildPackages.pax-utils}/bin/lddtree" 33 59 34 - substituteAll "${./wrappers/g-ir-compiler.sh}" "$dev/bin/g-ir-compiler" 35 - substituteAll "${./wrappers/g-ir-scanner.sh}" "$dev/bin/g-ir-scanner" 36 - substituteAll "${./wrappers/g-ir-scanner-lddwrapper.sh}" "$dev/bin/g-ir-scanner-lddwrapper" 37 - substituteAll "${./wrappers/g-ir-scanner-qemuwrapper.sh}" "$dev/bin/g-ir-scanner-qemuwrapper" 38 - chmod +x $dev/bin/g-ir-* 39 - ) 40 - '' 41 - # when cross-compiling and using the wrapper then when a package looks up the g_ir_X 42 - # variable with pkg-config they'll get the host version which can't be run 43 - # override the variable to use the absolute path to g_ir_X in PATH which can be run 44 - + '' 45 - cat >> $dev/nix-support/setup-hook <<-'EOF' 46 - override-pkg-config-gir-variables() { 47 - PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER="$(type -p g-ir-scanner)" 48 - PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER="$(type -p g-ir-compiler)" 49 - PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE="$(type -p g-ir-generate)" 50 - export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER 51 - export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER 52 - export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE 53 - } 60 + export targetgir="${lib.getDev overridenTargetUnwrappedGir}" 54 61 55 - preConfigureHooks+=(override-pkg-config-gir-variables) 56 - EOF 57 - ''; 58 - }) 62 + substituteAll "${./wrappers/g-ir-compiler.sh}" "$dev/bin/g-ir-compiler" 63 + substituteAll "${./wrappers/g-ir-scanner.sh}" "$dev/bin/g-ir-scanner" 64 + substituteAll "${./wrappers/g-ir-scanner-lddwrapper.sh}" "$dev/bin/g-ir-scanner-lddwrapper" 65 + substituteAll "${./wrappers/g-ir-scanner-qemuwrapper.sh}" "$dev/bin/g-ir-scanner-qemuwrapper" 66 + chmod +x $dev/bin/g-ir-compiler 67 + chmod +x $dev/bin/g-ir-scanner* 68 + ) 69 + '' 70 + # when cross-compiling and using the wrapper then when a package looks up the g_ir_X 71 + # variable with pkg-config they'll get the host version which can't be run 72 + # override the variable to use the absolute path to g_ir_X in PATH which can be run 73 + + '' 74 + cat >> $dev/nix-support/setup-hook <<-'EOF' 75 + override-pkg-config-gir-variables() { 76 + PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER="$(type -p g-ir-scanner)" 77 + PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER="$(type -p g-ir-compiler)" 78 + PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE="$(type -p g-ir-generate)" 79 + export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_SCANNER 80 + export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_COMPILER 81 + export PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_G_IR_GENERATE 82 + } 83 + 84 + preConfigureHooks+=(override-pkg-config-gir-variables) 85 + EOF 86 + ''; 87 + }) 88 + else 89 + stdenv.mkDerivation (builtins.removeAttrs overridenUnwrappedGir.drvAttrs [ "name" ] # so we can get a fresh name generated from the pname 90 + // { 91 + pname = "gobject-introspection-wrapped"; 92 + passthru = overridenUnwrappedGir.passthru // { 93 + unwrapped = overridenUnwrappedGir; 94 + }; 95 + phases = [ "fixupPhase" ]; # don't remove, it is valid to set phases here. 96 + dontStrip = true; 97 + depsTargetTargetPropagated = [ overridenTargetUnwrappedGir ]; 98 + postFixup = '' 99 + ${lib.concatMapStrings (output: '' 100 + mkdir -p ${"$" + "${output}"} 101 + ${lib.getExe buildPackages.xorg.lndir} ${gobject-introspection-unwrapped.${output}} ${"$" + "${output}"} 102 + '') gobject-introspection-unwrapped.outputs} 103 + ''; 104 + })
+1 -2
pkgs/top-level/all-packages.nix
··· 19174 19174 gns3-gui = gns3Packages.guiStable; 19175 19175 gns3-server = gns3Packages.serverStable; 19176 19176 19177 - gobject-introspection = if (!stdenv.hostPlatform.canExecute stdenv.targetPlatform) && stdenv.targetPlatform.emulatorAvailable buildPackages 19178 - then callPackage ../development/libraries/gobject-introspection/wrapper.nix { } else gobject-introspection-unwrapped; 19177 + gobject-introspection = callPackage ../development/libraries/gobject-introspection/wrapper.nix { }; 19179 19178 19180 19179 gobject-introspection-unwrapped = callPackage ../development/libraries/gobject-introspection { 19181 19180 nixStoreDir = config.nix.storeDir or builtins.storeDir;