at master 3.2 kB view raw
1{ 2 stdenv, 3 lib, 4 fetchurl, 5 makeWrapper, 6 jre, 7 gnugrep, 8 coreutils, 9 writeScript, 10 common-updater-scripts, 11 git, 12 gnused, 13 nix, 14 majorVersion, 15}: 16 17let 18 repo = "git@github.com:scala/scala.git"; 19 20 versionMap = { 21 "2.12" = { 22 version = "2.12.18"; 23 hash = "sha256-naIJCET+YPrbXln39F9aU3DBdnjcn7PYMmhDxETOA5g="; 24 pname = "scala_2_12"; 25 }; 26 27 "2.13" = { 28 version = "2.13.15"; 29 hash = "sha256-jXIZ0q2IHIHPdwmp5JU05s4S0Bft4Uc+r9Hpuyh8ObE="; 30 pname = "scala_2_13"; 31 }; 32 }; 33 34in 35with versionMap.${majorVersion}; 36 37stdenv.mkDerivation rec { 38 inherit version; 39 40 name = "scala-${version}"; 41 42 src = fetchurl { 43 inherit hash; 44 url = "https://www.scala-lang.org/files/archive/scala-${version}.tgz"; 45 }; 46 47 propagatedBuildInputs = [ jre ]; 48 49 nativeBuildInputs = [ makeWrapper ]; 50 51 installPhase = '' 52 runHook preInstall 53 mkdir -p $out 54 rm bin/*.bat 55 mv * $out 56 # put docs in correct subdirectory 57 mkdir -p $out/share/doc 58 mv $out/doc $out/share/doc/${name} 59 mv $out/man $out/share/man 60 for p in $(ls $out/bin/) ; do 61 wrapProgram $out/bin/$p \ 62 --prefix PATH ":" ${coreutils}/bin \ 63 --prefix PATH ":" ${gnugrep}/bin \ 64 --prefix PATH ":" ${jre}/bin \ 65 --set JAVA_HOME ${jre} 66 done 67 runHook postInstall 68 ''; 69 70 doInstallCheck = true; 71 installCheckPhase = '' 72 $out/bin/scalac -version 2>&1 | grep '^Scala compiler version ${version}' 73 74 echo 'println("foo"*3)' | $out/bin/scala 2>/dev/null | grep "foofoofoo" 75 ''; 76 77 passthru = { 78 updateScript = writeScript "update.sh" '' 79 #!${stdenv.shell} 80 set -o errexit 81 PATH=${ 82 lib.makeBinPath [ 83 common-updater-scripts 84 coreutils 85 git 86 gnused 87 nix 88 ] 89 } 90 versionSelect='v${lib.versions.major version}.${lib.versions.minor version}.*' 91 oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')" 92 latestTag="$(git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags ${repo} "$versionSelect" | tail --lines=1 | cut --delimiter='/' --fields=3 | sed 's|^v||g')" 93 if [ "$oldVersion" != "$latestTag" ]; then 94 update-source-version ${pname} "$latestTag" --version-key=version --print-changes 95 else 96 echo "${pname} is already up-to-date" 97 fi 98 ''; 99 }; 100 101 meta = with lib; { 102 description = "General purpose programming language"; 103 longDescription = '' 104 Scala is a general purpose programming language designed to express 105 common programming patterns in a concise, elegant, and type-safe way. 106 It smoothly integrates features of object-oriented and functional 107 languages, enabling Java and other programmers to be more productive. 108 Code sizes are typically reduced by a factor of two to three when 109 compared to an equivalent Java application. 110 ''; 111 homepage = "https://www.scala-lang.org/"; 112 license = licenses.bsd3; 113 platforms = platforms.all; 114 branch = versions.majorMinor version; 115 maintainers = with maintainers; [ 116 nequissimus 117 kashw2 118 ]; 119 }; 120}