diff --git a/android/AndroidManifest.xml.nix b/android/AndroidManifest.xml.nix index cf915b7d8..1e3e1796b 100644 --- a/android/AndroidManifest.xml.nix +++ b/android/AndroidManifest.xml.nix @@ -11,33 +11,34 @@ }: let boolStr = x: if x then "true" else "false"; -in '' - - - - - - - - - ${intentFilters} - - ${services} - - - ${permissions} - +in +'' + + + + + + + + + ${intentFilters} + + ${services} + + + ${permissions} + '' diff --git a/android/Application.mk.nix b/android/Application.mk.nix index 1a3884a11..4e0411900 100644 --- a/android/Application.mk.nix +++ b/android/Application.mk.nix @@ -2,5 +2,5 @@ , abiVersions }: '' -APP_ABI := ${nixpkgs.lib.concatStringsSep " " abiVersions} + APP_ABI := ${nixpkgs.lib.concatStringsSep " " abiVersions} '' diff --git a/android/build-gradle-app.nix b/android/build-gradle-app.nix index 72115c15f..8ae3a1fcb 100644 --- a/android/build-gradle-app.nix +++ b/android/build-gradle-app.nix @@ -1,13 +1,35 @@ -{ stdenv, lib, androidenv, jdk, gnumake, gawk, file -, which, gradle, fetchurl, buildEnv, runCommand }: +{ stdenv +, lib +, androidenv +, jdk +, gnumake +, gawk +, file +, which +, gradle +, fetchurl +, buildEnv +, runCommand +}: -args@{ name, src, platformVersions ? [ "8" ] - , buildToolsVersions ? [ "30.0.2" ] - , useGoogleAPIs ? false, useGooglePlayServices ? false - , release ? false, keyStore ? null, keyAlias ? null - , keyStorePassword ? null, keyAliasPassword ? null - , useNDK ? false, buildInputs ? [], mavenDeps, gradleTask - , buildDirectory ? "./.", acceptAndroidSdkLicenses ? false }: +args@{ name +, src +, platformVersions ? [ "8" ] +, buildToolsVersions ? [ "30.0.2" ] +, useGoogleAPIs ? false +, useGooglePlayServices ? false +, release ? false +, keyStore ? null +, keyAlias ? null +, keyStorePassword ? null +, keyAliasPassword ? null +, useNDK ? false +, buildInputs ? [ ] +, mavenDeps +, gradleTask +, buildDirectory ? "./." +, acceptAndroidSdkLicenses ? false +}: assert release -> keyStore != null; assert release -> keyAlias != null; @@ -18,34 +40,45 @@ assert acceptAndroidSdkLicenses; let inherit (lib) optionalString optional; - m2install = { repo, version, artifactId, groupId - , jarSha256, pomSha256, aarSha256, suffix ? "" - , customJarUrl ? null, customJarSuffix ? null }: - let m2Name = "${artifactId}-${version}"; - m2Path = "${builtins.replaceStrings ["."] ["/"] groupId}/${artifactId}/${version}"; - jarFile = fetchurl { - url = if customJarUrl != null then customJarUrl else "${repo}${m2Path}/${m2Name}${suffix}.jar"; - sha256 = jarSha256; - }; - in runCommand m2Name {} ('' - installPath="$out"/m2/'${m2Path}' - mkdir -p "$installPath" - '' + optionalString (jarSha256 != null) '' - install -D '${jarFile}' "$installPath"/'${m2Name}${suffix}.jar' - ${optionalString (customJarSuffix != null) '' - install -D '${jarFile}' "$installPath"/'${m2Name}${suffix}${customJarSuffix}.jar' - ''} - '' + optionalString (pomSha256 != null) '' - install -D ${fetchurl { - url = "${repo}${m2Path}/${m2Name}${suffix}.pom"; - sha256 = pomSha256; - }} "$installPath/${m2Name}${suffix}.pom" - '' + optionalString (aarSha256 != null) '' - install -D ${fetchurl { - url = "${repo}${m2Path}/${m2Name}${suffix}.aar"; - sha256 = aarSha256; - }} "$installPath/${m2Name}${suffix}.aar" - ''); + m2install = + { repo + , version + , artifactId + , groupId + , jarSha256 + , pomSha256 + , aarSha256 + , suffix ? "" + , customJarUrl ? null + , customJarSuffix ? null + }: + let + m2Name = "${artifactId}-${version}"; + m2Path = "${builtins.replaceStrings ["."] ["/"] groupId}/${artifactId}/${version}"; + jarFile = fetchurl { + url = if customJarUrl != null then customJarUrl else "${repo}${m2Path}/${m2Name}${suffix}.jar"; + sha256 = jarSha256; + }; + in + runCommand m2Name { } ('' + installPath="$out"/m2/'${m2Path}' + mkdir -p "$installPath" + '' + optionalString (jarSha256 != null) '' + install -D '${jarFile}' "$installPath"/'${m2Name}${suffix}.jar' + ${optionalString (customJarSuffix != null) '' + install -D '${jarFile}' "$installPath"/'${m2Name}${suffix}${customJarSuffix}.jar' + ''} + '' + optionalString (pomSha256 != null) '' + install -D ${fetchurl { + url = "${repo}${m2Path}/${m2Name}${suffix}.pom"; + sha256 = pomSha256; + }} "$installPath/${m2Name}${suffix}.pom" + '' + optionalString (aarSha256 != null) '' + install -D ${fetchurl { + url = "${repo}${m2Path}/${m2Name}${suffix}.aar"; + sha256 = aarSha256; + }} "$installPath/${m2Name}${suffix}.aar" + ''); androidsdkComposition = androidenv.composeAndroidPackages { inherit platformVersions useGoogleAPIs buildToolsVersions; includeNDK = true; @@ -55,16 +88,17 @@ let in stdenv.mkDerivation ({ inherit src; - name = builtins.replaceStrings [" "] [""] args.name; + name = builtins.replaceStrings [ " " ] [ "" ] args.name; ANDROID_HOME = "${androidsdkComposition.androidsdk}/libexec"; ANDROID_NDK_HOME = "${androidsdkComposition.ndk-bundle}/libexec/android-sdk/ndk-bundle"; buildInputs = [ jdk gradle ] ++ buildInputs ++ lib.optional useNDK [ androidsdkComposition.ndk-bundle gnumake gawk file which ]; - DEPENDENCIES = buildEnv { name = "${name}-maven-deps"; - paths = map m2install mavenDeps; - }; + DEPENDENCIES = buildEnv { + name = "${name}-maven-deps"; + paths = map m2install mavenDeps; + }; buildPhase = '' ${optionalString release '' @@ -110,4 +144,4 @@ stdenv.mkDerivation ({ meta = { license = lib.licenses.unfree; }; -} // builtins.removeAttrs args ["name" "mavenDeps"]) +} // builtins.removeAttrs args [ "name" "mavenDeps" ]) diff --git a/android/build.gradle.nix b/android/build.gradle.nix index b26ed9ab4..5dc31c959 100644 --- a/android/build.gradle.nix +++ b/android/build.gradle.nix @@ -7,138 +7,138 @@ , universalApk }: '' -buildscript { - repositories { - mavenLocal { - metadataSources { - mavenPom() - artifact() + buildscript { + repositories { + mavenLocal { + metadataSources { + mavenPom() + artifact() + } } - } - } - dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' - ${googleServicesClasspath} - } -} + } + dependencies { + classpath 'com.android.tools.build:gradle:4.2.2' + ${googleServicesClasspath} + } + } -task proguard(type: proguard.gradle.ProGuardTask) { - configuration 'proguard.txt' + task proguard(type: proguard.gradle.ProGuardTask) { + configuration 'proguard.txt' - // injars 'build/libs/proguard-gradle-example.jar' - // outjars 'build/libs/proguard-gradle-example.out.jar' + // injars 'build/libs/proguard-gradle-example.jar' + // outjars 'build/libs/proguard-gradle-example.out.jar' -} + } -allprojects { - repositories { - mavenLocal { - metadataSources { - mavenPom() - artifact() + allprojects { + repositories { + mavenLocal { + metadataSources { + mavenPom() + artifact() + } } - } - } -} + } + } -apply plugin: 'com.android.application' + apply plugin: 'com.android.application' -android { - compileSdkVersion 30 - buildToolsVersion '30.0.2' + android { + compileSdkVersion 30 + buildToolsVersion '30.0.2' - lintOptions { - checkReleaseBuilds false - abortOnError false - } + lintOptions { + checkReleaseBuilds false + abortOnError false + } - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets']; - jniLibs.srcDir 'lib' + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = ['src'] + res.srcDirs = ['res'] + assets.srcDirs = ['assets']; + jniLibs.srcDir 'lib' + } + } + defaultConfig { + applicationId "${applicationId}" + minSdkVersion 21 + targetSdkVersion 30 + versionCode ${version.code} + versionName "${version.name}" + multiDexEnabled false } - } - defaultConfig { - applicationId "${applicationId}" - minSdkVersion 21 - targetSdkVersion 30 - versionCode ${version.code} - versionName "${version.name}" - multiDexEnabled false - } - ${if releaseKey == null then "" else '' - signingConfigs { - release { - storeFile file("${releaseKey.storeFile}") - storePassword "${releaseKey.storePassword}" - keyAlias "${releaseKey.keyAlias}" - keyPassword "${releaseKey.keyPassword}" + ${if releaseKey == null then "" else '' + signingConfigs { + release { + storeFile file("${releaseKey.storeFile}") + storePassword "${releaseKey.storePassword}" + keyAlias "${releaseKey.keyAlias}" + keyPassword "${releaseKey.keyPassword}" + } } - } - '' - } + '' + } - buildTypes { - release { - minifyEnabled false - useProguard false - zipAlignEnabled true - ${if releaseKey == null then "" else '' - signingConfig signingConfigs.release - ''} - } - debug { - minifyEnabled false - useProguard false - debuggable true - } - } + buildTypes { + release { + minifyEnabled false + useProguard false + zipAlignEnabled true + ${if releaseKey == null then "" else '' + signingConfig signingConfigs.release + ''} + } + debug { + minifyEnabled false + useProguard false + debuggable true + } + } - packagingOptions { - } + packagingOptions { + } - // see https://developer.android.com/studio/build/configure-apk-splits.html - // for information about this and the applicationVariants stuff below. - // See https://developer.android.com/google/play/publishing/multiple-apks.html#SingleAPK - // for reasons you might not want to do this. - ${if universalApk then "" else '' - splits { - abi { - enable true - reset() - include "armeabi-v7a", "arm64-v8a" - universalApk false - } - } - '' - } -} + // see https://developer.android.com/studio/build/configure-apk-splits.html + // for information about this and the applicationVariants stuff below. + // See https://developer.android.com/google/play/publishing/multiple-apks.html#SingleAPK + // for reasons you might not want to do this. + ${if universalApk then "" else '' + splits { + abi { + enable true + reset() + include "armeabi-v7a", "arm64-v8a" + universalApk false + } + } + '' + } + } -ext.abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2] // This order is important! + ext.abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2] // This order is important! -import com.android.build.OutputFile + import com.android.build.OutputFile -android.applicationVariants.all { variant -> - variant.outputs.each { output -> - def baseAbiVersionCode = - project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) + android.applicationVariants.all { variant -> + variant.outputs.each { output -> + def baseAbiVersionCode = + project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) - if (baseAbiVersionCode != null) { // this will be null if splitting was disabled - output.versionCodeOverride = baseAbiVersionCode * 1000 + variant.versionCode + if (baseAbiVersionCode != null) { // this will be null if splitting was disabled + output.versionCodeOverride = baseAbiVersionCode * 1000 + variant.versionCode + } } } -} -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.google.firebase:firebase-iid:20.2.3' - implementation 'com.google.firebase:firebase-messaging:20.2.3' - ${additionalDependencies} -} + dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.google.firebase:firebase-iid:20.2.3' + implementation 'com.google.firebase:firebase-messaging:20.2.3' + ${additionalDependencies} + } -${googleServicesPlugin} + ${googleServicesPlugin} '' diff --git a/android/buildIcons.nix b/android/buildIcons.nix index 9f6f7b856..1703edbaa 100644 --- a/android/buildIcons.nix +++ b/android/buildIcons.nix @@ -1,6 +1,7 @@ { runCommand, imagemagick }: { src }: -runCommand "android-icons" { +runCommand "android-icons" +{ inherit src; buildCommand = '' mkdir "$out" diff --git a/android/default.nix b/android/default.nix index f09b6cfa8..2b5b36cfe 100644 --- a/android/default.nix +++ b/android/default.nix @@ -1,5 +1,4 @@ -env@{ - nixpkgs +env@{ nixpkgs , nixpkgsCross , ghcAndroidAarch64 , ghcAndroidAarch32 @@ -10,8 +9,8 @@ with nixpkgs.lib.strings; let impl = import ./impl.nix env; in rec { # URI information that becomes AndroidManifest.xml content for additional intent filters. - intentFilterXml = { - scheme + intentFilterXml = + { scheme # URL scheme # E.g.: "https" @@ -24,19 +23,19 @@ in rec { , pathPrefix ? "" }: impl.intentFilterXml { inherit scheme - host - port - pathPrefix; + host + port + pathPrefix; }; defaultResources = ./res; defaultAssets = ./assets; defaultIconPath = "@drawable/ic_launcher"; - buildIcons = nixpkgs.callPackage ./buildIcons.nix {}; + buildIcons = nixpkgs.callPackage ./buildIcons.nix { }; - buildApp = { - package + buildApp = + { package # A function from haskellPackages to the package we'd like to turn into # an APK # E.g.: (p: p.hello) @@ -98,7 +97,7 @@ in rec { , additionalDependencies ? "" - , runtimeSharedLibs ? (_: []) + , runtimeSharedLibs ? (_: [ ]) # Allows to copy native .so libraries into APK. Example: # runtimeSharedLibs = nixpkgs: [ # "${nixpkgs.libsodium}/lib/libsodium.so" @@ -109,7 +108,7 @@ in rec { # You need to patch soname in make files of libraries to link against # unversioned libraries. - , javaSources ? [] + , javaSources ? [ ] # A list of additional Java source directories to include in the APK build , universalApk ? true @@ -119,32 +118,32 @@ in rec { , usesCleartextTraffic ? false - # Can be "assembleRelease", "assembleDebug", or "bundleRelease" + # Can be "assembleRelease", "assembleDebug", or "bundleRelease" , gradleTask ? (if isRelease then "assembleRelease" else "assembleDebug") }: - assert builtins.match "^([A-Za-z][A-Za-z0-9_]*\\.)*[A-Za-z][A-Za-z0-9_]*$" applicationId != null; - nixpkgs.lib.makeOverridable impl.buildApp { - inherit package - acceptAndroidSdkLicenses - executableName - applicationId - displayName - version - releaseKey - resources - assets - iconPath - activityAttributes - permissions - services - intentFilters - googleServicesJson - additionalDependencies - runtimeSharedLibs - javaSources - universalApk - mavenDeps - usesCleartextTraffic - gradleTask; - }; + assert builtins.match "^([A-Za-z][A-Za-z0-9_]*\\.)*[A-Za-z][A-Za-z0-9_]*$" applicationId != null; + nixpkgs.lib.makeOverridable impl.buildApp { + inherit package + acceptAndroidSdkLicenses + executableName + applicationId + displayName + version + releaseKey + resources + assets + iconPath + activityAttributes + permissions + services + intentFilters + googleServicesJson + additionalDependencies + runtimeSharedLibs + javaSources + universalApk + mavenDeps + usesCleartextTraffic + gradleTask; + }; } diff --git a/android/defaults/deps.nix b/android/defaults/deps.nix index 8e9e49d3c..1453a8d45 100644 --- a/android/defaults/deps.nix +++ b/android/defaults/deps.nix @@ -1,1786 +1,2232 @@ [ - { artifactId = "annotation"; + { + artifactId = "annotation"; groupId = "androidx.annotation"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = "0baae9755f7caf52aa80cd04324b91ba93af55d4d1d17dcc9a7b53d99ef7c016"; pomSha256 = "a179c12db43d9c0300c9db63f4811db496504be5401b951d422b78490ad1e5b4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "annotation"; + { + artifactId = "annotation"; groupId = "androidx.annotation"; version = "1.1.0"; repo = "https://maven.google.com/"; jarSha256 = "d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692"; pomSha256 = "2e9372ba7780ef44952adbf86b66e1f08682c1e5277c926185f6564a13799efe"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "core-common"; + { + artifactId = "core-common"; groupId = "androidx.arch.core"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = "4b80b337779b526e64b0ee0ca9e0df43b808344d145f8e9b1c42a134dac57ad8"; pomSha256 = "4b6f1d459ddd146b4e85ed6d46e86eb8c2639c5de47904e6db4d698721334220"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "core-runtime"; + { + artifactId = "core-runtime"; groupId = "androidx.arch.core"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "e2007d41ddc69ee2a77fed7b5c1dc5a41e01122926ba59696aab7b18d2264411"; - aarSha256 = "87e65fc767c712b437649c7cee2431ebb4bed6daef82e501d4125b3ed3f65f8e"; } + aarSha256 = "87e65fc767c712b437649c7cee2431ebb4bed6daef82e501d4125b3ed3f65f8e"; + } - { artifactId = "asynclayoutinflater"; + { + artifactId = "asynclayoutinflater"; groupId = "androidx.asynclayoutinflater"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "48167eeedc8da79c4d29deaf0d0cd9b5d8fedcae01f1a6efb3f28f08e8982f71"; - aarSha256 = "f7eab60c57addd94bb06275832fe7600611beaaae1a1ec597c231956faf96c8b"; } + aarSha256 = "f7eab60c57addd94bb06275832fe7600611beaaae1a1ec597c231956faf96c8b"; + } - { artifactId = "collection"; + { + artifactId = "collection"; groupId = "androidx.collection"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = "9c8d117b5c2bc120a1cdfeb857e05b495b16c36013570372a708f7827e3ac9f9"; pomSha256 = "a7913a5275ad68e555d2612ebe8c14c367b153e14ca48a1872a64899020e54ef"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "coordinatorlayout"; + { + artifactId = "coordinatorlayout"; groupId = "androidx.coordinatorlayout"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "3e44e4de2fee6debc33d23626ee906e54e1bb3c1749b19e02bb667b614ab9392"; - aarSha256 = "e508c695489493374d942bf7b4ee02abf7571d25aac4c622e57d6cd5cd29eb73"; } + aarSha256 = "e508c695489493374d942bf7b4ee02abf7571d25aac4c622e57d6cd5cd29eb73"; + } - { artifactId = "core"; + { + artifactId = "core"; groupId = "androidx.core"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "384d529ad668ada4808de29b29a6348f0007c2841ad79cae9a5a089bd68810f5"; - aarSha256 = "d7672358fc0d46de678968bcddfd3bdfe1618574299a753477b16116cfec74f5"; } + aarSha256 = "d7672358fc0d46de678968bcddfd3bdfe1618574299a753477b16116cfec74f5"; + } - { artifactId = "cursoradapter"; + { + artifactId = "cursoradapter"; groupId = "androidx.cursoradapter"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "62d95c89850af21030b19f14d5f7ecd6d8bcc9a3014c59002ec99624caac8100"; - aarSha256 = "a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564"; } + aarSha256 = "a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564"; + } - { artifactId = "customview"; + { + artifactId = "customview"; groupId = "androidx.customview"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "ce9e47b87184f5bd5e139e9becd5b26476d42d78c31bf2fdedc37acb41b9ad49"; - aarSha256 = "20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2"; } + aarSha256 = "20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2"; + } - { artifactId = "databinding-common"; + { + artifactId = "databinding-common"; groupId = "androidx.databinding"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "b1aaf40152c4c610280a35ae439a31d86aa7fbbb5d3379036ecf012b290a19b7"; pomSha256 = "e67bc6c3d337678de3ddaf28c61a495ecb12eabd66678a0ebeb66f7e84f948f4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "databinding-compiler-common"; + { + artifactId = "databinding-compiler-common"; groupId = "androidx.databinding"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "ec212fbdb77e41386b5b423b12b69f4d839f954c79d449bc57c648e603a1b755"; pomSha256 = "6f2398a2db43ade9e44454c9898fdaae0df4746db1b53ca7c854af2a535d592d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "documentfile"; + { + artifactId = "documentfile"; groupId = "androidx.documentfile"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "013288a9317a552706ce625fb24493e8223288529223ec578cf855a5ae9c16e5"; - aarSha256 = "865a061ef2fad16522f8433536b8d47208c46ff7c7745197dfa1eeb481869487"; } + aarSha256 = "865a061ef2fad16522f8433536b8d47208c46ff7c7745197dfa1eeb481869487"; + } - { artifactId = "drawerlayout"; + { + artifactId = "drawerlayout"; groupId = "androidx.drawerlayout"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "da6733425a83f5ce850878fa7201082345fed7c668dd58550fdd19c0396c6fa4"; - aarSha256 = "9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1"; } + aarSha256 = "9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1"; + } - { artifactId = "fragment"; + { + artifactId = "fragment"; groupId = "androidx.fragment"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "e329d673361e94d2e8f4d4d14e1f0586368bd43fb19efd5766ce7498bcccd162"; - aarSha256 = "65dd32d71fe65a32e77989a6cfb1ad09307038927f82a740c7611162d0b518f8"; } + aarSha256 = "65dd32d71fe65a32e77989a6cfb1ad09307038927f82a740c7611162d0b518f8"; + } - { artifactId = "interpolator"; + { + artifactId = "interpolator"; groupId = "androidx.interpolator"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "0ddc07cc39699f48ecd9ec894b5830c0f09e22e82959294edf37217224c88b7b"; - aarSha256 = "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a"; } + aarSha256 = "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a"; + } - { artifactId = "legacy-support-core-ui"; + { + artifactId = "legacy-support-core-ui"; groupId = "androidx.legacy"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "2baaf7f17551765524bd1e4d2f954a2a0178a112039cf549ba8b7d4b41e66931"; - aarSha256 = "0d1260c6e7e6a337f875df71b516931e703f716e90889817cd3a20fa5ac3d947"; } + aarSha256 = "0d1260c6e7e6a337f875df71b516931e703f716e90889817cd3a20fa5ac3d947"; + } - { artifactId = "legacy-support-core-utils"; + { + artifactId = "legacy-support-core-utils"; groupId = "androidx.legacy"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "8fd093008b3ee7c06e52c78da2af980a7b47b69b967fa91dad7af466f7a00a38"; - aarSha256 = "a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7"; } + aarSha256 = "a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7"; + } - { artifactId = "lifecycle-common"; + { + artifactId = "lifecycle-common"; groupId = "androidx.lifecycle"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = "7bad7a188804adea6fa1f35d5ef99b705f20bd93ecadde484760ff86b535fefc"; pomSha256 = "04d525073469214d0c99e81aaa875dd548ba32b82945abd8326bc50229df700d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "lifecycle-livedata"; + { + artifactId = "lifecycle-livedata"; groupId = "androidx.lifecycle"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "a84842ffc0f14e518db75c05cc112680a8a4a164fa78395be32d88304a439423"; - aarSha256 = "c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39"; } + aarSha256 = "c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39"; + } - { artifactId = "lifecycle-livedata-core"; + { + artifactId = "lifecycle-livedata-core"; groupId = "androidx.lifecycle"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "650fda1a232f5669742140571570ccad2f47a71225ab0f02179bc8d144b982c8"; - aarSha256 = "fde334ec7e22744c0f5bfe7caf1a84c9d717327044400577bdf9bd921ec4f7bc"; } + aarSha256 = "fde334ec7e22744c0f5bfe7caf1a84c9d717327044400577bdf9bd921ec4f7bc"; + } - { artifactId = "lifecycle-runtime"; + { + artifactId = "lifecycle-runtime"; groupId = "androidx.lifecycle"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "a92a46fa7aec8ac326a5d578734a2d5b63206976996b9e06cae171b35b0ab6de"; - aarSha256 = "e4afc9e636183f6f3e0edf1cf46121a492ffd2c673075bb07f55c7a99dd43cfb"; } + aarSha256 = "e4afc9e636183f6f3e0edf1cf46121a492ffd2c673075bb07f55c7a99dd43cfb"; + } - { artifactId = "lifecycle-viewmodel"; + { + artifactId = "lifecycle-viewmodel"; groupId = "androidx.lifecycle"; version = "2.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "60b758fd1c664089f82d1c018ed4ff7955c14a2b1620af7aa106591f733e0827"; - aarSha256 = "d6460aea1b6bad80ab14cf88297e9e43bfde8d87c3e5c28f2c508233ffbcc062"; } + aarSha256 = "d6460aea1b6bad80ab14cf88297e9e43bfde8d87c3e5c28f2c508233ffbcc062"; + } - { artifactId = "loader"; + { + artifactId = "loader"; groupId = "androidx.loader"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "c978d550808b47434aa49a63164110a50b55b0bcc6160a93a2e37d5110df8c5e"; - aarSha256 = "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025"; } + aarSha256 = "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025"; + } - { artifactId = "localbroadcastmanager"; + { + artifactId = "localbroadcastmanager"; groupId = "androidx.localbroadcastmanager"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "a000041f5a1f79283c5175e1bb60cf3683780f401c6a9d34fbe9751253fa6ff9"; - aarSha256 = "e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8"; } + aarSha256 = "e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8"; + } - { artifactId = "print"; + { + artifactId = "print"; groupId = "androidx.print"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "62482c0594841bee24bb996abb6cb7b320a6a3b77dca9f0a0ba4fe3be5530aa7"; - aarSha256 = "1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd"; } + aarSha256 = "1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd"; + } - { artifactId = "slidingpanelayout"; + { + artifactId = "slidingpanelayout"; groupId = "androidx.slidingpanelayout"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "40e90f96838c2a8156ab51b181400767049f387cec8c695e412d3d9205b0745b"; - aarSha256 = "76bffb7cefbf780794d8817002dad1562f3e27c0a9f746d62401c8edb30aeede"; } + aarSha256 = "76bffb7cefbf780794d8817002dad1562f3e27c0a9f746d62401c8edb30aeede"; + } - { artifactId = "swiperefreshlayout"; + { + artifactId = "swiperefreshlayout"; groupId = "androidx.swiperefreshlayout"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "8fe4b5db332af33cde899ba571ee866ad977be38114d3ab600edaca454ea8299"; - aarSha256 = "9761b3a809c9b093fd06a3c4bbc645756dec0e95b5c9da419bc9f2a3f3026e8d"; } + aarSha256 = "9761b3a809c9b093fd06a3c4bbc645756dec0e95b5c9da419bc9f2a3f3026e8d"; + } - { artifactId = "versionedparcelable"; + { + artifactId = "versionedparcelable"; groupId = "androidx.versionedparcelable"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "47ee7c5543239a651f8fb81310cadeeaab8e38a2d844d7bb92dd086e4ffbb320"; - aarSha256 = "f6438a93ed8016ccddca0e140a70be0b0110e0424edaa1472f84f98fed2e1ce3"; } + aarSha256 = "f6438a93ed8016ccddca0e140a70be0b0110e0424edaa1472f84f98fed2e1ce3"; + } - { artifactId = "viewpager"; + { + artifactId = "viewpager"; groupId = "androidx.viewpager"; version = "1.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "1f72f836339d03c6eb013f65075e76ca87075a577578eb4f95f74a3a5d253128"; - aarSha256 = "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682"; } + aarSha256 = "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682"; + } - { artifactId = "signflinger"; + { + artifactId = "signflinger"; groupId = "com.android"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "4d7aafd9666707b483b1ad2c466824287cf2e379dda1d204dd3b7e453ffcf760"; pomSha256 = "7032f04664cefb8a2873f3ee83a0815eeab696d7474c15ead1d946ec722b47c6"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "zipflinger"; + { + artifactId = "zipflinger"; groupId = "com.android"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "8e4677086c9a8f4a67374a4edc31db7e481f0d9b85907263c51ca72452c23a93"; pomSha256 = "0da5d6433c442a72c6a7792fd77aa2b47b060ee645ba7fa9371f404856233111"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "baseLibrary"; + { + artifactId = "baseLibrary"; groupId = "com.android.databinding"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "3bf72e0a904a638da231ead13368d45f3f59864505619af9cf7a080c757243b9"; pomSha256 = "4d77b2e9da4e4f21463888fcfcc9103e3924fc1770ea8ff0278c7b986fc71ca0"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "annotations"; + { + artifactId = "annotations"; groupId = "com.android.tools"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "9375fb2df5c0cf1b46fef9e65b3a27ac88925ccf90054b19ae0ca0adc7036fe1"; pomSha256 = "6079a742cf454932d291d81c0640dd9756577ec8d1e027acafe31e3de7fe1210"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "common"; + { + artifactId = "common"; groupId = "com.android.tools"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "a76f4e10cad39bed317be031fee915d280aa8bc11616c58ab94e051b1e38769d"; pomSha256 = "386c0e9f163e8d6a54470399ca1a8f81870ed0c91d528fe6169c8bb110acd288"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "dvlib"; + { + artifactId = "dvlib"; groupId = "com.android.tools"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "9931c6b57460b5f8cc2613ca5ff8596aa089a67655ace13d173f90538ecb4301"; pomSha256 = "fde5930331444ba6b68e1a03d0177f3055370ecb2e157899e7faa8bbaa93d19d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "repository"; + { + artifactId = "repository"; groupId = "com.android.tools"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "ac5f9b19dc5d9d08e80b57da76059f5760ca76c221e40ffd4bf43d7b13991674"; pomSha256 = "ee48662c9180a00761e88f5b987f49d2ae93bc19dd485875644b0d1ab91b402d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "sdk-common"; + { + artifactId = "sdk-common"; groupId = "com.android.tools"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "b147acc13850808d61fc391ccfeeebdf90841b461a7042acb2d92e466da8e674"; pomSha256 = "80f999d14b7113727de314823943b7c49aa4bd205e72b0fdae326a5492315fda"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "sdklib"; + { + artifactId = "sdklib"; groupId = "com.android.tools"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "fae0bafbe8b4f546cf64986a22b7d8ed108d45519366ff22f0170a9cf3ea7f34"; pomSha256 = "38f382d03a407e421ef86e52deecc7ee8df02892d293e9fce647549c5373f994"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "crash"; + { + artifactId = "crash"; groupId = "com.android.tools.analytics-library"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "2965780e340dc46f837681f8d4e915b8d93ac2a4560b9df23cbfade814091eb8"; pomSha256 = "1f2ee5f417ec7e105921e5fda995af4cae5160b892ba8383dc0da70d906185a7"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protos"; + { + artifactId = "protos"; groupId = "com.android.tools.analytics-library"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "02482564443c294dfe87c5f2b25387f724a698a09ed58e0cf0127400caa35a19"; pomSha256 = "de8e37c4b1e8a90b9f681f219e66eb5c6b15c2a66db100a02d7402c39be56ff1"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "shared"; + { + artifactId = "shared"; groupId = "com.android.tools.analytics-library"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "0efe017ca17ee775c5af386475a09799a1282faa04821d54810c1a34f6348d9c"; pomSha256 = "ed68d316c91d5067b1031b2004e073732418162877811ae72bbc1d83158eddca"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "tracker"; + { + artifactId = "tracker"; groupId = "com.android.tools.analytics-library"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "62489d84192dc06219664945c43201654ff85c3b715f46550751512a880d0e39"; pomSha256 = "f0e8fb7900e40b7fcf2f77ddab05d043056c1cadc9775d20a3fcc315729745fc"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "aapt2-proto"; + { + artifactId = "aapt2-proto"; groupId = "com.android.tools.build"; version = "4.1.0-alpha01-6193524"; repo = "https://maven.google.com/"; jarSha256 = "17e75523e1e92dd4f222c7368ee41df9e964a508232f591e265d0c499baf9dca"; pomSha256 = "140a406bcc52be2c99937c51f629076134c74fb060aeedb9f54e91cb7091d786"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "aapt2-proto"; + { + artifactId = "aapt2-proto"; groupId = "com.android.tools.build"; version = "4.2.2-7147631"; repo = "https://maven.google.com/"; jarSha256 = "9d645a960fa55b348f9b0c35c8b9a20e2859e723bde68d08bcbfa86823f46061"; pomSha256 = "e9d1a2736ba485b958c096636d9a1ba75c5d49b68d8c9cfc19f11be6121e897f"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "aaptcompiler"; + { + artifactId = "aaptcompiler"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "6f26ecf4535a094ae1fec9804f68bf8b2da43421dd16e3c1dade0b1d323051e1"; pomSha256 = "55a155b1d3d9a3d031f7b3e6953dbc70c869fba4940409f0383c7fbe6bd41946"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apksig"; + { + artifactId = "apksig"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "632690bf641b429dcb31650e6b2f6a2e87c4ac8afd45a6ba3cbc99fb1612178f"; pomSha256 = "3f4cd9d77e9c338db6293bfdc5eed183d144b5a9e5671b853ddb327f600e25ac"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apkzlib"; + { + artifactId = "apkzlib"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "3b5167c1265e97f65201c4d2be6a6f72165a3aa2fe9e0594a59b67af9e9e97b9"; pomSha256 = "5d7fec8433bc2c9cd7e5653d714004be22585215f88a8e20b2338edc82b38360"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "builder"; + { + artifactId = "builder"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "40fedd0d16db8f34ddb4eaf812d966b90ef1764f65cf119030442823bcf995cd"; pomSha256 = "f9b8a5310e9238bb1c97647ddce69e1ecbce8abea05370b9699ea4ea8b0b6037"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "builder-model"; + { + artifactId = "builder-model"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "41868de0cb88ae70b828eee4191c13e0233f433abb1becdf6a2bd391bd446bc0"; pomSha256 = "e81957f5e09b4b2ae46a41ce64ccd09c7bce485b2a6e6dcb56c746ac24a4c932"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "builder-test-api"; + { + artifactId = "builder-test-api"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "2f305c6d3a7b637d736b821bad372dcabd959e979f2065a9f65bac1e7b4d1875"; pomSha256 = "9f3fec7226f49f24d9279c7a19b9c946284f9a623fe34bad61436f97371e2be6"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "bundletool"; + { + artifactId = "bundletool"; groupId = "com.android.tools.build"; version = "1.1.0"; repo = "https://maven.google.com/"; jarSha256 = "4cb02a7963fa7c82c302fdcde679b336e669e928f5bbad00457d9c562ef1cd30"; pomSha256 = "efe2d08fb32cd70a2ce007591bd0ceecbb2091a9b9cb4e10bc597b7bd6e3e654"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gradle"; + { + artifactId = "gradle"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "6877441af1ad27acb2f68613dae556d9620ef7a5705d73b1412a49755038b3e6"; pomSha256 = "8aabe97aec79e657f216989c7d08eaecbb72d068372772ab0f1cf1911e2a8bde"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gradle-api"; + { + artifactId = "gradle-api"; groupId = "com.android.tools.build"; version = "4.2.2"; repo = "https://maven.google.com/"; jarSha256 = "dd4ef35bbbfb8fc2d20e3311c76b516bc1672e82b61cb3a59fc877da0f9b4f61"; pomSha256 = "bfbd61b4b583eb54972fd8c93844b85b4d81b6084abbbfd71b636396a5c8127b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "manifest-merger"; + { + artifactId = "manifest-merger"; groupId = "com.android.tools.build"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "971974756f32d9e94c857d92772b1499b0b0f5d9c70cb8ebbd20d9bbf804a923"; pomSha256 = "1f2622abdb3f327a6b4ad87fcef70ad57ffc636bd0b77237103c90b12629c8ad"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "transform-api"; + { + artifactId = "transform-api"; groupId = "com.android.tools.build"; version = "2.0.0-deprecated-use-gradle-api"; repo = "https://jcenter.bintray.com/"; jarSha256 = "e8b4151ae1679f1abe7a14ee371ac9b3c651ae7b63290d1f586bdd0f78face9a"; pomSha256 = "d49d179f707d3f3a00b2a7d36136b54aa8d44fa22770703cd82fe52fb39e22eb"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jetifier-core"; + { + artifactId = "jetifier-core"; groupId = "com.android.tools.build.jetifier"; version = "1.0.0-beta09"; repo = "https://maven.google.com/"; jarSha256 = "9bb3a91e871e784446e4dd1e1d1dea5c322e271cba8278c1dec3669a66aee858"; pomSha256 = "4688b442fb347820a85a8e0f019978f9eaa762fbbbadb774ab945119d7304da5"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jetifier-processor"; + { + artifactId = "jetifier-processor"; groupId = "com.android.tools.build.jetifier"; version = "1.0.0-beta09"; repo = "https://maven.google.com/"; jarSha256 = "1838f9ee70120e64f45612ca071972ac83ddc118185abffbce3932a4710325eb"; pomSha256 = "388408f994059031929d14723ec01411f85c6834608465763d4c79afe220a738"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "ddmlib"; + { + artifactId = "ddmlib"; groupId = "com.android.tools.ddms"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "9ab0f9b58737c316af454184705854c75936ca3531f21acc29bd68a3343334d1"; pomSha256 = "cd42fa67187b9b395bdee26c3a829279a1afe74ab8332ac36b10520edf8ecd6f"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "layoutlib-api"; + { + artifactId = "layoutlib-api"; groupId = "com.android.tools.layoutlib"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "f0901f2295d814e82ad95850ea2103dd89d8489e01727fafa55ccccc0dccd163"; pomSha256 = "fc76d044fde1648ce195fa752bfdc2f9095b4faeeae21985b3d78515027ee409"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "lint-gradle-api"; + { + artifactId = "lint-gradle-api"; groupId = "com.android.tools.lint"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "2be9c69d6fbbfb012ff6521fdfcb22eb7cfaa57d108e07bb1d4143dae9c1b433"; pomSha256 = "847d7a6cb47f5143eb1c189e844dde7e59a422b591936806b626c40f28201be0"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "lint-model"; + { + artifactId = "lint-model"; groupId = "com.android.tools.lint"; version = "27.2.2"; repo = "https://maven.google.com/"; jarSha256 = "ee31012586462bea2d591b6175934e5f29b6f781a78fda50f79387972364b9ab"; pomSha256 = "82d505b42e41b13de7c17503554ace51f97dfa2a47f033511c94bb1a3ecb6456"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "google"; + { + artifactId = "google"; groupId = "com.google"; version = "1"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "transport-api"; + { + artifactId = "transport-api"; groupId = "com.google.android.datatransport"; version = "2.1.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "90df79a49f78c427aaa72e2bdba81732e6a19ac14e0655ac13fdf20a5e4f4316"; - aarSha256 = "c876d4f93b6d03cf7fba46e2d7f458d31ed4c68d8d50c5d453c7f63dfa0ff82e"; } + aarSha256 = "c876d4f93b6d03cf7fba46e2d7f458d31ed4c68d8d50c5d453c7f63dfa0ff82e"; + } - { artifactId = "transport-api"; + { + artifactId = "transport-api"; groupId = "com.google.android.datatransport"; version = "2.2.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "ba50c554f459220920168d591ddb221eeeb78ea2f44ff0a659f05514fbfc034f"; - aarSha256 = "576514f8b75d8ae32897f1b9b031f88b00465bf6e0996e227d09af688195f71e"; } + aarSha256 = "576514f8b75d8ae32897f1b9b031f88b00465bf6e0996e227d09af688195f71e"; + } - { artifactId = "transport-backend-cct"; + { + artifactId = "transport-backend-cct"; groupId = "com.google.android.datatransport"; version = "2.1.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "0596082466dd0a1188d87a9b7e0bf7505d39aff5b7846a24054e0dfcb2a5820b"; - aarSha256 = "3357e12aafeb176cbd8f438da601c612d6694430f7e44227abfe0ff1d9aebd37"; } + aarSha256 = "3357e12aafeb176cbd8f438da601c612d6694430f7e44227abfe0ff1d9aebd37"; + } - { artifactId = "transport-backend-cct"; + { + artifactId = "transport-backend-cct"; groupId = "com.google.android.datatransport"; version = "2.2.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "b932519ddf57b6cc3d6775bd016b4b236bfc30bc832b1c888f7e90d4cc9059b0"; - aarSha256 = "33abba2b7749479ae397176ae482b1807010b2bb331d61264bbdcc799eb398cd"; } + aarSha256 = "33abba2b7749479ae397176ae482b1807010b2bb331d61264bbdcc799eb398cd"; + } - { artifactId = "transport-runtime"; + { + artifactId = "transport-runtime"; groupId = "com.google.android.datatransport"; version = "2.1.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "339855f65009224f99d07cd4c895099327a4e705c7e16df7ed6753441f73c670"; - aarSha256 = "3d2d609a27ff4b19537025e2bb77587ad6ff286bed7b3c60a7809fc1604969af"; } + aarSha256 = "3d2d609a27ff4b19537025e2bb77587ad6ff286bed7b3c60a7809fc1604969af"; + } - { artifactId = "transport-runtime"; + { + artifactId = "transport-runtime"; groupId = "com.google.android.datatransport"; version = "2.2.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "a911c8a33f02942c10a5e730613a533c209d6ae8ddb0e7cd8e65fceb1162de56"; - aarSha256 = "e72912014b67151b689a7e820d3f1edf12fe2af5fbc308ab196ac392436ab771"; } + aarSha256 = "e72912014b67151b689a7e820d3f1edf12fe2af5fbc308ab196ac392436ab771"; + } - { artifactId = "play-services-base"; + { + artifactId = "play-services-base"; groupId = "com.google.android.gms"; version = "17.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "c30489d38be5d41e19272f6aa47d6c43de85034500bcb1864b79381c9634d924"; - aarSha256 = "dd0980edf729e0d346e2b58e70801dc237c1aed0c7ab274fa3f1c8c8efc64cc7"; } + aarSha256 = "dd0980edf729e0d346e2b58e70801dc237c1aed0c7ab274fa3f1c8c8efc64cc7"; + } - { artifactId = "play-services-basement"; + { + artifactId = "play-services-basement"; groupId = "com.google.android.gms"; version = "17.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "ffe9295d9eb2ec2d784bb4c3634f6a10175224d2111332fa2735320b52a24b66"; - aarSha256 = "d324a1785bbc48bfe3639fc847cfd3cf43d49e967b5caf2794240a854557a39c"; } + aarSha256 = "d324a1785bbc48bfe3639fc847cfd3cf43d49e967b5caf2794240a854557a39c"; + } - { artifactId = "play-services-stats"; + { + artifactId = "play-services-stats"; groupId = "com.google.android.gms"; version = "17.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "16f62288613923857f616976985fdfdc212bacc898b2b947715ebffd8fdea19b"; - aarSha256 = "e8ae5b40512b71e2258bfacd8cd3da398733aa4cde3b32d056093f832b83a6fe"; } + aarSha256 = "e8ae5b40512b71e2258bfacd8cd3da398733aa4cde3b32d056093f832b83a6fe"; + } - { artifactId = "play-services-tasks"; + { + artifactId = "play-services-tasks"; groupId = "com.google.android.gms"; version = "17.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "fdd93302c2eb94bbe6007caa28d072246d2875cda5cb774bb6299416b94d74a6"; - aarSha256 = "2e6d1738b73647f3fe7a038b9780b97717b3746eae258009197e36e7bf3112a5"; } + aarSha256 = "2e6d1738b73647f3fe7a038b9780b97717b3746eae258009197e36e7bf3112a5"; + } - { artifactId = "strict-version-matcher-plugin"; + { + artifactId = "strict-version-matcher-plugin"; groupId = "com.google.android.gms"; version = "1.2.1"; repo = "https://maven.google.com/"; jarSha256 = "0c1027a51198190386eae3f90adee9a30687e76da7589f06c79269fea4c7a4c0"; pomSha256 = "33417a7f40225f2b5ffc67df4c2c2e7e9050028af2cbecf9de2b8e1c33401fd3"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "auto-parent"; + { + artifactId = "auto-parent"; groupId = "com.google.auto"; version = "6"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "05f740c6648165db00cf618dd56c200c4725e358e6d54f5853e0bec15734ea0a"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "auto-parent"; + { + artifactId = "auto-parent"; groupId = "com.google.auto"; version = "7"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "a46426fccb5d32705ad9cbbc996f786bd048cc8cbdd21db046500169f15a4356"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "auto-value-annotations"; + { + artifactId = "auto-value-annotations"; groupId = "com.google.auto.value"; version = "1.6.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "b48b04ddba40e8ac33bf036f06fc43995fc5084bd94bdaace807ce27d3bea3fb"; pomSha256 = "1c76cd462fc96e7aa96dc70ce82f0d54063d6df16db35c9c7d9cc0d1a99d3fff"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "auto-value-annotations"; + { + artifactId = "auto-value-annotations"; groupId = "com.google.auto.value"; version = "1.6.5"; repo = "https://jcenter.bintray.com/"; jarSha256 = "3677f725f5b1b6cd6a4cc8aa8cf8f5fd2b76d170205cbdc3e9bfd9b58f934b3b"; pomSha256 = "6fc498858e0cd1387595af38957820cb341d1e687ccf753e1cbd982f46ef4fc3"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "auto-value-parent"; + { + artifactId = "auto-value-parent"; groupId = "com.google.auto.value"; version = "1.6.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "27b640c82179f5cff62009c0b72033d9bc60f60e9902a66802274b7fe37fc81c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "auto-value-parent"; + { + artifactId = "auto-value-parent"; groupId = "com.google.auto.value"; version = "1.6.5"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "b9d2d3aa6919d5f07e18c7cea942be9aef3b650a8f1e68f33c854a25c09c2049"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jsr305"; + { + artifactId = "jsr305"; groupId = "com.google.code.findbugs"; version = "3.0.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7"; pomSha256 = "19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gson"; + { + artifactId = "gson"; groupId = "com.google.code.gson"; version = "2.8.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825"; pomSha256 = "a5331a0ecb548f9942ab5b93c7ac43c38a21e897763dde1bcdbf0774f416ca6f"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gson"; + { + artifactId = "gson"; groupId = "com.google.code.gson"; version = "2.8.5"; repo = "https://jcenter.bintray.com/"; jarSha256 = "233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81"; pomSha256 = "b8308557a7fccc92d9fe7c8cd0599258b361285d2ecde7689eda98843255a092"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gson"; + { + artifactId = "gson"; groupId = "com.google.code.gson"; version = "2.8.6"; repo = "https://jcenter.bintray.com/"; jarSha256 = "c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f"; pomSha256 = "2174415a647332d30fda04bd1cfc708a3ecc84eaf7517f596188d8244e103911"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gson-parent"; + { + artifactId = "gson-parent"; groupId = "com.google.code.gson"; version = "2.8.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gson-parent"; + { + artifactId = "gson-parent"; groupId = "com.google.code.gson"; version = "2.8.5"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "gson-parent"; + { + artifactId = "gson-parent"; groupId = "com.google.code.gson"; version = "2.8.6"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "3736463859ec19267295e894940ae82a8f684413031122fe35ce7cff7e30a774"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "tink"; + { + artifactId = "tink"; groupId = "com.google.crypto.tink"; version = "1.3.0-rc2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "3aa576b5671d0e26d83d7fdb7186810b5672f00bf8e72184260bcc7c2d7dc07a"; pomSha256 = "5b9a11c11183d011de9a9a5490962d78a4d4bfe7579b0c5be4afb18a222e3f41"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "dagger"; + { + artifactId = "dagger"; groupId = "com.google.dagger"; version = "2.24"; repo = "https://jcenter.bintray.com/"; jarSha256 = "550a6e46a6dfcdf1d764887b6090cea94f783327e50e5c73754f18facfc70b64"; pomSha256 = "477bdf6579ecc9cc8f99a565203f6244914f289d87e7efbdf96243fa58f9df4c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "dagger"; + { + artifactId = "dagger"; groupId = "com.google.dagger"; version = "2.28.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = "f1dd23f8ae34a8e91366723991ead0d6499d1a3e9163ce550c200b02d76a872b"; pomSha256 = "265ba959a8e13c3a06133f04b539169c1018daffd4d33f53c453ab4cb386f570"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "error_prone_annotations"; + { + artifactId = "error_prone_annotations"; groupId = "com.google.errorprone"; version = "2.3.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "10a5949aa0f95c8de4fd47edfe20534d2acefd8c224f8afea1f607e112816120"; pomSha256 = "3edce6b711ba368efe16b9b7aacb0214fbd648414cb9b965953a2e7ed89a819a"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "error_prone_annotations"; + { + artifactId = "error_prone_annotations"; groupId = "com.google.errorprone"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "357cd6cfb067c969226c442451502aee13800a24e950fdfde77bcdb4565a668d"; pomSha256 = "8d175561619289a527573cfbdcf872eb5c1216cf9ab692a0ef3dba6d793f63b4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "error_prone_parent"; + { + artifactId = "error_prone_parent"; groupId = "com.google.errorprone"; version = "2.3.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "767525d9a81129cd081968382980336327be4162b1e2251a182911daa733c123"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "error_prone_parent"; + { + artifactId = "error_prone_parent"; groupId = "com.google.errorprone"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "8d3b5b9fa211979e9c425e989825c07743d2eb4dc8c20ec61de0f5b3dc1a6333"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "firebase-common"; + { + artifactId = "firebase-common"; groupId = "com.google.firebase"; version = "19.3.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "d11dd4923436f29d301d0d8fc0e03a3497bce181e572c54a74cb84b925b3a085"; - aarSha256 = "7bd7971470ff943e3c3abb1d7809ef5cb4b81f1996be0867714372b3efa7405a"; } + aarSha256 = "7bd7971470ff943e3c3abb1d7809ef5cb4b81f1996be0867714372b3efa7405a"; + } - { artifactId = "firebase-components"; + { + artifactId = "firebase-components"; groupId = "com.google.firebase"; version = "16.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "5c5d0a5f811e4eb7512ea7aba70241ebeb27b9e195fbdea9b2c4b914272c326e"; - aarSha256 = "8ef43b412de4ec3e36a87c66d8a0a14a3de0a2e8566946da6a0e799b7fdd8ec9"; } + aarSha256 = "8ef43b412de4ec3e36a87c66d8a0a14a3de0a2e8566946da6a0e799b7fdd8ec9"; + } - { artifactId = "firebase-datatransport"; + { + artifactId = "firebase-datatransport"; groupId = "com.google.firebase"; version = "17.0.3"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "04bd79c377c7b03fe3d4a5f26b90b0cfb0654c2d3b5c8dcfa6e90fcb1cb8d5d4"; - aarSha256 = "10c9f65c4f897ea33d028e46226daaabdfee43ac712559e5570d21b6b58a067e"; } + aarSha256 = "10c9f65c4f897ea33d028e46226daaabdfee43ac712559e5570d21b6b58a067e"; + } - { artifactId = "firebase-encoders-json"; + { + artifactId = "firebase-encoders-json"; groupId = "com.google.firebase"; version = "16.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "dcaf1909552a73b2f7081768d687331e09200b7afeddd5be7712291cf1359425"; - aarSha256 = "d1769fcec2a424ee7f92b9996c4b5c1dff0dfa27ceed28981b857b144fb5ec49"; } + aarSha256 = "d1769fcec2a424ee7f92b9996c4b5c1dff0dfa27ceed28981b857b144fb5ec49"; + } - { artifactId = "firebase-iid"; + { + artifactId = "firebase-iid"; groupId = "com.google.firebase"; version = "20.2.3"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "e0e27db2be35f8b5e2d73eb37d0b2431ecb5337e55bb74c04aa816ff279dc2a3"; - aarSha256 = "4ee59ef2d256a1c64bb55665d9fd3ca822e371e36d3a9b901582a9fb426d657c"; } + aarSha256 = "4ee59ef2d256a1c64bb55665d9fd3ca822e371e36d3a9b901582a9fb426d657c"; + } - { artifactId = "firebase-iid-interop"; + { + artifactId = "firebase-iid-interop"; groupId = "com.google.firebase"; version = "17.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "d01b366337829913fb0efc8c17388ad9673e3531fddf48d2f76d63e21bc5e788"; - aarSha256 = "b6f4ad581eb489370be3bf38a4bdabfc6ea3d4e716234c625a0f42516c53523c"; } + aarSha256 = "b6f4ad581eb489370be3bf38a4bdabfc6ea3d4e716234c625a0f42516c53523c"; + } - { artifactId = "firebase-installations"; + { + artifactId = "firebase-installations"; groupId = "com.google.firebase"; version = "16.3.2"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "8de71da34dc282a211b256e5872083937857d8781fcdbcac086d38ed0982d41b"; - aarSha256 = "0d0f88b3c3789d5fe1aa9a69bd5ab6c0e92036fcf34520775a0091e37268dd3f"; } + aarSha256 = "0d0f88b3c3789d5fe1aa9a69bd5ab6c0e92036fcf34520775a0091e37268dd3f"; + } - { artifactId = "firebase-installations-interop"; + { + artifactId = "firebase-installations-interop"; groupId = "com.google.firebase"; version = "16.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "623c9a2cc9d554afae478e0c82f644df9dc55efb2fb2491fd22761094f73287e"; - aarSha256 = "d498fe20e7d2c65fc8f7124f1c1791d2828bebdf6bf06ab4cdee13e7fe9ccaa2"; } + aarSha256 = "d498fe20e7d2c65fc8f7124f1c1791d2828bebdf6bf06ab4cdee13e7fe9ccaa2"; + } - { artifactId = "firebase-measurement-connector"; + { + artifactId = "firebase-measurement-connector"; groupId = "com.google.firebase"; version = "18.0.0"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "24bd1b4a8f81aea76ae30054df6343b5c0abc27024a5f6fb9c6ee7d4ffb86533"; - aarSha256 = "17e8b9b60ac0a79fcbed754d03d4b966cc5bb8837e79c2308bf2970f1d05700c"; } + aarSha256 = "17e8b9b60ac0a79fcbed754d03d4b966cc5bb8837e79c2308bf2970f1d05700c"; + } - { artifactId = "firebase-messaging"; + { + artifactId = "firebase-messaging"; groupId = "com.google.firebase"; version = "20.2.3"; repo = "https://maven.google.com/"; jarSha256 = null; pomSha256 = "78c2c4b37726c4ef475eb20f9864bf09f95b6ae2e95f6ef1d9bd869bc5e2eac5"; - aarSha256 = "6c188ff01e9ac4e714bb26c95a920c35d98ec0c324724d13de0ea3539423cdd0"; } + aarSha256 = "6c188ff01e9ac4e714bb26c95a920c35d98ec0c324724d13de0ea3539423cdd0"; + } - { artifactId = "flatbuffers-java"; + { + artifactId = "flatbuffers-java"; groupId = "com.google.flatbuffers"; version = "1.12.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "3f8c088b4dd04a9858721f2e162508c94db0dd86f961e306ee63ef2eda871bf7"; pomSha256 = "cb226baf546260770f21e8152a6aa88ba15230d739f750df480f2a668d43e0eb"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "google-services"; + { + artifactId = "google-services"; groupId = "com.google.gms"; version = "4.3.3"; repo = "https://maven.google.com/"; jarSha256 = "d9668002ef7032deddf7dbf853b47e10e6722bbce1b318fe7d6a297e28a8dcae"; pomSha256 = "d46bba8531af0a008504148486dd2584432278499db092a4f3916dfbd32b3b7b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "failureaccess"; + { + artifactId = "failureaccess"; groupId = "com.google.guava"; version = "1.0.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26"; pomSha256 = "e96042ce78fecba0da2be964522947c87b40a291b5fd3cd672a434924103c4b9"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava"; + { + artifactId = "guava"; groupId = "com.google.guava"; version = "18.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99"; pomSha256 = "e743d61d76f76b5dc060d6f7914fdd41c4418b3529062556920116a716719836"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava"; + { + artifactId = "guava"; groupId = "com.google.guava"; version = "23.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "7baa80df284117e5b945b19b98d367a85ea7b7801bd358ff657946c3bd1b6596"; pomSha256 = "ac2ac42a7a6b4ce5097c6c83e2fbbacbbb7f9913f1b4f993eb1723a14476324e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava"; + { + artifactId = "guava"; groupId = "com.google.guava"; version = "27.0.1-jre"; repo = "https://jcenter.bintray.com/"; jarSha256 = "e1c814fd04492a27c38e0317eabeaa1b3e950ec8010239e400fe90ad6c9107b4"; pomSha256 = "6a8dd041f23a6bb14a86e440fccb993537b62271357a0dac0a3cb0ff39158f36"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava"; + { + artifactId = "guava"; groupId = "com.google.guava"; version = "28.0-android"; repo = "https://jcenter.bintray.com/"; jarSha256 = "aa12035fa0ce8bdab6a4ddc218c2749df9306126f6fc9171bc0d73a5af2e0549"; pomSha256 = "b9cc4824a3973bbff1ff66ea93f61a9cfc12cefd5453889413484eaa2a74da83"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava"; + { + artifactId = "guava"; groupId = "com.google.guava"; version = "28.1-jre"; repo = "https://jcenter.bintray.com/"; jarSha256 = "30beb8b8527bd07c6e747e77f1a92122c2f29d57ce347461a4a55eb26e382da4"; pomSha256 = "74af0e8dd935894ce9bcb8e2842dd0001581b84cb6a7751c3ef9314011399ba4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava-parent"; + { + artifactId = "guava-parent"; groupId = "com.google.guava"; version = "18.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "a4accc8895e757f6a33f087e4fd0b661c5638ffe5e0728f298efe7d80551b166"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava-parent"; + { + artifactId = "guava-parent"; groupId = "com.google.guava"; version = "23.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "66cc3a0d329f9fe130605fdb2c901e5a9bb2612f02f23a76757b46e689b3594d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava-parent"; + { + artifactId = "guava-parent"; groupId = "com.google.guava"; version = "26.0-android"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "f8698ab46ca996ce889c1afc8ca4f25eb8ac6b034dc898d4583742360016cc04"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava-parent"; + { + artifactId = "guava-parent"; groupId = "com.google.guava"; version = "27.0.1-jre"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "317e88291262e0cf2805e956c18850f1d4565c85c2e1112f5d9d08ab1732e696"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava-parent"; + { + artifactId = "guava-parent"; groupId = "com.google.guava"; version = "28.0-android"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "cfe57db4777a2d1acb8630050ae2f4e23ce102658aba356c2a4a99d23d113374"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "guava-parent"; + { + artifactId = "guava-parent"; groupId = "com.google.guava"; version = "28.1-jre"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "f31a5846bd9e14a4c374da1b9b146a5715ecdca925e071e1d2bf4da2daaded90"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "listenablefuture"; + { + artifactId = "listenablefuture"; groupId = "com.google.guava"; version = "9999.0-empty-to-avoid-conflict-with-guava"; repo = "https://jcenter.bintray.com/"; jarSha256 = "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99"; pomSha256 = "18d4b1db26153d4e55079ce1f76bb1fe05cdb862ef9954a88cbcc4ff38b8679b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "j2objc-annotations"; + { + artifactId = "j2objc-annotations"; groupId = "com.google.j2objc"; version = "1.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b"; pomSha256 = "5faca824ba115bee458730337dfdb2fcea46ba2fd774d4304edbf30fa6a3f055"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jimfs"; + { + artifactId = "jimfs"; groupId = "com.google.jimfs"; version = "1.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd"; pomSha256 = "efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jimfs-parent"; + { + artifactId = "jimfs-parent"; groupId = "com.google.jimfs"; version = "1.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-bom"; + { + artifactId = "protobuf-bom"; groupId = "com.google.protobuf"; version = "3.10.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "32ff2307dafc658d0b55b2ad841d625aea5606bb9b0316605165cd6980503243"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-java"; + { + artifactId = "protobuf-java"; groupId = "com.google.protobuf"; version = "3.10.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "161d7d61a8cb3970891c299578702fd079646e032329d6c2cabf998d191437c9"; pomSha256 = "b404c1b093ec9dea888e02c8dfe8662759586b94efa4f97061cdfc1bbfa15af0"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-java"; + { + artifactId = "protobuf-java"; groupId = "com.google.protobuf"; version = "3.4.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4"; pomSha256 = "83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-java-util"; + { + artifactId = "protobuf-java-util"; groupId = "com.google.protobuf"; version = "3.10.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "619b0b0dc344cb141e493cbedc5687c8fb7c985e609a1b035e621bfab2f89021"; pomSha256 = "146660182d07798ced06fa8e8ae3b9faa90aa48cf3c6adfc67db9371188ba502"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-java-util"; + { + artifactId = "protobuf-java-util"; groupId = "com.google.protobuf"; version = "3.4.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052"; pomSha256 = "89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-parent"; + { + artifactId = "protobuf-parent"; groupId = "com.google.protobuf"; version = "3.10.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "6dd84a508125fffdefbd583fae12bf166aa902511b570ca54fa9efa45f6dfe80"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "protobuf-parent"; + { + artifactId = "protobuf-parent"; groupId = "com.google.protobuf"; version = "3.4.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "core-proto"; + { + artifactId = "core-proto"; groupId = "com.google.testing.platform"; version = "0.0.8-alpha01"; repo = "https://maven.google.com/"; jarSha256 = "2deaa8c40f27c8af158ae2c2132927cd9be345deb1450da49aca29cb168289cd"; pomSha256 = "501e7a6b743cf4e81643ce31e2850f37477494a689513e756e059c688773867f"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "json-simple"; + { + artifactId = "json-simple"; groupId = "com.googlecode.json-simple"; version = "1.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439"; pomSha256 = "47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "juniversalchardet"; + { + artifactId = "juniversalchardet"; groupId = "com.googlecode.juniversalchardet"; version = "1.0.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = "757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76"; pomSha256 = "7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "javapoet"; + { + artifactId = "javapoet"; groupId = "com.squareup"; version = "1.10.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "20ef4b82e43ff7c652281a21313cf3b941092467add3fa73509c26f6969efdab"; pomSha256 = "1690340a222279f2cbadf373e88826fa20f7f3cc3ec0252f36818fed32701ab1"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "javawriter"; + { + artifactId = "javawriter"; groupId = "com.squareup"; version = "2.5.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0"; pomSha256 = "e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "all"; + { + artifactId = "all"; groupId = "com.sun.activation"; version = "1.2.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "all"; + { + artifactId = "all"; groupId = "com.sun.activation"; version = "1.2.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "360883bf64486ecef161b8f282f6503536dd1a670d53a0a871c8fb20170e6795"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "javax.activation"; + { + artifactId = "javax.activation"; groupId = "com.sun.activation"; version = "1.2.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce"; pomSha256 = "f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "istack-commons"; + { + artifactId = "istack-commons"; groupId = "com.sun.istack"; version = "3.0.8"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "a0f0517e8512f0fbcc7b8295c12f6566a3d0c2d86d655639dc662ef8c0c7ebe5"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "istack-commons-runtime"; + { + artifactId = "istack-commons-runtime"; groupId = "com.sun.istack"; version = "3.0.8"; repo = "https://jcenter.bintray.com/"; jarSha256 = "4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef"; pomSha256 = "c2e014d34cb84ed287d064986c45c305a4124228a7337eccf6c421d14d708f1c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jaxb-bom-ext"; + { + artifactId = "jaxb-bom-ext"; groupId = "com.sun.xml.bind"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "1a7dec2b27e7e055744cdb8cf1b90def4fd473acd1b804eff098139358959bd7"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jaxb-parent"; + { + artifactId = "jaxb-parent"; groupId = "com.sun.xml.bind.mvn"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "20dd6dc34ab7549ac40da1d82e92222ec4347ad0ec0cb118ef6c5703bed53a18"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jaxb-runtime-parent"; + { + artifactId = "jaxb-runtime-parent"; groupId = "com.sun.xml.bind.mvn"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "b24f8d51f184a68bc1b86d48c0e3cfefeb21a44ede1c5f7303c58ae0488533ec"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jaxb-txw-parent"; + { + artifactId = "jaxb-txw-parent"; groupId = "com.sun.xml.bind.mvn"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "b55d3efa9b158f483a30e92c78ccb600f93314733d089eba9b74436f01b314a4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "FastInfoset"; + { + artifactId = "FastInfoset"; groupId = "com.sun.xml.fastinfoset"; version = "1.2.16"; repo = "https://jcenter.bintray.com/"; jarSha256 = "056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511"; pomSha256 = "e147d258ab6e6691f70599a952400e6e6c7558f8c9c028dbe1be23178308e830"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "fastinfoset-project"; + { + artifactId = "fastinfoset-project"; groupId = "com.sun.xml.fastinfoset"; version = "1.2.16"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "90582425adc1f40b41362dafb95173931225acaa5e79620d5e6bd52f646292ba"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-codec"; + { + artifactId = "commons-codec"; groupId = "commons-codec"; version = "1.10"; repo = "https://jcenter.bintray.com/"; jarSha256 = "4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569"; pomSha256 = "bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-io"; + { + artifactId = "commons-io"; groupId = "commons-io"; version = "2.4"; repo = "https://jcenter.bintray.com/"; jarSha256 = "cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581"; pomSha256 = "b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-logging"; + { + artifactId = "commons-logging"; groupId = "commons-logging"; version = "1.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636"; pomSha256 = "c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "fastutil"; + { + artifactId = "fastutil"; groupId = "it.unimi.dsi"; version = "8.4.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "2ad2824a4a0a0eb836b52ee2fc84ba2134f44bce7bfa54015ae3f31c710a3071"; pomSha256 = "110e6f66c7d5ed3c91408eb0b49d40791614decc842eb92d7547ae7f88482822"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jakarta.activation-api"; + { + artifactId = "jakarta.activation-api"; groupId = "jakarta.activation"; version = "1.2.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b"; pomSha256 = "42585cb07dda7f23aa04eb5e0940061944a246a67ad3d16942fbe569ff03cd31"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jakarta.xml.bind-api"; + { + artifactId = "jakarta.xml.bind-api"; groupId = "jakarta.xml.bind"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea"; pomSha256 = "b537b388dbab4cc0690b9d2fb0c74124d672531734567acf6e53130eab131ad6"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jakarta.xml.bind-api-parent"; + { + artifactId = "jakarta.xml.bind-api-parent"; groupId = "jakarta.xml.bind"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "15a55b7d537c9f9970aead28d2af97c059f65ff6102f76bbd29f1247dd8a6dfb"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "javax.inject"; + { + artifactId = "javax.inject"; groupId = "javax.inject"; version = "1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff"; pomSha256 = "943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jvnet-parent"; + { + artifactId = "jvnet-parent"; groupId = "net.java"; version = "1"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jna"; + { + artifactId = "jna"; groupId = "net.java.dev.jna"; version = "5.6.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf"; pomSha256 = "5fe81b0255978f24616d37b10608b79498a5f3073e1d9b2038d8736a831f2608"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jna-platform"; + { + artifactId = "jna-platform"; groupId = "net.java.dev.jna"; version = "5.6.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7"; pomSha256 = "1beb35cb4184e6c906a7e32eaebd852dd3da0a263962e99134ab945832394e28"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jopt-simple"; + { + artifactId = "jopt-simple"; groupId = "net.sf.jopt-simple"; version = "4.9"; repo = "https://jcenter.bintray.com/"; jarSha256 = "26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5"; pomSha256 = "7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kxml2"; + { + artifactId = "kxml2"; groupId = "net.sf.kxml"; version = "2.3.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2"; pomSha256 = "31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "proguard-base"; + { + artifactId = "proguard-base"; groupId = "net.sf.proguard"; version = "6.0.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = "75bc89695fa66e75374ecda439b802406f0ab1d826dd386eed0a23b1f0a9d264"; pomSha256 = "2a823d79f2675582a988d539466d1b175e939782efbe0f6e61f06cb165ed4907"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "proguard-gradle"; + { + artifactId = "proguard-gradle"; groupId = "net.sf.proguard"; version = "6.0.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = "cc12b1168e521491dd0e687cfebec11a4af874b22af70e10cf2a05b47ca00c8f"; pomSha256 = "5a5c7317d68ce80d1d40c9d8bd4e38814d42d1b16c265146e333634833a35a57"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "proguard-parent"; + { + artifactId = "proguard-parent"; groupId = "net.sf.proguard"; version = "6.0.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "d87266bfd2312c3b036c4ac709310afa35c448ceb18027c3b87a33d03c6de0a0"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "antlr4"; + { + artifactId = "antlr4"; groupId = "org.antlr"; version = "4.5.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = "a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4"; pomSha256 = "8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "antlr4-master"; + { + artifactId = "antlr4-master"; groupId = "org.antlr"; version = "4.5.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apache"; + { + artifactId = "apache"; groupId = "org.apache"; version = "13"; repo = "https://central.maven.org/maven2/"; jarSha256 = null; pomSha256 = "ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apache"; + { + artifactId = "apache"; groupId = "org.apache"; version = "15"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apache"; + { + artifactId = "apache"; groupId = "org.apache"; version = "16"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apache"; + { + artifactId = "apache"; groupId = "org.apache"; version = "18"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "7831307285fd475bbc36b20ae38e7882f11c3153b1d5930f852d44eda8f33c17"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "apache"; + { + artifactId = "apache"; groupId = "org.apache"; version = "9"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-compress"; + { + artifactId = "commons-compress"; groupId = "org.apache.commons"; version = "1.12"; repo = "https://jcenter.bintray.com/"; jarSha256 = "2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6"; pomSha256 = "b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-parent"; + { + artifactId = "commons-parent"; groupId = "org.apache.commons"; version = "25"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-parent"; + { + artifactId = "commons-parent"; groupId = "org.apache.commons"; version = "34"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "3a2e69d06d641d1f3b293126dc9e2e4ea6563bf8c36c87e0ab6fa4292d04b79c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-parent"; + { + artifactId = "commons-parent"; groupId = "org.apache.commons"; version = "35"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "commons-parent"; + { + artifactId = "commons-parent"; groupId = "org.apache.commons"; version = "39"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "httpclient"; + { + artifactId = "httpclient"; groupId = "org.apache.httpcomponents"; version = "4.5.6"; repo = "https://jcenter.bintray.com/"; jarSha256 = "c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7"; pomSha256 = "7efc1241e73e7fbb268bfd33242d11ebd3ca07061d7d85f2962dc32a0f0b8855"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "httpcomponents-client"; + { + artifactId = "httpcomponents-client"; groupId = "org.apache.httpcomponents"; version = "4.5.6"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "b042b41f2391edb00d35f7f4e509aed2123648c1d246ce58d0f7b905c9fe1f73"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "httpcomponents-core"; + { + artifactId = "httpcomponents-core"; groupId = "org.apache.httpcomponents"; version = "4.4.10"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "61e9427d4be326c307a7f16ba828d1cb3b14713c9b04fc8ba992a58f376c3136"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "httpcomponents-parent"; + { + artifactId = "httpcomponents-parent"; groupId = "org.apache.httpcomponents"; version = "10"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "caaf967d94afb21753f36082c6086206bd1f48825ff596932cceba72b65d39fa"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "httpcore"; + { + artifactId = "httpcore"; groupId = "org.apache.httpcomponents"; version = "4.4.10"; repo = "https://jcenter.bintray.com/"; jarSha256 = "78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd"; pomSha256 = "c5c12066df2b3b88a89a2c8602b81ea9a61627e976e5129eea1899ebbaea392b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "httpmime"; + { + artifactId = "httpmime"; groupId = "org.apache.httpcomponents"; version = "4.5.6"; repo = "https://jcenter.bintray.com/"; jarSha256 = "0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e"; pomSha256 = "dfbfd6ffe2a784ca9817c46365aa7f8a578320b805bde39d6f55a0b09d8aa8ca"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "bcpkix-jdk15on"; + { + artifactId = "bcpkix-jdk15on"; groupId = "org.bouncycastle"; version = "1.56"; repo = "https://jcenter.bintray.com/"; jarSha256 = "7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca"; pomSha256 = "321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "bcprov-jdk15on"; + { + artifactId = "bcprov-jdk15on"; groupId = "org.bouncycastle"; version = "1.56"; repo = "https://jcenter.bintray.com/"; jarSha256 = "963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349"; pomSha256 = "8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "checker-qual"; + { + artifactId = "checker-qual"; groupId = "org.checkerframework"; version = "2.5.8"; repo = "https://jcenter.bintray.com/"; jarSha256 = "bd655da535df1eeb96fc8874d05d0f7029209de95096e4f84bd07c66688a210d"; pomSha256 = "33ac6a0f1341ae96647c7d4465f4aa3d24fe97d2697bcee2ceae6fc8b5ef2c3c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "checker-qual"; + { + artifactId = "checker-qual"; groupId = "org.checkerframework"; version = "2.8.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "9103499008bcecd4e948da29b17864abb64304e15706444ae209d17ebe0575df"; pomSha256 = "f23376b58ed795f2ff47426ac76b996d49e3918442e5d8713e3925f889a77799"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "animal-sniffer-annotations"; + { + artifactId = "animal-sniffer-annotations"; groupId = "org.codehaus.mojo"; version = "1.17"; repo = "https://jcenter.bintray.com/"; jarSha256 = "92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53"; pomSha256 = "e956ab5d2eb48fabae12300d0cd2d3294d4a2a41abc2068c23cb4d60ad76cbe5"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "animal-sniffer-annotations"; + { + artifactId = "animal-sniffer-annotations"; groupId = "org.codehaus.mojo"; version = "1.18"; repo = "https://jcenter.bintray.com/"; jarSha256 = "47f05852b48ee9baefef80fa3d8cea60efa4753c0013121dd7fe5eef2e5c729d"; pomSha256 = "adf522f4839c35f5329ea97c407aebebfa8807b644852dc4d5cd7c97b7a6d2e0"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "animal-sniffer-parent"; + { + artifactId = "animal-sniffer-parent"; groupId = "org.codehaus.mojo"; version = "1.17"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "18a03df16e2a184c582db7b125633c15fb7714027a84c1b532d72933dc08b81f"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "animal-sniffer-parent"; + { + artifactId = "animal-sniffer-parent"; groupId = "org.codehaus.mojo"; version = "1.18"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "4e9df546a47cf6304a1317c46870100a8726fbea11b0dd18322f957e4070973c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "mojo-parent"; + { + artifactId = "mojo-parent"; groupId = "org.codehaus.mojo"; version = "40"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "fc648dcdc404f8bf66e0583914ecf980176618201227bea114fae85043cb755e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "mojo-parent"; + { + artifactId = "mojo-parent"; groupId = "org.codehaus.mojo"; version = "50"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "f819cad1b15b6a7791c8b601e96bde33765e4681395807db4537d2f0dedd493b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "project"; + { + artifactId = "project"; groupId = "org.eclipse.ee4j"; version = "1.0.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "7495a07a797e88e43c3bc1a87421bd8b1fc55e32291fa18e4e32d8031ddc873f"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "project"; + { + artifactId = "project"; groupId = "org.eclipse.ee4j"; version = "1.0.5"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "916b4794d8d8220a59a3fdf6a64dbe794aeb23395e888b81ae36a9b5a2c591a6"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jaxb-bom"; + { + artifactId = "jaxb-bom"; groupId = "org.glassfish.jaxb"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "a1018bb54678ed9f5acb2f7a4084e385ff510201f4e9dbf5f75dc6a675f66be7"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jaxb-runtime"; + { + artifactId = "jaxb-runtime"; groupId = "org.glassfish.jaxb"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b"; pomSha256 = "9448a5ad7fa68a6083dfbe4f42c8c83e082b9202a105401fc68e944c26548b34"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "txw2"; + { + artifactId = "txw2"; groupId = "org.glassfish.jaxb"; version = "2.3.2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe"; pomSha256 = "a79dd002fb038183ff286a2635be2e68c103b87e0e64717d8d44bfd017fd33ea"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "jdom2"; + { + artifactId = "jdom2"; groupId = "org.jdom"; version = "2.0.6"; repo = "https://jcenter.bintray.com/"; jarSha256 = "1345f11ba606d15603d6740551a8c21947c0215640770ec67271fe78bea97cf5"; pomSha256 = "47b23a79fe336b741b82434c6e049d68165256e405e75c10921fd72fa8a65d8d"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "annotations"; + { + artifactId = "annotations"; groupId = "org.jetbrains"; version = "13.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478"; pomSha256 = "965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "trove4j"; + { + artifactId = "trove4j"; groupId = "org.jetbrains.intellij.deps"; version = "1.0.20181211"; repo = "https://jcenter.bintray.com/"; jarSha256 = "affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601"; pomSha256 = "310a6aa2d90534c32b8f46f1fc98cd0edae95dcdfca23e2847e5efa9ae0c019a"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-reflect"; + { + artifactId = "kotlin-reflect"; groupId = "org.jetbrains.kotlin"; version = "1.4.31"; repo = "https://jcenter.bintray.com/"; jarSha256 = "91fad0b42974a7d5811e30a61f05706e176b144235717c6de7e81e3a781028f2"; pomSha256 = "8e49bab843dd855f315c87e390c529a9ca239121d8bffb85b3acfa2f60603697"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib"; + { + artifactId = "kotlin-stdlib"; groupId = "org.jetbrains.kotlin"; version = "1.3.60"; repo = "https://jcenter.bintray.com/"; jarSha256 = "e98834000b5db07376d5782761ad58f3f23ccd05b6f1fa90dc0ad428be582506"; pomSha256 = "e737fa1a6a51f7cff7eaf7f69525d4bec9f22e7c9d806cd46dc72051600443de"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib"; + { + artifactId = "kotlin-stdlib"; groupId = "org.jetbrains.kotlin"; version = "1.4.31"; repo = "https://jcenter.bintray.com/"; jarSha256 = "76a599d88b167e8ac90879b6daa722c6ad3452ba714c9aba19bd196544b97f1c"; pomSha256 = "8519e3e7ac5ee700527ee10488eb432f1aa106dccdde7c06c3bab258a1ddbd4e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib-common"; + { + artifactId = "kotlin-stdlib-common"; groupId = "org.jetbrains.kotlin"; version = "1.3.11"; repo = "https://jcenter.bintray.com/"; jarSha256 = "75bdd11bedf5736a5b95bbdb643a8f920a9e801caa20f5335a499fa95dc8f9fc"; pomSha256 = "501095e7aa12a7e3d18559d1cd7ecc3996205eff1ace83d660706aa5e9d44adf"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib-common"; + { + artifactId = "kotlin-stdlib-common"; groupId = "org.jetbrains.kotlin"; version = "1.4.31"; repo = "https://jcenter.bintray.com/"; jarSha256 = "57962f44371a746b678218a0802a8712c6255206de9a69ede215e3aa4b044708"; pomSha256 = "1582ab130b68fcbb89b2e915573c1f99f8ba3bc68fdd451f6b362d6c53353187"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib-jdk7"; + { + artifactId = "kotlin-stdlib-jdk7"; groupId = "org.jetbrains.kotlin"; version = "1.4.31"; repo = "https://jcenter.bintray.com/"; jarSha256 = "1f966e54e86cf4b7d7014afdce04e0f3ee4625084cda3494edccc7b84af52664"; pomSha256 = "f67e52bebc23a07e23d51e525d20f59de8da6720bde2ff7c598f99ba9c272118"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib-jdk8"; + { + artifactId = "kotlin-stdlib-jdk8"; groupId = "org.jetbrains.kotlin"; version = "1.3.11"; repo = "https://jcenter.bintray.com/"; jarSha256 = "ed00c4c25c44073785b6b9a54d398a25da59f24d53cbf794b31800ea8be48d87"; pomSha256 = "ad2c80108a6481e236e96eda7eb9570c078429e3daae519137bd5fbce5a9292c"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "kotlin-stdlib-jdk8"; + { + artifactId = "kotlin-stdlib-jdk8"; groupId = "org.jetbrains.kotlin"; version = "1.4.31"; repo = "https://jcenter.bintray.com/"; jarSha256 = "b2f8364435ebcb0106ff9d4415a11ffdef8ec7786ee6e5ed465a01556cbd1683"; pomSha256 = "4ee4f626e69f5f6fdad8cd28ad555a0ff416c84f25a569ec0a4b3587f86df457"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "json"; + { + artifactId = "json"; groupId = "org.json"; version = "20180813"; repo = "https://jcenter.bintray.com/"; jarSha256 = "518080049ba83181914419d11a25d9bc9833a2d729b6a6e7469fa52851356da8"; pomSha256 = "c7e660c50bf4ecda0fc81ab62b489db9171e207fa784ddcb48c6c85bb40b49f5"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "stax-ex"; + { + artifactId = "stax-ex"; groupId = "org.jvnet.staxex"; version = "1.8.1"; repo = "https://jcenter.bintray.com/"; jarSha256 = "20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a"; pomSha256 = "8fc84f36ce6da6ce8c893b6538199a7f69a69a0706d9b17a3ee6a3a09452eed6"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "ow2"; + { + artifactId = "ow2"; groupId = "org.ow2"; version = "1.3"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "ow2"; + { + artifactId = "ow2"; groupId = "org.ow2"; version = "1.5"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "0f8a1b116e760b8fe6389c51b84e4b07a70fc11082d4f936e453b583dd50b43b"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm"; + { + artifactId = "asm"; groupId = "org.ow2.asm"; version = "6.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "dd8971c74a4e697899a8e95caae4ea8760ea6c486dc6b97b1795e75760420461"; pomSha256 = "c2bc497e197112e699085426bbb45b1ab0be8002da68267a3b1f450a0312c32e"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm"; + { + artifactId = "asm"; groupId = "org.ow2.asm"; version = "7.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf"; pomSha256 = "83f65b1083d5ce4f8ba7f9545cfe9ff17824589c9a7cc82c3a4695801e4f5f68"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-analysis"; + { + artifactId = "asm-analysis"; groupId = "org.ow2.asm"; version = "7.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474"; pomSha256 = "c6b54477e9d5bae1e7addff2e24cbf92aaff2ff08fd6bc0596c3933c3fadc2cb"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-commons"; + { + artifactId = "asm-commons"; groupId = "org.ow2.asm"; version = "6.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "f1bce5c648a96a017bdcd01fe5d59af9845297fd7b79b81c015a6fbbd9719abf"; pomSha256 = "90f4f29473afb957229016eb5741954976cc1b67bc049b3981c0d1e653ad5cdd"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-commons"; + { + artifactId = "asm-commons"; groupId = "org.ow2.asm"; version = "7.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d"; pomSha256 = "f4c697886cdb4a5b2472054a0b5e34371e9b48e620be40c3ed48e1f4b6d51eb4"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-parent"; + { + artifactId = "asm-parent"; groupId = "org.ow2.asm"; version = "6.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "791d064bb9ecc9a46d43bc9efecd74c91464dfc451f321b802d2261e2ccd7d14"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-tree"; + { + artifactId = "asm-tree"; groupId = "org.ow2.asm"; version = "7.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c"; pomSha256 = "d39e7dd12f4ff535a0839d1949c39c7644355a4470220c94b76a5c168c57a068"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-util"; + { + artifactId = "asm-util"; groupId = "org.ow2.asm"; version = "6.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "356afebdb0f870175262e5188f8709a3b17aa2a5a6a4b0340b04d4b449bca5f6"; pomSha256 = "3cdfc61f988d167b97503419da82a5808b20f4205aeb46c394e6e7ffd3211f12"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "asm-util"; + { + artifactId = "asm-util"; groupId = "org.ow2.asm"; version = "7.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145"; pomSha256 = "e07bce4bb55d5a06f4c10d912fc9dee8a9b9c04ec549bbb8db4f20db34706f75"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "oss-parent"; + { + artifactId = "oss-parent"; groupId = "org.sonatype.oss"; version = "7"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "oss-parent"; + { + artifactId = "oss-parent"; groupId = "org.sonatype.oss"; version = "9"; repo = "https://jcenter.bintray.com/"; jarSha256 = null; pomSha256 = "fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "tensorflow-lite-metadata"; + { + artifactId = "tensorflow-lite-metadata"; groupId = "org.tensorflow"; version = "0.1.0-rc2"; repo = "https://jcenter.bintray.com/"; jarSha256 = "2c2a264f842498c36d34d2a7b91342490d9a962862c85baac1acd54ec2fca6d9"; pomSha256 = "8359ad51e0476c8e0df7188a43f16d49733c4a428fb45e99794b783f01b97520"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "xercesImpl"; + { + artifactId = "xercesImpl"; groupId = "xerces"; version = "2.12.0"; repo = "https://jcenter.bintray.com/"; jarSha256 = "b50d3a4ca502faa4d1c838acb8aa9480446953421f7327e338c5dda3da5e76d0"; pomSha256 = "138ebb33cce7080fd5cdb4fb90a0ee550173d7e8d41024da8c0d788b1460a1f3"; - aarSha256 = null; } + aarSha256 = null; + } - { artifactId = "xml-apis"; + { + artifactId = "xml-apis"; groupId = "xml-apis"; version = "1.4.01"; repo = "https://jcenter.bintray.com/"; jarSha256 = "a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad"; pomSha256 = "09a82ff150ac86bfa31145e0a6afd89a02e4504785f5da112e4fae1425020e92"; - aarSha256 = null; } + aarSha256 = null; + } ] diff --git a/android/impl.nix b/android/impl.nix index 4fadb0d02..60c6558f5 100644 --- a/android/impl.nix +++ b/android/impl.nix @@ -1,16 +1,17 @@ env: with env; -let overrideAndroidCabal = package: overrideCabal package (drv: { - # -Wl,--unresolved-symbols=ignore-in-object-files - preConfigure = (drv.preConfigure or "") + '' - export NIX_CFLAGS_LINK="-no-pie -v" - sed -i 's%^executable *\(.*\)$%executable lib\1.so\n cc-options: -no-pie -shared -fPIC\n ld-options: -no-pie -shared -Wl,--gc-sections,--version-script=${./haskellActivity.version},-u,Java_systems_obsidian_HaskellActivity_haskellStartMain,-u,hs_main\n ghc-options: -fPIC -shared -no-pie -threaded -no-hs-main -lHSrts_thr -lffi -lm -llog%i' *.cabal - ''; - # -no-hs-main - configureFlags = (drv.configureFlags or []) ++ [ - "--enable-shared" - ]; - }); - /* +let + overrideAndroidCabal = package: overrideCabal package (drv: { + # -Wl,--unresolved-symbols=ignore-in-object-files + preConfigure = (drv.preConfigure or "") + '' + export NIX_CFLAGS_LINK="-no-pie -v" + sed -i 's%^executable *\(.*\)$%executable lib\1.so\n cc-options: -no-pie -shared -fPIC\n ld-options: -no-pie -shared -Wl,--gc-sections,--version-script=${./haskellActivity.version},-u,Java_systems_obsidian_HaskellActivity_haskellStartMain,-u,hs_main\n ghc-options: -fPIC -shared -no-pie -threaded -no-hs-main -lHSrts_thr -lffi -lm -llog%i' *.cabal + ''; + # -no-hs-main + configureFlags = (drv.configureFlags or [ ]) ++ [ + "--enable-shared" + ]; + }); + /* overrideAndroidCabal = package: overrideCabal package (drv: { preConfigure = '' export NIX_CFLAGS_COMPILE="" @@ -18,9 +19,10 @@ let overrideAndroidCabal = package: overrideCabal package (drv: { ''; }); */ - androidenv = nixpkgs.androidenv; - #TODO: Keep the signing key for dev mode more consistent, e.g. in ~/.config/reflex-platform, so that the app can be reinstalled in-place - addDeployScript = src: nixpkgs.runCommand "android-app" { + androidenv = nixpkgs.androidenv; + #TODO: Keep the signing key for dev mode more consistent, e.g. in ~/.config/reflex-platform, so that the app can be reinstalled in-place + addDeployScript = src: nixpkgs.runCommand "android-app" + { inherit src; buildCommand = '' mkdir -p "$out/bin" @@ -34,17 +36,18 @@ let overrideAndroidCabal = package: overrideCabal package (drv: { ''; buildInputs = [ androidenv.androidPkgs_9_0.androidsdk ]; } ""; - buildGradleApp = import ./build-gradle-app.nix { - inherit (nixpkgs) stdenv lib gnumake gawk file runCommand + buildGradleApp = import ./build-gradle-app.nix { + inherit (nixpkgs) stdenv lib gnumake gawk file runCommand which fetchurl buildEnv; - inherit androidenv; - gradle = nixpkgs.gradle.override { - java = nixpkgs.buildPackages.openjdk11_headless; - }; - jdk = nixpkgs.buildPackages.openjdk17_headless; + inherit androidenv; + gradle = nixpkgs.gradle.override { + java = nixpkgs.buildPackages.openjdk11_headless; }; - inherit (nixpkgs.lib) splitString escapeShellArg mapAttrs attrNames concatStrings optionalString; -in { + jdk = nixpkgs.buildPackages.openjdk17_headless; + }; + inherit (nixpkgs.lib) splitString escapeShellArg mapAttrs attrNames concatStrings optionalString; +in +{ buildApp = args: with args; addDeployScript (buildGradleApp { inherit acceptAndroidSdkLicenses mavenDeps; buildDirectory = "./."; @@ -57,11 +60,14 @@ in { platformVersions = [ "30" ]; release = false; src = - let splitApplicationId = splitString "." applicationId; - appSOs = mapAttrs (abiVersion: { myNixpkgs, myHaskellPackages }: { + let + splitApplicationId = splitString "." applicationId; + appSOs = mapAttrs + (abiVersion: { myNixpkgs, myHaskellPackages }: { hsApp = overrideAndroidCabal (package myHaskellPackages); sharedLibs = runtimeSharedLibs myNixpkgs ++ [ "${myNixpkgs.libffi}/lib/libffi.so" ]; - }) ({ + }) + ({ "arm64-v8a" = { myNixpkgs = nixpkgsCross.android.aarch64; myHaskellPackages = ghcAndroidAarch64; @@ -72,35 +78,38 @@ in { myHaskellPackages = ghcAndroidAarch32; }; })); - abiVersions = attrNames appSOs; - in nixpkgs.runCommand "android-app" { - buildGradle = builtins.toFile "build.gradle" (import ./build.gradle.nix { - inherit applicationId version additionalDependencies releaseKey universalApk; - googleServicesClasspath = optionalString (googleServicesJson != null) - "classpath 'com.google.gms:google-services:4.3.3'"; - googleServicesPlugin = optionalString (googleServicesJson != null) - "apply plugin: 'com.google.gms.google-services'"; - }); - androidManifestXml = builtins.toFile "AndroidManifest.xml" (import ./AndroidManifest.xml.nix { - inherit applicationId version iconPath intentFilters services permissions activityAttributes usesCleartextTraffic; - }); - stringsXml = builtins.toFile "strings.xml" (import ./strings.xml.nix { - inherit displayName; - }); - applicationMk = builtins.toFile "Application.mk" (import ./Application.mk.nix { - inherit nixpkgs abiVersions; - }); - javaSrc = nixpkgs.buildEnv { - name = applicationId + "-java"; - paths = javaSources ++ [ - (ghcAndroidAarch64.android-activity.src + "/java") #TODO: Use output, not src - (ghcAndroidAarch64.reflex-dom.src + "/java") - ]; - }; - src = ./src; - nativeBuildInputs = [ nixpkgs.rsync ]; - unpackPhase = ""; - } ('' + abiVersions = attrNames appSOs; + in + nixpkgs.runCommand "android-app" + { + buildGradle = builtins.toFile "build.gradle" (import ./build.gradle.nix { + inherit applicationId version additionalDependencies releaseKey universalApk; + googleServicesClasspath = optionalString (googleServicesJson != null) + "classpath 'com.google.gms:google-services:4.3.3'"; + googleServicesPlugin = optionalString (googleServicesJson != null) + "apply plugin: 'com.google.gms.google-services'"; + }); + androidManifestXml = builtins.toFile "AndroidManifest.xml" (import ./AndroidManifest.xml.nix { + inherit applicationId version iconPath intentFilters services permissions activityAttributes usesCleartextTraffic; + }); + stringsXml = builtins.toFile "strings.xml" (import ./strings.xml.nix { + inherit displayName; + }); + applicationMk = builtins.toFile "Application.mk" (import ./Application.mk.nix { + inherit nixpkgs abiVersions; + }); + javaSrc = nixpkgs.buildEnv { + name = applicationId + "-java"; + paths = javaSources ++ [ + (ghcAndroidAarch64.android-activity.src + "/java") #TODO: Use output, not src + (ghcAndroidAarch64.reflex-dom.src + "/java") + ]; + }; + src = ./src; + nativeBuildInputs = [ nixpkgs.rsync ]; + unpackPhase = ""; + } + ('' cp -r --no-preserve=mode "$src" "$out" mkdir -p "$out/src/main" cp -r --no-preserve=mode "$javaSrc" "$out/src/main/java" @@ -111,32 +120,37 @@ in { mkdir -p "$out/jni" ln -s "$applicationMk" "$out/jni/Application.mk" ${optionalString (googleServicesJson != null) ''cp '${googleServicesJson}' "$out/google-services.json"''} - '' + concatStrings (builtins.map (arch: - let - inherit (appSOs.${arch}) hsApp sharedLibs; - sharedLibsCmd = concatStrings (map (libPath: '' - local lib="${libPath}" - if [ ! -f "$lib" ] ; then - >&2 echo 'Error: library $lib not found' - exit 1 - fi - cp --no-preserve=mode "$lib" "$ARCH_LIB" - '') sharedLibs); - in '' - { - ARCH_LIB=$out/lib/${arch} - mkdir -p $ARCH_LIB + '' + concatStrings (builtins.map + (arch: + let + inherit (appSOs.${arch}) hsApp sharedLibs; + sharedLibsCmd = concatStrings (map + (libPath: '' + local lib="${libPath}" + if [ ! -f "$lib" ] ; then + >&2 echo 'Error: library $lib not found' + exit 1 + fi + cp --no-preserve=mode "$lib" "$ARCH_LIB" + '') + sharedLibs); + in + '' + { + ARCH_LIB=$out/lib/${arch} + mkdir -p $ARCH_LIB - local exe="${hsApp}/bin/lib${executableName}.so" - if [ ! -f "$exe" ] ; then - >&2 echo 'Error: executable "${executableName}" not found' - exit 1 - fi - cp --no-preserve=mode "$exe" "$ARCH_LIB/libHaskellActivity.so" + local exe="${hsApp}/bin/lib${executableName}.so" + if [ ! -f "$exe" ] ; then + >&2 echo 'Error: executable "${executableName}" not found' + exit 1 + fi + cp --no-preserve=mode "$exe" "$ARCH_LIB/libHaskellActivity.so" - '' + sharedLibsCmd + '' - } - '') abiVersions) + '' + '' + sharedLibsCmd + '' + } + '') + abiVersions) + '' rsync -r --chmod=+w "${assets}"/ "$out/assets/" rsync -r --chmod=+w "${resources}"/ "$out/res/" [ -d "$out/assets" ] diff --git a/android/strings.xml.nix b/android/strings.xml.nix index d8aca800b..4ac3e4414 100644 --- a/android/strings.xml.nix +++ b/android/strings.xml.nix @@ -1,8 +1,8 @@ { displayName }: '' - - - ${displayName} - + + + ${displayName} + '' diff --git a/default.nix b/default.nix index 005bfd736..0b3a36227 100644 --- a/default.nix +++ b/default.nix @@ -1,6 +1,6 @@ { nixpkgsFunc ? import ./nixpkgs , system ? builtins.currentSystem -, config ? {} +, config ? { } , enableLibraryProfiling ? false , enableExposeAllUnfoldings ? true , enableTraceReflexEvents ? false @@ -10,287 +10,294 @@ , __useTemplateHaskell ? true # Deprecated, just here until we remove feature from reflex and stop CIing it , __useNewerCompiler ? false , iosSdkVersion ? "13.2" -, nixpkgsOverlays ? [] -, haskellOverlays ? [] # TODO deprecate -, haskellOverlaysPre ? [] +, nixpkgsOverlays ? [ ] +, haskellOverlays ? [ ] # TODO deprecate +, haskellOverlaysPre ? [ ] , haskellOverlaysPost ? haskellOverlays , hideDeprecated ? false # The moral equivalent of "-Wcompat -Werror" for using reflex-platform. }: -let iosSupport = system == "x86_64-darwin"; - androidSupport = lib.elem system [ "x86_64-linux" ]; - - xcodeVer = { - "13.2" = "11.3.1"; - }.${iosSdkVersion} or (throw "Unknown iosSdkVersion: ${iosSdkVersion}"); - - # Overlay for GHC which supports the external splices plugin - splicesEval = self: super: { - haskell = super.haskell // { - compiler = super.haskell.compiler // { - ghcSplices-8_6 = (super.haskell.compiler.ghc865.overrideAttrs (drv: { - enableParallelBuilding = false; - src = nixpkgs.hackGet ./haskell-overlays/splices-load-save/dep/ghc-8.6; - # When building from the ghc git repo, ./boot must be run before configuring, whereas - # in the distribution tarball on the haskell.org downloads page, ./boot has already been - # run. - preConfigure = '' - echo ${drv.version} >VERSION - ./boot - '' + drv.preConfigure or ""; - patches = [ - # nixpkgs-21.05 ships with a version of autoreconf that is incompatible with ghc 8.6.5, - # Cf. https://gitlab.haskell.org/ghc/ghc/-/commit/ad2ef3a13f1eb000eab8e3d64592373b91a52806 - ./haskell-overlays/splices-load-save/ghc-8.6-autoreconf.patch - ]; - })).override { - bootPkgs = super.haskell.packages.ghc865Binary // { - happy = super.haskell.packages.ghc865Binary.happy_1_19_12; - }; - useLdGold = !(self.stdenv.targetPlatform.isAarch32) && self.stdenv.hostPlatform.useAndroidPrebuilt; - enableDocs = false; - enableHaddockProgram = false; +let + iosSupport = system == "x86_64-darwin"; + androidSupport = lib.elem system [ "x86_64-linux" ]; + + xcodeVer = { + "13.2" = "11.3.1"; + }.${iosSdkVersion} or (throw "Unknown iosSdkVersion: ${iosSdkVersion}"); + + # Overlay for GHC which supports the external splices plugin + splicesEval = self: super: { + haskell = super.haskell // { + compiler = super.haskell.compiler // { + ghcSplices-8_6 = (super.haskell.compiler.ghc865.overrideAttrs (drv: { + enableParallelBuilding = false; + src = nixpkgs.hackGet ./haskell-overlays/splices-load-save/dep/ghc-8.6; + # When building from the ghc git repo, ./boot must be run before configuring, whereas + # in the distribution tarball on the haskell.org downloads page, ./boot has already been + # run. + preConfigure = '' + echo ${drv.version} >VERSION + ./boot + '' + drv.preConfigure or ""; + patches = [ + # nixpkgs-21.05 ships with a version of autoreconf that is incompatible with ghc 8.6.5, + # Cf. https://gitlab.haskell.org/ghc/ghc/-/commit/ad2ef3a13f1eb000eab8e3d64592373b91a52806 + ./haskell-overlays/splices-load-save/ghc-8.6-autoreconf.patch + ]; + })).override { + bootPkgs = super.haskell.packages.ghc865Binary // { + happy = super.haskell.packages.ghc865Binary.happy_1_19_12; }; - ghcSplices-8_10 = (super.haskell.compiler.ghc8107.override { - # New option for GHC 8.10. Explicitly enable profiling builds - enableProfiledLibs = true; - #enableShared = self.stdenv.hostPlatform == self.stdenv.targetPlatform; - #enableShared = false; - bootPkgs = super.haskell.packages.ghc865Binary // { - happy = super.haskell.packages.ghc865Binary.happy_1_19_12; - }; - }).overrideAttrs (drv: { - src = nixpkgs.hackGet ./haskell-overlays/splices-load-save/dep/ghc-8.10; - # When building from the ghc git repo, ./boot must be run before configuring, whereas - # in the distribution tarball on the haskell.org downloads page, ./boot has already been - # run. - prePatch = '' - echo ${drv.version} >VERSION - patchShebangs boot - ./boot - '' + drv.preConfigure or ""; - }); + useLdGold = !(self.stdenv.targetPlatform.isAarch32) && self.stdenv.hostPlatform.useAndroidPrebuilt; + enableDocs = false; + enableHaddockProgram = false; }; - packages = super.haskell.packages // { - ghcSplices-8_6 = super.haskell.packages.ghc865.override { - buildHaskellPackages = self.buildPackages.haskell.packages.ghcSplices-8_6; - ghc = self.buildPackages.haskell.compiler.ghcSplices-8_6; - }; - ghcSplices-8_10 = super.haskell.packages.ghc8107.override { - buildHaskellPackages = self.buildPackages.haskell.packages.ghcSplices-8_10; - ghc = self.buildPackages.haskell.compiler.ghcSplices-8_10; + ghcSplices-8_10 = (super.haskell.compiler.ghc8107.override { + # New option for GHC 8.10. Explicitly enable profiling builds + enableProfiledLibs = true; + #enableShared = self.stdenv.hostPlatform == self.stdenv.targetPlatform; + #enableShared = false; + bootPkgs = super.haskell.packages.ghc865Binary // { + happy = super.haskell.packages.ghc865Binary.happy_1_19_12; }; + }).overrideAttrs (drv: { + src = nixpkgs.hackGet ./haskell-overlays/splices-load-save/dep/ghc-8.10; + # When building from the ghc git repo, ./boot must be run before configuring, whereas + # in the distribution tarball on the haskell.org downloads page, ./boot has already been + # run. + prePatch = '' + echo ${drv.version} >VERSION + patchShebangs boot + ./boot + '' + drv.preConfigure or ""; + }); + }; + packages = super.haskell.packages // { + ghcSplices-8_6 = super.haskell.packages.ghc865.override { + buildHaskellPackages = self.buildPackages.haskell.packages.ghcSplices-8_6; + ghc = self.buildPackages.haskell.compiler.ghcSplices-8_6; + }; + ghcSplices-8_10 = super.haskell.packages.ghc8107.override { + buildHaskellPackages = self.buildPackages.haskell.packages.ghcSplices-8_10; + ghc = self.buildPackages.haskell.compiler.ghcSplices-8_10; }; }; }; + }; - hackGetOverlay = self: super: - import ./nixpkgs-overlays/hack-get { inherit lib; } self; - - bindHaskellOverlays = self: super: { - haskell = super.haskell // { - overlays = super.haskell.overlays or {} // import ./haskell-overlays { - nixpkgs = self; - inherit (self) lib; - haskellLib = self.haskell.lib; - inherit - useFastWeak useReflexOptimizer enableLibraryProfiling enableTraceReflexEvents - useTextJSString enableExposeAllUnfoldings __useTemplateHaskell - haskellOverlaysPre - haskellOverlaysPost; - inherit ghcSavedSplices-8_6 ghcSavedSplices-8_10; - }; + hackGetOverlay = self: super: + import ./nixpkgs-overlays/hack-get { inherit lib; } self; + + bindHaskellOverlays = self: super: { + haskell = super.haskell // { + overlays = super.haskell.overlays or { } // import ./haskell-overlays { + nixpkgs = self; + inherit (self) lib; + haskellLib = self.haskell.lib; + inherit + useFastWeak useReflexOptimizer enableLibraryProfiling enableTraceReflexEvents + useTextJSString enableExposeAllUnfoldings __useTemplateHaskell + haskellOverlaysPre + haskellOverlaysPost; + inherit ghcSavedSplices-8_6 ghcSavedSplices-8_10; }; }; + }; - forceStaticLibs = self: super: { - darwin = super.darwin // { - libiconv = super.darwin.libiconv.overrideAttrs (_: - lib.optionalAttrs (self.stdenv.hostPlatform != self.stdenv.buildPlatform) { - postInstall = "rm $out/include/libcharset.h $out/include/localcharset.h"; - configureFlags = ["--disable-shared" "--enable-static"]; - }); - }; - zlib = super.zlib.override (lib.optionalAttrs - (self.stdenv.hostPlatform != self.stdenv.buildPlatform) - { static = true; shared = false; }); - }; + forceStaticLibs = self: super: { + darwin = super.darwin // { + libiconv = super.darwin.libiconv.overrideAttrs (_: + lib.optionalAttrs (self.stdenv.hostPlatform != self.stdenv.buildPlatform) { + postInstall = "rm $out/include/libcharset.h $out/include/localcharset.h"; + configureFlags = [ "--disable-shared" "--enable-static" ]; + }); + }; + zlib = super.zlib.override (lib.optionalAttrs + (self.stdenv.hostPlatform != self.stdenv.buildPlatform) + { static = true; shared = false; }); + }; - mobileGhcOverlay = import ./nixpkgs-overlays/mobile-ghc { inherit lib; }; + mobileGhcOverlay = import ./nixpkgs-overlays/mobile-ghc { inherit lib; }; - allCabalHashesOverlay = import ./nixpkgs-overlays/all-cabal-hashes; + allCabalHashesOverlay = import ./nixpkgs-overlays/all-cabal-hashes; - nixpkgsArgs = { - inherit system; - overlays = [ - hackGetOverlay - bindHaskellOverlays - forceStaticLibs - splicesEval - mobileGhcOverlay - allCabalHashesOverlay - (self: super: { + nixpkgsArgs = { + inherit system; + overlays = [ + hackGetOverlay + bindHaskellOverlays + forceStaticLibs + splicesEval + mobileGhcOverlay + allCabalHashesOverlay + (self: super: { - #NOTE(Dylan): If you ever hit this "null" you've done something terribly wrong :^) - runtimeShellPackage = if self.stdenv.hostPlatform.isGhcjs then null else super.runtimeShellPackage; + #NOTE(Dylan): If you ever hit this "null" you've done something terribly wrong :^) + runtimeShellPackage = if self.stdenv.hostPlatform.isGhcjs then null else super.runtimeShellPackage; - polkit = super.polkit.override { - gobject-introspection = super.gobject-introspection-unwrapped; - }; - openjdk16-bootstrap = super.openjdk16-bootstrap.override { - gtkSupport = false; - }; - adoptopenjdk-hotspot-bin-16 = super.adoptopenjdk-hotspot-bin-16.override { - gtkSupport = false; - }; + polkit = super.polkit.override { + gobject-introspection = super.gobject-introspection-unwrapped; + }; + openjdk16-bootstrap = super.openjdk16-bootstrap.override { + gtkSupport = false; + }; + adoptopenjdk-hotspot-bin-16 = super.adoptopenjdk-hotspot-bin-16.override { + gtkSupport = false; + }; - sqlite = super.sqlite.overrideAttrs (old: lib.optionalAttrs (self.stdenv.hostPlatform.useAndroidPrebuilt or false) { - postBuild = '' - mkdir -p $debug - ''; - }); - - libiconv = super.libiconv.overrideAttrs (old: lib.optionalAttrs (self.stdenv.hostPlatform.useAndroidPrebuilt or false) { - configureFlags = [ "--disable-shared" "--enable-static" ]; - }); - - libffi = if (self.stdenv.hostPlatform.useAndroidPrebuilt or false) then super.libffi_3_3 else super.libffi; - }) - (import ./nixpkgs-overlays/ghc.nix { inherit lib; }) - ] ++ nixpkgsOverlays; - config = config // { - permittedInsecurePackages = (config.permittedInsecurePackages or []) ++ [ - "webkitgtk-2.4.11" - ]; + sqlite = super.sqlite.overrideAttrs (old: lib.optionalAttrs (self.stdenv.hostPlatform.useAndroidPrebuilt or false) { + postBuild = '' + mkdir -p $debug + ''; + }); - # XCode needed for native macOS app - # Obelisk needs it to for some reason - allowUnfree = true; - }; + libiconv = super.libiconv.overrideAttrs (old: lib.optionalAttrs (self.stdenv.hostPlatform.useAndroidPrebuilt or false) { + configureFlags = [ "--disable-shared" "--enable-static" ]; + }); + + libffi = if (self.stdenv.hostPlatform.useAndroidPrebuilt or false) then super.libffi_3_3 else super.libffi; + }) + (import ./nixpkgs-overlays/ghc.nix { inherit lib; }) + ] ++ nixpkgsOverlays; + config = config // { + permittedInsecurePackages = (config.permittedInsecurePackages or [ ]) ++ [ + "webkitgtk-2.4.11" + ]; + + # XCode needed for native macOS app + # Obelisk needs it to for some reason + allowUnfree = true; }; + }; - nixpkgs = nixpkgsFunc nixpkgsArgs; - - inherit (nixpkgs) lib fetchurl fetchgit fetchgitPrivate fetchFromGitHub fetchFromBitbucket; - - wasmCross = nixpkgs.hackGet ./wasm-cross; - webGhcSrc = (import (wasmCross + /webghc.nix) { inherit fetchgit; }).ghc8107SplicesSrc; - nixpkgsCross = { - # NOTE(Dylan Green): - # sdkVer 30 is the minimum for android, else we have to use libffi 3.3 - # bionic doesn't support/expose memfd_create before sdk30 - # https://android.googlesource.com/platform/bionic/+/refs/heads/master/docs/status.md - # Look for "new libc functions in R (API Level 30):", memfd_create will be one of the functions / - # symbols we need to build newer libffi - # This means we'll drop all SDKs pre-30 - - # NOTE(Dylan Green): - # We don't want to use "isStatic" here as we still rely on shared-objects - # adding "isStatic" completely disables generating most SOs, and we still need them - # for libffi (at the very least). Currently the big issues are caused by the linker attempting (and failing) - # to link against a dynamic crtbegin.o (crtbegin.c) bionic does provide a static crtbegin, although the linker - # defaults to a dynamic version - - # TODO(Dylan Green): - # Look into making this a proper static build up into "reflex-todomvc" - android = lib.mapAttrs (_: args: nixpkgsFunc (nixpkgsArgs // args)) rec { - aarch64 = { - crossSystem = lib.systems.examples.aarch64-android-prebuilt // { - #isStatic = true; - sdkVer = "30"; - }; + nixpkgs = nixpkgsFunc nixpkgsArgs; + + inherit (nixpkgs) lib fetchurl fetchgit fetchgitPrivate fetchFromGitHub fetchFromBitbucket; + + wasmCross = nixpkgs.hackGet ./wasm-cross; + webGhcSrc = (import (wasmCross + /webghc.nix) { inherit fetchgit; }).ghc8107SplicesSrc; + nixpkgsCross = { + # NOTE(Dylan Green): + # sdkVer 30 is the minimum for android, else we have to use libffi 3.3 + # bionic doesn't support/expose memfd_create before sdk30 + # https://android.googlesource.com/platform/bionic/+/refs/heads/master/docs/status.md + # Look for "new libc functions in R (API Level 30):", memfd_create will be one of the functions / + # symbols we need to build newer libffi + # This means we'll drop all SDKs pre-30 + + # NOTE(Dylan Green): + # We don't want to use "isStatic" here as we still rely on shared-objects + # adding "isStatic" completely disables generating most SOs, and we still need them + # for libffi (at the very least). Currently the big issues are caused by the linker attempting (and failing) + # to link against a dynamic crtbegin.o (crtbegin.c) bionic does provide a static crtbegin, although the linker + # defaults to a dynamic version + + # TODO(Dylan Green): + # Look into making this a proper static build up into "reflex-todomvc" + android = lib.mapAttrs (_: args: nixpkgsFunc (nixpkgsArgs // args)) rec { + aarch64 = { + crossSystem = lib.systems.examples.aarch64-android-prebuilt // { + #isStatic = true; + sdkVer = "30"; }; - aarch32 = { - crossSystem = lib.systems.examples.armv7a-android-prebuilt // { - #isStatic = true; - sdkVer = "30"; - }; + }; + aarch32 = { + crossSystem = lib.systems.examples.armv7a-android-prebuilt // { + #isStatic = true; + sdkVer = "30"; }; }; - ios = lib.mapAttrs (_: args: nixpkgsFunc (nixpkgsArgs // args)) rec { - simulator64 = { - crossSystem = lib.systems.examples.iphone64-simulator // { - sdkVer = iosSdkVersion; - inherit xcodeVer; - }; + }; + ios = lib.mapAttrs (_: args: nixpkgsFunc (nixpkgsArgs // args)) rec { + simulator64 = { + crossSystem = lib.systems.examples.iphone64-simulator // { + sdkVer = iosSdkVersion; + inherit xcodeVer; }; - aarch64 = { - crossSystem = lib.systems.examples.iphone64 // { - isStatic = true; - sdkVer = iosSdkVersion; - inherit xcodeVer; - }; + }; + aarch64 = { + crossSystem = lib.systems.examples.iphone64 // { + isStatic = true; + sdkVer = iosSdkVersion; + inherit xcodeVer; }; - aarch32 = { - crossSystem = lib.systems.examples.iphone32 // { - isStatic = true; - sdkVer = iosSdkVersion; - inherit xcodeVer; - }; + }; + aarch32 = { + crossSystem = lib.systems.examples.iphone32 // { + isStatic = true; + sdkVer = iosSdkVersion; + inherit xcodeVer; }; - # Back compat - arm64 = lib.warn "nixpkgsCross.ios.arm64 has been deprecated, using nixpkgsCross.ios.aarch64 instead." aarch64; }; - ghcjs = nixpkgsFunc (nixpkgsArgs // { - crossSystem = lib.systems.examples.ghcjs; - }); - wasm = nixpkgsFunc (nixpkgsArgs // - (import wasmCross { inherit nixpkgsFunc; }).nixpkgsCrossArgs webGhcSrc "8.6.5" - ); + # Back compat + arm64 = lib.warn "nixpkgsCross.ios.arm64 has been deprecated, using nixpkgsCross.ios.aarch64 instead." aarch64; }; + ghcjs = nixpkgsFunc (nixpkgsArgs // { + crossSystem = lib.systems.examples.ghcjs; + }); + wasm = nixpkgsFunc (nixpkgsArgs // + (import wasmCross { inherit nixpkgsFunc; }).nixpkgsCrossArgs webGhcSrc "8.6.5" + ); + }; - haskellLib = nixpkgs.haskell.lib; + haskellLib = nixpkgs.haskell.lib; - overrideCabal = pkg: f: if pkg == null then null else haskellLib.overrideCabal pkg f; + overrideCabal = pkg: f: if pkg == null then null else haskellLib.overrideCabal pkg f; - combineOverrides = old: new: old // new // lib.optionalAttrs (old ? overrides && new ? overrides) { - overrides = lib.composeExtensions old.overrides new.overrides; - }; + combineOverrides = old: new: old // new // lib.optionalAttrs (old ? overrides && new ? overrides) { + overrides = lib.composeExtensions old.overrides new.overrides; + }; - # Makes sure that old `overrides` from a previous call to `override` are not - # forgotten, but composed. Do this by overriding `override` and passing a - # function which takes the old argument set and combining it. What a tongue - # twister! - makeRecursivelyOverridable = x: x // { - override = new: makeRecursivelyOverridable (x.override (old: (combineOverrides old new))); - }; + # Makes sure that old `overrides` from a previous call to `override` are not + # forgotten, but composed. Do this by overriding `override` and passing a + # function which takes the old argument set and combining it. What a tongue + # twister! + makeRecursivelyOverridable = x: x // { + override = new: makeRecursivelyOverridable (x.override (old: (combineOverrides old new))); + }; - cabal2nixResult = src: builtins.trace "cabal2nixResult is deprecated; use ghc.haskellSrc2nix or ghc.callCabal2nix instead" (ghc.haskellSrc2nix { - name = "for-unknown-package"; - src = "file://${src}"; - sha256 = null; - }); + cabal2nixResult = src: builtins.trace "cabal2nixResult is deprecated; use ghc.haskellSrc2nix or ghc.callCabal2nix instead" (ghc.haskellSrc2nix { + name = "for-unknown-package"; + src = "file://${src}"; + sha256 = null; + }); ghcSavedSplices = if __useNewerCompiler then ghcSavedSplices-8_10 else ghcSavedSplices-8_6; ghcSavedSplices-8_6 = (makeRecursivelyOverridable nixpkgs.haskell.packages.integer-simple.ghcSplices-8_6).override { - overrides = lib.foldr lib.composeExtensions (_: _: {}) (let - haskellOverlays = nixpkgs.haskell.overlays; - in [ - haskellOverlays.combined - (haskellOverlays.saveSplices "8.6") - (self: super: with haskellLib; { - blaze-textual = enableCabalFlag super.blaze-textual "integer-simple"; - cryptonite = disableCabalFlag super.cryptonite "integer-gmp"; - integer-logarithms = disableCabalFlag super.integer-logarithms "integer-gmp"; - scientific = enableCabalFlag super.scientific "integer-simple"; - dependent-sum-template = dontCheck super.dependent-sum-template; - generic-deriving = dontCheck super.generic-deriving; - }) - ]); + overrides = lib.foldr lib.composeExtensions (_: _: { }) ( + let + haskellOverlays = nixpkgs.haskell.overlays; + in + [ + haskellOverlays.combined + (haskellOverlays.saveSplices "8.6") + (self: super: with haskellLib; { + blaze-textual = enableCabalFlag super.blaze-textual "integer-simple"; + cryptonite = disableCabalFlag super.cryptonite "integer-gmp"; + integer-logarithms = disableCabalFlag super.integer-logarithms "integer-gmp"; + scientific = enableCabalFlag super.scientific "integer-simple"; + dependent-sum-template = dontCheck super.dependent-sum-template; + generic-deriving = dontCheck super.generic-deriving; + }) + ] + ); }; ghcSavedSplices-8_10 = (makeRecursivelyOverridable nixpkgs.haskell.packages.integer-simple.ghcSplices-8_10).override { - overrides = lib.foldr lib.composeExtensions (_: _: {}) (let - haskellOverlays = nixpkgs.haskell.overlays; - in [ - haskellOverlays.combined - (haskellOverlays.saveSplices "8.10") - (self: super: with haskellLib; { - blaze-textual = enableCabalFlag super.blaze-textual "integer-simple"; - cryptonite = disableCabalFlag super.cryptonite "integer-gmp"; - integer-logarithms = disableCabalFlag super.integer-logarithms "integer-gmp"; - scientific = enableCabalFlag super.scientific "integer-simple"; - }) - ]); + overrides = lib.foldr lib.composeExtensions (_: _: { }) ( + let + haskellOverlays = nixpkgs.haskell.overlays; + in + [ + haskellOverlays.combined + (haskellOverlays.saveSplices "8.10") + (self: super: with haskellLib; { + blaze-textual = enableCabalFlag super.blaze-textual "integer-simple"; + cryptonite = disableCabalFlag super.cryptonite "integer-gmp"; + integer-logarithms = disableCabalFlag super.integer-logarithms "integer-gmp"; + scientific = enableCabalFlag super.scientific "integer-simple"; + }) + ] + ); }; ghcjs = if __useNewerCompiler then ghcjs8_10 else ghcjs8_6; ghcjs8_6 = (makeRecursivelyOverridable (nixpkgsCross.ghcjs.haskell.packages.ghcjs86.override (old: { @@ -410,98 +417,101 @@ let iosSupport = system == "x86_64-darwin"; buildApp = nixpkgs.lib.makeOverridable (import ./ios { inherit nixpkgs ghc; }); }; -in let this = rec { - inherit (nixpkgs) - filterGit - hackGet - thunkSet - ; - inherit nixpkgs - nixpkgsCross - overrideCabal - ghc - ghcHEAD - ghc8_6 - ghc8_10 - ghcIosSimulator64 - ghcIosAarch64 - ghcIosAarch64-8_6 - ghcIosAarch64-8_10 - ghcIosAarch32 - ghcIosAarch32-8_6 - ghcIosAarch32-8_10 - ghcAndroidAarch64 - ghcAndroidAarch64-8_6 - ghcAndroidAarch64-8_10 - ghcAndroidAarch32 - ghcAndroidAarch32-8_6 - ghcAndroidAarch32-8_10 - ghcjs - ghcjs8_6 - ghcjs8_10 - ghcSavedSplices - ghcSavedSplices-8_6 - ghcSavedSplices-8_10 - android - androidWithHaskellPackages - iosAarch32 - iosAarch64 - iosSimulator - iosWithHaskellPackages - wasm - wasmCross - ; - - # Back compat - ios = iosAarch64; - ghcAndroidArm64 = lib.warn "ghcAndroidArm64 has been deprecated, using ghcAndroidAarch64 instead." ghcAndroidAarch64; - ghcAndroidArmv7a = lib.warn "ghcAndroidArmv7a has been deprecated, using ghcAndroidAarch32 instead." ghcAndroidAarch32; - ghcIosArm64 = lib.warn "ghcIosArm64 has been deprecated, using ghcIosAarch64 instead." ghcIosAarch64; - - androidReflexTodomvc = android.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - applicationId = "org.reflexfrp.todomvc"; - displayName = "Reflex TodoMVC"; - }; - androidReflexTodomvc-8_6 = android-8_6.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - applicationId = "org.reflexfrp.todomvc.via_8_6"; - displayName = "Reflex TodoMVC via GHC 8.6"; - }; - androidReflexTodomvc-8_10 = android-8_10.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - applicationId = "org.reflexfrp.todomvc.via_8_10"; - displayName = "Reflex TodoMVC via GHC 8.10"; - }; - iosReflexTodomvc = ios.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - bundleIdentifier = "org.reflexfrp.todomvc"; - bundleName = "Reflex TodoMVC"; - }; - iosReflexTodomvc-8_6 = iosAarch64-8_6.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - bundleIdentifier = "org.reflexfrp.todomvc.via_8_6"; - bundleName = "Reflex TodoMVC via GHC 8.6"; - }; - iosReflexTodomvc-8_10 = iosAarch64-8_10.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - bundleIdentifier = "org.reflexfrp.todomvc.via_8_10"; - bundleName = "Reflex TodoMVC via GHC 8.10"; - }; - iosSimulatorReflexTodomvc = iosSimulator.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - bundleIdentifier = "org.reflexfrp.todomvc"; - bundleName = "Reflex TodoMVC"; - }; - setGhcLibdir = ghcLibdir: inputGhcjs: - let libDir = "$out/lib/ghcjs-${inputGhcjs.version}"; +in +let + this = rec { + inherit (nixpkgs) + filterGit + hackGet + thunkSet + ; + inherit nixpkgs + nixpkgsCross + overrideCabal + ghc + ghcHEAD + ghc8_6 + ghc8_10 + ghcIosSimulator64 + ghcIosAarch64 + ghcIosAarch64-8_6 + ghcIosAarch64-8_10 + ghcIosAarch32 + ghcIosAarch32-8_6 + ghcIosAarch32-8_10 + ghcAndroidAarch64 + ghcAndroidAarch64-8_6 + ghcAndroidAarch64-8_10 + ghcAndroidAarch32 + ghcAndroidAarch32-8_6 + ghcAndroidAarch32-8_10 + ghcjs + ghcjs8_6 + ghcjs8_10 + ghcSavedSplices + ghcSavedSplices-8_6 + ghcSavedSplices-8_10 + android + androidWithHaskellPackages + iosAarch32 + iosAarch64 + iosSimulator + iosWithHaskellPackages + wasm + wasmCross + ; + + # Back compat + ios = iosAarch64; + ghcAndroidArm64 = lib.warn "ghcAndroidArm64 has been deprecated, using ghcAndroidAarch64 instead." ghcAndroidAarch64; + ghcAndroidArmv7a = lib.warn "ghcAndroidArmv7a has been deprecated, using ghcAndroidAarch32 instead." ghcAndroidAarch32; + ghcIosArm64 = lib.warn "ghcIosArm64 has been deprecated, using ghcIosAarch64 instead." ghcIosAarch64; + + androidReflexTodomvc = android.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + applicationId = "org.reflexfrp.todomvc"; + displayName = "Reflex TodoMVC"; + }; + androidReflexTodomvc-8_6 = android-8_6.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + applicationId = "org.reflexfrp.todomvc.via_8_6"; + displayName = "Reflex TodoMVC via GHC 8.6"; + }; + androidReflexTodomvc-8_10 = android-8_10.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + applicationId = "org.reflexfrp.todomvc.via_8_10"; + displayName = "Reflex TodoMVC via GHC 8.10"; + }; + iosReflexTodomvc = ios.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + bundleIdentifier = "org.reflexfrp.todomvc"; + bundleName = "Reflex TodoMVC"; + }; + iosReflexTodomvc-8_6 = iosAarch64-8_6.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + bundleIdentifier = "org.reflexfrp.todomvc.via_8_6"; + bundleName = "Reflex TodoMVC via GHC 8.6"; + }; + iosReflexTodomvc-8_10 = iosAarch64-8_10.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + bundleIdentifier = "org.reflexfrp.todomvc.via_8_10"; + bundleName = "Reflex TodoMVC via GHC 8.10"; + }; + iosSimulatorReflexTodomvc = iosSimulator.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + bundleIdentifier = "org.reflexfrp.todomvc"; + bundleName = "Reflex TodoMVC"; + }; + setGhcLibdir = ghcLibdir: inputGhcjs: + let + libDir = "$out/lib/ghcjs-${inputGhcjs.version}"; ghcLibdirLink = nixpkgs.stdenv.mkDerivation { name = "ghc_libdir"; inherit ghcLibdir; @@ -510,144 +520,153 @@ in let this = rec { echo "$ghcLibdir" > ${libDir}/ghc_libdir_override ''; }; - in inputGhcjs // { - outPath = nixpkgs.buildEnv { - inherit (inputGhcjs) name; - paths = [ inputGhcjs ghcLibdirLink ]; - postBuild = '' - mv ${libDir}/ghc_libdir_override ${libDir}/ghc_libdir - ''; - }; - }; - - platforms = [ - "ghcjs" - "ghc" - ]; - - androidDevTools = [ - ghc.haven - nixpkgs.maven - nixpkgs.androidsdk_9_0 - ]; - - # Tools that are useful for development under both ghc and ghcjs - generalDevTools' = { nativeHaskellPackages ? ghc }: { - inherit (nativeHaskellPackages) - Cabal - cabal-install - ghcid - hasktags - hlint - stylish-haskell # Recent stylish-haskell only builds with AMP in place - reflex-ghci - ; - inherit (nixpkgs) - cabal2nix - curl - nix-prefetch-scripts - nodejs - pkgconfig - closurecompiler - ; - }; + in + inputGhcjs // { + outPath = nixpkgs.buildEnv { + inherit (inputGhcjs) name; + paths = [ inputGhcjs ghcLibdirLink ]; + postBuild = '' + mv ${libDir}/ghc_libdir_override ${libDir}/ghc_libdir + ''; + }; + }; - workOn = haskellPackages: package: (overrideCabal package (drv: { - buildTools = (drv.buildTools or []) ++ builtins.attrValues (generalDevTools' {}); - })).env; - - # A minimal wrapper around the build-wasm-app from wasm-cross - # Useful in building simple cabal projects like reflex-todomvc - build-wasm-app-wrapper = - ename: # Name of the executable, usually same as cabal project name - pkgPath : # Path of cabal package - args: # Others options to pass to build-wasm-app - let - pkg = wasm.callPackage pkgPath {}; - webabi = nixpkgs.callPackage (wasmCross + /webabi) {}; - build-wasm-app = nixpkgs.callPackage (wasmCross + /build-wasm-app.nix) ({ inherit webabi; } // args); - in build-wasm-app { - inherit pkg ename; - }; + platforms = [ + "ghcjs" + "ghc" + ]; + + androidDevTools = [ + ghc.haven + nixpkgs.maven + nixpkgs.androidsdk_9_0 + ]; + + # Tools that are useful for development under both ghc and ghcjs + generalDevTools' = { nativeHaskellPackages ? ghc }: { + inherit (nativeHaskellPackages) + Cabal + cabal-install + ghcid + hasktags + hlint + stylish-haskell# Recent stylish-haskell only builds with AMP in place + reflex-ghci + ; + inherit (nixpkgs) + cabal2nix + curl + nix-prefetch-scripts + nodejs + pkgconfig + closurecompiler + ; + }; - # A simple derivation that just creates a file with the names of all - # of its inputs. If built, it will have a runtime dependency on all - # of the given build inputs. - pinBuildInputs = name: buildInputs: (nixpkgs.releaseTools.aggregate { - inherit name; - constituents = buildInputs; - }).overrideAttrs (old: { - buildCommand = old.buildCommand + '' - echo "$propagatedBuildInputs $buildInputs $nativeBuildInputs $propagatedNativeBuildInputs" > "$out/deps" - ''; - inherit buildInputs; - }); + workOn = haskellPackages: package: (overrideCabal package (drv: { + buildTools = (drv.buildTools or [ ]) ++ builtins.attrValues (generalDevTools' { }); + })).env; + + # A minimal wrapper around the build-wasm-app from wasm-cross + # Useful in building simple cabal projects like reflex-todomvc + build-wasm-app-wrapper = + ename: # Name of the executable, usually same as cabal project name + pkgPath: # Path of cabal package + args: # Others options to pass to build-wasm-app + let + pkg = wasm.callPackage pkgPath { }; + webabi = nixpkgs.callPackage (wasmCross + /webabi) { }; + build-wasm-app = nixpkgs.callPackage (wasmCross + /build-wasm-app.nix) ({ inherit webabi; } // args); + in + build-wasm-app { + inherit pkg ename; + }; - reflexEnv = platform: - let haskellPackages = builtins.getAttr platform this; - ghcWithStuff = if platform == "ghc" - then haskellPackages.ghcWithPackages - else haskellPackages.ghcWithPackages; - in ghcWithStuff (p: import ./packages.nix { - haskellPackages = p; - inherit platform; + # A simple derivation that just creates a file with the names of all + # of its inputs. If built, it will have a runtime dependency on all + # of the given build inputs. + pinBuildInputs = name: buildInputs: (nixpkgs.releaseTools.aggregate { + inherit name; + constituents = buildInputs; + }).overrideAttrs (old: { + buildCommand = old.buildCommand + '' + echo "$propagatedBuildInputs $buildInputs $nativeBuildInputs $propagatedNativeBuildInputs" > "$out/deps" + ''; + inherit buildInputs; }); - tryReflexPackages = builtins.attrValues (generalDevTools' {}) - ++ builtins.map reflexEnv platforms; + reflexEnv = platform: + let + haskellPackages = builtins.getAttr platform this; + ghcWithStuff = + if platform == "ghc" + then haskellPackages.ghcWithPackages + else haskellPackages.ghcWithPackages; + in + ghcWithStuff (p: import ./packages.nix { + haskellPackages = p; + inherit platform; + }); + + tryReflexPackages = builtins.attrValues (generalDevTools' { }) + ++ builtins.map reflexEnv platforms; - cachePackages = - let otherPlatforms = lib.optionals androidSupport [ + cachePackages = + let + otherPlatforms = lib.optionals androidSupport [ (if __useNewerCompiler then "ghcAndroidAarch64-8_10" else "ghcAndroidAarch64") (if __useNewerCompiler then "ghcAndroidAarch32-8_10" else "ghcAndroidAarch32") ] ++ lib.optionals iosSupport [ (if __useNewerCompiler then "ghcIosAarch64-8_10" else "ghcIosAarch64") (if __useNewerCompiler then "ghcIosSimulator64-8_10" else "ghcIosSimulator64") ]; - in tryReflexPackages + in + tryReflexPackages ++ builtins.map reflexEnv otherPlatforms ++ lib.optionals androidSupport [ androidDevTools androidReflexTodomvc ] ++ lib.optionals iosSupport [ - iosReflexTodomvc iosSimulatorReflexTodomvc + iosReflexTodomvc + iosSimulatorReflexTodomvc ]; - inherit cabal2nixResult system androidSupport iosSupport; - project = args: import ./project this (args ({ pkgs = nixpkgs; } // this)); - tryReflexShell = pinBuildInputs ("shell-" + system) tryReflexPackages; - ghcjsExternsJs = ./ghcjs.externs.js; -}; - -# Deprecated reexports. These were made for `./scripts/*`, but are reexported -# here for backwards compatability. -legacy = { - # Added 2019-12, will be removed 2020-06. - inherit - (import ./nix-utils/hackage { reflex-platform = this; }) - attrsToList - mapSet - mkSdist - sdists - mkHackageDocs - hackageDocs - mkReleaseCandidate - releaseCandidates - ; - generalDevTools = _: builtins.attrValues (this.generalDevTools' {}); - generalDevToolsAttrs = _: this.generalDevTools' {}; - nativeHaskellPackages = haskellPackages: - if haskellPackages.isGhcjs or false - then haskellPackages.ghc - else haskellPackages; - workOnMulti' = { env, packageNames }: - (import ./nix-utils/work-on-multi {}).workOnMulti { - envFunc = _: env; - inherit packageNames; - }; - workOnMulti = env: packageNames: legacy.workOnMulti' { inherit env packageNames; }; -}; + inherit cabal2nixResult system androidSupport iosSupport; + project = args: import ./project this (args ({ pkgs = nixpkgs; } // this)); + tryReflexShell = pinBuildInputs ("shell-" + system) tryReflexPackages; + ghcjsExternsJs = ./ghcjs.externs.js; + }; + + # Deprecated reexports. These were made for `./scripts/*`, but are reexported + # here for backwards compatability. + legacy = { + # Added 2019-12, will be removed 2020-06. + inherit + (import ./nix-utils/hackage { reflex-platform = this; }) + attrsToList + mapSet + mkSdist + sdists + mkHackageDocs + hackageDocs + mkReleaseCandidate + releaseCandidates + ; + generalDevTools = _: builtins.attrValues (this.generalDevTools' { }); + generalDevToolsAttrs = _: this.generalDevTools' { }; + nativeHaskellPackages = haskellPackages: + if haskellPackages.isGhcjs or false + then haskellPackages.ghc + else haskellPackages; + workOnMulti' = { env, packageNames }: + (import ./nix-utils/work-on-multi { }).workOnMulti { + envFunc = _: env; + inherit packageNames; + }; + workOnMulti = env: packageNames: legacy.workOnMulti' { inherit env packageNames; }; + }; -in this // lib.optionalAttrs +in +this // lib.optionalAttrs (!hideDeprecated) (lib.mapAttrs (attrName: builtins.trace "The attribute \"${attrName}\" is deprecated. See reflex-platform's root default.nix.") legacy) diff --git a/examples/project/default.nix b/examples/project/default.nix index a6869a118..501ffa3ef 100644 --- a/examples/project/default.nix +++ b/examples/project/default.nix @@ -1,7 +1,9 @@ { system ? builtins.currentSystem -, config ? {} +, config ? { } }: -let reflex-platform = import ../../. { inherit system config; }; - projSrc = reflex-platform.hackGet ./reflex-project-skeleton; - proj = import projSrc { inherit reflex-platform; }; -in proj +let + reflex-platform = import ../../. { inherit system config; }; + projSrc = reflex-platform.hackGet ./reflex-project-skeleton; + proj = import projSrc { inherit reflex-platform; }; +in +proj diff --git a/examples/project/reflex-project-skeleton/default.nix b/examples/project/reflex-project-skeleton/default.nix index 2b4d4ab11..9852e4312 100644 --- a/examples/project/reflex-project-skeleton/default.nix +++ b/examples/project/reflex-project-skeleton/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/examples/project/reflex-project-skeleton/thunk.nix b/examples/project/reflex-project-skeleton/thunk.nix index bbf2dc18f..b40203471 100644 --- a/examples/project/reflex-project-skeleton/thunk.nix +++ b/examples/project/reflex-project-skeleton/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/android/default.nix b/haskell-overlays/android/default.nix index e99b37901..203a3127f 100644 --- a/haskell-overlays/android/default.nix +++ b/haskell-overlays/android/default.nix @@ -9,31 +9,35 @@ let }); in self: super: { - _dep = super._dep or {} // thunkSet ./dep; + _dep = super._dep or { } // thunkSet ./dep; + + android-activity = haskellLib.overrideCabal + (self.callCabal2nix "android-activity" (self._dep.android-activity + "/") { + log = nixpkgs.androidndkPkgs_24.libraries; + }) + (drv: + let + jdk-fixed = (nixpkgs.buildPackages.jdk17.override { + headless = true; + enableGnome2 = false; + enableJavaFX = false; + openjdk17-bootstrap = nixpkgs.buildPackages.openjdk17-bootstrap.override { + gtkSupport = false; + }; + }); + in + { + librarySystemDepends = (drv.librarySystemDepends or [ ]) ++ [ jdk-fixed ]; + enableSharedExecutables = true; + enableSharedLibraries = true; + enableStaticLibraries = false; + buildTools = (drv.buildTools or [ ]) ++ [ ]; + configureFlags = (drv.configureFlags or [ ]) ++ [ + "--enable-shared" + #"-v3" + ]; + }); - android-activity = haskellLib.overrideCabal (self.callCabal2nix "android-activity" (self._dep.android-activity + "/") { - log = nixpkgs.androidndkPkgs_24.libraries; - }) (drv: let - jdk-fixed = (nixpkgs.buildPackages.jdk17.override { - headless = true; - enableGnome2 = false; - enableJavaFX = false; - openjdk17-bootstrap = nixpkgs.buildPackages.openjdk17-bootstrap.override { - gtkSupport = false; - }; - }); - in { - librarySystemDepends = (drv.librarySystemDepends or []) ++ [ jdk-fixed ]; - enableSharedExecutables = true; - enableSharedLibraries = true; - enableStaticLibraries = false; - buildTools = (drv.buildTools or []) ++ [ ]; - configureFlags = (drv.configureFlags or []) ++ [ - "--enable-shared" - #"-v3" - ]; - }); - syb = haskellLib.overrideCabal super.syb (drv: { jailbreak = true; }); cabal-doctest = null; @@ -44,9 +48,9 @@ self: super: { blaze-textual = haskellLib.enableCabalFlag super.blaze-textual "integer-simple"; cryptonite = haskellLib.disableCabalFlag super.cryptonite "integer-gmp"; - + OneTuple = haskellLib.overrideCabal super.OneTuple (drv: { - libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ + libraryHaskellDepends = (drv.libraryHaskellDepends or [ ]) ++ [ self.hashable ]; }); diff --git a/haskell-overlays/android/dep/android-activity/default.nix b/haskell-overlays/android/dep/android-activity/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/android/dep/android-activity/default.nix +++ b/haskell-overlays/android/dep/android-activity/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/android/dep/android-activity/thunk.nix b/haskell-overlays/android/dep/android-activity/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/android/dep/android-activity/thunk.nix +++ b/haskell-overlays/android/dep/android-activity/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/any-8.nix b/haskell-overlays/any-8.nix index 9a5432d68..8fe34ad37 100644 --- a/haskell-overlays/any-8.nix +++ b/haskell-overlays/any-8.nix @@ -1,4 +1,3 @@ { lib, haskellLib, getGhcVersion }: with haskellLib; -self: super: lib.optionalAttrs (lib.versionOlder (getGhcVersion super.ghc) "8.6.0") { -} +self: super: lib.optionalAttrs (lib.versionOlder (getGhcVersion super.ghc) "8.6.0") { } diff --git a/haskell-overlays/any-head.nix b/haskell-overlays/any-head.nix index 386f382b5..713338859 100644 --- a/haskell-overlays/any-head.nix +++ b/haskell-overlays/any-head.nix @@ -31,8 +31,8 @@ self: super: { aeson = super.aeson_1_4_0_0; - tagged = self.callHackage "tagged" "0.8.6" {}; - contravariant = self.callHackage "contravariant" "1.5" {}; + tagged = self.callHackage "tagged" "0.8.6" { }; + contravariant = self.callHackage "contravariant" "1.5" { }; stm = haskellLib.overrideCabal super.stm (drv: { src = fetchFromGitHub { @@ -43,6 +43,6 @@ self: super: { }; }); - entropy = self.callHackage "entropy" "0.4.1.4" {}; + entropy = self.callHackage "entropy" "0.4.1.4" { }; } diff --git a/haskell-overlays/default.nix b/haskell-overlays/default.nix index 7c159f473..8e01ff947 100644 --- a/haskell-overlays/default.nix +++ b/haskell-overlays/default.nix @@ -67,7 +67,7 @@ rec { # arm* needs the same linker options, x86* -> arm* does not (optionalExtension (super.ghc.stdenv.targetPlatform.isAndroid or false) (self: super: - { + { mkDerivation = drv: super.mkDerivation (drv // { buildFlags = [ "--ld-option=-fPIE" @@ -142,7 +142,7 @@ rec { (optionalExtension useFastWeak ghcjs-fast-weak_8_10) (self: super: rec { mkDerivation = drv: super.mkDerivation (drv // { - setupHaskellDepends = (drv.setupHaskellDepends or []) ++ [ + setupHaskellDepends = (drv.setupHaskellDepends or [ ]) ++ [ nixpkgs.buildPackages.stdenv.cc ]; # This is ugly diff --git a/haskell-overlays/expose-all-unfoldings.nix b/haskell-overlays/expose-all-unfoldings.nix index 630ae8a0b..3fbd54363 100644 --- a/haskell-overlays/expose-all-unfoldings.nix +++ b/haskell-overlays/expose-all-unfoldings.nix @@ -2,11 +2,11 @@ # reflex-dom, at the very least; I suspect it's important for a lot # more stuff, as well. -{ }: +{}: self: super: { mkDerivation = drv: super.mkDerivation (drv // { - configureFlags = (drv.configureFlags or []) ++ [ + configureFlags = (drv.configureFlags or [ ]) ++ [ "--${if self.ghc.isGhcjs or false then "ghcjs" else "ghc"}-options=-fexpose-all-unfoldings" ]; }); diff --git a/haskell-overlays/ghcjs-8.10-fast-weak/default.nix b/haskell-overlays/ghcjs-8.10-fast-weak/default.nix index 1424b560b..33a6c4417 100644 --- a/haskell-overlays/ghcjs-8.10-fast-weak/default.nix +++ b/haskell-overlays/ghcjs-8.10-fast-weak/default.nix @@ -4,7 +4,7 @@ self: super: { ghc = super.ghc.overrideAttrs (drv: { - patches = (drv.patches or []) ++ [ ./fast-weak.patch ]; + patches = (drv.patches or [ ]) ++ [ ./fast-weak.patch ]; phases = [ "unpackPhase" "patchPhase" "buildPhase" ]; }); } diff --git a/haskell-overlays/ghcjs-8.6-fast-weak/default.nix b/haskell-overlays/ghcjs-8.6-fast-weak/default.nix index 1424b560b..33a6c4417 100644 --- a/haskell-overlays/ghcjs-8.6-fast-weak/default.nix +++ b/haskell-overlays/ghcjs-8.6-fast-weak/default.nix @@ -4,7 +4,7 @@ self: super: { ghc = super.ghc.overrideAttrs (drv: { - patches = (drv.patches or []) ++ [ ./fast-weak.patch ]; + patches = (drv.patches or [ ]) ++ [ ./fast-weak.patch ]; phases = [ "unpackPhase" "patchPhase" "buildPhase" ]; }); } diff --git a/haskell-overlays/ghcjs-8.6/cabal-install.nix b/haskell-overlays/ghcjs-8.6/cabal-install.nix index 4e21d8467..3359587fe 100644 --- a/haskell-overlays/ghcjs-8.6/cabal-install.nix +++ b/haskell-overlays/ghcjs-8.6/cabal-install.nix @@ -1,11 +1,11 @@ # The build of ghcjs8.6 uses cabal v1 commands, including v1-sdist, so we need an older cabal-install { nixpkgs }: -(nixpkgs.haskell.packages.ghc865.callHackage "cabal-install" "2.4.1.0" {}).overrideScope +(nixpkgs.haskell.packages.ghc865.callHackage "cabal-install" "2.4.1.0" { }).overrideScope (self: super: { Cabal = self.Cabal_2_4_1_0; base16-bytestring = self.base16-bytestring_0_1_1_7; - random = self.callHackage "random" "1.1" {}; + random = self.callHackage "random" "1.1" { }; hackage-security = nixpkgs.haskell.lib.dontCheck (nixpkgs.haskell.lib.doJailbreak - (self.callHackage "hackage-security" "0.5.3.0" {})); + (self.callHackage "hackage-security" "0.5.3.0" { })); }) diff --git a/haskell-overlays/ghcjs-8.6/default.nix b/haskell-overlays/ghcjs-8.6/default.nix index 5bb190b3d..6d998d29e 100644 --- a/haskell-overlays/ghcjs-8.6/default.nix +++ b/haskell-overlays/ghcjs-8.6/default.nix @@ -1,4 +1,8 @@ -{ lib, haskellLib, nixpkgs, fetchgit, fetchFromGitHub +{ lib +, haskellLib +, nixpkgs +, fetchgit +, fetchFromGitHub , useReflexOptimizer , useTextJSString , enableLibraryProfiling @@ -15,17 +19,19 @@ self: super: rec { broken = drv.broken or false || enableLibraryProfiling; }); - ghcWithPackages = nixpkgs.buildPackages.callPackage (nixpkgs.path + "/pkgs/development/haskell-modules/with-packages-wrapper.nix") { - haskellPackages = self; - hoogleWithPackages = super.hoogleWithPackages; - } // lib.optionalAttrs (useReflexOptimizer) { + ghcWithPackages = nixpkgs.buildPackages.callPackage (nixpkgs.path + "/pkgs/development/haskell-modules/with-packages-wrapper.nix") + { + haskellPackages = self; + hoogleWithPackages = super.hoogleWithPackages; + } // lib.optionalAttrs (useReflexOptimizer) { ghcLibdir = lib.optionalString useReflexOptimizer "${self.ghc.bootPkgs.ghcWithPackages (p: [ p.reflex ])}/lib/${self.ghc.bootPkgs.ghc.name}"; }; - ghc = if !(lib.versionAtLeast super.ghc.ghcVersion "8.2") then super.ghc else super.ghc.overrideAttrs (_: { - # TODO: I don't think this is needed except for maybe the fast-weak patch, but doing this to preserve hashes. - phases = [ "unpackPhase" "patchPhase" "buildPhase" ]; - }) // { + ghc = if !(lib.versionAtLeast super.ghc.ghcVersion "8.2") then super.ghc else super.ghc.overrideAttrs + (_: { + # TODO: I don't think this is needed except for maybe the fast-weak patch, but doing this to preserve hashes. + phases = [ "unpackPhase" "patchPhase" "buildPhase" ]; + }) // { withPackages = self.ghcWithPackages; }; @@ -35,10 +41,10 @@ self: super: rec { network = haskellLib.overrideCabal super.network (drv: { revision = null; editedCabalFile = null; - patches = (drv.patches or []) ++ [ ./ghcjs-network.patch ]; + patches = (drv.patches or [ ]) ++ [ ./ghcjs-network.patch ]; }); - attoparsec = self.callHackage "attoparsec" "0.13.2.2" {}; + attoparsec = self.callHackage "attoparsec" "0.13.2.2" { }; # These packages require doctest comonad = dontCheck super.comonad; @@ -50,7 +56,7 @@ self: super: rec { these = dontCheck super.these; email-validate = dontCheck super.email-validate; OneTuple = overrideCabal super.OneTuple (drv: { - libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ + libraryHaskellDepends = (drv.libraryHaskellDepends or [ ]) ++ [ self.hashable ]; }); @@ -78,6 +84,6 @@ self: super: rec { patch = dontHaddock super.patch; # When we don't use text-jsstring, we hit cabal version too new issue. # NOTE(Dylan Green): We need to have an "updated" version of ghcjs-base, although the patch is still needed - _ghcjsbase = self.callHackage "ghcjs-base" "0.2.0.3" {}; + _ghcjsbase = self.callHackage "ghcjs-base" "0.2.0.3" { }; ghcjs-base = if useTextJSString then self._ghcjsbase else appendPatch (self._ghcjsbase) ./ghcjs-base-cabal-version.patch; } diff --git a/haskell-overlays/ghcjs-8.6/src.nix b/haskell-overlays/ghcjs-8.6/src.nix index 4d54c7d76..d375ee152 100644 --- a/haskell-overlays/ghcjs-8.6/src.nix +++ b/haskell-overlays/ghcjs-8.6/src.nix @@ -19,4 +19,5 @@ let ''; dontInstall = true; }; -in patchedSrc +in +patchedSrc diff --git a/haskell-overlays/ghcjs-text-jsstring-8.10/default.nix b/haskell-overlays/ghcjs-text-jsstring-8.10/default.nix index ca5d6daf0..9095d6dfc 100644 --- a/haskell-overlays/ghcjs-text-jsstring-8.10/default.nix +++ b/haskell-overlays/ghcjs-text-jsstring-8.10/default.nix @@ -1,7 +1,7 @@ { lib, fetchgit }: self: super: { - _dep = super._dep or {} // { + _dep = super._dep or { } // { textSrc = fetchgit { url = "https://github.com/dfordivam/text.git"; rev = "126174753ea8e5f45df8fcbba609e3f1c453bf27"; diff --git a/haskell-overlays/ghcjs-text-jsstring-8.6/default.nix b/haskell-overlays/ghcjs-text-jsstring-8.6/default.nix index 8e5f0c84b..43374756c 100644 --- a/haskell-overlays/ghcjs-text-jsstring-8.6/default.nix +++ b/haskell-overlays/ghcjs-text-jsstring-8.6/default.nix @@ -1,7 +1,7 @@ { lib, fetchgit }: self: super: { - _dep = super._dep or {} // { + _dep = super._dep or { } // { textSrc = fetchgit { url = "https://github.com/obsidiansystems/text.git"; rev = "50076be0262203f0d2afdd0b190a341878a08e21"; diff --git a/haskell-overlays/hnix/hnix-store/default.nix b/haskell-overlays/hnix/hnix-store/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/hnix/hnix-store/default.nix +++ b/haskell-overlays/hnix/hnix-store/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/hnix/hnix-store/thunk.nix b/haskell-overlays/hnix/hnix-store/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/hnix/hnix-store/thunk.nix +++ b/haskell-overlays/hnix/hnix-store/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/hnix/hnix/default.nix b/haskell-overlays/hnix/hnix/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/hnix/hnix/default.nix +++ b/haskell-overlays/hnix/hnix/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/hnix/hnix/thunk.nix b/haskell-overlays/hnix/hnix/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/hnix/hnix/thunk.nix +++ b/haskell-overlays/hnix/hnix/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/default.nix b/haskell-overlays/reflex-packages/default.nix index 1fc013723..a2fcdcdb6 100644 --- a/haskell-overlays/reflex-packages/default.nix +++ b/haskell-overlays/reflex-packages/default.nix @@ -1,7 +1,15 @@ { haskellLib -, lib, nixpkgs -, thunkSet, fetchFromGitHub, fetchFromBitbucket, hackGet -, useFastWeak, useReflexOptimizer, enableTraceReflexEvents, enableLibraryProfiling, __useTemplateHaskell +, lib +, nixpkgs +, thunkSet +, fetchFromGitHub +, fetchFromBitbucket +, hackGet +, useFastWeak +, useReflexOptimizer +, enableTraceReflexEvents +, enableLibraryProfiling +, __useTemplateHaskell }: with haskellLib; @@ -22,199 +30,213 @@ let # Older chromium for reflex-dom-core test suite nixpkgs_oldChromium = import ../../nixpkgs-old-chromium { inherit (nixpkgs.stdenv.buildPlatform) system; - overlays = [ (self: super: { - # Disable tests for p11-kit, a dependency of chromium - # They fail on non-NixOS systems - # https://github.com/NixOS/nixpkgs/issues/96715 - p11-kit = super.p11-kit.overrideAttrs (oldAttrs: { - doCheck = false; - }); - })]; + overlays = [ + (self: super: { + # Disable tests for p11-kit, a dependency of chromium + # They fail on non-NixOS systems + # https://github.com/NixOS/nixpkgs/issues/96715 + p11-kit = super.p11-kit.overrideAttrs (oldAttrs: { + doCheck = false; + }); + }) + ]; }; in { - _dep = super._dep or {} // thunkSet ./dep; + _dep = super._dep or { } // thunkSet ./dep; ## ## Reflex family ## - reflex = self.callCabal2nixWithOptions "reflex" self._dep.reflex (lib.concatStringsSep " " (lib.concatLists [ - (lib.optional enableTraceReflexEvents "-fdebug-trace-events") - reflexOptimizerFlag - useTemplateHaskellFlag - (lib.optional useFastWeak "-ffast-weak") - ])) {}; - - reflex-todomvc = haskellLib.doJailbreak (self.callPackage self._dep.reflex-todomvc {}); - reflex-aeson-orphans = self.callCabal2nix "reflex-aeson-orphans" self._dep.reflex-aeson-orphans {}; - - # The tests for reflex-dom-core are not deterministic, disable them, and run them manually - reflex-dom-core = let - inherit (self) ghc; - noGcTest = stdenv.hostPlatform.system != "x86_64-linux" - || stdenv.hostPlatform != stdenv.buildPlatform - || (ghc.isGhcjs or false); - in haskellLib.overrideCabal - (self.callCabal2nixWithOptions "reflex-dom-core" (reflexDomRepo + "/reflex-dom-core") (lib.concatStringsSep " " (lib.concatLists [ + reflex = self.callCabal2nixWithOptions "reflex" self._dep.reflex + (lib.concatStringsSep " " (lib.concatLists [ + (lib.optional enableTraceReflexEvents "-fdebug-trace-events") reflexOptimizerFlag useTemplateHaskellFlag - (lib.optional enableLibraryProfiling "-fprofile-reflex") - [ "-f-hydration-tests" ] - [ "-f-gc-tests" ] - ])) {}) - (drv: { - # TODO: Get hlint working for cross-compilation - #doCheck = stdenv.hostPlatform == stdenv.buildPlatform && !(ghc.isGhcjs or false); - doCheck = false; - # The headless browser run as part of the tests will exit without this - preBuild = (drv.preBuild or "") + '' - export HOME="$PWD" - ''; + (lib.optional useFastWeak "-ffast-weak") + ])) + { }; - # Show some output while running tests, so we might notice what's wrong - testTarget = "--show-details=streaming"; - - testHaskellDepends = with self; (drv.testHaskellDepends or []) ++ lib.optionals (!noGcTest) [ - temporary - jsaddle-warp - process - chrome-test-utils - ]; - - testSystemDepends = with nixpkgs; (drv.testSystemDepends or []) ++ lib.optionals (nixpkgs.stdenv.hostPlatform.isLinux) [ - nixpkgs_oldChromium.selenium-server-standalone - nixpkgs_oldChromium.chromium - which - ] ++ lib.optionals (!noGcTest) [ - nixpkgs.iproute - ]; - } // lib.optionalAttrs (!noGcTest) { - # The headless browser run as part of gc tests would hang/crash without this - preCheck = '' - export FONTCONFIG_PATH=${nixpkgs.fontconfig.out}/etc/fonts - '' + (drv.preCheck or ""); - }); + reflex-todomvc = haskellLib.doJailbreak (self.callPackage self._dep.reflex-todomvc { }); + reflex-aeson-orphans = self.callCabal2nix "reflex-aeson-orphans" self._dep.reflex-aeson-orphans { }; - reflex-dom = haskellLib.doJailbreak (haskellLib.overrideCabal (self.callCabal2nixWithOptions "reflex-dom" (reflexDomRepo + "/reflex-dom") (lib.concatStringsSep " " (lib.concatLists [ - reflexOptimizerFlag - useTemplateHaskellFlag - ])) { }) (drv: { + # The tests for reflex-dom-core are not deterministic, disable them, and run them manually + reflex-dom-core = + let + inherit (self) ghc; + noGcTest = stdenv.hostPlatform.system != "x86_64-linux" + || stdenv.hostPlatform != stdenv.buildPlatform + || (ghc.isGhcjs or false); + in + haskellLib.overrideCabal + (self.callCabal2nixWithOptions "reflex-dom-core" (reflexDomRepo + "/reflex-dom-core") + (lib.concatStringsSep " " (lib.concatLists [ + reflexOptimizerFlag + useTemplateHaskellFlag + (lib.optional enableLibraryProfiling "-fprofile-reflex") + [ "-f-hydration-tests" ] + [ "-f-gc-tests" ] + ])) + { }) + (drv: { + # TODO: Get hlint working for cross-compilation + #doCheck = stdenv.hostPlatform == stdenv.buildPlatform && !(ghc.isGhcjs or false); + doCheck = false; + # The headless browser run as part of the tests will exit without this + preBuild = (drv.preBuild or "") + '' + export HOME="$PWD" + ''; + + # Show some output while running tests, so we might notice what's wrong + testTarget = "--show-details=streaming"; + + testHaskellDepends = with self; (drv.testHaskellDepends or [ ]) ++ lib.optionals (!noGcTest) [ + temporary + jsaddle-warp + process + chrome-test-utils + ]; + + testSystemDepends = with nixpkgs; (drv.testSystemDepends or [ ]) ++ lib.optionals (nixpkgs.stdenv.hostPlatform.isLinux) [ + nixpkgs_oldChromium.selenium-server-standalone + nixpkgs_oldChromium.chromium + which + ] ++ lib.optionals (!noGcTest) [ + nixpkgs.iproute + ]; + } // lib.optionalAttrs (!noGcTest) { + # The headless browser run as part of gc tests would hang/crash without this + preCheck = '' + export FONTCONFIG_PATH=${nixpkgs.fontconfig.out}/etc/fonts + '' + (drv.preCheck or ""); + }); + + reflex-dom = haskellLib.doJailbreak (haskellLib.overrideCabal + (self.callCabal2nixWithOptions "reflex-dom" (reflexDomRepo + "/reflex-dom") + (lib.concatStringsSep " " (lib.concatLists [ + reflexOptimizerFlag + useTemplateHaskellFlag + ])) + { }) + (drv: { preConfigure = (drv.preConfigure or "") + '' sed -i 's|aeson >=1.4 && <1.6|aeson -any|g' *.cabal ''; - libraryHaskellDepends = [ - self.reflex - self.reflex-dom-core - self.jsaddle-webkit2gtk + libraryHaskellDepends = [ + self.reflex + self.reflex-dom-core + self.jsaddle-webkit2gtk self.aeson ] ++ lib.optional (nixpkgs.stdenv.hostPlatform.useAndroidPrebuilt or false) self.android-activity; })); - chrome-test-utils = self.callCabal2nix "chrome-test-utils" (reflexDomRepo + "/chrome-test-utils") {}; + chrome-test-utils = self.callCabal2nix "chrome-test-utils" (reflexDomRepo + "/chrome-test-utils") { }; ## ## Terminal / Conventional OS ## - reflex-vty = haskellLib.doJailbreak (self.callCabal2nix "reflex-vty" self._dep.reflex-vty {}); - reflex-process = self.callCabal2nix "reflex-process" self._dep.reflex-process {}; - reflex-fsnotify = self.callHackage "reflex-fsnotify" "0.2.1.2" {}; + reflex-vty = haskellLib.doJailbreak (self.callCabal2nix "reflex-vty" self._dep.reflex-vty { }); + reflex-process = self.callCabal2nix "reflex-process" self._dep.reflex-process { }; + reflex-fsnotify = self.callHackage "reflex-fsnotify" "0.2.1.2" { }; ## ## Tooling ## - reflex-ghci = self.callCabal2nix "reflex-ghci" self._dep.reflex-ghci {}; + reflex-ghci = self.callCabal2nix "reflex-ghci" self._dep.reflex-ghci { }; ## ## GHCJS and JSaddle ## - jsaddle = self.callCabal2nix "jsaddle" (jsaddleSrc + "/jsaddle") {}; - jsaddle-clib = self.callCabal2nix "jsaddle-clib" (jsaddleSrc + "/jsaddle-clib") {}; - jsaddle-webkit2gtk = self.callCabal2nix "jsaddle-webkit2gtk" (jsaddleSrc + "/jsaddle-webkit2gtk") {}; - jsaddle-webkitgtk = self.callCabal2nix "jsaddle-webkitgtk" (jsaddleSrc + "/jsaddle-webkitgtk") {}; - jsaddle-wkwebview = overrideCabal (self.callCabal2nix "jsaddle-wkwebview" (jsaddleSrc + "/jsaddle-wkwebview") {}) (drv: { - libraryFrameworkDepends = (drv.libraryFrameworkDepends or []) ++ + jsaddle = self.callCabal2nix "jsaddle" (jsaddleSrc + "/jsaddle") { }; + jsaddle-clib = self.callCabal2nix "jsaddle-clib" (jsaddleSrc + "/jsaddle-clib") { }; + jsaddle-webkit2gtk = self.callCabal2nix "jsaddle-webkit2gtk" (jsaddleSrc + "/jsaddle-webkit2gtk") { }; + jsaddle-webkitgtk = self.callCabal2nix "jsaddle-webkitgtk" (jsaddleSrc + "/jsaddle-webkitgtk") { }; + jsaddle-wkwebview = overrideCabal (self.callCabal2nix "jsaddle-wkwebview" (jsaddleSrc + "/jsaddle-wkwebview") { }) (drv: { + libraryFrameworkDepends = (drv.libraryFrameworkDepends or [ ]) ++ (if nixpkgs.stdenv.hostPlatform.useiOSPrebuilt then [ - "${nixpkgs.buildPackages.darwin.xcode}/Contents/Developer/Platforms/${nixpkgs.stdenv.hostPlatform.xcodePlatform}.platform/Developer/SDKs/${nixpkgs.stdenv.hostPlatform.xcodePlatform}.sdk/System" - ] else (with nixpkgs.buildPackages.darwin.apple_sdk.frameworks; [ Cocoa WebKit ])); + "${nixpkgs.buildPackages.darwin.xcode}/Contents/Developer/Platforms/${nixpkgs.stdenv.hostPlatform.xcodePlatform}.platform/Developer/SDKs/${nixpkgs.stdenv.hostPlatform.xcodePlatform}.sdk/System" + ] else (with nixpkgs.buildPackages.darwin.apple_sdk.frameworks; [ Cocoa WebKit ])); buildDepends = lib.optional (!nixpkgs.stdenv.hostPlatform.useiOSPrebuilt) [ nixpkgs.buildPackages.darwin.cf-private ]; }); # another broken test # phantomjs has issues with finding the right port # jsaddle-warp = dontCheck (addTestToolDepend (self.callCabal2nix "jsaddle-warp" "${jsaddleSrc}/jsaddle-warp" {})); - jsaddle-warp = dontCheck (self.callCabal2nix "jsaddle-warp" (jsaddleSrc + "/jsaddle-warp") {}); + jsaddle-warp = dontCheck (self.callCabal2nix "jsaddle-warp" (jsaddleSrc + "/jsaddle-warp") { }); - jsaddle-dom = doJailbreak (self.callCabal2nix "jsaddle-dom" self._dep.jsaddle-dom {}); - jsaddle-wasm = self.callCabal2nix "jsaddle-wasm" (hackGet (wasmCross + "/jsaddle-wasm")) {}; - ghcjs-dom = self.callCabal2nix "ghcjs-dom" (self._dep.ghcjs-dom + "/ghcjs-dom") {}; - ghcjs-dom-jsaddle = self.callCabal2nix "ghcjs-dom-jsaddle" (self._dep.ghcjs-dom + "/ghcjs-dom-jsaddle") {}; - ghcjs-dom-jsffi = self.callCabal2nix "ghcjs-dom-jsffi" (self._dep.ghcjs-dom + "/ghcjs-dom-jsffi") {}; + jsaddle-dom = doJailbreak (self.callCabal2nix "jsaddle-dom" self._dep.jsaddle-dom { }); + jsaddle-wasm = self.callCabal2nix "jsaddle-wasm" (hackGet (wasmCross + "/jsaddle-wasm")) { }; + ghcjs-dom = self.callCabal2nix "ghcjs-dom" (self._dep.ghcjs-dom + "/ghcjs-dom") { }; + ghcjs-dom-jsaddle = self.callCabal2nix "ghcjs-dom-jsaddle" (self._dep.ghcjs-dom + "/ghcjs-dom-jsaddle") { }; + ghcjs-dom-jsffi = self.callCabal2nix "ghcjs-dom-jsffi" (self._dep.ghcjs-dom + "/ghcjs-dom-jsffi") { }; ## ## Gargoyle and dependencies ## - gargoyle = self.callCabal2nixWithOptions "gargoyle" gargoyleSrc "--subpath gargoyle" {}; + gargoyle = self.callCabal2nixWithOptions "gargoyle" gargoyleSrc "--subpath gargoyle" { }; gargoyle-postgresql = haskellLib.overrideCabal - (self.callCabal2nixWithOptions "gargoyle-postgresql" gargoyleSrc "--subpath gargoyle-postgresql" {}) + (self.callCabal2nixWithOptions "gargoyle-postgresql" gargoyleSrc "--subpath gargoyle-postgresql" { }) (drv: { - testSystemDepends = (drv.testSystemDepends or []) ++ [ nixpkgs.postgresql_10 ]; + testSystemDepends = (drv.testSystemDepends or [ ]) ++ [ nixpkgs.postgresql_10 ]; }); gargoyle-postgresql-nix = haskellLib.overrideCabal - (self.callCabal2nixWithOptions "gargoyle-postgresql-nix" gargoyleSrc "--subpath gargoyle-postgresql-nix" {}) + (self.callCabal2nixWithOptions "gargoyle-postgresql-nix" gargoyleSrc "--subpath gargoyle-postgresql-nix" { }) (drv: { - librarySystemDepends = (drv.librarySystemDepends or []) ++ [ nixpkgs.postgresql_10 ]; + librarySystemDepends = (drv.librarySystemDepends or [ ]) ++ [ nixpkgs.postgresql_10 ]; }); - gargoyle-postgresql-connect = self.callCabal2nixWithOptions "gargoyle-postgresql-connect" gargoyleSrc "--subpath gargoyle-postgresql-connect" {}; - which = self.callHackage "which" "0.2" {}; + gargoyle-postgresql-connect = self.callCabal2nixWithOptions "gargoyle-postgresql-connect" gargoyleSrc "--subpath gargoyle-postgresql-connect" { }; + which = self.callHackage "which" "0.2" { }; ## ## Misc other dependencies ## - haskell-gi-overloading = dontHaddock (self.callHackage "haskell-gi-overloading" "0.0" {}); - monoidal-containers = self.callHackage "monoidal-containers" "0.6.2.0" {}; - patch = self.callCabal2nix "patch" self._dep.patch {}; - commutative-semigroups = self.callCabal2nix "commutative-semigroups" self._dep.commutative-semigroups {}; - witherable = self.callHackage "witherable" "0.4.2" {}; + haskell-gi-overloading = dontHaddock (self.callHackage "haskell-gi-overloading" "0.0" { }); + monoidal-containers = self.callHackage "monoidal-containers" "0.6.2.0" { }; + patch = self.callCabal2nix "patch" self._dep.patch { }; + commutative-semigroups = self.callCabal2nix "commutative-semigroups" self._dep.commutative-semigroups { }; + witherable = self.callHackage "witherable" "0.4.2" { }; - webdriver = markUnbroken (self.callHackage "webdriver" "0.9.0.1" {}); + webdriver = markUnbroken (self.callHackage "webdriver" "0.9.0.1" { }); # Not on Hackage yet # Version 1.2.1 not on Hackage yet - hspec-webdriver = self.callCabal2nix "hspec-webdriver" (fetchFromGitHub { - owner = "dfordivam"; - repo = "hspec-webdriver-clone"; - rev = "0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8"; - sha256 = "1criynifhvmnqwhrshmzylikqkvlgq98xf72w9cdd2zpjw539qf0"; - }) {}; - - constraints-extras = self.callHackage "constraints-extras" "0.3.2.1" {}; - some = self.callHackage "some" "1.0.2" {}; - prim-uniq = self.callHackage "prim-uniq" "0.2" {}; - aeson-gadt-th = self.callHackage "aeson-gadt-th" "0.2.4" {}; - dependent-map = self.callHackage "dependent-map" "0.4.0.0" {}; - dependent-monoidal-map = self.callCabal2nix "dependent-monoidal-map" self._dep.dependent-monoidal-map {}; - dependent-sum = self.callHackage "dependent-sum" "0.7.1.0" {}; - dependent-sum-template = self.callHackage "dependent-sum-template" "0.1.1.0" {}; - dependent-sum-universe-orphans = self.callCabal2nix "dependent-sum-universe-orphans" self._dep.dependent-sum-universe-orphans {}; - dependent-sum-aeson-orphans = self.callHackage "dependent-sum-aeson-orphans" "0.3.0.0" {}; + hspec-webdriver = self.callCabal2nix "hspec-webdriver" + (fetchFromGitHub { + owner = "dfordivam"; + repo = "hspec-webdriver-clone"; + rev = "0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8"; + sha256 = "1criynifhvmnqwhrshmzylikqkvlgq98xf72w9cdd2zpjw539qf0"; + }) + { }; + + constraints-extras = self.callHackage "constraints-extras" "0.3.2.1" { }; + some = self.callHackage "some" "1.0.2" { }; + prim-uniq = self.callHackage "prim-uniq" "0.2" { }; + aeson-gadt-th = self.callHackage "aeson-gadt-th" "0.2.4" { }; + dependent-map = self.callHackage "dependent-map" "0.4.0.0" { }; + dependent-monoidal-map = self.callCabal2nix "dependent-monoidal-map" self._dep.dependent-monoidal-map { }; + dependent-sum = self.callHackage "dependent-sum" "0.7.1.0" { }; + dependent-sum-template = self.callHackage "dependent-sum-template" "0.1.1.0" { }; + dependent-sum-universe-orphans = self.callCabal2nix "dependent-sum-universe-orphans" self._dep.dependent-sum-universe-orphans { }; + dependent-sum-aeson-orphans = self.callHackage "dependent-sum-aeson-orphans" "0.3.0.0" { }; # Need to use `--subpath` because LICENSE in each dir is a symlink to the repo root. - universe = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe" {}; - universe-base = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-base" {}; - universe-dependent-sum = nixpkgs.haskell.lib.doJailbreak (self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-dependent-sum" {}); - universe-instances-extended = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-instances-extended" {}; - universe-reverse-instances = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-reverse-instances" {}; - universe-instances-base = self.callCabal2nixWithOptions "universe" universeRepo "--subpath deprecated/universe-instances-base" {}; + universe = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe" { }; + universe-base = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-base" { }; + universe-dependent-sum = nixpkgs.haskell.lib.doJailbreak (self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-dependent-sum" { }); + universe-instances-extended = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-instances-extended" { }; + universe-reverse-instances = self.callCabal2nixWithOptions "universe" universeRepo "--subpath universe-reverse-instances" { }; + universe-instances-base = self.callCabal2nixWithOptions "universe" universeRepo "--subpath deprecated/universe-instances-base" { }; - th-abstraction = self.callHackage "th-abstraction" "0.4.3.0" {}; + th-abstraction = self.callHackage "th-abstraction" "0.4.3.0" { }; # Slightly newer version to fix # https://github.com/danfran/cabal-macosx/issues/13 - cabal-macosx = self.callHackage "cabal-macosx" "0.2.4.2" {}; + cabal-macosx = self.callHackage "cabal-macosx" "0.2.4.2" { }; } diff --git a/haskell-overlays/reflex-packages/dep/commutative-semigroups/default.nix b/haskell-overlays/reflex-packages/dep/commutative-semigroups/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/commutative-semigroups/default.nix +++ b/haskell-overlays/reflex-packages/dep/commutative-semigroups/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/commutative-semigroups/thunk.nix b/haskell-overlays/reflex-packages/dep/commutative-semigroups/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/commutative-semigroups/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/commutative-semigroups/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/default.nix b/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/default.nix +++ b/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/thunk.nix b/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/dependent-monoidal-map/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/gargoyle/default.nix b/haskell-overlays/reflex-packages/dep/gargoyle/default.nix index d42886c4e..24386688b 100644 --- a/haskell-overlays/reflex-packages/dep/gargoyle/default.nix +++ b/haskell-overlays/reflex-packages/dep/gargoyle/default.nix @@ -1 +1 @@ -import ((import {}).fetchFromGitHub (builtins.fromJSON (builtins.readFile ./github.json))) +import ((import { }).fetchFromGitHub (builtins.fromJSON (builtins.readFile ./github.json))) diff --git a/haskell-overlays/reflex-packages/dep/jsaddle-dom/default.nix b/haskell-overlays/reflex-packages/dep/jsaddle-dom/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/jsaddle-dom/default.nix +++ b/haskell-overlays/reflex-packages/dep/jsaddle-dom/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/jsaddle-dom/thunk.nix b/haskell-overlays/reflex-packages/dep/jsaddle-dom/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/jsaddle-dom/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/jsaddle-dom/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/jsaddle/default.nix b/haskell-overlays/reflex-packages/dep/jsaddle/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/jsaddle/default.nix +++ b/haskell-overlays/reflex-packages/dep/jsaddle/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/jsaddle/thunk.nix b/haskell-overlays/reflex-packages/dep/jsaddle/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/jsaddle/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/jsaddle/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/patch/default.nix b/haskell-overlays/reflex-packages/dep/patch/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/patch/default.nix +++ b/haskell-overlays/reflex-packages/dep/patch/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/patch/thunk.nix b/haskell-overlays/reflex-packages/dep/patch/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/patch/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/patch/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/reflex-dom/default.nix b/haskell-overlays/reflex-packages/dep/reflex-dom/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-dom/default.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-dom/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/reflex-dom/thunk.nix b/haskell-overlays/reflex-packages/dep/reflex-dom/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-dom/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-dom/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/reflex-ghci/default.nix b/haskell-overlays/reflex-packages/dep/reflex-ghci/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-ghci/default.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-ghci/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/reflex-ghci/thunk.nix b/haskell-overlays/reflex-packages/dep/reflex-ghci/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-ghci/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-ghci/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/reflex-process/default.nix b/haskell-overlays/reflex-packages/dep/reflex-process/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-process/default.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-process/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/reflex-process/thunk.nix b/haskell-overlays/reflex-packages/dep/reflex-process/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-process/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-process/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/reflex-vty/default.nix b/haskell-overlays/reflex-packages/dep/reflex-vty/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-vty/default.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-vty/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/reflex-vty/thunk.nix b/haskell-overlays/reflex-packages/dep/reflex-vty/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/reflex-vty/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/reflex-vty/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/reflex/default.nix b/haskell-overlays/reflex-packages/dep/reflex/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/reflex-packages/dep/reflex/default.nix +++ b/haskell-overlays/reflex-packages/dep/reflex/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/reflex-packages/dep/reflex/thunk.nix b/haskell-overlays/reflex-packages/dep/reflex/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/reflex-packages/dep/reflex/thunk.nix +++ b/haskell-overlays/reflex-packages/dep/reflex/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/reflex-packages/dep/universe/default.nix b/haskell-overlays/reflex-packages/dep/universe/default.nix index 7a0477867..8ef43d546 100644 --- a/haskell-overlays/reflex-packages/dep/universe/default.nix +++ b/haskell-overlays/reflex-packages/dep/universe/default.nix @@ -1,7 +1,8 @@ # DO NOT HAND-EDIT THIS FILE -import ((import {}).fetchFromGitHub ( +import ((import { }).fetchFromGitHub ( let json = builtins.fromJSON (builtins.readFile ./github.json); - in { inherit (json) owner repo rev sha256; - private = json.private or false; - } + in { + inherit (json) owner repo rev sha256; + private = json.private or false; + } )) diff --git a/haskell-overlays/splices-load-save/dep/ghc-8.10/default.nix b/haskell-overlays/splices-load-save/dep/ghc-8.10/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/splices-load-save/dep/ghc-8.10/default.nix +++ b/haskell-overlays/splices-load-save/dep/ghc-8.10/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/splices-load-save/dep/ghc-8.10/thunk.nix b/haskell-overlays/splices-load-save/dep/ghc-8.10/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/splices-load-save/dep/ghc-8.10/thunk.nix +++ b/haskell-overlays/splices-load-save/dep/ghc-8.10/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/splices-load-save/dep/ghc-8.6/default.nix b/haskell-overlays/splices-load-save/dep/ghc-8.6/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/splices-load-save/dep/ghc-8.6/default.nix +++ b/haskell-overlays/splices-load-save/dep/ghc-8.6/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/splices-load-save/dep/ghc-8.6/thunk.nix b/haskell-overlays/splices-load-save/dep/ghc-8.6/thunk.nix index e3b8c830d..6e6c9ff2b 100644 --- a/haskell-overlays/splices-load-save/dep/ghc-8.6/thunk.nix +++ b/haskell-overlays/splices-load-save/dep/ghc-8.6/thunk.nix @@ -1,14 +1,21 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = {url, rev, branch ? null, sha256 ? null, fetchSubmodules ? false, private ? false, ...}: - let realUrl = let firstChar = builtins.substring 0 1 url; in - if firstChar == "/" then /. + url - else if firstChar == "." then ./. + url - else url; - in if !fetchSubmodules && private then builtins.fetchGit { - url = realUrl; inherit rev; - ${if branch == null then null else "ref"} = branch; - } else (import {}).fetchgit { - url = realUrl; inherit rev sha256; - }; +let + fetch = { url, rev, branch ? null, sha256 ? null, fetchSubmodules ? false, private ? false, ... }: + let + realUrl = let firstChar = builtins.substring 0 1 url; in + if firstChar == "/" then /. + url + else if firstChar == "." then ./. + url + else url; + in + if !fetchSubmodules && private then + builtins.fetchGit + { + url = realUrl; inherit rev; + ${if branch == null then null else "ref"} = branch; + } else + (import { }).fetchgit { + url = realUrl; inherit rev sha256; + }; json = builtins.fromJSON (builtins.readFile ./git.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/splices-load-save/load-splices.nix b/haskell-overlays/splices-load-save/load-splices.nix index bd8a6879d..178ddc9f0 100644 --- a/haskell-overlays/splices-load-save/load-splices.nix +++ b/haskell-overlays/splices-load-save/load-splices.nix @@ -2,56 +2,59 @@ self: super: -let splicedPkg = drv: - if builtins.hasAttr drv.pname self.buildHaskellPackages - then builtins.getAttr drv.pname self.buildHaskellPackages - else if builtins.hasAttr (attrName drv) self.buildHaskellPackages - then builtins.getAttr (attrName drv) self.buildHaskellPackages - else throw "no spliced pkg for: ${drv.name}"; - - hasSplicedPkg = drv: - (builtins.hasAttr drv.pname self.buildHaskellPackages || - builtins.hasAttr (attrName drv) self.buildHaskellPackages) && - !(builtins.elem drv.pname nonHsPkgs); - - # splicedPkg returns null for those - nonHsPkgs = [ "android-activity" ]; - - attrName = drv: - "${drv.pname}_${lib.replaceStrings ["."] ["_"] drv.version}"; - - spliceDir = drv: let splicedDrv = splicedPkg drv; in - if splicedDrv == null - then throw "splicedDrv == null for drv = ${drv.pname}" - else if splicedDrv.compiler == null - then throw "spliceDrv.compiler == null" - else "${splicedDrv}/lib/${splicedDrv.compiler.name}/${splicedDrv.name}"; - - # Base steps for every preBuild phase - preBuildBaseAttrs = drv: - { - preBuild = '' - ${drv.preBuild or ""} - echo "!!! has splices: ${if hasSplicedPkg drv then "yes" else "no"}" - echo "!!! splices at: ${if hasSplicedPkg drv then spliceDir drv else "N/A"} !!!" - ''; - }; - # Additional preBuilds steps if the compiler supports external plugins - # E.g. GHC version > 8.6 - preBuildExternalPluginAttrs = drv: lib.optionalAttrs (hasSplicedPkg drv && isExternalPlugin) - { - preBuild = '' - export EXTERNAL_SPLICES_LOAD=${spliceDir drv} - ''; - }; -in { +let + splicedPkg = drv: + if builtins.hasAttr drv.pname self.buildHaskellPackages + then builtins.getAttr drv.pname self.buildHaskellPackages + else if builtins.hasAttr (attrName drv) self.buildHaskellPackages + then builtins.getAttr (attrName drv) self.buildHaskellPackages + else throw "no spliced pkg for: ${drv.name}"; + + hasSplicedPkg = drv: + (builtins.hasAttr drv.pname self.buildHaskellPackages || + builtins.hasAttr (attrName drv) self.buildHaskellPackages) && + !(builtins.elem drv.pname nonHsPkgs); + + # splicedPkg returns null for those + nonHsPkgs = [ "android-activity" ]; + + attrName = drv: + "${drv.pname}_${lib.replaceStrings ["."] ["_"] drv.version}"; + + spliceDir = drv: + let splicedDrv = splicedPkg drv; in + if splicedDrv == null + then throw "splicedDrv == null for drv = ${drv.pname}" + else if splicedDrv.compiler == null + then throw "spliceDrv.compiler == null" + else "${splicedDrv}/lib/${splicedDrv.compiler.name}/${splicedDrv.name}"; + + # Base steps for every preBuild phase + preBuildBaseAttrs = drv: + { + preBuild = '' + ${drv.preBuild or ""} + echo "!!! has splices: ${if hasSplicedPkg drv then "yes" else "no"}" + echo "!!! splices at: ${if hasSplicedPkg drv then spliceDir drv else "N/A"} !!!" + ''; + }; + # Additional preBuilds steps if the compiler supports external plugins + # E.g. GHC version > 8.6 + preBuildExternalPluginAttrs = drv: lib.optionalAttrs (hasSplicedPkg drv && isExternalPlugin) + { + preBuild = '' + export EXTERNAL_SPLICES_LOAD=${spliceDir drv} + ''; + }; +in +{ buildHaskellPackages = splicedHaskellPackages; # Add some flags to load splices from nativeHaskellPackages mkDerivation = drv: super.mkDerivation (drv // { buildFlags = lib.optional (hasSplicedPkg drv && !isExternalPlugin) "--ghc-option=-load-splices=${spliceDir drv}" - ++ (drv.buildFlags or []); + ++ (drv.buildFlags or [ ]); preBuild = (preBuildBaseAttrs drv).preBuild + ((preBuildExternalPluginAttrs drv).preBuild or ""); }); } diff --git a/haskell-overlays/splices-load-save/save-splices.nix b/haskell-overlays/splices-load-save/save-splices.nix index 573eb86d3..4e4d64da0 100644 --- a/haskell-overlays/splices-load-save/save-splices.nix +++ b/haskell-overlays/splices-load-save/save-splices.nix @@ -21,13 +21,16 @@ let export EXTERNAL_SPLICES_SAVE=$out$SPLICE_DIR ''; }; -in self: super: { - mkDerivation = attrs: let - drv = super.mkDerivation (attrs // preConfigureAttrs attrs // preBuildAttrs attrs); +in +self: super: { + mkDerivation = attrs: + let + drv = super.mkDerivation (attrs // preConfigureAttrs attrs // preBuildAttrs attrs); - SPLICE_DIR = "/lib/${drv.compiler.name}/${drv.name}"; + SPLICE_DIR = "/lib/${drv.compiler.name}/${drv.name}"; - in ((drv.overrideAttrs (_: { inherit SPLICE_DIR; })) // { inherit SPLICE_DIR; }); + in + ((drv.overrideAttrs (_: { inherit SPLICE_DIR; })) // { inherit SPLICE_DIR; }); vector-th-unbox = haskellLib.dontCheck super.vector-th-unbox; lens = haskellLib.dontCheck super.lens; diff --git a/haskell-overlays/text-jsstring-8.10/default.nix b/haskell-overlays/text-jsstring-8.10/default.nix index 2c5b24144..c264f73c0 100644 --- a/haskell-overlays/text-jsstring-8.10/default.nix +++ b/haskell-overlays/text-jsstring-8.10/default.nix @@ -4,11 +4,10 @@ with lib; with haskellLib; self: super: { - _dep = super._dep or {} // thunkSet ./dep // { - }; + _dep = super._dep or { } // thunkSet ./dep // { }; - attoparsec = dontCheck (self.callCabal2nix "attoparsec" self._dep.attoparsec {}); + attoparsec = dontCheck (self.callCabal2nix "attoparsec" self._dep.attoparsec { }); buffer-builder = appendPatch super.buffer-builder ./buffer-builder-text-jsstring.patch; - conduit-extra = (appendPatch super.conduit-extra ./conduit-extra-text-jsstring.patch); + conduit-extra = (appendPatch super.conduit-extra ./conduit-extra-text-jsstring.patch); double-conversion = appendPatch super.double-conversion ./double-conversion-Add-text-jsstring.patch; } diff --git a/haskell-overlays/text-jsstring-8.10/dep/attoparsec/default.nix b/haskell-overlays/text-jsstring-8.10/dep/attoparsec/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/text-jsstring-8.10/dep/attoparsec/default.nix +++ b/haskell-overlays/text-jsstring-8.10/dep/attoparsec/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/text-jsstring-8.10/dep/attoparsec/thunk.nix b/haskell-overlays/text-jsstring-8.10/dep/attoparsec/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/text-jsstring-8.10/dep/attoparsec/thunk.nix +++ b/haskell-overlays/text-jsstring-8.10/dep/attoparsec/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/text-jsstring-8.6/default.nix b/haskell-overlays/text-jsstring-8.6/default.nix index c38e4531e..58c6dc13f 100644 --- a/haskell-overlays/text-jsstring-8.6/default.nix +++ b/haskell-overlays/text-jsstring-8.6/default.nix @@ -4,10 +4,9 @@ with lib; with haskellLib; self: super: { - _dep = super._dep or {} // thunkSet ./dep // { - }; + _dep = super._dep or { } // thunkSet ./dep // { }; - attoparsec = dontCheck (self.callCabal2nix "attoparsec" self._dep.attoparsec {}); + attoparsec = dontCheck (self.callCabal2nix "attoparsec" self._dep.attoparsec { }); buffer-builder = overrideCabal super.buffer-builder (drv: { doCheck = false; src = fetchFromGitHub { diff --git a/haskell-overlays/text-jsstring/default.nix b/haskell-overlays/text-jsstring/default.nix index 747b40829..839f928a8 100644 --- a/haskell-overlays/text-jsstring/default.nix +++ b/haskell-overlays/text-jsstring/default.nix @@ -4,35 +4,34 @@ with lib; with haskellLib; self: super: { - _dep = super._dep or {} // thunkSet ./dep // { - }; + _dep = super._dep or { } // thunkSet ./dep // { }; jsaddle = overrideCabal super.jsaddle (drv: { - buildDepends = (drv.buildDepends or []) ++ [ + buildDepends = (drv.buildDepends or [ ]) ++ [ self.ghcjs-base self.ghcjs-prim ]; }); - aeson = dontCheck (self.callCabal2nix "aeson" self._dep.aeson {}); - attoparsec = dontCheck (self.callCabal2nix "attoparsec" self._dep.attoparsec {}); - hashable = overrideCabal (self.callCabal2nix "hashable" self._dep.hashable {}) (drv: { + aeson = dontCheck (self.callCabal2nix "aeson" self._dep.aeson { }); + attoparsec = dontCheck (self.callCabal2nix "attoparsec" self._dep.attoparsec { }); + hashable = overrideCabal (self.callCabal2nix "hashable" self._dep.hashable { }) (drv: { revision = null; editedCabalFile = null; jailbreak = true; doCheck = false; - libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ + libraryHaskellDepends = (drv.libraryHaskellDepends or [ ]) ++ [ self.text ]; - patches = (drv.patches or []) ++ [ + patches = (drv.patches or [ ]) ++ [ ./hashable.patch ]; }); say = overrideCabal super.say (drv: { - patches = (drv.patches or []) ++ [ + patches = (drv.patches or [ ]) ++ [ ./say.patch ]; - buildDepends = (drv.buildDepends or []) ++ [ + buildDepends = (drv.buildDepends or [ ]) ++ [ self.ghcjs-base ]; }); diff --git a/haskell-overlays/text-jsstring/dep/aeson/default.nix b/haskell-overlays/text-jsstring/dep/aeson/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/text-jsstring/dep/aeson/default.nix +++ b/haskell-overlays/text-jsstring/dep/aeson/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/text-jsstring/dep/aeson/thunk.nix b/haskell-overlays/text-jsstring/dep/aeson/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/text-jsstring/dep/aeson/thunk.nix +++ b/haskell-overlays/text-jsstring/dep/aeson/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/text-jsstring/dep/hashable/default.nix b/haskell-overlays/text-jsstring/dep/hashable/default.nix index 2b4d4ab11..9852e4312 100644 --- a/haskell-overlays/text-jsstring/dep/hashable/default.nix +++ b/haskell-overlays/text-jsstring/dep/hashable/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/haskell-overlays/text-jsstring/dep/hashable/thunk.nix b/haskell-overlays/text-jsstring/dep/hashable/thunk.nix index bbf2dc18f..b40203471 100644 --- a/haskell-overlays/text-jsstring/dep/hashable/thunk.nix +++ b/haskell-overlays/text-jsstring/dep/hashable/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/haskell-overlays/untriaged.nix b/haskell-overlays/untriaged.nix index 64deece4a..ae9936a4d 100644 --- a/haskell-overlays/untriaged.nix +++ b/haskell-overlays/untriaged.nix @@ -8,7 +8,7 @@ with haskellLib; self: super: { # Need an older version for GHC 8.6 - haddock-api = dontHaddock (doJailbreak (self.callHackage "haddock-api" "2.22.0" {})); + haddock-api = dontHaddock (doJailbreak (self.callHackage "haddock-api" "2.22.0" { })); # TODO this conflicts with the pandoc version # haddock-library = doJailbreak (self.callHackage "haddock-library" "1.7.0" {}); @@ -21,40 +21,40 @@ self: super: { scientific = dontCheck super.scientific; # pandoc 2.16 and dependencies - pandoc = self.callHackage "pandoc" "2.16.2" {}; - citeproc = self.callHackage "citeproc" "0.6" {}; - hslua-marshalling = self.callHackage "hslua-marshalling" "2.0.1" {}; - hslua-module-path = self.callHackage "hslua-module-path" "1.0.0" {}; - hslua-module-version = self.callHackage "hslua-module-version" "1.0.0" {}; - lpeg = self.callHackage "lpeg" "1.0.1" {}; - tasty-bench = self.callHackage "tasty-bench" "0.3.1" {}; - unicode-collation = self.callHackage "unicode-collation" "0.1.3.1" {}; + pandoc = self.callHackage "pandoc" "2.16.2" { }; + citeproc = self.callHackage "citeproc" "0.6" { }; + hslua-marshalling = self.callHackage "hslua-marshalling" "2.0.1" { }; + hslua-module-path = self.callHackage "hslua-module-path" "1.0.0" { }; + hslua-module-version = self.callHackage "hslua-module-version" "1.0.0" { }; + lpeg = self.callHackage "lpeg" "1.0.1" { }; + tasty-bench = self.callHackage "tasty-bench" "0.3.1" { }; + unicode-collation = self.callHackage "unicode-collation" "0.1.3.1" { }; # beam packages - beam-core = self.callHackage "beam-core" "0.9.1.0" {}; - beam-migrate = self.callHackage "beam-migrate" "0.5.1.0" {}; - beam-postgres = haskellLib.dontCheck (self.callHackage "beam-postgres" "0.5.1.0" {}); - beam-automigrate = self.callHackage "beam-automigrate" "0.1.2.0" {}; + beam-core = self.callHackage "beam-core" "0.9.1.0" { }; + beam-migrate = self.callHackage "beam-migrate" "0.5.1.0" { }; + beam-postgres = haskellLib.dontCheck (self.callHackage "beam-postgres" "0.5.1.0" { }); + beam-automigrate = self.callHackage "beam-automigrate" "0.1.2.0" { }; # hnix 0.12 and dependencies hnix = dontCheck - (overrideCabal (self.callCabal2nix "hnix" (nixpkgs.hackGet ./hnix/hnix) {}) (drv: { - librarySystemDepends = (drv.librarySystemDepends or []) ++ [ nixpkgs.nix ]; - testHaskellDepends = (drv.testHaskellDepends or []) ++ [ nixpkgs.nix super.criterion ]; + (overrideCabal (self.callCabal2nix "hnix" (nixpkgs.hackGet ./hnix/hnix) { }) (drv: { + librarySystemDepends = (drv.librarySystemDepends or [ ]) ++ [ nixpkgs.nix ]; + testHaskellDepends = (drv.testHaskellDepends or [ ]) ++ [ nixpkgs.nix super.criterion ]; })); hnix-store-core = - self.callCabal2nix "hnix" (nixpkgs.hackGet ./hnix/hnix-store + "/hnix-store-core") {}; + self.callCabal2nix "hnix" (nixpkgs.hackGet ./hnix/hnix-store + "/hnix-store-core") { }; hnix-store-remote = - self.callCabal2nix "hnix" (nixpkgs.hackGet ./hnix/hnix-store + "/hnix-store-remote") {}; - # data-fix = self.callHackage "data-fix" "0.3.0" {}; - neat-interpolation = self.callHackage "neat-interpolation" "0.4" {}; - prettyprinter = self.callHackage "prettyprinter" "1.7.0" {}; + self.callCabal2nix "hnix" (nixpkgs.hackGet ./hnix/hnix-store + "/hnix-store-remote") { }; + # data-fix = self.callHackage "data-fix" "0.3.0" {}; + neat-interpolation = self.callHackage "neat-interpolation" "0.4" { }; + prettyprinter = self.callHackage "prettyprinter" "1.7.0" { }; cryptohash-sha512 = doJailbreak super.cryptohash-sha512; - ListLike = self.callHackage "ListLike" "4.7.3" {}; + ListLike = self.callHackage "ListLike" "4.7.3" { }; # ghcjs-promise is marked broken in nixpkgs - ghcjs-promise = self.callHackage "ghcjs-promise" "0.1.0.3" {}; + ghcjs-promise = self.callHackage "ghcjs-promise" "0.1.0.3" { }; - utf8-string = self.callHackage "utf8-string" "1.0.1.1" {}; + utf8-string = self.callHackage "utf8-string" "1.0.1.1" { }; } diff --git a/ios/default.nix b/ios/default.nix index 60d5777c3..8bf20b775 100644 --- a/ios/default.nix +++ b/ios/default.nix @@ -1,6 +1,7 @@ { nixpkgs, ghc, withSimulator ? false }: -{ #TODO +{ + #TODO bundleName , #TODO @@ -32,14 +33,14 @@ # # Requires the associated domains application service to be enabled for this # App ID in your Apple developer account. - hosts ? [] + hosts ? [ ] -# Function taking set of plist keys-value pairs and returns a new set with changes applied. -# -# For example: (super: super // { AnotherKey: "value"; }) + # Function taking set of plist keys-value pairs and returns a new set with changes applied. + # + # For example: (super: super // { AnotherKey: "value"; }) , overrideInfoPlist ? (super: super) -# REMOVED + # REMOVED , extraInfoPlistContent ? null }: let @@ -101,265 +102,270 @@ let NSCameraUsageDescription = "Allow access to camera."; }; - infoPlistData = if extraInfoPlistContent == null + infoPlistData = + if extraInfoPlistContent == null then overrideInfoPlist defaultInfoPlist - else abort '' - `extraInfoPlistContent` has been removed. Instead use `overrideInfoPlist` to provide an override function that modifies the default info.plist data as a nix attrset. For example: `(x: x // {NSCameraUsageDescription = "We need your camera.";})` - ''; + else + abort '' + `extraInfoPlistContent` has been removed. Instead use `overrideInfoPlist` to provide an override function that modifies the default info.plist data as a nix attrset. For example: `(x: x // {NSCameraUsageDescription = "We need your camera.";})` + ''; exePath = package ghc; in -nixpkgs.runCommand "${executableName}-app" (rec { - infoPlist = builtins.toFile "Info.plist" (nixpkgs.lib.generators.toPlist {} infoPlistData); - indexHtml = builtins.toFile "index.html" '' - - - - - - - ''; - xcent = builtins.toFile "xcent" (nixpkgs.lib.generators.toPlist {} { - application-identifier = ".${bundleIdentifier}"; - "com.apple.developer.team-identifier" = ""; - get-task-allow = true; - keychain-access-groups = [ ".${bundleIdentifier}" ]; - aps-environment = apsEnv; - "com.apple.developer.associated-domains" = - if hosts == [] then null else map (host: "applinks:${host}") hosts; - }); - deployScript = nixpkgs.writeText "deploy" '' - #!/usr/bin/env bash - set -eo pipefail - - if [ "$#" -ne 1 ]; then - echo "Usage: $0 [TEAM_ID]" >&2 - exit 1 - fi - - TEAM_ID=$1 - shift - - set -euo pipefail - - function cleanup { - if [ -n "$tmpdir" -a -d "$tmpdir" ]; then - echo "Cleaning up tmpdir" >&2 - chmod -R +w $tmpdir - rm -fR $tmpdir +nixpkgs.runCommand "${executableName}-app" + (rec { + infoPlist = builtins.toFile "Info.plist" (nixpkgs.lib.generators.toPlist { } infoPlistData); + indexHtml = builtins.toFile "index.html" '' + + + + + + + ''; + xcent = builtins.toFile "xcent" (nixpkgs.lib.generators.toPlist { } { + application-identifier = ".${bundleIdentifier}"; + "com.apple.developer.team-identifier" = ""; + get-task-allow = true; + keychain-access-groups = [ ".${bundleIdentifier}" ]; + aps-environment = apsEnv; + "com.apple.developer.associated-domains" = + if hosts == [ ] then null else map (host: "applinks:${host}") hosts; + }); + deployScript = nixpkgs.writeText "deploy" '' + #!/usr/bin/env bash + set -eo pipefail + + if [ "$#" -ne 1 ]; then + echo "Usage: $0 [TEAM_ID]" >&2 + exit 1 fi - } - - trap cleanup EXIT - - tmpdir=$(mktemp -d) - # Find the signer given the OU - signer=$({ security find-certificate -c 'iPhone Developer' -a; security find-certificate -c 'Apple Development' -a; } \ - | grep '^ "alis"="' \ - | sed 's| "alis"="\(.*\)"$|\1|' \ - | while read c; do \ - security find-certificate -c "$c" -p \ - | ${nixpkgs.libressl}/bin/openssl x509 -subject -noout; \ - done \ - | grep "OU[[:space:]]\?=[[:space:]]\?$TEAM_ID" \ - | sed 's|subject= /UID=[^/]*/CN=\([^/]*\).*|\1|' \ - | head -n 1 || true) - - if [ -z "$signer" ]; then - echo "Error: No iPhone Developer certificate found for team id $TEAM_ID" >&2 - exit 1 - fi - - mkdir -p $tmpdir - cp -LR "$(dirname $0)/../${executableName}.app" $tmpdir - chmod -R +w "$tmpdir/${executableName}.app" - mkdir -p "$tmpdir/${executableName}.app/config" - sed "s||$TEAM_ID|" < "${xcent}" > $tmpdir/xcent - /usr/bin/codesign --force --sign "$signer" --entitlements $tmpdir/xcent --timestamp=none "$tmpdir/${executableName}.app" - - deploy="''${IOS_DEPLOY:-${nixpkgs.darwin.ios-deploy}/bin/ios-deploy}" - $deploy -W -b "$tmpdir/${executableName}.app" "$@" - ''; - packageScript = nixpkgs.writeText "package" '' - #!/usr/bin/env bash - set -eo pipefail - - if [ "$#" -lt 3 ]; then - echo "Usage: $0 [TEAM_ID] [IPA_DESTINATION] [EMBEDDED_PROVISIONING_PROFILE]" >&2 - exit 1 - fi - - TEAM_ID=$1 - shift - IPA_DESTINATION=$1 - shift - EMBEDDED_PROVISIONING_PROFILE=$1 - shift - - set -euo pipefail - - function cleanup { - if [ -n "$tmpdir" -a -d "$tmpdir" ]; then - echo "Cleaning up tmpdir" >&2 - chmod -R +w $tmpdir - rm -fR $tmpdir + + TEAM_ID=$1 + shift + + set -euo pipefail + + function cleanup { + if [ -n "$tmpdir" -a -d "$tmpdir" ]; then + echo "Cleaning up tmpdir" >&2 + chmod -R +w $tmpdir + rm -fR $tmpdir + fi + } + + trap cleanup EXIT + + tmpdir=$(mktemp -d) + # Find the signer given the OU + signer=$({ security find-certificate -c 'iPhone Developer' -a; security find-certificate -c 'Apple Development' -a; } \ + | grep '^ "alis"="' \ + | sed 's| "alis"="\(.*\)"$|\1|' \ + | while read c; do \ + security find-certificate -c "$c" -p \ + | ${nixpkgs.libressl}/bin/openssl x509 -subject -noout; \ + done \ + | grep "OU[[:space:]]\?=[[:space:]]\?$TEAM_ID" \ + | sed 's|subject= /UID=[^/]*/CN=\([^/]*\).*|\1|' \ + | head -n 1 || true) + + if [ -z "$signer" ]; then + echo "Error: No iPhone Developer certificate found for team id $TEAM_ID" >&2 + exit 1 fi - } - - trap cleanup EXIT - - tmpdir=$(mktemp -d) - # Find the signer given the OU - signer=$(security find-certificate -c "iPhone Distribution" -a \ - | grep '^ "alis"="' \ - | sed 's| "alis"="\(.*\)"$|\1|' \ - | while read c; do \ - security find-certificate -c "$c" -p \ - | ${nixpkgs.libressl}/bin/openssl x509 -subject -noout; \ - done \ - | grep "OU[[:space:]]\?=[[:space:]]\?$TEAM_ID" \ - | sed 's|subject= /UID=[^/]*/CN=\([^/]*\).*|\1|' \ - | head -n 1) - - if [ -z "$signer" ]; then - echo "Error: No iPhone Distribution certificate found for team id $TEAM_ID" >&2 - exit 1 - fi - - mkdir -p $tmpdir - cp -LR "$(dirname $0)/../${executableName}.app" $tmpdir - chmod -R +w "$tmpdir/${executableName}.app" - strip "$tmpdir/${executableName}.app/${executableName}" - mkdir -p "$tmpdir/${executableName}.app/config" - sed "s||$TEAM_ID|" < "${xcent}" > $tmpdir/xcent - /usr/bin/codesign --force --sign "$signer" --entitlements $tmpdir/xcent --timestamp=none "$tmpdir/${executableName}.app" - - /usr/bin/xcrun -sdk iphoneos ${./PackageApplication} -v "$tmpdir/${executableName}.app" -o "$IPA_DESTINATION" --sign "$signer" --embed "$EMBEDDED_PROVISIONING_PROFILE" - - altool=/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool - - if ! [ -x "$altool" ]; then - altool=/Applications/Xcode.app/Contents/Developer/usr/bin/altool - fi - - "$altool" --validate-app -f "$IPA_DESTINATION" -t ios "$@" - ''; - runInSim = builtins.toFile "run-in-sim" '' - #!/usr/bin/env bash - - if [ "$#" -ne 0 ]; then - echo "Usage: $0" >&2 - exit 1 - fi - - set -euo pipefail - - function cleanup { - if [ -n "$tmpdir" -a -d "$tmpdir" ]; then - echo "Cleaning up tmpdir" >&2 - chmod -R +w $tmpdir - rm -fR $tmpdir + + mkdir -p $tmpdir + cp -LR "$(dirname $0)/../${executableName}.app" $tmpdir + chmod -R +w "$tmpdir/${executableName}.app" + mkdir -p "$tmpdir/${executableName}.app/config" + sed "s||$TEAM_ID|" < "${xcent}" > $tmpdir/xcent + /usr/bin/codesign --force --sign "$signer" --entitlements $tmpdir/xcent --timestamp=none "$tmpdir/${executableName}.app" + + deploy="''${IOS_DEPLOY:-${nixpkgs.darwin.ios-deploy}/bin/ios-deploy}" + $deploy -W -b "$tmpdir/${executableName}.app" "$@" + ''; + packageScript = nixpkgs.writeText "package" '' + #!/usr/bin/env bash + set -eo pipefail + + if [ "$#" -lt 3 ]; then + echo "Usage: $0 [TEAM_ID] [IPA_DESTINATION] [EMBEDDED_PROVISIONING_PROFILE]" >&2 + exit 1 fi - } - trap cleanup EXIT + TEAM_ID=$1 + shift + IPA_DESTINATION=$1 + shift + EMBEDDED_PROVISIONING_PROFILE=$1 + shift + + set -euo pipefail + + function cleanup { + if [ -n "$tmpdir" -a -d "$tmpdir" ]; then + echo "Cleaning up tmpdir" >&2 + chmod -R +w $tmpdir + rm -fR $tmpdir + fi + } + + trap cleanup EXIT + + tmpdir=$(mktemp -d) + # Find the signer given the OU + signer=$(security find-certificate -c "iPhone Distribution" -a \ + | grep '^ "alis"="' \ + | sed 's| "alis"="\(.*\)"$|\1|' \ + | while read c; do \ + security find-certificate -c "$c" -p \ + | ${nixpkgs.libressl}/bin/openssl x509 -subject -noout; \ + done \ + | grep "OU[[:space:]]\?=[[:space:]]\?$TEAM_ID" \ + | sed 's|subject= /UID=[^/]*/CN=\([^/]*\).*|\1|' \ + | head -n 1) + + if [ -z "$signer" ]; then + echo "Error: No iPhone Distribution certificate found for team id $TEAM_ID" >&2 + exit 1 + fi - tmpdir=$(mktemp -d) + mkdir -p $tmpdir + cp -LR "$(dirname $0)/../${executableName}.app" $tmpdir + chmod -R +w "$tmpdir/${executableName}.app" + strip "$tmpdir/${executableName}.app/${executableName}" + mkdir -p "$tmpdir/${executableName}.app/config" + sed "s||$TEAM_ID|" < "${xcent}" > $tmpdir/xcent + /usr/bin/codesign --force --sign "$signer" --entitlements $tmpdir/xcent --timestamp=none "$tmpdir/${executableName}.app" - mkdir -p $tmpdir - cp -LR "$(dirname $0)/../${executableName}.app" $tmpdir - chmod -R +w "$tmpdir/${executableName}.app" - mkdir -p "$tmpdir/${executableName}.app/config" - ${../scripts/run-in-ios-sim} "$tmpdir/${executableName}.app" "${bundleIdentifier}" - ''; - portableDeployScript = nixpkgs.writeText "make-portable-deploy" '' - #!/usr/bin/env bash - set -eo pipefail + /usr/bin/xcrun -sdk iphoneos ${./PackageApplication} -v "$tmpdir/${executableName}.app" -o "$IPA_DESTINATION" --sign "$signer" --embed "$EMBEDDED_PROVISIONING_PROFILE" - if [ "$#" -ne 1 ]; then - echo "Usage: $0 [TEAM_ID]" >&2 - exit 1 - fi + altool=/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool - TEAM_ID=$1 - shift + if ! [ -x "$altool" ]; then + altool=/Applications/Xcode.app/Contents/Developer/usr/bin/altool + fi - set -euo pipefail + "$altool" --validate-app -f "$IPA_DESTINATION" -t ios "$@" + ''; + runInSim = builtins.toFile "run-in-sim" '' + #!/usr/bin/env bash - function cleanup { - if [ -n "$tmpdir" -a -d "$tmpdir" ]; then - echo "Cleaning up tmpdir" >&2 - chmod -R +w $tmpdir - rm -fR $tmpdir + if [ "$#" -ne 0 ]; then + echo "Usage: $0" >&2 + exit 1 fi - } - - trap cleanup EXIT - - tmpdir=$(mktemp -d) - # Find the signer given the OU - signer=$({ security find-certificate -c 'iPhone Developer' -a; security find-certificate -c 'Apple Development' -a; } \ - | grep '^ "alis"="' \ - | sed 's| "alis"="\(.*\)"$|\1|' \ - | while read c; do \ - security find-certificate -c "$c" -p \ - | ${nixpkgs.libressl}/bin/openssl x509 -subject -noout; \ - done \ - | grep "OU[[:space:]]\?=[[:space:]]\?$TEAM_ID" \ - | sed 's|subject= /UID=[^/]*/CN=\([^/]*\).*|\1|' \ - | head -n 1 || true) - - if [ -z "$signer" ]; then - echo "Error: No iPhone Developer certificate found for team id $TEAM_ID" >&2 - exit 1 - fi - - dir="$tmpdir/${executableName}-${bundleVersion}" - mkdir $dir - - cp -LR "$(dirname $0)/../${executableName}.app" $dir - chmod -R +w "$dir/${executableName}.app" - mkdir -p "$dir/${executableName}.app/config" - sed "s||$TEAM_ID|" < "${xcent}" > $dir/xcent - /usr/bin/codesign --force --sign "$signer" --entitlements $dir/xcent --timestamp=none "$dir/${executableName}.app" - - # unsure if we can sign with same key as for iOS app, may need special permissions - cp ${nixpkgs.darwin.ios-deploy}/bin/ios-deploy $dir/ios-deploy - /usr/bin/codesign --force --sign "$signer" --timestamp=none "$dir/ios-deploy" - - cat >$dir/deploy <<'EOF' -#!/usr/bin/env bash -DIR="$( cd "$( dirname "''${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -"$DIR/ios-deploy" -W -b "$DIR/${executableName}.app" "$@" -EOF - chmod +x $dir/deploy - - dest=$PWD/${executableName}-${bundleVersion}.tar.gz - (cd $tmpdir && tar cfz $dest ${executableName}-${bundleVersion}/) - - echo Created $dest. - '';}) ('' - set -x - mkdir -p "$out/${executableName}.app" - ln -s "$infoPlist" "$out/${executableName}.app/Info.plist" - ln -s "$indexHtml" "$out/${executableName}.app/index.html" - mkdir -p "$out/bin" - cp --no-preserve=mode "$deployScript" "$out/bin/deploy" - chmod +x "$out/bin/deploy" - cp --no-preserve=mode "$packageScript" "$out/bin/package" - chmod +x "$out/bin/package" -'' + nixpkgs.lib.optionalString withSimulator '' - cp --no-preserve=mode "$runInSim" "$out/bin/run-in-sim" - chmod +x "$out/bin/run-in-sim" -'' + '' - cp --no-preserve=mode "$portableDeployScript" "$out/bin/make-portable-deploy" - chmod +x "$out/bin/make-portable-deploy" - cp "${exePath}/bin/${executableName}" "$out/${executableName}.app/" - cp -RL '${staticSrc}'/* "$out/${executableName}.app/" - for icon in '${staticSrc}'/assets/Icon*.png '${staticSrc}'/assets/AppIcon*.png; do - cp -RL "$icon" "$out/${executableName}.app/" - done - for splash in '${staticSrc}'/assets/Default*.png; do - cp -RL "$splash" "$out/${executableName}.app/" - done - set +x -'') + + set -euo pipefail + + function cleanup { + if [ -n "$tmpdir" -a -d "$tmpdir" ]; then + echo "Cleaning up tmpdir" >&2 + chmod -R +w $tmpdir + rm -fR $tmpdir + fi + } + + trap cleanup EXIT + + tmpdir=$(mktemp -d) + + mkdir -p $tmpdir + cp -LR "$(dirname $0)/../${executableName}.app" $tmpdir + chmod -R +w "$tmpdir/${executableName}.app" + mkdir -p "$tmpdir/${executableName}.app/config" + ${../scripts/run-in-ios-sim} "$tmpdir/${executableName}.app" "${bundleIdentifier}" + ''; + portableDeployScript = nixpkgs.writeText "make-portable-deploy" '' + #!/usr/bin/env bash + set -eo pipefail + + if [ "$#" -ne 1 ]; then + echo "Usage: $0 [TEAM_ID]" >&2 + exit 1 + fi + + TEAM_ID=$1 + shift + + set -euo pipefail + + function cleanup { + if [ -n "$tmpdir" -a -d "$tmpdir" ]; then + echo "Cleaning up tmpdir" >&2 + chmod -R +w $tmpdir + rm -fR $tmpdir + fi + } + + trap cleanup EXIT + + tmpdir=$(mktemp -d) + # Find the signer given the OU + signer=$({ security find-certificate -c 'iPhone Developer' -a; security find-certificate -c 'Apple Development' -a; } \ + | grep '^ "alis"="' \ + | sed 's| "alis"="\(.*\)"$|\1|' \ + | while read c; do \ + security find-certificate -c "$c" -p \ + | ${nixpkgs.libressl}/bin/openssl x509 -subject -noout; \ + done \ + | grep "OU[[:space:]]\?=[[:space:]]\?$TEAM_ID" \ + | sed 's|subject= /UID=[^/]*/CN=\([^/]*\).*|\1|' \ + | head -n 1 || true) + + if [ -z "$signer" ]; then + echo "Error: No iPhone Developer certificate found for team id $TEAM_ID" >&2 + exit 1 + fi + + dir="$tmpdir/${executableName}-${bundleVersion}" + mkdir $dir + + cp -LR "$(dirname $0)/../${executableName}.app" $dir + chmod -R +w "$dir/${executableName}.app" + mkdir -p "$dir/${executableName}.app/config" + sed "s||$TEAM_ID|" < "${xcent}" > $dir/xcent + /usr/bin/codesign --force --sign "$signer" --entitlements $dir/xcent --timestamp=none "$dir/${executableName}.app" + + # unsure if we can sign with same key as for iOS app, may need special permissions + cp ${nixpkgs.darwin.ios-deploy}/bin/ios-deploy $dir/ios-deploy + /usr/bin/codesign --force --sign "$signer" --timestamp=none "$dir/ios-deploy" + + cat >$dir/deploy <<'EOF' + #!/usr/bin/env bash + DIR="$( cd "$( dirname "''${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + "$DIR/ios-deploy" -W -b "$DIR/${executableName}.app" "$@" + EOF + chmod +x $dir/deploy + + dest=$PWD/${executableName}-${bundleVersion}.tar.gz + (cd $tmpdir && tar cfz $dest ${executableName}-${bundleVersion}/) + + echo Created $dest. + ''; + }) + ('' + set -x + mkdir -p "$out/${executableName}.app" + ln -s "$infoPlist" "$out/${executableName}.app/Info.plist" + ln -s "$indexHtml" "$out/${executableName}.app/index.html" + mkdir -p "$out/bin" + cp --no-preserve=mode "$deployScript" "$out/bin/deploy" + chmod +x "$out/bin/deploy" + cp --no-preserve=mode "$packageScript" "$out/bin/package" + chmod +x "$out/bin/package" + '' + nixpkgs.lib.optionalString withSimulator '' + cp --no-preserve=mode "$runInSim" "$out/bin/run-in-sim" + chmod +x "$out/bin/run-in-sim" + '' + '' + cp --no-preserve=mode "$portableDeployScript" "$out/bin/make-portable-deploy" + chmod +x "$out/bin/make-portable-deploy" + cp "${exePath}/bin/${executableName}" "$out/${executableName}.app/" + cp -RL '${staticSrc}'/* "$out/${executableName}.app/" + for icon in '${staticSrc}'/assets/Icon*.png '${staticSrc}'/assets/AppIcon*.png; do + cp -RL "$icon" "$out/${executableName}.app/" + done + for splash in '${staticSrc}'/assets/Default*.png; do + cp -RL "$splash" "$out/${executableName}.app/" + done + set +x + '') diff --git a/nix-utils/benchmark/default.nix b/nix-utils/benchmark/default.nix index b6e689183..9b6cd8d99 100644 --- a/nix-utils/benchmark/default.nix +++ b/nix-utils/benchmark/default.nix @@ -1,84 +1,86 @@ { reflex-platform ? import ../.. { hideDeprecated = true; } }: -let pkgs = reflex-platform.nixpkgs; - inherit (pkgs) nodejs; - shellHook = linkNodeModulesHook + '' - export PATH=node_modules/.bin:$PATH - ''; - inherit (pkgs) fetchzip fetchFromGitHub; - dep = reflex-platform.thunkSet ./dep; - yarn2nix = import (dep.yarn2nix) { inherit pkgs; }; - inherit (yarn2nix) mkYarnPackage linkNodeModulesHook defaultYarnFlags; - nodePkgs = { - webdriver-ts = mkYarnPackage { - name = "webdriver-ts"; - src = dep.js-framework-benchmark + /webdriver-ts; - preInstall = "yarn --offline run build-prod"; - inherit shellHook; - }; - webdriver-ts-results = mkYarnPackage { - name = "webdriver-ts-results"; - src = dep.js-framework-benchmark + /webdriver-ts-results; - preInstall = "yarn --offline run build-prod"; - inherit shellHook; - }; - js-framework-benchmark = mkYarnPackage { - name = "js-framework-benchmark"; - src = dep.js-framework-benchmark; - inherit shellHook; - }; +let + pkgs = reflex-platform.nixpkgs; + inherit (pkgs) nodejs; + shellHook = linkNodeModulesHook + '' + export PATH=node_modules/.bin:$PATH + ''; + inherit (pkgs) fetchzip fetchFromGitHub; + dep = reflex-platform.thunkSet ./dep; + yarn2nix = import (dep.yarn2nix) { inherit pkgs; }; + inherit (yarn2nix) mkYarnPackage linkNodeModulesHook defaultYarnFlags; + nodePkgs = { + webdriver-ts = mkYarnPackage { + name = "webdriver-ts"; + src = dep.js-framework-benchmark + /webdriver-ts; + preInstall = "yarn --offline run build-prod"; + inherit shellHook; }; - bin = pkgs.writeScript "benchmark.sh" '' -#!/usr/bin/env bash -set -euo pipefail + webdriver-ts-results = mkYarnPackage { + name = "webdriver-ts-results"; + src = dep.js-framework-benchmark + /webdriver-ts-results; + preInstall = "yarn --offline run build-prod"; + inherit shellHook; + }; + js-framework-benchmark = mkYarnPackage { + name = "js-framework-benchmark"; + src = dep.js-framework-benchmark; + inherit shellHook; + }; + }; + bin = pkgs.writeScript "benchmark.sh" '' + #!/usr/bin/env bash + set -euo pipefail -exec 3>&1 -exec 1>&2 + exec 3>&1 + exec 1>&2 -PATH="${pkgs.yarn}/bin:${nodejs}/bin:${pkgs.chromedriver}/bin:${pkgs.chromium}/bin:${pkgs.coreutils}/bin:${pkgs.gnugrep}/bin:${pkgs.gnused}/bin" -CHROME_BINARY="${if reflex-platform.system == "x86_64-darwin" - then "" - else ''--chromeBinary "${pkgs.chromium}/bin/chromium"'' -}" -CHROMEDRIVER="${if reflex-platform.system == "x86_64-darwin" - then "" - else ''--chromeDriver "${pkgs.chromedriver}/bin/chromedriver"'' -}" + PATH="${pkgs.yarn}/bin:${nodejs}/bin:${pkgs.chromedriver}/bin:${pkgs.chromium}/bin:${pkgs.coreutils}/bin:${pkgs.gnugrep}/bin:${pkgs.gnused}/bin" + CHROME_BINARY="${if reflex-platform.system == "x86_64-darwin" + then "" + else ''--chromeBinary "${pkgs.chromium}/bin/chromium"'' + }" + CHROMEDRIVER="${if reflex-platform.system == "x86_64-darwin" + then "" + else ''--chromeDriver "${pkgs.chromedriver}/bin/chromedriver"'' + }" -CLEAN=$(mktemp -d 2>/dev/null || mktemp -d -t 'clean') # This crazy workaround ensures that it will work on both Mac OS and Linux; see https://unix.stackexchange.com/questions/30091/fix-or-alternative-for-mktemp-in-os-x -trap "rm -rf \"$CLEAN\"" EXIT + CLEAN=$(mktemp -d 2>/dev/null || mktemp -d -t 'clean') # This crazy workaround ensures that it will work on both Mac OS and Linux; see https://unix.stackexchange.com/questions/30091/fix-or-alternative-for-mktemp-in-os-x + trap "rm -rf \"$CLEAN\"" EXIT -cd "$CLEAN" + cd "$CLEAN" -cp -a "${dep.js-framework-benchmark}/"* . -chmod -R +w . + cp -a "${dep.js-framework-benchmark}/"* . + chmod -R +w . -ln -s ${nodePkgs.js-framework-benchmark.node_modules} . -rm -r yarn.lock frameworks/keyed/vanillajs webdriver-ts-results -ln -s ${nodePkgs.webdriver-ts-results}/node_modules/webdriver-ts-results . + ln -s ${nodePkgs.js-framework-benchmark.node_modules} . + rm -r yarn.lock frameworks/keyed/vanillajs webdriver-ts-results + ln -s ${nodePkgs.webdriver-ts-results}/node_modules/webdriver-ts-results . -REFLEX_DOM_DIST=frameworks/keyed/reflex-dom/bundled-dist -mkdir -p "$REFLEX_DOM_DIST" -cp -a "${reflex-platform.ghcjs.reflex-dom}/bin/krausest.jsexe/"* "$REFLEX_DOM_DIST" + REFLEX_DOM_DIST=frameworks/keyed/reflex-dom/bundled-dist + mkdir -p "$REFLEX_DOM_DIST" + cp -a "${reflex-platform.ghcjs.reflex-dom}/bin/krausest.jsexe/"* "$REFLEX_DOM_DIST" -yarn run start > server.out & -SERVER_PID=$! + yarn run start > server.out & + SERVER_PID=$! -# ensures that grep will block execution but tail won't -# https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found/900134#900134 -SERVER_PORT="$((tail -f -n0 server.out & ) | grep -m 1 '127.0.0.1' | sed -e 's/.*127.0.0.1://')" + # ensures that grep will block execution but tail won't + # https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found/900134#900134 + SERVER_PORT="$((tail -f -n0 server.out & ) | grep -m 1 '127.0.0.1' | sed -e 's/.*127.0.0.1://')" -cd webdriver-ts -ln -s "${nodePkgs.webdriver-ts.node_modules}" . -ln -s "${nodePkgs.webdriver-ts}/node_modules/webdriver-ts/dist" . + cd webdriver-ts + ln -s "${nodePkgs.webdriver-ts.node_modules}" . + ln -s "${nodePkgs.webdriver-ts}/node_modules/webdriver-ts/dist" . -yarn run selenium --framework reflex-dom-v0.4-keyed --count 1 --headless $CHROME_BINARY $CHROMEDRIVER --port $SERVER_PORT + yarn run selenium --framework reflex-dom-v0.4-keyed --count 1 --headless $CHROME_BINARY $CHROMEDRIVER --port $SERVER_PORT -kill "$SERVER_PID" + kill "$SERVER_PID" -exec 1>&3 + exec 1>&3 -echo "["; -paste -d ',' results/*; -echo "]"; -''; -in { inherit bin dep nodePkgs; } + echo "["; + paste -d ',' results/*; + echo "]"; + ''; +in +{ inherit bin dep nodePkgs; } diff --git a/nix-utils/benchmark/dep/yarn2nix/default.nix b/nix-utils/benchmark/dep/yarn2nix/default.nix index 7a0477867..8ef43d546 100644 --- a/nix-utils/benchmark/dep/yarn2nix/default.nix +++ b/nix-utils/benchmark/dep/yarn2nix/default.nix @@ -1,7 +1,8 @@ # DO NOT HAND-EDIT THIS FILE -import ((import {}).fetchFromGitHub ( +import ((import { }).fetchFromGitHub ( let json = builtins.fromJSON (builtins.readFile ./github.json); - in { inherit (json) owner repo rev sha256; - private = json.private or false; - } + in { + inherit (json) owner repo rev sha256; + private = json.private or false; + } )) diff --git a/nix-utils/hackage/default.nix b/nix-utils/hackage/default.nix index 01252b500..1335d1f19 100644 --- a/nix-utils/hackage/default.nix +++ b/nix-utils/hackage/default.nix @@ -6,10 +6,12 @@ rec { attrsToList = s: map (name: { inherit name; value = builtins.getAttr name s; }) (builtins.attrNames s); - mapSet = f: s: builtins.listToAttrs (map ({name, value}: { - inherit name; - value = f value; - }) (attrsToList s)); + mapSet = f: s: builtins.listToAttrs (map + ({ name, value }: { + inherit name; + value = f value; + }) + (attrsToList s)); mkSdist = pkg: pkg.override (oldArgs: { mkDerivation = drv: oldArgs.mkDerivation (drv // { pname = drv.pname + "-sdist"; diff --git a/nix-utils/work-on-multi/default.nix b/nix-utils/work-on-multi/default.nix index 4b796cc05..a58c9e12c 100644 --- a/nix-utils/work-on-multi/default.nix +++ b/nix-utils/work-on-multi/default.nix @@ -10,79 +10,80 @@ let inherit (nixpkgs) lib; in -{ envFunc, packageNames, tools ? _: [], shellToolOverrides ? _: _: {} }: +{ envFunc, packageNames, tools ? _: [ ], shellToolOverrides ? _: _: { } }: let inherit (builtins) listToAttrs filter attrValues all concatLists; - combinableAttrs = p: [ - "buildDepends" - "buildTools" - "executableFrameworkDepends" - "executableHaskellDepends" - "executablePkgconfigDepends" - "executableSystemDepends" - "executableToolDepends" - "extraLibraries" - "libraryFrameworkDepends" - "libraryHaskellDepends" - "libraryPkgconfigDepends" - "librarySystemDepends" - "libraryToolDepends" - "pkgconfigDepends" - "setupHaskellDepends" - ] ++ lib.optionals (p.doCheck or true) [ - "testDepends" - "testFrameworkDepends" - "testHaskellDepends" - "testPkgconfigDepends" - "testSystemDepends" - "testToolDepends" - ] ++ lib.optionals (p.doBenchmark or false) [ - "benchmarkDepends" - "benchmarkFrameworkDepends" - "benchmarkHaskellDepends" - "benchmarkPkgconfigDepends" - "benchmarkSystemDepends" - "benchmarkToolDepends" - ]; + combinableAttrs = p: [ + "buildDepends" + "buildTools" + "executableFrameworkDepends" + "executableHaskellDepends" + "executablePkgconfigDepends" + "executableSystemDepends" + "executableToolDepends" + "extraLibraries" + "libraryFrameworkDepends" + "libraryHaskellDepends" + "libraryPkgconfigDepends" + "librarySystemDepends" + "libraryToolDepends" + "pkgconfigDepends" + "setupHaskellDepends" + ] ++ lib.optionals (p.doCheck or true) [ + "testDepends" + "testFrameworkDepends" + "testHaskellDepends" + "testPkgconfigDepends" + "testSystemDepends" + "testToolDepends" + ] ++ lib.optionals (p.doBenchmark or false) [ + "benchmarkDepends" + "benchmarkFrameworkDepends" + "benchmarkHaskellDepends" + "benchmarkPkgconfigDepends" + "benchmarkSystemDepends" + "benchmarkToolDepends" + ]; - concatCombinableAttrs = haskellConfigs: lib.filterAttrs - (n: v: v != []) - (lib.zipAttrsWith (_: concatLists) (map - (haskellConfig: lib.listToAttrs (map - (name: { - inherit name; - value = haskellConfig.${name} or []; - }) - (combinableAttrs haskellConfig))) - haskellConfigs - )); + concatCombinableAttrs = haskellConfigs: lib.filterAttrs + (n: v: v != [ ]) + (lib.zipAttrsWith (_: concatLists) (map + (haskellConfig: lib.listToAttrs (map + (name: { + inherit name; + value = haskellConfig.${name} or [ ]; + }) + (combinableAttrs haskellConfig))) + haskellConfigs + )); - getHaskellConfig = p: (overrideCabal p (args: { - passthru = (args.passthru or {}) // { - out = args; - }; - })).out; - notInTargetPackageSet = p: all (pname: (p.pname or "") != pname) packageNames; - baseTools = generalDevTools' {}; - env = envFunc reflex-platform; - overriddenTools = baseTools // shellToolOverrides env baseTools; - depAttrs = lib.mapAttrs (_: v: filter notInTargetPackageSet v) (concatCombinableAttrs (concatLists [ - (map getHaskellConfig (lib.attrVals packageNames env)) - [{ - buildTools = [ - (nixpkgs.buildEnv { - name = "build-tools-wrapper"; - paths = attrValues overriddenTools ++ tools env; - pathsToLink = [ "/bin" ]; - extraOutputsToInstall = [ "bin" ]; - }) - overriddenTools.Cabal - ]; - }] - ])); + getHaskellConfig = p: (overrideCabal p (args: { + passthru = (args.passthru or { }) // { + out = args; + }; + })).out; + notInTargetPackageSet = p: all (pname: (p.pname or "") != pname) packageNames; + baseTools = generalDevTools' { }; + env = envFunc reflex-platform; + overriddenTools = baseTools // shellToolOverrides env baseTools; + depAttrs = lib.mapAttrs (_: v: filter notInTargetPackageSet v) (concatCombinableAttrs (concatLists [ + (map getHaskellConfig (lib.attrVals packageNames env)) + [{ + buildTools = [ + (nixpkgs.buildEnv { + name = "build-tools-wrapper"; + paths = attrValues overriddenTools ++ tools env; + pathsToLink = [ "/bin" ]; + extraOutputsToInstall = [ "bin" ]; + }) + overriddenTools.Cabal + ]; + }] + ])); -in (env.mkDerivation (depAttrs // { +in +(env.mkDerivation (depAttrs // { pname = "work-on-multi--combined-pkg"; version = "0"; license = null; diff --git a/nixpkgs-old-chromium/default.nix b/nixpkgs-old-chromium/default.nix index 2b4d4ab11..9852e4312 100644 --- a/nixpkgs-old-chromium/default.nix +++ b/nixpkgs-old-chromium/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/nixpkgs-old-chromium/thunk.nix b/nixpkgs-old-chromium/thunk.nix index bbf2dc18f..b40203471 100644 --- a/nixpkgs-old-chromium/thunk.nix +++ b/nixpkgs-old-chromium/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/nixpkgs-overlays/ghc.nix b/nixpkgs-overlays/ghc.nix index 6816255ab..f1461b78e 100644 --- a/nixpkgs-overlays/ghc.nix +++ b/nixpkgs-overlays/ghc.nix @@ -2,6 +2,5 @@ self: super: { # Apply custom patches to Haskell compilers - haskell = super.haskell // { - }; + haskell = super.haskell // { }; } diff --git a/nixpkgs-overlays/hack-get/default.nix b/nixpkgs-overlays/hack-get/default.nix index ef0f0748c..49671ed8e 100644 --- a/nixpkgs-overlays/hack-get/default.nix +++ b/nixpkgs-overlays/hack-get/default.nix @@ -3,7 +3,7 @@ self: { - filterGit = builtins.filterSource (path: type: !(builtins.any (x: x == baseNameOf path) [".git" "tags" "TAGS" "dist"])); + filterGit = builtins.filterSource (path: type: !(builtins.any (x: x == baseNameOf path) [ ".git" "tags" "TAGS" "dist" ])); # Retrieve source that is controlled by the hack-* scripts; it may be either a stub or a checked-out git repo hackGet = p: @@ -11,7 +11,7 @@ self: contents = builtins.readDir p; contentsMatch = { required, optional }: - (let all = required // optional; in all // contents == all) + (let all = required // optional; in all // contents == all) && builtins.intersectAttrs required contents == required; # Newer obelisk thunks include the feature of hackGet with a thunk.nix file in the thunk. @@ -21,31 +21,35 @@ self: required = { ${jsonFileName} = "regular"; "default.nix" = "regular"; "thunk.nix" = "regular"; }; optional = { ".attr-cache" = "directory"; }; }; - in builtins.any (n: contentsMatch (packed n)) [ "git.json" "github.json" ]; + in + builtins.any (n: contentsMatch (packed n)) [ "git.json" "github.json" ]; filterArgs = x: removeAttrs x [ "branch" ]; - hasValidThunk = name: if builtins.pathExists (p + ("/" + name)) + hasValidThunk = name: + if builtins.pathExists (p + ("/" + name)) then - contentsMatch { - required = { ${name} = "regular"; }; - optional = { "default.nix" = "regular"; ".attr-cache" = "directory"; }; - } + contentsMatch + { + required = { ${name} = "regular"; }; + optional = { "default.nix" = "regular"; ".attr-cache" = "directory"; }; + } || throw "Thunk at ${toString p} has files in addition to ${name} and optionally default.nix and .attr-cache. Remove either ${name} or those other files to continue (check for leftover .git too)." else false; in - if isObeliskThunkWithThunkNix then import (p + /thunk.nix) - else if hasValidThunk "git.json" then ( + if isObeliskThunkWithThunkNix then import (p + /thunk.nix) + else if hasValidThunk "git.json" then + ( let gitArgs = filterArgs (builtins.fromJSON (builtins.readFile (p + "/git.json"))); in if builtins.elem "@" (lib.stringToCharacters gitArgs.url) - then self.fetchgitPrivate gitArgs - else self.fetchgit gitArgs - ) - else if hasValidThunk "github.json" then - self.fetchFromGitHub (filterArgs (builtins.fromJSON (builtins.readFile (p + "/github.json")))) - else { - name = baseNameOf p; - outPath = self.filterGit p; - }; + then self.fetchgitPrivate gitArgs + else self.fetchgit gitArgs + ) + else if hasValidThunk "github.json" then + self.fetchFromGitHub (filterArgs (builtins.fromJSON (builtins.readFile (p + "/github.json")))) + else { + name = baseNameOf p; + outPath = self.filterGit p; + }; # Make an attribute set of source derivations for a directory containing thunks: thunkSet = dir: lib.mapAttrs (name: _: self.hackGet (dir + "/${name}")) (lib.filterAttrs (_: type: type == "directory" || type == "symlink") (builtins.readDir dir)); diff --git a/nixpkgs-overlays/mobile-ghc/default.nix b/nixpkgs-overlays/mobile-ghc/default.nix index 8ce959a6b..d6ab9111d 100644 --- a/nixpkgs-overlays/mobile-ghc/default.nix +++ b/nixpkgs-overlays/mobile-ghc/default.nix @@ -1,25 +1,31 @@ { lib }: let - versionWildcard = versionList: let - versionListInc = lib.init versionList ++ [ (lib.last versionList + 1) ]; - bottom = lib.concatStringsSep "." (map toString versionList); - top = lib.concatStringsSep "." (map toString versionListInc); - in version: lib.versionOlder version top && lib.versionAtLeast version bottom; -in self: super: { + versionWildcard = versionList: + let + versionListInc = lib.init versionList ++ [ (lib.last versionList + 1) ]; + bottom = lib.concatStringsSep "." (map toString versionList); + top = lib.concatStringsSep "." (map toString versionListInc); + in + version: lib.versionOlder version top && lib.versionAtLeast version bottom; +in +self: super: { haskell = super.haskell // { - compiler = super.haskell.compiler // lib.mapAttrs (n: v: v.overrideAttrs (drv: { - patches = let - isAndroid = self.stdenv.targetPlatform.useAndroidPrebuilt; - isGhc86x = versionWildcard [ 8 6 ] v.version; - in - (drv.patches or []) ++ - lib.optionals isAndroid [ - ./8.6.y/android-patches/force-relocation.patch - ] ++ - lib.optionals (isAndroid && isGhc86x) [ - ./8.6.y/android-patches/strict-align.patch - ]; - })) { inherit (super.haskell.compiler) ghc8107 ghcSplices-8_10; }; + compiler = super.haskell.compiler // lib.mapAttrs + (n: v: v.overrideAttrs (drv: { + patches = + let + isAndroid = self.stdenv.targetPlatform.useAndroidPrebuilt; + isGhc86x = versionWildcard [ 8 6 ] v.version; + in + (drv.patches or [ ]) ++ + lib.optionals isAndroid [ + ./8.6.y/android-patches/force-relocation.patch + ] ++ + lib.optionals (isAndroid && isGhc86x) [ + ./8.6.y/android-patches/strict-align.patch + ]; + })) + { inherit (super.haskell.compiler) ghc8107 ghcSplices-8_10; }; }; } diff --git a/nixpkgs/default.nix b/nixpkgs/default.nix index 2b4d4ab11..9852e4312 100644 --- a/nixpkgs/default.nix +++ b/nixpkgs/default.nix @@ -1,2 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import (import ./thunk.nix) \ No newline at end of file +import (import ./thunk.nix) diff --git a/nixpkgs/thunk.nix b/nixpkgs/thunk.nix index bbf2dc18f..b40203471 100644 --- a/nixpkgs/thunk.nix +++ b/nixpkgs/thunk.nix @@ -1,9 +1,14 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; json = builtins.fromJSON (builtins.readFile ./github.json); -in fetch json \ No newline at end of file +in +fetch json diff --git a/packages.nix b/packages.nix index f2e19ae0e..756b2764c 100644 --- a/packages.nix +++ b/packages.nix @@ -15,10 +15,10 @@ with haskellPackages; ############################################################################## reflex-todomvc -] else []) ++ (if platform == "ghc" then [ +] else [ ]) ++ (if platform == "ghc" then [ ############################################################################## # Add ghc-only packages here # ############################################################################## reflex-todomvc -] else []) ++ builtins.concatLists (map (x: (x.override { mkDerivation = drv: { out = (drv.buildDepends or []) ++ (drv.libraryHaskellDepends or []) ++ (drv.executableHaskellDepends or []); }; }).out) [ reflex reflex-dom reflex-todomvc ]) +] else [ ]) ++ builtins.concatLists (map (x: (x.override { mkDerivation = drv: { out = (drv.buildDepends or [ ]) ++ (drv.libraryHaskellDepends or [ ]) ++ (drv.executableHaskellDepends or [ ]); }; }).out) [ reflex reflex-dom reflex-todomvc ]) diff --git a/project/default.nix b/project/default.nix index 26568a801..87446a0b9 100644 --- a/project/default.nix +++ b/project/default.nix @@ -8,45 +8,45 @@ let in # This function simplifies the definition of Haskell projects that -# have multiple packages. It provides shells for incrementally working -# on all your packages at once using `cabal.project` files, using any -# version of GHC provided by `reflex-platform`, including GHCJS. It -# also produces individual derivations for each package, which can -# ease devops or integration with other Nix setups. -# -# Example: -# -# > default.nix -# -# (import ./reflex-platform {}).project ({ pkgs, ... }: { -# packages = { -# common = ./common; -# backend = ./backend; -# frontend = ./frontend; -# }; -# -# shells = { -# ghc = ["common" "backend" "frontend"]; -# ghcjs = ["common" "frontend"]; -# }; -# -# android.frontend = { -# executableName = "frontend"; -# applicationId = "org.example.frontend"; -# displayName = "Example App"; -# }; -# }) -# -# > example commands -# -# $ nix-build -# $ nix-build -A ghc.backend -# $ nix-build -A ghcjs.frontend -# $ nix-build -A android.frontend -# -# $ nix-shell -A shells.ghc -# $ nix-shell -A shells.ghcjs -# + # have multiple packages. It provides shells for incrementally working + # on all your packages at once using `cabal.project` files, using any + # version of GHC provided by `reflex-platform`, including GHCJS. It + # also produces individual derivations for each package, which can + # ease devops or integration with other Nix setups. + # + # Example: + # + # > default.nix + # + # (import ./reflex-platform {}).project ({ pkgs, ... }: { + # packages = { + # common = ./common; + # backend = ./backend; + # frontend = ./frontend; + # }; + # + # shells = { + # ghc = ["common" "backend" "frontend"]; + # ghcjs = ["common" "frontend"]; + # }; + # + # android.frontend = { + # executableName = "frontend"; + # applicationId = "org.example.frontend"; + # displayName = "Example App"; + # }; + # }) + # + # > example commands + # + # $ nix-build + # $ nix-build -A ghc.backend + # $ nix-build -A ghcjs.frontend + # $ nix-build -A android.frontend + # + # $ nix-shell -A shells.ghc + # $ nix-shell -A shells.ghcjs + # { name ? "reflex-project" # An optional name for your entire project. @@ -57,7 +57,7 @@ in # cabal package name and values are the path to the source # directory. -, shells ? {} +, shells ? { } # :: { :: [PackageName] } # # The `shells` field defines which platforms we'd like to develop @@ -69,7 +69,7 @@ in # build all three packages in a shared incremental environment, for # both GHC and GHCJS. -, overrides ? _: _: {} +, overrides ? _: _: { } # :: PackageSet -> PackageSet -> { :: Derivation } # # A function for overriding Haskell packages. You can use @@ -86,7 +86,7 @@ in # }) {}; # }; -, shellToolOverrides ? _: _: {} +, shellToolOverrides ? _: _: { } # A function returning a record of tools to provide in the # nix-shells. # @@ -108,7 +108,7 @@ in # the same name in your record. They can be disabled by setting them # to null. -, tools ? _: [] +, tools ? _: [ ] # An older, obsolete version of `shellToolOverrides`. # # tools = ghc: with ghc; [ hpack pkgs.chromium ]; @@ -120,7 +120,7 @@ in , useWarp ? false # Configure `reflex-dom` to use `jsaddle-warp`. -, android ? {} +, android ? { } # :: # { :: # { executableName :: String @@ -136,7 +136,7 @@ in # argument can be set to use a different Haskell package than the # one named . -, ios ? {} +, ios ? { } # :: # { :: # { executableName :: String @@ -151,14 +151,15 @@ in # will be in `ios.`. The `package` argument can be set to # use a different Haskell package than the one named . -, passthru ? {} +, passthru ? { } }: let - overrides' = nixpkgs.lib.foldr nixpkgs.lib.composeExtensions (_: _: {}) [ - (self: super: mapAttrs (name: path: self.callCabal2nix name path {}) packages) + overrides' = nixpkgs.lib.foldr nixpkgs.lib.composeExtensions (_: _: { }) [ + (self: super: mapAttrs (name: path: self.callCabal2nix name path { }) packages) (self: super: { - reflex-dom = if useWarp && (with self.ghc.stdenv; hostPlatform == targetPlatform) && !(self.ghc.isGhcjs or false) + reflex-dom = + if useWarp && (with self.ghc.stdenv; hostPlatform == targetPlatform) && !(self.ghc.isGhcjs or false) then nixpkgs.haskell.lib.addBuildDepend (nixpkgs.haskell.lib.enableCabalFlag super.reflex-dom "use-warp") self.jsaddle-warp else super.reflex-dom; }) @@ -166,36 +167,50 @@ let ]; mkPkgSet = name: _: this.${name}.override { overrides = overrides'; }; prj = mapAttrs mkPkgSet shells // { - shells = mapAttrs (name: pnames: - workOnMulti { - envFunc = _: prj.${name}.override { overrides = self: super: nixpkgs.lib.optionalAttrs withHoogle { - ghcWithPackages = (super.ghcWithPackages.override { withHoogle = true; }); - }; }; - packageNames = pnames; - inherit tools shellToolOverrides; - } - ) shells; - - android = if this.androidSupport - then mapAttrs (name: config: - let - ghcAndroidAarch64 = this.ghcAndroidAarch64.override { overrides = overrides'; }; - ghcAndroidAarch32 = this.ghcAndroidAarch32.override { overrides = overrides'; }; - in (this.androidWithHaskellPackages { inherit ghcAndroidAarch64 ghcAndroidAarch32; }).buildApp - ({ package = p: p.${name}; } // config) - ) android + shells = mapAttrs + (name: pnames: + workOnMulti { + envFunc = _: prj.${name}.override { + overrides = self: super: nixpkgs.lib.optionalAttrs withHoogle { + ghcWithPackages = (super.ghcWithPackages.override { withHoogle = true; }); + }; + }; + packageNames = pnames; + inherit tools shellToolOverrides; + } + ) + shells; + + android = + if this.androidSupport + then + mapAttrs + (name: config: + let + ghcAndroidAarch64 = this.ghcAndroidAarch64.override { overrides = overrides'; }; + ghcAndroidAarch32 = this.ghcAndroidAarch32.override { overrides = overrides'; }; + in + (this.androidWithHaskellPackages { inherit ghcAndroidAarch64 ghcAndroidAarch32; }).buildApp + ({ package = p: p.${name}; } // config) + ) + android else throw "Android builds are not supported on this platform."; - ios = if this.iosSupport - then mapAttrs (name: config: - let ghcIosAarch64 = this.ghcIosAarch64.override { overrides = overrides'; }; - in (this.iosWithHaskellPackages ghcIosAarch64).buildApp - ({ package = p: p.${name}; } // config) - ) ios + ios = + if this.iosSupport + then + mapAttrs + (name: config: + let ghcIosAarch64 = this.ghcIosAarch64.override { overrides = overrides'; }; + in (this.iosWithHaskellPackages ghcIosAarch64).buildApp + ({ package = p: p.${name}; } // config) + ) + ios else throw "iOS builds are not supported on this platform."; reflex = this; inherit passthru; }; -in prj +in +prj diff --git a/release.nix b/release.nix index 670ae7172..c9566a74a 100644 --- a/release.nix +++ b/release.nix @@ -19,123 +19,135 @@ let (crossPkgs: lib.optionals (crossPkgs != null) [ crossPkgs.buildPackages.haskellPackages.cabal2nix ]) [ - reflex-platform.nixpkgsCross.ios.aarch64 - reflex-platform.nixpkgsCross.android.aarch64 - reflex-platform.nixpkgsCross.android.aarch32 - ] + reflex-platform.nixpkgsCross.ios.aarch64 + reflex-platform.nixpkgsCross.android.aarch64 + reflex-platform.nixpkgsCross.android.aarch32 + ] ); drvListToAttrs = drvs: lib.listToAttrs (map (drv: { inherit (drv) name; value = drv; }) drvs); - perPlatform = lib.genAttrs cacheBuildSystems (system: let - getRP = args: import ./. ((self-args // { inherit system; }) // args); - reflex-platform = getRP {}; - reflex-platform-nojsstring = getRP { useTextJSString = false; }; + perPlatform = lib.genAttrs cacheBuildSystems (system: + let + getRP = args: import ./. ((self-args // { inherit system; }) // args); + reflex-platform = getRP { }; + reflex-platform-nojsstring = getRP { useTextJSString = false; }; - jsexeHydra = exe: exe.overrideAttrs (attrs: { - postInstall = '' - ${attrs.postInstall or ""} - mkdir -p $out/nix-support - echo $out/bin/reflex-todomvc.jsexe >> $out/nix-support/hydra-build-products - ''; - }); + jsexeHydra = exe: exe.overrideAttrs (attrs: { + postInstall = '' + ${attrs.postInstall or ""} + mkdir -p $out/nix-support + echo $out/bin/reflex-todomvc.jsexe >> $out/nix-support/hydra-build-products + ''; + }); - # These don't work anymore, so they're pretty much disabled - benchmark = import ./nix-utils/benchmark { inherit reflex-platform; }; - demoVM = import ./nix-utils/demo-vm { inherit reflex-platform; }; + # These don't work anymore, so they're pretty much disabled + benchmark = import ./nix-utils/benchmark { inherit reflex-platform; }; + demoVM = import ./nix-utils/demo-vm { inherit reflex-platform; }; - # TODO do we still need to do these to ensure srcs (only used at build time) - # make it to the cache? If not, we can just drop this and all the `_dep` - # attributes in the overlays. + # TODO do we still need to do these to ensure srcs (only used at build time) + # make it to the cache? If not, we can just drop this and all the `_dep` + # attributes in the overlays. - dep = {} - // (lib.optionalAttrs reflex-platform.androidSupport reflex-platform.ghcAndroidAarch64._dep) - // reflex-platform.ghcjs8_6._dep - // benchmark.dep + dep = { } + // (lib.optionalAttrs reflex-platform.androidSupport reflex-platform.ghcAndroidAarch64._dep) + // reflex-platform.ghcjs8_6._dep + // benchmark.dep ; - skeleton-test = import ./tests/skeleton.nix { inherit reflex-platform; }; + skeleton-test = import ./tests/skeleton.nix { inherit reflex-platform; }; - collect = v: - if lib.isDerivation v then [v] - else if lib.isAttrs v then lib.concatMap collect (builtins.attrValues v) - else if lib.isList v then lib.concatMap collect v - else []; + collect = v: + if lib.isDerivation v then [ v ] + else if lib.isAttrs v then lib.concatMap collect (builtins.attrValues v) + else if lib.isList v then lib.concatMap collect v + else [ ]; + + optDebugVariants = [ + "unprofiled" + "profiled" + ]; + perOptDebugVariant = lib.genAttrs optDebugVariants (variant: + let + reflex-platform = getRP { enableLibraryProfiling = variant == "profiled"; }; + skeleton-test = import ./tests/skeleton.nix { inherit reflex-platform; }; + otherDeps = getOtherDeps reflex-platform; + packages = { + # TODO uncomment this once GHCJS profiling builds are fixed + # tryReflexShell = reflex-platform.tryReflexShell; + ghc.ReflexTodomvc = reflex-platform.ghc.reflex-todomvc; + ghc8_6.reflexTodomvc = reflex-platform.ghc8_6.reflex-todomvc; + ghc8_10.reflexTodomvc = reflex-platform.ghc8_10.reflex-todomvc; + ghc.reflex-vty = reflex-platform.ghc.reflex-vty; + ghc.reflex-process = reflex-platform.ghc.reflex-process; + ghc.reflex-fsnotify = reflex-platform.ghc.reflex-fsnotify; + skeleton-test-ghc = skeleton-test.ghc; + } // lib.optionalAttrs (reflex-platform.androidSupport) { + inherit (reflex-platform) androidReflexTodomvc; + inherit (reflex-platform) androidReflexTodomvc-8_6; + inherit (reflex-platform) androidReflexTodomvc-8_10; + androidReflexTodomvc-release = reflex-platform.android.buildApp { + package = p: p.reflex-todomvc; + executableName = "reflex-todomvc"; + applicationId = "org.reflexfrp.todomvc"; + displayName = "Reflex TodoMVC"; + isRelease = true; + }; + skeleton-test-project-android = skeleton-test.project.android; + } // lib.optionalAttrs (reflex-platform.iosSupport) { + inherit (reflex-platform) iosReflexTodomvc; + inherit (reflex-platform) iosReflexTodomvc-8_6; + inherit (reflex-platform) iosReflexTodomvc-8_10; + inherit (reflex-platform) iosSimulatorReflexTodomvc; + skeleton-test-project-ios = skeleton-test.project.ios; + } // drvListToAttrs otherDeps + # TODO uncomment this once GHCJS profiling builds are fixed + # // drvListToAttrs (lib.filter lib.isDerivation reflex-platform.cachePackages) + ; + in + packages // { + cache = reflex-platform.pinBuildInputs "reflex-platform-${system}-${variant}" + (collect packages ++ otherDeps); + }); - optDebugVariants = [ - "unprofiled" - "profiled" - ]; - perOptDebugVariant = lib.genAttrs optDebugVariants (variant: let - reflex-platform = getRP { enableLibraryProfiling = variant == "profiled"; }; - skeleton-test = import ./tests/skeleton.nix { inherit reflex-platform; }; - otherDeps = getOtherDeps reflex-platform; packages = { - # TODO uncomment this once GHCJS profiling builds are fixed - # tryReflexShell = reflex-platform.tryReflexShell; - ghc.ReflexTodomvc = reflex-platform.ghc.reflex-todomvc; - ghc8_6.reflexTodomvc = reflex-platform.ghc8_6.reflex-todomvc; - ghc8_10.reflexTodomvc = reflex-platform.ghc8_10.reflex-todomvc; - ghc.reflex-vty = reflex-platform.ghc.reflex-vty; - ghc.reflex-process = reflex-platform.ghc.reflex-process; - ghc.reflex-fsnotify = reflex-platform.ghc.reflex-fsnotify; - skeleton-test-ghc = skeleton-test.ghc; - } // lib.optionalAttrs (reflex-platform.androidSupport) { - inherit (reflex-platform) androidReflexTodomvc; - inherit (reflex-platform) androidReflexTodomvc-8_6; - inherit (reflex-platform) androidReflexTodomvc-8_10; - androidReflexTodomvc-release = reflex-platform.android.buildApp { - package = p: p.reflex-todomvc; - executableName = "reflex-todomvc"; - applicationId = "org.reflexfrp.todomvc"; - displayName = "Reflex TodoMVC"; - isRelease = true; + inherit dep; + tryReflexShell = reflex-platform.tryReflexShell; + ghcjs.reflexTodomvc = jsexeHydra reflex-platform.ghcjs.reflex-todomvc; + # TODO Doesn't currently build. Removing from CI until fixed. + ghcjs8_6.reflexTodomvc = jsexeHydra reflex-platform.ghcjs8_6.reflex-todomvc; + ghcjs8_10.reflexTodomvc = jsexeHydra reflex-platform.ghcjs8_10.reflex-todomvc; + # TODO move back to `perOptDebugVariant` + skeleton-test-ghcjs = skeleton-test.ghcjs; + nojsstring = { + ghcjs.reflexTodomvc = reflex-platform-nojsstring.ghcjs.reflex-todomvc; + ghcjs8_6.reflexTodomvc = reflex-platform-nojsstring.ghcjs8_6.reflex-todomvc; + ghcjs8_10.reflexTodomvc = reflex-platform-nojsstring.ghcjs8_10.reflex-todomvc; }; - skeleton-test-project-android = skeleton-test.project.android; - } // lib.optionalAttrs (reflex-platform.iosSupport) { - inherit (reflex-platform) iosReflexTodomvc; - inherit (reflex-platform) iosReflexTodomvc-8_6; - inherit (reflex-platform) iosReflexTodomvc-8_10; - inherit (reflex-platform) iosSimulatorReflexTodomvc; - skeleton-test-project-ios = skeleton-test.project.ios; - } // drvListToAttrs otherDeps - # TODO uncomment this once GHCJS profiling builds are fixed - # // drvListToAttrs (lib.filter lib.isDerivation reflex-platform.cachePackages) + } // lib.optionalAttrs (system == "x86_64-linux") { + inherit + #benchmark + # demoVM # Skip for new due to rotted has in `breeze-icons` + ; + } # TODO move back to `perOptDebugVariant` + // drvListToAttrs (lib.filter lib.isDerivation reflex-platform.cachePackages) ; - in packages // { - cache = reflex-platform.pinBuildInputs "reflex-platform-${system}-${variant}" - (collect packages ++ otherDeps); + in + packages // perOptDebugVariant // { + cache = reflex-platform.pinBuildInputs "reflex-platform-${system}" + (collect packages ++ map (a: a.cache) (builtins.attrValues perOptDebugVariant)); }); - packages = { - inherit dep; - tryReflexShell = reflex-platform.tryReflexShell; - ghcjs.reflexTodomvc = jsexeHydra reflex-platform.ghcjs.reflex-todomvc; - # TODO Doesn't currently build. Removing from CI until fixed. - ghcjs8_6.reflexTodomvc = jsexeHydra reflex-platform.ghcjs8_6.reflex-todomvc; - ghcjs8_10.reflexTodomvc = jsexeHydra reflex-platform.ghcjs8_10.reflex-todomvc; - # TODO move back to `perOptDebugVariant` - skeleton-test-ghcjs = skeleton-test.ghcjs; - nojsstring = { - ghcjs.reflexTodomvc = reflex-platform-nojsstring.ghcjs.reflex-todomvc; - ghcjs8_6.reflexTodomvc = reflex-platform-nojsstring.ghcjs8_6.reflex-todomvc; - ghcjs8_10.reflexTodomvc = reflex-platform-nojsstring.ghcjs8_10.reflex-todomvc; - }; - } // lib.optionalAttrs (system == "x86_64-linux") { - inherit - #benchmark - # demoVM # Skip for new due to rotted has in `breeze-icons` - ; - } # TODO move back to `perOptDebugVariant` - // drvListToAttrs (lib.filter lib.isDerivation reflex-platform.cachePackages) - ; - in packages // perOptDebugVariant // { - cache = reflex-platform.pinBuildInputs "reflex-platform-${system}" - (collect packages ++ map (a: a.cache) (builtins.attrValues perOptDebugVariant)); - }); - metaCache = local-self.pinBuildInputs "reflex-platform-everywhere" (map (a: a.cache) (builtins.attrValues perPlatform)); -in perPlatform // { inherit metaCache; } +in +perPlatform // { inherit metaCache; } // { + fmt-nix = local-self.nixpkgs.runCommand "fmt-nix" + { + buildInputs = [ local-self.nixpkgs.nixpkgs-fmt ]; + } '' + nixpkgs-fmt --check ${./.} 2>&1 | tee $out + ''; +} diff --git a/tests/skeleton.nix b/tests/skeleton.nix index efde6f121..34954ab41 100644 --- a/tests/skeleton.nix +++ b/tests/skeleton.nix @@ -18,7 +18,8 @@ let mv ./dist-newstyle $out ''; }); -in { +in +{ project = skeleton; ghc = mkCabalProject { shellDrv = skeleton.shells.ghc; diff --git a/wasm-cross/default.nix b/wasm-cross/default.nix index 0cf822e33..6e1de0153 100644 --- a/wasm-cross/default.nix +++ b/wasm-cross/default.nix @@ -1,8 +1,13 @@ # DO NOT HAND-EDIT THIS FILE -let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: - if !fetchSubmodules && !private then builtins.fetchTarball { - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; - } else (import {}).fetchFromGitHub { - inherit owner repo rev sha256 fetchSubmodules private; - }; -in import (fetch (builtins.fromJSON (builtins.readFile ./github.json))) +let + fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then + builtins.fetchTarball + { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else + (import { }).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; +in +import (fetch (builtins.fromJSON (builtins.readFile ./github.json)))