From eeb3936722e6f31ed8e292762be1bc6645cf6c27 Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sat, 21 Oct 2023 21:54:21 +1100 Subject: [PATCH 1/8] buildDartApplication: Format with nixpkgs-fmt --- .../dart/build-dart-application/default.nix | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pkgs/build-support/dart/build-dart-application/default.nix b/pkgs/build-support/dart/build-dart-application/default.nix index be1fd7277671..b2535123e382 100644 --- a/pkgs/build-support/dart/build-dart-application/default.nix +++ b/pkgs/build-support/dart/build-dart-application/default.nix @@ -18,11 +18,10 @@ , dartEntryPoints ? null # Used when wrapping aot, jit, kernel, and js builds. # Set to null to disable wrapping. -, dartRuntimeCommand ? - if dartOutputType == "aot-snapshot" then "${dart}/bin/dartaotruntime" - else if (dartOutputType == "jit-snapshot" || dartOutputType == "kernel") then "${dart}/bin/dart" - else if dartOutputType == "js" then "${nodejs}/bin/node" - else null +, dartRuntimeCommand ? if dartOutputType == "aot-snapshot" then "${dart}/bin/dartaotruntime" + else if (dartOutputType == "jit-snapshot" || dartOutputType == "kernel") then "${dart}/bin/dart" + else if dartOutputType == "js" then "${nodejs}/bin/node" + else null , pubspecLockFile ? null , vendorHash ? "" @@ -43,15 +42,15 @@ let inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook; in assert !(builtins.isString dartOutputType && dartOutputType != "") -> - throw "dartOutputType must be a non-empty string"; +throw "dartOutputType must be a non-empty string"; stdenv.mkDerivation (args // { inherit pubGetScript dartCompileCommand dartOutputType dartRuntimeCommand dartCompileFlags dartJitFlags; - dartEntryPoints = - if (dartEntryPoints != null) - then writeText "entrypoints.json" (builtins.toJSON dartEntryPoints) - else null; + dartEntryPoints = + if (dartEntryPoints != null) + then writeText "entrypoints.json" (builtins.toJSON dartEntryPoints) + else null; nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ dart From 64c638bfc07d05370c7f5a3833b5871f4210ef6e Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sat, 21 Oct 2023 22:02:30 +1100 Subject: [PATCH 2/8] fetchDartDeps: Disable install phase in depsListDrv --- pkgs/build-support/dart/fetch-dart-deps/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/build-support/dart/fetch-dart-deps/default.nix b/pkgs/build-support/dart/fetch-dart-deps/default.nix index e523b60797eb..51052cae18f4 100644 --- a/pkgs/build-support/dart/fetch-dart-deps/default.nix +++ b/pkgs/build-support/dart/fetch-dart-deps/default.nix @@ -169,6 +169,8 @@ let dart pub deps --json | jq .packages > $out runHook postBuild ''; + + dontInstall = true; } // (removeAttrs buildDrvInheritArgs [ "name" "pname" ])); # As of Dart 3.0.0, Pub checks the revision of cached Git-sourced packages. From 234b63b0f0668770f9136eb06c718787aed4d342 Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sat, 21 Oct 2023 22:00:54 +1100 Subject: [PATCH 3/8] buildDartApplication: Allow supplying runtime dependencies --- .../dart/build-dart-application/default.nix | 8 +++++-- .../hooks/dart-fixup-hook.sh | 21 +++++++++++++++++++ .../build-dart-application/hooks/default.nix | 3 +++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh diff --git a/pkgs/build-support/dart/build-dart-application/default.nix b/pkgs/build-support/dart/build-dart-application/default.nix index b2535123e382..2246c5634d27 100644 --- a/pkgs/build-support/dart/build-dart-application/default.nix +++ b/pkgs/build-support/dart/build-dart-application/default.nix @@ -23,6 +23,7 @@ else if dartOutputType == "js" then "${nodejs}/bin/node" else null +, runtimeDependencies ? [ ] , pubspecLockFile ? null , vendorHash ? "" , ... @@ -39,25 +40,28 @@ let buildDrvArgs = args; inherit pubGetScript vendorHash pubspecLockFile; }; - inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook; + inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook dartFixupHook; in assert !(builtins.isString dartOutputType && dartOutputType != "") -> throw "dartOutputType must be a non-empty string"; stdenv.mkDerivation (args // { inherit pubGetScript dartCompileCommand dartOutputType dartRuntimeCommand - dartCompileFlags dartJitFlags; + dartCompileFlags dartJitFlags runtimeDependencies; dartEntryPoints = if (dartEntryPoints != null) then writeText "entrypoints.json" (builtins.toJSON dartEntryPoints) else null; + runtimeDependencyLibraryPath = lib.makeLibraryPath runtimeDependencies; + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ dart dartDeps dartConfigHook dartBuildHook dartInstallHook + dartFixupHook makeWrapper ] ++ lib.optionals stdenv.isDarwin [ darwin.sigtool diff --git a/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh b/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh new file mode 100644 index 000000000000..6e1995aebc13 --- /dev/null +++ b/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh @@ -0,0 +1,21 @@ +# shellcheck shell=bash + +dartFixupHook() { + echo "Executing dartFixupHook" + + echo "Providing runtime dependencies" + if [[ ! -z "$runtimeDependencyLibraryPath" ]]; then + # Add runtime library dependencies to the LD_LIBRARY_PATH. + # For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open(). + # + # This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately, + # which is not what application authors expect. + for f in "$out"/bin/*; do + wrapProgram "$f" --suffix LD_LIBRARY_PATH : "$runtimeDependencyLibraryPath" + done + fi + + echo "Finished dartFixupHook" +} + +postFixupHooks+=(dartFixupHook) \ No newline at end of file diff --git a/pkgs/build-support/dart/build-dart-application/hooks/default.nix b/pkgs/build-support/dart/build-dart-application/hooks/default.nix index 463061c54a8d..134989426d96 100644 --- a/pkgs/build-support/dart/build-dart-application/hooks/default.nix +++ b/pkgs/build-support/dart/build-dart-application/hooks/default.nix @@ -12,4 +12,7 @@ dartInstallHook = makeSetupHook { name = "dart-install-hook"; } ./dart-install-hook.sh; + dartFixupHook = makeSetupHook { + name = "dart-fixup-hook"; + } ./dart-fixup-hook.sh; } From 6298ac27745cbab2dd3895c2c25ad3a795310f78 Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sat, 21 Oct 2023 22:30:23 +1100 Subject: [PATCH 4/8] buildDartApplication: Use package override mechanism from buildFlutterApplication This allows Dart applications to benefit from the package override system, which is useful for things like FFI dependencies. --- doc/languages-frameworks/dart.section.md | 7 +- .../dart/build-dart-application/default.nix | 108 +- .../dart/package-overrides/default.nix | 3 + .../tools/misc/dart-sass/default.nix | 1 + .../tools/misc/dart-sass/deps.json | 930 ++++++++++++++++++ .../tools/protoc-gen-dart/default.nix | 1 + .../tools/protoc-gen-dart/deps.json | 549 +++++++++++ pkgs/tools/misc/domine/default.nix | 2 +- pkgs/tools/misc/domine/deps.json | 190 ++++ 9 files changed, 1755 insertions(+), 36 deletions(-) create mode 100644 pkgs/development/compilers/dart/package-overrides/default.nix create mode 100644 pkgs/development/tools/misc/dart-sass/deps.json create mode 100644 pkgs/development/tools/protoc-gen-dart/deps.json create mode 100644 pkgs/tools/misc/domine/deps.json diff --git a/doc/languages-frameworks/dart.section.md b/doc/languages-frameworks/dart.section.md index b00327b78eb2..8d9c062f4220 100644 --- a/doc/languages-frameworks/dart.section.md +++ b/doc/languages-frameworks/dart.section.md @@ -12,6 +12,8 @@ If you are packaging a Flutter desktop application, use [`buildFlutterApplicatio If the upstream source is missing a `pubspec.lock` file, you'll have to vendor one and specify it using `pubspecLockFile`. If it is needed, one will be generated for you and printed when attempting to build the derivation. +The `depsListFile` must always be provided when packaging in Nixpkgs. It will be generated and printed if the derivation is attempted to be built without one. Alternatively, `autoDepsList` may be set to `true` only when outside of Nixpkgs, as it relies on import-from-derivation. + The `dart` commands run can be overridden through `pubGetScript` and `dartCompileCommand`, you can also add flags using `dartCompileFlags` or `dartJitFlags`. Dart supports multiple [outputs types](https://dart.dev/tools/dart-compile#types-of-output), you can choose between them using `dartOutputType` (defaults to `exe`). If you want to override the binaries path or the source path they come from, you can use `dartEntryPoints`. Outputs that require a runtime will automatically be wrapped with the relevant runtime (`dartaotruntime` for `aot-snapshot`, `dart run` for `jit-snapshot` and `kernel`, `node` for `js`), this can be overridden through `dartRuntimeCommand`. @@ -31,6 +33,7 @@ buildDartApplication rec { }; pubspecLockFile = ./pubspec.lock; + depsListFile = ./deps.json; vendorHash = "sha256-Atm7zfnDambN/BmmUf4BG0yUz/y6xWzf0reDw3Ad41s="; } ``` @@ -39,9 +42,7 @@ buildDartApplication rec { The function `buildFlutterApplication` builds Flutter applications. -The deps.json file must always be provided when packaging in Nixpkgs. It will be generated and printed if the derivation is attempted to be built without one. Alternatively, `autoDepsList` may be set to `true` when outside of Nixpkgs, as it relies on import-from-derivation. - -A `pubspec.lock` file must be available. See the [Dart documentation](#ssec-dart-applications) for more details. +See the [Dart documentation](#ssec-dart-applications) for more details on required files and arguments. ```nix { flutter, fetchFromGitHub }: diff --git a/pkgs/build-support/dart/build-dart-application/default.nix b/pkgs/build-support/dart/build-dart-application/default.nix index 2246c5634d27..6992c79a37ed 100644 --- a/pkgs/build-support/dart/build-dart-application/default.nix +++ b/pkgs/build-support/dart/build-dart-application/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchDartDeps, runCommand, writeText, dartHooks, makeWrapper, dart, cacert, nodejs, darwin }: +{ lib, stdenv, callPackage, fetchDartDeps, runCommand, writeText, dartHooks, makeWrapper, dart, cacert, nodejs, darwin, jq }: { pubGetScript ? "dart pub get" @@ -24,6 +24,9 @@ else null , runtimeDependencies ? [ ] +, customPackageOverrides ? { } +, autoDepsList ? false +, depsListFile ? null , pubspecLockFile ? null , vendorHash ? "" , ... @@ -41,37 +44,78 @@ let inherit pubGetScript vendorHash pubspecLockFile; }; inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook dartFixupHook; + + baseDerivation = stdenv.mkDerivation (finalAttrs: args // { + inherit pubGetScript dartCompileCommand dartOutputType dartRuntimeCommand + dartCompileFlags dartJitFlags runtimeDependencies; + + dartEntryPoints = + if (dartEntryPoints != null) + then writeText "entrypoints.json" (builtins.toJSON dartEntryPoints) + else null; + + runtimeDependencyLibraryPath = lib.makeLibraryPath finalAttrs.runtimeDependencies; + + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ + dart + dartDeps + dartConfigHook + dartBuildHook + dartInstallHook + dartFixupHook + makeWrapper + jq + ] ++ lib.optionals stdenv.isDarwin [ + darwin.sigtool + ]; + + preUnpack = '' + ${lib.optionalString (!autoDepsList) '' + if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.dartDeps.depsListFile}')"}; }; then + echo 1>&2 -e '\nThe dependency list file was either not given or differs from the expected result.' \ + '\nPlease choose one of the following solutions:' \ + '\n - Duplicate the following file and pass it to the depsListFile argument.' \ + '\n ${finalAttrs.passthru.dartDeps.depsListFile}' \ + '\n - Set autoDepsList to true (not supported by Hydra or permitted in Nixpkgs)'. + exit 1 + fi + ''} + ${args.preUnpack or ""} + ''; + + # When stripping, it seems some ELF information is lost and the dart VM cli + # runs instead of the expected program. Don't strip if it's an exe output. + dontStrip = args.dontStrip or (dartOutputType == "exe"); + + passthru = { inherit dartDeps; } // (args.passthru or { }); + + meta = (args.meta or { }) // { platforms = args.meta.platforms or dart.meta.platforms; }; + }); + + packageOverrideRepository = (callPackage ../../../development/compilers/dart/package-overrides { }) // customPackageOverrides; + productPackages = builtins.filter (package: package.kind != "dev") + (if autoDepsList + then lib.importJSON dartDeps.depsListFile + else + if depsListFile == null + then [ ] + else lib.importJSON depsListFile); in assert !(builtins.isString dartOutputType && dartOutputType != "") -> throw "dartOutputType must be a non-empty string"; -stdenv.mkDerivation (args // { - inherit pubGetScript dartCompileCommand dartOutputType dartRuntimeCommand - dartCompileFlags dartJitFlags runtimeDependencies; - - dartEntryPoints = - if (dartEntryPoints != null) - then writeText "entrypoints.json" (builtins.toJSON dartEntryPoints) - else null; - - runtimeDependencyLibraryPath = lib.makeLibraryPath runtimeDependencies; - - nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ - dart - dartDeps - dartConfigHook - dartBuildHook - dartInstallHook - dartFixupHook - makeWrapper - ] ++ lib.optionals stdenv.isDarwin [ - darwin.sigtool - ]; - - # When stripping, it seems some ELF information is lost and the dart VM cli - # runs instead of the expected program. Don't strip if it's an exe output. - dontStrip = args.dontStrip or (dartOutputType == "exe"); - - passthru = { inherit dartDeps; } // (args.passthru or { }); - - meta = (args.meta or { }) // { platforms = args.meta.platforms or dart.meta.platforms; }; -}) +builtins.foldl' + (prev: package: + if packageOverrideRepository ? ${package.name} + then + prev.overrideAttrs + (packageOverrideRepository.${package.name} { + inherit (package) + name + version + kind + source + dependencies; + }) + else prev) + baseDerivation + productPackages diff --git a/pkgs/development/compilers/dart/package-overrides/default.nix b/pkgs/development/compilers/dart/package-overrides/default.nix new file mode 100644 index 000000000000..a7237fe1cfa1 --- /dev/null +++ b/pkgs/development/compilers/dart/package-overrides/default.nix @@ -0,0 +1,3 @@ +{ callPackage }: + +{ } diff --git a/pkgs/development/tools/misc/dart-sass/default.nix b/pkgs/development/tools/misc/dart-sass/default.nix index a137f5b21ba6..6737e791f952 100644 --- a/pkgs/development/tools/misc/dart-sass/default.nix +++ b/pkgs/development/tools/misc/dart-sass/default.nix @@ -29,6 +29,7 @@ buildDartApplication rec { }; pubspecLockFile = ./pubspec.lock; + depsListFile = ./deps.json; vendorHash = "sha256-PQvY+qFXovSXH5wuc60wCrt5RiooKcaGKYzbjKSvqso="; nativeBuildInputs = [ diff --git a/pkgs/development/tools/misc/dart-sass/deps.json b/pkgs/development/tools/misc/dart-sass/deps.json new file mode 100644 index 000000000000..75548f50d900 --- /dev/null +++ b/pkgs/development/tools/misc/dart-sass/deps.json @@ -0,0 +1,930 @@ +[ + { + "name": "sass", + "version": "1.69.0", + "kind": "root", + "source": "root", + "dependencies": [ + "args", + "async", + "charcode", + "cli_pkg", + "cli_repl", + "collection", + "http", + "js", + "meta", + "native_synchronization", + "node_interop", + "package_config", + "path", + "pool", + "protobuf", + "pub_semver", + "source_maps", + "source_span", + "stack_trace", + "stream_channel", + "stream_transform", + "string_scanner", + "term_glyph", + "typed_data", + "watcher", + "analyzer", + "archive", + "crypto", + "dart_style", + "dartdoc", + "grinder", + "node_preamble", + "lints", + "protoc_plugin", + "pub_api_client", + "pubspec_parse", + "test", + "test_descriptor", + "test_process", + "yaml", + "cli_util" + ] + }, + { + "name": "cli_util", + "version": "0.4.0", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "meta", + "path" + ] + }, + { + "name": "path", + "version": "1.8.3", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "meta", + "version": "1.10.0", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "yaml", + "version": "3.1.2", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "collection", + "source_span", + "string_scanner" + ] + }, + { + "name": "string_scanner", + "version": "1.2.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "source_span" + ] + }, + { + "name": "source_span", + "version": "1.10.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "collection", + "path", + "term_glyph" + ] + }, + { + "name": "term_glyph", + "version": "1.2.1", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "collection", + "version": "1.18.0", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "test_process", + "version": "2.1.0", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "async", + "meta", + "path", + "test" + ] + }, + { + "name": "test", + "version": "1.24.6", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "analyzer", + "async", + "boolean_selector", + "collection", + "coverage", + "http_multi_server", + "io", + "js", + "matcher", + "node_preamble", + "package_config", + "path", + "pool", + "shelf", + "shelf_packages_handler", + "shelf_static", + "shelf_web_socket", + "source_span", + "stack_trace", + "stream_channel", + "test_api", + "test_core", + "typed_data", + "web_socket_channel", + "webkit_inspection_protocol", + "yaml" + ] + }, + { + "name": "webkit_inspection_protocol", + "version": "1.2.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "logging" + ] + }, + { + "name": "logging", + "version": "1.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "web_socket_channel", + "version": "2.4.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "crypto", + "stream_channel" + ] + }, + { + "name": "stream_channel", + "version": "2.1.2", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "async" + ] + }, + { + "name": "async", + "version": "2.11.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "collection", + "meta" + ] + }, + { + "name": "crypto", + "version": "3.0.3", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "typed_data" + ] + }, + { + "name": "typed_data", + "version": "1.3.2", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "collection" + ] + }, + { + "name": "test_core", + "version": "0.5.6", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "analyzer", + "args", + "async", + "boolean_selector", + "collection", + "coverage", + "frontend_server_client", + "glob", + "io", + "meta", + "package_config", + "path", + "pool", + "source_map_stack_trace", + "source_maps", + "source_span", + "stack_trace", + "stream_channel", + "test_api", + "vm_service", + "yaml" + ] + }, + { + "name": "vm_service", + "version": "11.10.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "test_api", + "version": "0.6.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "boolean_selector", + "collection", + "meta", + "source_span", + "stack_trace", + "stream_channel", + "string_scanner", + "term_glyph" + ] + }, + { + "name": "stack_trace", + "version": "1.11.1", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "path" + ] + }, + { + "name": "boolean_selector", + "version": "2.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "source_span", + "string_scanner" + ] + }, + { + "name": "source_maps", + "version": "0.10.12", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "source_span" + ] + }, + { + "name": "source_map_stack_trace", + "version": "2.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path", + "source_maps", + "stack_trace" + ] + }, + { + "name": "pool", + "version": "1.5.1", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "async", + "stack_trace" + ] + }, + { + "name": "package_config", + "version": "2.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "path" + ] + }, + { + "name": "io", + "version": "1.0.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta", + "path", + "string_scanner" + ] + }, + { + "name": "glob", + "version": "2.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "collection", + "file", + "path", + "string_scanner" + ] + }, + { + "name": "file", + "version": "7.0.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta", + "path" + ] + }, + { + "name": "frontend_server_client", + "version": "3.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "path" + ] + }, + { + "name": "coverage", + "version": "1.6.3", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "args", + "logging", + "package_config", + "path", + "source_maps", + "stack_trace", + "vm_service" + ] + }, + { + "name": "args", + "version": "2.4.2", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "analyzer", + "version": "5.13.0", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "_fe_analyzer_shared", + "collection", + "convert", + "crypto", + "glob", + "meta", + "package_config", + "path", + "pub_semver", + "source_span", + "watcher", + "yaml" + ] + }, + { + "name": "watcher", + "version": "1.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "async", + "path" + ] + }, + { + "name": "pub_semver", + "version": "2.1.4", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "collection", + "meta" + ] + }, + { + "name": "convert", + "version": "3.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "typed_data" + ] + }, + { + "name": "_fe_analyzer_shared", + "version": "61.0.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "shelf_web_socket", + "version": "1.0.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "shelf", + "stream_channel", + "web_socket_channel" + ] + }, + { + "name": "shelf", + "version": "1.4.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "collection", + "http_parser", + "path", + "stack_trace", + "stream_channel" + ] + }, + { + "name": "http_parser", + "version": "4.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "source_span", + "string_scanner", + "typed_data" + ] + }, + { + "name": "shelf_static", + "version": "1.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "convert", + "http_parser", + "mime", + "path", + "shelf" + ] + }, + { + "name": "mime", + "version": "1.0.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "shelf_packages_handler", + "version": "3.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path", + "shelf", + "shelf_static" + ] + }, + { + "name": "node_preamble", + "version": "2.0.2", + "kind": "dev", + "source": "hosted", + "dependencies": [] + }, + { + "name": "matcher", + "version": "0.12.16", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "meta", + "stack_trace", + "term_glyph", + "test_api" + ] + }, + { + "name": "js", + "version": "0.6.7", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "http_multi_server", + "version": "3.2.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async" + ] + }, + { + "name": "test_descriptor", + "version": "2.0.1", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "async", + "collection", + "matcher", + "meta", + "path", + "term_glyph", + "test" + ] + }, + { + "name": "pubspec_parse", + "version": "1.2.3", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "checked_yaml", + "collection", + "json_annotation", + "pub_semver", + "yaml" + ] + }, + { + "name": "json_annotation", + "version": "4.8.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "checked_yaml", + "version": "2.0.3", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "json_annotation", + "source_span", + "yaml" + ] + }, + { + "name": "pub_api_client", + "version": "2.6.0", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "collection", + "http", + "oauth2", + "path", + "pubspec" + ] + }, + { + "name": "pubspec", + "version": "2.3.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path", + "pub_semver", + "yaml", + "uri" + ] + }, + { + "name": "uri", + "version": "1.0.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "matcher", + "quiver" + ] + }, + { + "name": "quiver", + "version": "3.2.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "matcher" + ] + }, + { + "name": "oauth2", + "version": "2.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "crypto", + "http", + "http_parser" + ] + }, + { + "name": "http", + "version": "1.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "async", + "http_parser", + "meta" + ] + }, + { + "name": "protoc_plugin", + "version": "21.1.1", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "fixnum", + "path", + "protobuf" + ] + }, + { + "name": "protobuf", + "version": "3.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "collection", + "fixnum", + "meta" + ] + }, + { + "name": "fixnum", + "version": "1.1.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "lints", + "version": "2.1.1", + "kind": "dev", + "source": "hosted", + "dependencies": [] + }, + { + "name": "grinder", + "version": "0.9.4", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "cli_util", + "glob", + "meta", + "path", + "collection" + ] + }, + { + "name": "dartdoc", + "version": "6.3.0", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "analyzer", + "args", + "cli_util", + "collection", + "crypto", + "glob", + "html", + "logging", + "markdown", + "meta", + "package_config", + "path", + "pub_semver", + "source_span", + "yaml" + ] + }, + { + "name": "markdown", + "version": "7.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "args", + "meta" + ] + }, + { + "name": "html", + "version": "0.15.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "csslib", + "source_span" + ] + }, + { + "name": "csslib", + "version": "1.0.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "source_span" + ] + }, + { + "name": "dart_style", + "version": "2.3.2", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "analyzer", + "args", + "path", + "pub_semver", + "source_span" + ] + }, + { + "name": "archive", + "version": "3.3.9", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "crypto", + "path", + "pointycastle" + ] + }, + { + "name": "pointycastle", + "version": "3.7.3", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "convert", + "js" + ] + }, + { + "name": "stream_transform", + "version": "2.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "node_interop", + "version": "2.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "js" + ] + }, + { + "name": "native_synchronization", + "version": "0.2.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "ffi" + ] + }, + { + "name": "ffi", + "version": "2.1.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "cli_repl", + "version": "0.2.3", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "async", + "js" + ] + }, + { + "name": "cli_pkg", + "version": "2.5.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "archive", + "async", + "charcode", + "cli_util", + "collection", + "crypto", + "glob", + "grinder", + "http", + "js", + "meta", + "node_interop", + "node_preamble", + "package_config", + "path", + "pool", + "pub_semver", + "pubspec_parse", + "retry", + "string_scanner", + "test", + "test_process", + "xml", + "yaml" + ] + }, + { + "name": "xml", + "version": "6.4.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "meta", + "petitparser" + ] + }, + { + "name": "petitparser", + "version": "6.0.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "retry", + "version": "3.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "charcode", + "version": "1.3.1", + "kind": "direct", + "source": "hosted", + "dependencies": [] + } +] diff --git a/pkgs/development/tools/protoc-gen-dart/default.nix b/pkgs/development/tools/protoc-gen-dart/default.nix index 29892b954fc7..fa11e1b60e80 100644 --- a/pkgs/development/tools/protoc-gen-dart/default.nix +++ b/pkgs/development/tools/protoc-gen-dart/default.nix @@ -16,6 +16,7 @@ buildDartApplication rec { sourceRoot = "${src.name}/protoc_plugin"; pubspecLockFile = ./pubspec.lock; + depsListFile = ./deps.json; vendorHash = "sha256-yNgQLCLDCbA07v9tIwPRks/xPAzLVykNtIk+8C0twYM="; meta = with lib; { diff --git a/pkgs/development/tools/protoc-gen-dart/deps.json b/pkgs/development/tools/protoc-gen-dart/deps.json new file mode 100644 index 000000000000..c00a66e0d849 --- /dev/null +++ b/pkgs/development/tools/protoc-gen-dart/deps.json @@ -0,0 +1,549 @@ +[ + { + "name": "protoc_plugin", + "version": "21.1.0", + "kind": "root", + "source": "root", + "dependencies": [ + "fixnum", + "path", + "protobuf", + "collection", + "dart_flutter_team_lints", + "matcher", + "test" + ] + }, + { + "name": "test", + "version": "1.24.6", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "analyzer", + "async", + "boolean_selector", + "collection", + "coverage", + "http_multi_server", + "io", + "js", + "matcher", + "node_preamble", + "package_config", + "path", + "pool", + "shelf", + "shelf_packages_handler", + "shelf_static", + "shelf_web_socket", + "source_span", + "stack_trace", + "stream_channel", + "test_api", + "test_core", + "typed_data", + "web_socket_channel", + "webkit_inspection_protocol", + "yaml" + ] + }, + { + "name": "yaml", + "version": "3.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "source_span", + "string_scanner" + ] + }, + { + "name": "string_scanner", + "version": "1.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "source_span" + ] + }, + { + "name": "source_span", + "version": "1.10.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "path", + "term_glyph" + ] + }, + { + "name": "term_glyph", + "version": "1.2.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "path", + "version": "1.8.3", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "collection", + "version": "1.18.0", + "kind": "dev", + "source": "hosted", + "dependencies": [] + }, + { + "name": "webkit_inspection_protocol", + "version": "1.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "logging" + ] + }, + { + "name": "logging", + "version": "1.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "web_socket_channel", + "version": "2.4.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "crypto", + "stream_channel" + ] + }, + { + "name": "stream_channel", + "version": "2.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async" + ] + }, + { + "name": "async", + "version": "2.11.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "meta" + ] + }, + { + "name": "meta", + "version": "1.9.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "crypto", + "version": "3.0.3", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "typed_data" + ] + }, + { + "name": "typed_data", + "version": "1.3.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection" + ] + }, + { + "name": "test_core", + "version": "0.5.6", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "analyzer", + "args", + "async", + "boolean_selector", + "collection", + "coverage", + "frontend_server_client", + "glob", + "io", + "meta", + "package_config", + "path", + "pool", + "source_map_stack_trace", + "source_maps", + "source_span", + "stack_trace", + "stream_channel", + "test_api", + "vm_service", + "yaml" + ] + }, + { + "name": "vm_service", + "version": "11.10.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "test_api", + "version": "0.6.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "boolean_selector", + "collection", + "meta", + "source_span", + "stack_trace", + "stream_channel", + "string_scanner", + "term_glyph" + ] + }, + { + "name": "stack_trace", + "version": "1.11.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path" + ] + }, + { + "name": "boolean_selector", + "version": "2.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "source_span", + "string_scanner" + ] + }, + { + "name": "source_maps", + "version": "0.10.12", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "source_span" + ] + }, + { + "name": "source_map_stack_trace", + "version": "2.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path", + "source_maps", + "stack_trace" + ] + }, + { + "name": "pool", + "version": "1.5.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "stack_trace" + ] + }, + { + "name": "package_config", + "version": "2.1.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path" + ] + }, + { + "name": "io", + "version": "1.0.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta", + "path", + "string_scanner" + ] + }, + { + "name": "glob", + "version": "2.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "collection", + "file", + "path", + "string_scanner" + ] + }, + { + "name": "file", + "version": "7.0.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta", + "path" + ] + }, + { + "name": "frontend_server_client", + "version": "3.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "path" + ] + }, + { + "name": "coverage", + "version": "1.6.3", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "args", + "logging", + "package_config", + "path", + "source_maps", + "stack_trace", + "vm_service" + ] + }, + { + "name": "args", + "version": "2.4.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "analyzer", + "version": "6.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "_fe_analyzer_shared", + "collection", + "convert", + "crypto", + "glob", + "meta", + "package_config", + "path", + "pub_semver", + "source_span", + "watcher", + "yaml" + ] + }, + { + "name": "watcher", + "version": "1.1.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "path" + ] + }, + { + "name": "pub_semver", + "version": "2.1.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "meta" + ] + }, + { + "name": "convert", + "version": "3.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "typed_data" + ] + }, + { + "name": "_fe_analyzer_shared", + "version": "64.0.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "shelf_web_socket", + "version": "1.0.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "shelf", + "stream_channel", + "web_socket_channel" + ] + }, + { + "name": "shelf", + "version": "1.4.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "collection", + "http_parser", + "path", + "stack_trace", + "stream_channel" + ] + }, + { + "name": "http_parser", + "version": "4.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "source_span", + "string_scanner", + "typed_data" + ] + }, + { + "name": "shelf_static", + "version": "1.1.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "convert", + "http_parser", + "mime", + "path", + "shelf" + ] + }, + { + "name": "mime", + "version": "1.0.4", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "shelf_packages_handler", + "version": "3.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "path", + "shelf", + "shelf_static" + ] + }, + { + "name": "node_preamble", + "version": "2.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "matcher", + "version": "0.12.16", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "async", + "meta", + "stack_trace", + "term_glyph", + "test_api" + ] + }, + { + "name": "js", + "version": "0.6.7", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "http_multi_server", + "version": "3.2.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async" + ] + }, + { + "name": "dart_flutter_team_lints", + "version": "1.0.0", + "kind": "dev", + "source": "hosted", + "dependencies": [ + "lints" + ] + }, + { + "name": "lints", + "version": "2.1.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "protobuf", + "version": "3.1.0", + "kind": "direct", + "source": "path", + "dependencies": [ + "collection", + "fixnum", + "meta" + ] + }, + { + "name": "fixnum", + "version": "1.1.0", + "kind": "direct", + "source": "hosted", + "dependencies": [] + } +] diff --git a/pkgs/tools/misc/domine/default.nix b/pkgs/tools/misc/domine/default.nix index cd62b9bd1a74..421b49a9d4a4 100644 --- a/pkgs/tools/misc/domine/default.nix +++ b/pkgs/tools/misc/domine/default.nix @@ -12,6 +12,6 @@ buildDartApplication rec { }; pubspecLockFile = ./pubspec.lock; - + depsListFile = ./deps.json; vendorHash = "16z3paq1nxlnzs20qlljnwa2ff6xfhdqzcq8d8izkl7w1j4hyxgn"; } diff --git a/pkgs/tools/misc/domine/deps.json b/pkgs/tools/misc/domine/deps.json new file mode 100644 index 000000000000..baa466f5e2f2 --- /dev/null +++ b/pkgs/tools/misc/domine/deps.json @@ -0,0 +1,190 @@ +[ + { + "name": "domine", + "version": "1.1.0+3", + "kind": "root", + "source": "root", + "dependencies": [ + "args", + "dart_openai", + "dio", + "dio_smart_retry", + "tint", + "lints" + ] + }, + { + "name": "lints", + "version": "2.1.1", + "kind": "dev", + "source": "hosted", + "dependencies": [] + }, + { + "name": "tint", + "version": "2.0.1", + "kind": "direct", + "source": "hosted", + "dependencies": [] + }, + { + "name": "dio_smart_retry", + "version": "5.0.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "dio", + "http_parser", + "path" + ] + }, + { + "name": "path", + "version": "1.8.3", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "http_parser", + "version": "4.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "source_span", + "string_scanner", + "typed_data" + ] + }, + { + "name": "typed_data", + "version": "1.3.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection" + ] + }, + { + "name": "collection", + "version": "1.17.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "string_scanner", + "version": "1.2.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "source_span" + ] + }, + { + "name": "source_span", + "version": "1.10.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "path", + "term_glyph" + ] + }, + { + "name": "term_glyph", + "version": "1.2.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "dio", + "version": "5.3.2", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "async", + "http_parser", + "meta", + "path" + ] + }, + { + "name": "meta", + "version": "1.9.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [] + }, + { + "name": "async", + "version": "2.11.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "collection", + "meta" + ] + }, + { + "name": "dart_openai", + "version": "4.0.0", + "kind": "direct", + "source": "hosted", + "dependencies": [ + "http", + "meta", + "collection", + "fetch_client" + ] + }, + { + "name": "fetch_client", + "version": "1.0.2", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "fetch_api", + "http" + ] + }, + { + "name": "http", + "version": "1.1.0", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "async", + "http_parser", + "meta" + ] + }, + { + "name": "fetch_api", + "version": "1.0.1", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "js" + ] + }, + { + "name": "js", + "version": "0.6.7", + "kind": "transitive", + "source": "hosted", + "dependencies": [ + "meta" + ] + }, + { + "name": "args", + "version": "2.4.2", + "kind": "direct", + "source": "hosted", + "dependencies": [] + } +] From 5391c0204e54b0d1852415108f20ad316f20cdaf Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sat, 21 Oct 2023 22:37:01 +1100 Subject: [PATCH 5/8] buildDartApplication: Allow passing a `sdkSetupScript` --- .../dart/build-dart-application/default.nix | 9 +++++---- .../build-dart-application/hooks/dart-config-hook.sh | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pkgs/build-support/dart/build-dart-application/default.nix b/pkgs/build-support/dart/build-dart-application/default.nix index 6992c79a37ed..7920a3d61a7a 100644 --- a/pkgs/build-support/dart/build-dart-application/default.nix +++ b/pkgs/build-support/dart/build-dart-application/default.nix @@ -1,6 +1,7 @@ { lib, stdenv, callPackage, fetchDartDeps, runCommand, writeText, dartHooks, makeWrapper, dart, cacert, nodejs, darwin, jq }: -{ pubGetScript ? "dart pub get" +{ sdkSetupScript ? "" +, pubGetScript ? "dart pub get" # Output type to produce. Can be any kind supported by dart # https://dart.dev/tools/dart-compile#types-of-output @@ -41,13 +42,13 @@ let ''; }) { buildDrvArgs = args; - inherit pubGetScript vendorHash pubspecLockFile; + inherit sdkSetupScript pubGetScript vendorHash pubspecLockFile; }; inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook dartFixupHook; baseDerivation = stdenv.mkDerivation (finalAttrs: args // { - inherit pubGetScript dartCompileCommand dartOutputType dartRuntimeCommand - dartCompileFlags dartJitFlags runtimeDependencies; + inherit sdkSetupScript pubGetScript dartCompileCommand dartOutputType + dartRuntimeCommand dartCompileFlags dartJitFlags runtimeDependencies; dartEntryPoints = if (dartEntryPoints != null) diff --git a/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh b/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh index 3e901995237d..f22d7d2ce64d 100644 --- a/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh +++ b/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh @@ -3,6 +3,9 @@ dartConfigHook() { echo "Executing dartConfigHook" + echo "Setting up SDK" + eval "$sdkSetupScript" + echo "Installing dependencies" eval doPubGet "$pubGetScript" --offline From becdfbe17c5a2104a9e7e024910c6157b1cd10dd Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sun, 22 Oct 2023 00:14:42 +1100 Subject: [PATCH 6/8] buildDartApplication: Recognise extraWrapProgramArgs --- .../dart/build-dart-application/default.nix | 1 + .../hooks/dart-fixup-hook.sh | 25 +++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pkgs/build-support/dart/build-dart-application/default.nix b/pkgs/build-support/dart/build-dart-application/default.nix index 7920a3d61a7a..76328e5645f6 100644 --- a/pkgs/build-support/dart/build-dart-application/default.nix +++ b/pkgs/build-support/dart/build-dart-application/default.nix @@ -25,6 +25,7 @@ else null , runtimeDependencies ? [ ] +, extraWrapProgramArgs ? "" , customPackageOverrides ? { } , autoDepsList ? false , depsListFile ? null diff --git a/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh b/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh index 6e1995aebc13..dd96ab374860 100644 --- a/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh +++ b/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh @@ -3,15 +3,26 @@ dartFixupHook() { echo "Executing dartFixupHook" - echo "Providing runtime dependencies" + declare -a wrapProgramArgs + + # Add runtime library dependencies to the LD_LIBRARY_PATH. + # For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open(). + # + # This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately, + # which is not what application authors expect. + echo "$runtimeDependencyLibraryPath" if [[ ! -z "$runtimeDependencyLibraryPath" ]]; then - # Add runtime library dependencies to the LD_LIBRARY_PATH. - # For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open(). - # - # This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately, - # which is not what application authors expect. + wrapProgramArgs+=(--suffix LD_LIBRARY_PATH : \"$runtimeDependencyLibraryPath\") + fi + + if [[ ! -z "$extraWrapProgramArgs" ]]; then + wrapProgramArgs+=("$extraWrapProgramArgs") + fi + + if [ ${#wrapProgramArgs[@]} -ne 0 ]; then for f in "$out"/bin/*; do - wrapProgram "$f" --suffix LD_LIBRARY_PATH : "$runtimeDependencyLibraryPath" + echo "Wrapping $f..." + eval "wrapProgram \"$f\" ${wrapProgramArgs[@]}" done fi From 2addb67a1408441b090e3ba158c8ab19e2ab3dc5 Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sun, 22 Oct 2023 00:31:58 +1100 Subject: [PATCH 7/8] buildFlutterApplication: Wrap buildDartApplication --- pkgs/build-support/flutter/default.nix | 182 +++++------------- .../dart/package-overrides/default.nix | 7 +- .../flutter-secure-storage-linux/default.nix | 0 .../handy-window/default.nix | 0 .../package-overrides/matrix/default.nix | 0 .../package-overrides/olm/default.nix | 0 .../flutter/package-overrides/default.nix | 8 - 7 files changed, 54 insertions(+), 143 deletions(-) rename pkgs/development/compilers/{flutter => dart}/package-overrides/flutter-secure-storage-linux/default.nix (100%) rename pkgs/development/compilers/{flutter => dart}/package-overrides/handy-window/default.nix (100%) rename pkgs/development/compilers/{flutter => dart}/package-overrides/matrix/default.nix (100%) rename pkgs/development/compilers/{flutter => dart}/package-overrides/olm/default.nix (100%) delete mode 100644 pkgs/development/compilers/flutter/package-overrides/default.nix diff --git a/pkgs/build-support/flutter/default.nix b/pkgs/build-support/flutter/default.nix index a0ed1211ed81..3e136211655b 100644 --- a/pkgs/build-support/flutter/default.nix +++ b/pkgs/build-support/flutter/default.nix @@ -1,34 +1,28 @@ { lib , callPackage -, stdenvNoCC , runCommand , makeWrapper , wrapGAppsHook -, llvmPackages_13 +, fetchDartDeps +, buildDartApplication , cacert , glib , flutter -, jq }: # absolutely no mac support for now { pubGetScript ? "flutter pub get" , flutterBuildFlags ? [ ] -, runtimeDependencies ? [ ] -, customPackageOverrides ? { } -, autoDepsList ? false -, depsListFile ? null -, vendorHash ? "" -, pubspecLockFile ? null -, nativeBuildInputs ? [ ] -, preUnpack ? "" -, postFixup ? "" , extraWrapProgramArgs ? "" , ... }@args: -let - flutterSetupScript = '' + +(buildDartApplication.override { + dart = flutter; + fetchDartDeps = fetchDartDeps.override { dart = flutter; }; +}) (args // { + sdkSetupScript = '' # Pub needs SSL certificates. Dart normally looks in a hardcoded path. # https://github.com/dart-lang/sdk/blob/3.1.0/runtime/bin/security_context_linux.cc#L48 # @@ -54,136 +48,56 @@ let flutter config --enable-linux-desktop >/dev/null ''; - deps = callPackage ../dart/fetch-dart-deps { dart = flutter; } { - sdkSetupScript = flutterSetupScript; - inherit pubGetScript vendorHash pubspecLockFile; - buildDrvArgs = args; - }; + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ wrapGAppsHook ]; + buildInputs = (args.buildInputs or [ ]) ++ [ glib ]; - baseDerivation = llvmPackages_13.stdenv.mkDerivation (finalAttrs: args // { - inherit flutterBuildFlags runtimeDependencies; + dontDartBuild = true; + buildPhase = args.buildPhase or '' + runHook preBuild - outputs = [ "out" "debug" ]; + mkdir -p build/flutter_assets/fonts - nativeBuildInputs = [ - makeWrapper - deps - flutter - jq - glib - wrapGAppsHook - ] ++ nativeBuildInputs; + doPubGet flutter pub get --offline -v + flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") flutterBuildFlags)} - dontWrapGApps = true; + runHook postBuild + ''; - preUnpack = '' - ${lib.optionalString (!autoDepsList) '' - if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.depsListFile}')"}; }; then - echo 1>&2 -e '\nThe dependency list file was either not given or differs from the expected result.' \ - '\nPlease choose one of the following solutions:' \ - '\n - Duplicate the following file and pass it to the depsListFile argument.' \ - '\n ${finalAttrs.passthru.depsListFile}' \ - '\n - Set autoDepsList to true (not supported by Hydra or permitted in Nixpkgs)'. - exit 1 - fi - ''} + dontDartInstall = true; + installPhase = args.installPhase or '' + runHook preInstall - ${preUnpack} - ''; + built=build/linux/*/release/bundle - configurePhase = '' - runHook preConfigure + mkdir -p $out/bin + mv $built $out/app - ${flutterSetupScript} + for f in $(find $out/app -iname "*.desktop" -type f); do + install -D $f $out/share/applications/$(basename $f) + done - runHook postConfigure - ''; + for f in $(find $out/app -maxdepth 1 -type f); do + ln -s $f $out/bin/$(basename $f) + done - buildPhase = '' - runHook preBuild + # make *.so executable + find $out/app -iname "*.so" -type f -exec chmod +x {} + - mkdir -p build/flutter_assets/fonts + # remove stuff like /build/source/packages/ubuntu_desktop_installer/linux/flutter/ephemeral + for f in $(find $out/app -executable -type f); do + if patchelf --print-rpath "$f" | grep /build; then # this ignores static libs (e,g. libapp.so) also + echo "strip RPath of $f" + newrp=$(patchelf --print-rpath $f | sed -r "s|/build.*ephemeral:||g" | sed -r "s|/build.*profile:||g") + patchelf --set-rpath "$newrp" "$f" + fi + done - doPubGet flutter pub get --offline -v - flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") finalAttrs.flutterBuildFlags)} + runHook postInstall + ''; - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - built=build/linux/*/release/bundle - - mkdir -p $out/bin - mv $built $out/app - - for f in $(find $out/app -iname "*.desktop" -type f); do - install -D $f $out/share/applications/$(basename $f) - done - - for f in $(find $out/app -maxdepth 1 -type f); do - ln -s $f $out/bin/$(basename $f) - done - - # make *.so executable - find $out/app -iname "*.so" -type f -exec chmod +x {} + - - # remove stuff like /build/source/packages/ubuntu_desktop_installer/linux/flutter/ephemeral - for f in $(find $out/app -executable -type f); do - if patchelf --print-rpath "$f" | grep /build; then # this ignores static libs (e,g. libapp.so) also - echo "strip RPath of $f" - newrp=$(patchelf --print-rpath $f | sed -r "s|/build.*ephemeral:||g" | sed -r "s|/build.*profile:||g") - patchelf --set-rpath "$newrp" "$f" - fi - done - - runHook postInstall - ''; - - postFixup = '' - # Add runtime library dependencies to the LD_LIBRARY_PATH. - # For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open(). - # - # This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately, - # which is not what application authors expect. - for f in "$out"/bin/*; do - wrapProgram "$f" \ - --suffix LD_LIBRARY_PATH : '${lib.makeLibraryPath finalAttrs.runtimeDependencies}' \ - ''${gappsWrapperArgs[@]} \ - ${extraWrapProgramArgs} - done - - ${postFixup} - ''; - - passthru = (args.passthru or {}) // { - inherit (deps) depsListFile; - }; - }); - - packageOverrideRepository = (callPackage ../../development/compilers/flutter/package-overrides { }) // customPackageOverrides; - productPackages = builtins.filter (package: package.kind != "dev") - (if autoDepsList - then lib.importJSON deps.depsListFile - else - if depsListFile == null - then [ ] - else lib.importJSON depsListFile); -in -builtins.foldl' - (prev: package: - if packageOverrideRepository ? ${package.name} - then - prev.overrideAttrs - (packageOverrideRepository.${package.name} { - inherit (package) - name - version - kind - source - dependencies; - }) - else prev) - baseDerivation - productPackages + dontWrapGApps = true; + extraWrapProgramArgs = '' + ''${gappsWrapperArgs[@]} \ + ${extraWrapProgramArgs} + ''; +}) diff --git a/pkgs/development/compilers/dart/package-overrides/default.nix b/pkgs/development/compilers/dart/package-overrides/default.nix index a7237fe1cfa1..c162929e336a 100644 --- a/pkgs/development/compilers/dart/package-overrides/default.nix +++ b/pkgs/development/compilers/dart/package-overrides/default.nix @@ -1,3 +1,8 @@ { callPackage }: -{ } +{ + flutter_secure_storage_linux = callPackage ./flutter-secure-storage-linux { }; + handy_window = callPackage ./handy-window { }; + matrix = callPackage ./matrix { }; + olm = callPackage ./olm { }; +} diff --git a/pkgs/development/compilers/flutter/package-overrides/flutter-secure-storage-linux/default.nix b/pkgs/development/compilers/dart/package-overrides/flutter-secure-storage-linux/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/flutter-secure-storage-linux/default.nix rename to pkgs/development/compilers/dart/package-overrides/flutter-secure-storage-linux/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/handy-window/default.nix b/pkgs/development/compilers/dart/package-overrides/handy-window/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/handy-window/default.nix rename to pkgs/development/compilers/dart/package-overrides/handy-window/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/matrix/default.nix b/pkgs/development/compilers/dart/package-overrides/matrix/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/matrix/default.nix rename to pkgs/development/compilers/dart/package-overrides/matrix/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/olm/default.nix b/pkgs/development/compilers/dart/package-overrides/olm/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/olm/default.nix rename to pkgs/development/compilers/dart/package-overrides/olm/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/default.nix b/pkgs/development/compilers/flutter/package-overrides/default.nix deleted file mode 100644 index c162929e336a..000000000000 --- a/pkgs/development/compilers/flutter/package-overrides/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ callPackage }: - -{ - flutter_secure_storage_linux = callPackage ./flutter-secure-storage-linux { }; - handy_window = callPackage ./handy-window { }; - matrix = callPackage ./matrix { }; - olm = callPackage ./olm { }; -} From 98a7a5edd36d91b906558536f73239e709b36feb Mon Sep 17 00:00:00 2001 From: hacker1024 Date: Sun, 22 Oct 2023 00:42:07 +1100 Subject: [PATCH 8/8] dartHooks.dartFixupHook: Add trailing newline --- .../dart/build-dart-application/hooks/dart-fixup-hook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh b/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh index dd96ab374860..c5a9bedd0665 100644 --- a/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh +++ b/pkgs/build-support/dart/build-dart-application/hooks/dart-fixup-hook.sh @@ -29,4 +29,4 @@ dartFixupHook() { echo "Finished dartFixupHook" } -postFixupHooks+=(dartFixupHook) \ No newline at end of file +postFixupHooks+=(dartFixupHook)