biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / tools / swiftpm2nix / support.nix
blobdfc2d01a450171422b8c76619857ef4fec93dd6b
1 { lib, fetchgit, formats }:
2 with lib;
3 let
4   json = formats.json { };
5 in rec {
7   # Derive a pin file from workspace state.
8   mkPinFile = workspaceState:
9     assert workspaceState.version >= 5 && workspaceState.version <= 6;
10     json.generate "Package.resolved" {
11       version = 1;
12       object.pins = map (dep: {
13         package = dep.packageRef.name;
14         repositoryURL = dep.packageRef.location;
15         state = dep.state.checkoutState;
16       }) workspaceState.object.dependencies;
17     };
19   # Make packaging helpers from swiftpm2nix generated output.
20   helpers = generated: let
21     inherit (import generated) workspaceStateFile hashes;
22     workspaceState = lib.importJSON workspaceStateFile;
23     pinFile = mkPinFile workspaceState;
24   in rec {
26     # Create fetch expressions for dependencies.
27     sources = listToAttrs (
28       map (dep: nameValuePair dep.subpath (fetchgit {
29         url = dep.packageRef.location;
30         rev = dep.state.checkoutState.revision;
31         sha256 = hashes.${dep.subpath};
32         fetchSubmodules = true;
33       })) workspaceState.object.dependencies
34     );
36     # Configure phase snippet for use in packaging.
37     configure = ''
38       mkdir -p .build/checkouts
39       ln -sf ${pinFile} ./Package.resolved
40       install -m 0600 ${workspaceStateFile} ./.build/workspace-state.json
41     ''
42       + concatStrings (mapAttrsToList (name: src: ''
43         ln -s '${src}' '.build/checkouts/${name}'
44       '') sources)
45       + ''
46         # Helper that makes a swiftpm dependency mutable by copying the source.
47         swiftpmMakeMutable() {
48           local orig="$(readlink .build/checkouts/$1)"
49           rm .build/checkouts/$1
50           cp -r "$orig" .build/checkouts/$1
51           chmod -R u+w .build/checkouts/$1
52         }
53       '';
55   };