at master 2.6 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchurl, 5 unzip, 6 bintools, 7 versionCheckHook, 8 runCommand, 9 cctools, 10 darwin, 11 sources ? import ./sources.nix { inherit fetchurl; }, 12 version ? sources.versionUsed, 13}: 14 15assert sources != null && (builtins.isAttrs sources); 16stdenv.mkDerivation (finalAttrs: { 17 pname = "dart"; 18 inherit version; 19 20 nativeBuildInputs = [ unzip ]; 21 22 src = 23 sources."${version}-${stdenv.hostPlatform.system}" 24 or (throw "unsupported version/system: ${version}/${stdenv.hostPlatform.system}"); 25 26 installPhase = '' 27 runHook preInstall 28 29 cp -R . $out 30 '' 31 + lib.optionalString (stdenv.hostPlatform.isLinux) '' 32 find $out/bin -executable -type f -exec patchelf --set-interpreter ${bintools.dynamicLinker} {} \; 33 '' 34 + '' 35 runHook postInstall 36 ''; 37 38 dontStrip = true; 39 40 doInstallCheck = true; 41 42 nativeInstallCheckInputs = [ versionCheckHook ]; 43 44 versionCheckProgramArg = "--version"; 45 46 passthru = { 47 updateScript = ./update.sh; 48 tests = { 49 testCreate = runCommand "dart-test-create" { nativeBuildInputs = [ finalAttrs.finalPackage ]; } '' 50 PROJECTNAME="dart_test_project" 51 dart create --no-pub $PROJECTNAME 52 53 [[ -d $PROJECTNAME ]] 54 [[ -f $PROJECTNAME/bin/$PROJECTNAME.dart ]] 55 touch $out 56 ''; 57 58 testCompile = 59 runCommand "dart-test-compile" 60 { 61 nativeBuildInputs = [ 62 finalAttrs.finalPackage 63 ] 64 ++ lib.optionals stdenv.hostPlatform.isDarwin [ 65 cctools 66 darwin.sigtool 67 ]; 68 } 69 '' 70 HELLO_MESSAGE="Hello, world!" 71 echo "void main() => print('$HELLO_MESSAGE');" > hello.dart 72 dart compile exe hello.dart 73 PROGRAM_OUT=$(./hello.exe) 74 75 [[ "$PROGRAM_OUT" == "$HELLO_MESSAGE" ]] 76 touch $out 77 ''; 78 }; 79 }; 80 81 meta = { 82 homepage = "https://dart.dev"; 83 maintainers = with lib.maintainers; [ grburst ]; 84 description = "Scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps"; 85 longDescription = '' 86 Dart is a class-based, single inheritance, object-oriented language 87 with C-style syntax. It offers compilation to JavaScript, interfaces, 88 mixins, abstract classes, reified generics, and optional typing. 89 ''; 90 mainProgram = "dart"; 91 platforms = [ 92 "x86_64-linux" 93 "aarch64-linux" 94 "x86_64-darwin" 95 "aarch64-darwin" 96 ]; 97 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 98 license = lib.licenses.bsd3; 99 }; 100})