Provide a hook for per-output fixup

+45 -30
+45 -30
pkgs/stdenv/generic/setup.sh
··· 1 + : ${outputs:=out} 2 + 3 + 1 4 ###################################################################### 2 5 # Hook handling. 3 6 ··· 784 787 } 785 788 786 789 787 - # The fixup phase performs generic, package-independent, Nix-related 788 - # stuff, like running patchelf and setting the 789 - # propagated-build-inputs. It should rarely be overriden. 790 + # The fixup phase performs generic, package-independent stuff, like 791 + # stripping binaries, running patchelf and setting 792 + # propagated-build-inputs. 790 793 fixupPhase() { 791 - runHook preFixup 794 + # Make sure everything is writable so "strip" et al. work. 795 + for output in $outputs; do 796 + if [ -e "$output" ]; then chmod -R u+w "$output"; fi 797 + done 792 798 793 - # Make sure everything is writable so "strip" et al. work. 794 - if [ -e "$prefix" ]; then chmod -R u+w "$prefix"; fi 799 + runHook preFixup 795 800 796 801 # Put man/doc/info under $out/share. 797 802 forceShare=${forceShare:=man doc info} ··· 812 817 done; 813 818 fi 814 819 820 + # Apply fixup to each output. 821 + local output 822 + for output in $outputs; do 823 + prefix=${!output} runHook fixupOutput 824 + done 825 + 826 + if [ -n "$propagatedBuildInputs" ]; then 827 + mkdir -p "$out/nix-support" 828 + echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" 829 + fi 830 + 831 + if [ -n "$propagatedNativeBuildInputs" ]; then 832 + mkdir -p "$out/nix-support" 833 + echo "$propagatedNativeBuildInputs" > "$out/nix-support/propagated-native-build-inputs" 834 + fi 835 + 836 + if [ -n "$propagatedUserEnvPkgs" ]; then 837 + mkdir -p "$out/nix-support" 838 + echo "$propagatedUserEnvPkgs" > "$out/nix-support/propagated-user-env-packages" 839 + fi 840 + 841 + if [ -n "$setupHook" ]; then 842 + mkdir -p "$out/nix-support" 843 + substituteAll "$setupHook" "$out/nix-support/setup-hook" 844 + fi 845 + 846 + runHook postFixup 847 + } 848 + 849 + 850 + addHook fixupOutput _defaultFixupOutput 851 + _defaultFixupOutput() { 815 852 if [ -z "$dontGzipMan" ]; then 816 853 echo "gzipping man pages" 817 854 GLOBIGNORE=.:..:*.gz:*.bz2 818 - for f in "$out"/share/man/*/* "$out"/share/man/*/*/*; do 855 + for f in "$prefix"/share/man/*/* "$prefix"/share/man/*/*/*; do 819 856 if [ -f "$f" -a ! -L "$f" ]; then 820 857 if gzip -c -n "$f" > "$f".gz; then 821 858 rm "$f" ··· 824 861 fi 825 862 fi 826 863 done 827 - for f in "$out"/share/man/*/* "$out"/share/man/*/*/*; do 864 + for f in "$prefix"/share/man/*/* "$prefix"/share/man/*/*/*; do 828 865 if [ -L "$f" -a -f `readlink -f "$f"`.gz ]; then 829 866 ln -sf `readlink "$f"`.gz "$f".gz && rm "$f" 830 867 fi ··· 852 889 if [ -z "$dontPatchShebangs" ]; then 853 890 patchShebangs "$prefix" 854 891 fi 855 - 856 - if [ -n "$propagatedBuildInputs" ]; then 857 - mkdir -p "$out/nix-support" 858 - echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" 859 - fi 860 - 861 - if [ -n "$propagatedNativeBuildInputs" ]; then 862 - mkdir -p "$out/nix-support" 863 - echo "$propagatedNativeBuildInputs" > "$out/nix-support/propagated-native-build-inputs" 864 - fi 865 - 866 - if [ -n "$propagatedUserEnvPkgs" ]; then 867 - mkdir -p "$out/nix-support" 868 - echo "$propagatedUserEnvPkgs" > "$out/nix-support/propagated-user-env-packages" 869 - fi 870 - 871 - if [ -n "$setupHook" ]; then 872 - mkdir -p "$out/nix-support" 873 - substituteAll "$setupHook" "$out/nix-support/setup-hook" 874 - fi 875 - 876 - runHook postFixup 877 892 } 878 893 879 894