swiftpm2nix: init
This commit is contained in:
parent
0b877d85e5
commit
4f082f522e
23
pkgs/development/tools/swiftpm2nix/default.nix
Normal file
23
pkgs/development/tools/swiftpm2nix/default.nix
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{ lib, stdenv, makeWrapper, jq, nix-prefetch-git }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "swiftpm2nix";
|
||||||
|
|
||||||
|
nativeBuildInputs = [ makeWrapper ];
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
install -vD ${./swiftpm2nix.sh} $out/bin/swiftpm2nix
|
||||||
|
wrapProgram $out/bin/$name \
|
||||||
|
--prefix PATH : ${lib.makeBinPath [ jq nix-prefetch-git ]} \
|
||||||
|
'';
|
||||||
|
|
||||||
|
preferLocalBuild = true;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Generate a Nix expression to fetch swiftpm dependencies";
|
||||||
|
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||||
|
platforms = lib.platforms.all;
|
||||||
|
};
|
||||||
|
}
|
74
pkgs/development/tools/swiftpm2nix/swiftpm2nix.sh
Executable file
74
pkgs/development/tools/swiftpm2nix/swiftpm2nix.sh
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Generates a Nix expression to fetch swiftpm dependencies, and a
|
||||||
|
# configurePhase snippet to prepare a working directory for swift-build.
|
||||||
|
|
||||||
|
set -eu -o pipefail
|
||||||
|
shopt -s lastpipe
|
||||||
|
|
||||||
|
pinFile="Package.resolved"
|
||||||
|
stateFile=".build/workspace-state.json"
|
||||||
|
|
||||||
|
for file in $pinFile $stateFile; do
|
||||||
|
if [[ ! -f "$file" ]]; then
|
||||||
|
echo >&2 "Missing $file. Run 'swift package resolve' first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$(jq .version $pinFile)" != "1" ]]; then
|
||||||
|
echo >&2 "Unsupported $pinFile version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "$(jq .version $stateFile)" != "5" ]]; then
|
||||||
|
echo >&2 "Unsupported $stateFile version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Iterate dependencies and prefetch.
|
||||||
|
sources=""
|
||||||
|
jq -r '.object.dependencies[] | "\(.subpath) \(.packageRef.location) \(.state.checkoutState.revision)"' $stateFile \
|
||||||
|
| while read -r name url rev; do
|
||||||
|
echo >&2 "-- Fetching $name"
|
||||||
|
sha256="$(nix-prefetch-git $url $rev | jq -r .sha256)"
|
||||||
|
sources+="
|
||||||
|
\"$name\" = fetchgit {
|
||||||
|
url = \"$url\";
|
||||||
|
rev = \"$rev\";
|
||||||
|
sha256 = \"$sha256\";
|
||||||
|
};"
|
||||||
|
echo >&2
|
||||||
|
done
|
||||||
|
sources+=$'\n'" "
|
||||||
|
|
||||||
|
# Generate output.
|
||||||
|
mkdir -p nix
|
||||||
|
# Copy the pin file as-is.
|
||||||
|
cp $pinFile nix/Package.resolved
|
||||||
|
# Copy the workspace state, but clear 'artifacts'.
|
||||||
|
jq '.object.artifacts = []' < $stateFile > nix/workspace-state.json
|
||||||
|
# Build an expression for fetching sources, and preparing the working directory.
|
||||||
|
cat > nix/default.nix << EOF
|
||||||
|
# This file was generated by swiftpm2nix.
|
||||||
|
{ lib, fetchgit }: rec {
|
||||||
|
sources = {$sources};
|
||||||
|
configure = ''
|
||||||
|
mkdir -p .build/checkouts
|
||||||
|
ln -sf \${./Package.resolved} ./Package.resolved
|
||||||
|
install -m 0600 \${./workspace-state.json} ./.build/workspace-state.json
|
||||||
|
''
|
||||||
|
+ lib.concatStrings (lib.mapAttrsToList (name: src: ''
|
||||||
|
ln -s '\${src}' '.build/checkouts/\${name}'
|
||||||
|
'') sources)
|
||||||
|
+ ''
|
||||||
|
# Helper that makes a swiftpm dependency mutable by copying the source.
|
||||||
|
swiftpmMakeMutable() {
|
||||||
|
local orig="\$(readlink .build/checkouts/\$1)"
|
||||||
|
rm .build/checkouts/\$1
|
||||||
|
cp -r "\$orig" .build/checkouts/\$1
|
||||||
|
chmod -R u+w .build/checkouts/\$1
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
echo >&2 "-- Generated ./nix"
|
@ -15044,6 +15044,8 @@ with pkgs;
|
|||||||
swiftPackages = recurseIntoAttrs (callPackage ../development/compilers/swift { });
|
swiftPackages = recurseIntoAttrs (callPackage ../development/compilers/swift { });
|
||||||
inherit (swiftPackages) swift;
|
inherit (swiftPackages) swift;
|
||||||
|
|
||||||
|
swiftpm2nix = callPackage ../development/tools/swiftpm2nix { };
|
||||||
|
|
||||||
swiProlog = callPackage ../development/compilers/swi-prolog {
|
swiProlog = callPackage ../development/compilers/swi-prolog {
|
||||||
openssl = openssl_1_1;
|
openssl = openssl_1_1;
|
||||||
inherit (darwin.apple_sdk.frameworks) Security;
|
inherit (darwin.apple_sdk.frameworks) Security;
|
||||||
|
Loading…
Reference in New Issue
Block a user