nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at r-updates 146 lines 4.2 kB view raw
1{ 2 useNixpkgsEngine ? false, 3 callPackage, 4 fetchzip, 5 fetchFromGitHub, 6 dart, 7 dart-bin, 8 lib, 9 stdenv, 10 runCommand, 11}: 12let 13 mkCustomFlutter = args: callPackage ./flutter.nix args; 14 wrapFlutter = flutter: callPackage ./wrapper.nix { inherit flutter; }; 15 getPatches = 16 dir: 17 let 18 files = builtins.attrNames (builtins.readDir dir); 19 in 20 if (builtins.pathExists dir) then map (f: dir + ("/" + f)) files else [ ]; 21 mkFlutter = 22 { 23 version, 24 engineVersion, 25 engineSwiftShaderHash, 26 engineSwiftShaderRev, 27 engineHashes, 28 enginePatches, 29 dartVersion, 30 flutterHash, 31 dartHash, 32 patches, 33 pubspecLock, 34 artifactHashes, 35 channel, 36 }: 37 let 38 args = { 39 inherit 40 version 41 engineVersion 42 engineSwiftShaderRev 43 engineSwiftShaderHash 44 engineHashes 45 enginePatches 46 patches 47 pubspecLock 48 artifactHashes 49 useNixpkgsEngine 50 channel 51 ; 52 53 dart = 54 let 55 hash = 56 dartHash.${stdenv.hostPlatform.system} 57 or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); 58 in 59 ( 60 if lib.versionAtLeast version "3.41" then 61 (dart-bin.overrideAttrs (oldAttrs: { 62 version = dartVersion; 63 src = oldAttrs.src.overrideAttrs (_: { 64 inherit hash; 65 }); 66 })) 67 else 68 (dart-bin.overrideAttrs (_: { 69 # This overrideAttrs is used to replace the version in src.url 70 version = dartVersion; 71 __intentionallyOverridingVersion = true; 72 })).overrideAttrs 73 (oldAttrs: { 74 src = fetchzip { 75 inherit (oldAttrs.src) url; 76 inherit hash; 77 }; 78 }) 79 ); 80 src = 81 let 82 source = fetchFromGitHub { 83 owner = "flutter"; 84 repo = "flutter"; 85 tag = version; 86 hash = flutterHash; 87 }; 88 in 89 ( 90 if lib.versionAtLeast version "3.32" then 91 # # Could not determine engine revision 92 (runCommand source.name { } '' 93 cp --recursive ${source} $out 94 chmod +w $out/bin 95 mkdir $out/bin/cache 96 cp $out/bin/internal/engine.version $out/bin/cache/engine.stamp 97 touch $out/bin/cache/engine.realm 98 '') 99 else 100 source 101 ); 102 }; 103 in 104 (mkCustomFlutter args).overrideAttrs ( 105 prev: next: { 106 passthru = next.passthru // { 107 inherit wrapFlutter mkCustomFlutter mkFlutter; 108 buildFlutterApplication = callPackage ./build-support/build-flutter-application.nix { 109 flutter = wrapFlutter (mkCustomFlutter args); 110 }; 111 }; 112 } 113 ); 114 115 flutterVersions = lib.mapAttrs' ( 116 version: _: 117 let 118 versionDir = ./versions + "/${version}"; 119 data = lib.importJSON (versionDir + "/data.json"); 120 in 121 lib.nameValuePair "v${version}" ( 122 wrapFlutter ( 123 mkFlutter ( 124 { 125 patches = (getPatches ./patches) ++ (getPatches (versionDir + "/patches")); 126 enginePatches = (getPatches ./engine/patches) ++ (getPatches (versionDir + "/engine/patches")); 127 } 128 // data 129 ) 130 ) 131 ) 132 ) (builtins.readDir ./versions); 133 134 stableFlutterVersions = lib.attrsets.filterAttrs (_: v: v.channel == "stable") flutterVersions; 135 betaFlutterVersions = lib.attrsets.filterAttrs (_: v: v.channel == "beta") flutterVersions; 136in 137flutterVersions 138// { 139 inherit wrapFlutter mkFlutter; 140} 141// lib.optionalAttrs (betaFlutterVersions != { }) { 142 beta = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames betaFlutterVersions))}; 143} 144// lib.optionalAttrs (stableFlutterVersions != { }) { 145 stable = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames stableFlutterVersions))}; 146}