From 1e8685d3411639326ef6be778e6d5b06b3be7c9a Mon Sep 17 00:00:00 2001 From: Alexis Hildebrandt Date: Sun, 3 Mar 2024 15:38:28 +0100 Subject: [PATCH 1/2] dockutil: 3.0.2 -> 3.1.3 Diff: https://github.com/kcrawford/dockutil/compare/3.0.2...3.1.3 --- pkgs/os-specific/darwin/dockutil/default.nix | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pkgs/os-specific/darwin/dockutil/default.nix b/pkgs/os-specific/darwin/dockutil/default.nix index 5e4187f07280..5d558a2cc2e3 100644 --- a/pkgs/os-specific/darwin/dockutil/default.nix +++ b/pkgs/os-specific/darwin/dockutil/default.nix @@ -1,28 +1,25 @@ { lib, stdenv, fetchurl, libarchive, p7zip }: -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "dockutil"; - version = "3.0.2"; + version = "3.1.3"; src = fetchurl { url = - "https://github.com/kcrawford/dockutil/releases/download/${version}/dockutil-${version}.pkg"; - sha256 = "175137ea747e83ed221d60b18b712b256ed31531534cde84f679487d337668fd"; + "https://github.com/kcrawford/dockutil/releases/download/${finalAttrs.version}/dockutil-${finalAttrs.version}.pkg"; + hash = "sha256-9g24Jz/oDXxIJFiL7bU4pTh2dcORftsAENq59S0/JYI="; }; dontBuild = true; nativeBuildInputs = [ libarchive p7zip ]; - unpackPhase = '' - 7z x $src - bsdtar -xf Payload~ - ''; + unpackCmd = "7z x -so $src | bsdtar -x"; installPhase = '' runHook preInstall mkdir -p $out/bin mkdir -p $out/usr/local/bin - install -Dm755 usr/local/bin/dockutil -t $out/usr/local/bin + install -Dm755 local/bin/dockutil -t $out/usr/local/bin ln -rs $out/usr/local/bin/dockutil $out/bin/dockutil runHook postInstall ''; @@ -31,7 +28,9 @@ stdenv.mkDerivation rec { description = "Tool for managing dock items"; homepage = "https://github.com/kcrawford/dockutil"; license = licenses.asl20; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; maintainers = with maintainers; [ tboerger ]; + mainProgram = "dockutil"; platforms = platforms.darwin; }; -} +}) From 453aff31c66ef414c7a6b82511bd79f648d76386 Mon Sep 17 00:00:00 2001 From: Alexis Hildebrandt Date: Sun, 3 Mar 2024 15:47:41 +0100 Subject: [PATCH 2/2] dockutil: refactor to build from source on aarch64 --- pkgs/os-specific/darwin/dockutil/default.nix | 113 ++++++++++++++---- .../darwin/dockutil/generated/default.nix | 7 ++ .../dockutil/generated/workspace-state.json | 25 ++++ 3 files changed, 120 insertions(+), 25 deletions(-) create mode 100644 pkgs/os-specific/darwin/dockutil/generated/default.nix create mode 100644 pkgs/os-specific/darwin/dockutil/generated/workspace-state.json diff --git a/pkgs/os-specific/darwin/dockutil/default.nix b/pkgs/os-specific/darwin/dockutil/default.nix index 5d558a2cc2e3..64a8a9844388 100644 --- a/pkgs/os-specific/darwin/dockutil/default.nix +++ b/pkgs/os-specific/darwin/dockutil/default.nix @@ -1,36 +1,99 @@ -{ lib, stdenv, fetchurl, libarchive, p7zip }: -stdenv.mkDerivation (finalAttrs: { +{ lib +, stdenv +, stdenvNoCC +, fetchFromGitHub +, fetchurl +, swift +, swiftpm +, swiftpm2nix +, swiftPackages +, darwin +, libarchive +, p7zip +# Building from source on x86_64 fails (among other things) due to: +# error: cannot load underlying module for 'Darwin' +, fromSource ? (stdenv.system != "x86_64-darwin") +}: + +let + generated = swiftpm2nix.helpers ./generated; + pname = "dockutil"; version = "3.1.3"; - src = fetchurl { - url = - "https://github.com/kcrawford/dockutil/releases/download/${finalAttrs.version}/dockutil-${finalAttrs.version}.pkg"; - hash = "sha256-9g24Jz/oDXxIJFiL7bU4pTh2dcORftsAENq59S0/JYI="; - }; - - dontBuild = true; - - nativeBuildInputs = [ libarchive p7zip ]; - - unpackCmd = "7z x -so $src | bsdtar -x"; - - installPhase = '' - runHook preInstall - mkdir -p $out/bin - mkdir -p $out/usr/local/bin - install -Dm755 local/bin/dockutil -t $out/usr/local/bin - ln -rs $out/usr/local/bin/dockutil $out/bin/dockutil - runHook postInstall - ''; - meta = with lib; { description = "Tool for managing dock items"; homepage = "https://github.com/kcrawford/dockutil"; license = licenses.asl20; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; maintainers = with maintainers; [ tboerger ]; mainProgram = "dockutil"; platforms = platforms.darwin; }; -}) + + buildFromSource = swiftPackages.stdenv.mkDerivation (finalAttrs: { + inherit pname version meta; + + src = fetchFromGitHub { + owner = "kcrawford"; + repo = "dockutil"; + rev = finalAttrs.version; + hash = "sha256-mmk4vVZhq4kt05nI/dDM1676FDWyf4wTSwY2YzqKsLU="; + }; + + postPatch = '' + # Patch sources so that they build with Swift CoreFoundation + # which differs ever so slightly from Apple's implementation. + substituteInPlace Sources/DockUtil/DockUtil.swift \ + --replace-fail "URL(filePath:" \ + "URL(fileURLWithPath:" \ + --replace-fail "path(percentEncoded: false)" \ + "path" + ''; + + nativeBuildInputs = [ swift swiftpm ]; + + buildInputs = with darwin.apple_sdk.frameworks; [ Cocoa ]; + + configurePhase = generated.configure; + + installPhase = '' + runHook preInstall + install -Dm755 .build/${stdenv.hostPlatform.darwinArch}-apple-macosx/release/dockutil -t $out/bin + runHook postInstall + ''; + }); + + installBinary = stdenvNoCC.mkDerivation (finalAttrs: { + inherit pname version; + + src = fetchurl { + url = "https://github.com/kcrawford/dockutil/releases/download/${finalAttrs.version}/dockutil-${finalAttrs.version}.pkg"; + hash = "sha256-9g24Jz/oDXxIJFiL7bU4pTh2dcORftsAENq59S0/JYI="; + }; + + dontPatch = true; + dontConfigure = true; + dontBuild = true; + + nativeBuildInputs = [ libarchive p7zip ]; + + unpackPhase = '' + 7z x $src + bsdtar -xf Payload~ + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/bin + install -Dm755 usr/local/bin/dockutil -t $out/bin + runHook postInstall + ''; + + meta = meta // { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + }; + }); +in +if fromSource + then buildFromSource + else installBinary diff --git a/pkgs/os-specific/darwin/dockutil/generated/default.nix b/pkgs/os-specific/darwin/dockutil/generated/default.nix new file mode 100644 index 000000000000..32ffc68e4d2c --- /dev/null +++ b/pkgs/os-specific/darwin/dockutil/generated/default.nix @@ -0,0 +1,7 @@ +# This file was generated by swiftpm2nix. +{ + workspaceStateFile = ./workspace-state.json; + hashes = { + "swift-argument-parser" = "1fpdgivmwdszggvx0ligs3vidv9kpp9777v649hs8w7vpcifc2ji"; + }; +} diff --git a/pkgs/os-specific/darwin/dockutil/generated/workspace-state.json b/pkgs/os-specific/darwin/dockutil/generated/workspace-state.json new file mode 100644 index 000000000000..e24a74517af0 --- /dev/null +++ b/pkgs/os-specific/darwin/dockutil/generated/workspace-state.json @@ -0,0 +1,25 @@ +{ + "object": { + "artifacts": [], + "dependencies": [ + { + "basedOn": null, + "packageRef": { + "identity": "swift-argument-parser", + "kind": "remoteSourceControl", + "location": "https://github.com/apple/swift-argument-parser.git", + "name": "swift-argument-parser" + }, + "state": { + "checkoutState": { + "revision": "82905286cc3f0fa8adc4674bf49437cab65a8373", + "version": "1.1.1" + }, + "name": "sourceControlCheckout" + }, + "subpath": "swift-argument-parser" + } + ] + }, + "version": 6 +}