From d2366aa38fc1933abcf44f5739c84fc69eda19ab Mon Sep 17 00:00:00 2001 From: Francesco Zanini Date: Mon, 22 Sep 2025 10:47:36 +0200 Subject: [PATCH] sdrplay: add darwin support - Support darwin - Update version to 3.15.1 --- pkgs/by-name/sd/sdrplay/darwin.nix | 56 ++++++++++++++++++ pkgs/by-name/sd/sdrplay/linux.nix | 54 +++++++++++++++++ pkgs/by-name/sd/sdrplay/package.nix | 90 +++++++++++------------------ 3 files changed, 145 insertions(+), 55 deletions(-) create mode 100644 pkgs/by-name/sd/sdrplay/darwin.nix create mode 100644 pkgs/by-name/sd/sdrplay/linux.nix diff --git a/pkgs/by-name/sd/sdrplay/darwin.nix b/pkgs/by-name/sd/sdrplay/darwin.nix new file mode 100644 index 000000000000..06b1a8bc9736 --- /dev/null +++ b/pkgs/by-name/sd/sdrplay/darwin.nix @@ -0,0 +1,56 @@ +{ + pname, + version, + src, + meta, + lib, + stdenv, + xar, + cpio, + libusb1, + fixDarwinDylibNames, +}: +stdenv.mkDerivation { + inherit + pname + version + src + meta + ; + + nativeBuildInputs = [ + xar + cpio + fixDarwinDylibNames + ]; + + unpackPhase = '' + xar -xf $src + zcat SDRplayAPI.pkg/Payload | cpio -i + ''; + + dontBuild = true; + + env = { + majorVersion = lib.versions.major version; + majorMinorVersion = lib.versions.majorMinor version; + }; + + installPhase = '' + root="$PWD/Library/SDRplayAPI/${version}" + + mkdir -p $out/{bin,lib} + + cp "$root/bin/sdrplay_apiService" "$out/bin" + cp -r "$root/include" "$out/include" + + lib="$out/lib/libsdrplay_api.$majorMinorVersion.dylib" + cp "$root/lib/libsdrplay_api.so.$majorMinorVersion" "$lib" + ln -s "$lib" "$out/lib/libsdrplay_api.$majorVersion.dylib" + ln -s "$lib" "$out/lib/libsdrplay_api.dylib" + ''; + + postFixup = '' + install_name_tool -add_rpath "${lib.getLib libusb1}/lib" $out/bin/sdrplay_apiService + ''; +} diff --git a/pkgs/by-name/sd/sdrplay/linux.nix b/pkgs/by-name/sd/sdrplay/linux.nix new file mode 100644 index 000000000000..1f5393b5df5e --- /dev/null +++ b/pkgs/by-name/sd/sdrplay/linux.nix @@ -0,0 +1,54 @@ +{ + pname, + version, + src, + meta, + stdenv, + lib, + fetchurl, + autoPatchelfHook, + udev, + libusb1, +}: +let + arch = stdenv.hostPlatform.qemuArch; +in +stdenv.mkDerivation rec { + inherit + pname + version + src + meta + ; + + nativeBuildInputs = [ autoPatchelfHook ]; + + buildInputs = [ + libusb1 + udev + (lib.getLib stdenv.cc.cc) + ]; + + unpackPhase = '' + sh "$src" --noexec --target source + ''; + + sourceRoot = "source"; + + dontBuild = true; + + env = { + majorVersion = lib.versions.major version; + majorMinorVersion = lib.versions.majorMinor version; + }; + + installPhase = '' + mkdir -p $out/{bin,lib,include} + libName="libsdrplay_api" + cp "${arch}/$libName.so.$majorMinorVersion" $out/lib/ + ln -s "$out/lib/$libName.so.$majorMinorVersion" "$out/lib/$libName.so.$majorVersion" + ln -s "$out/lib/$libName.so.$majorVersion" "$out/lib/$libName.so" + cp "${arch}/sdrplay_apiService" $out/bin/ + cp -r inc/* $out/include/ + ''; +} diff --git a/pkgs/by-name/sd/sdrplay/package.nix b/pkgs/by-name/sd/sdrplay/package.nix index c3532f5fe4ea..5e0803478891 100644 --- a/pkgs/by-name/sd/sdrplay/package.nix +++ b/pkgs/by-name/sd/sdrplay/package.nix @@ -1,79 +1,59 @@ { + callPackage, + fetchurl, stdenv, lib, - fetchurl, - autoPatchelfHook, - udev, - libusb1, }: + let - arch = - if stdenv.hostPlatform.isx86_64 then - "x86_64" - else if stdenv.hostPlatform.isi686 then - "i686" - else if stdenv.hostPlatform.isAarch64 then - "aarch64" - else - throw "unsupported architecture"; + version = "3.15.1"; - version = "3.07.1"; - - srcs = rec { - aarch64 = { - url = "https://www.sdrplay.com/software/SDRplay_RSP_API-ARM64-${version}.run"; - hash = "sha256-GJPFW6W8Ke4mnczcSLFYfioOMGCfFn2/EIA07VnmVGY="; - }; - - x86_64 = { + sources = rec { + x86_64-linux = { url = "https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-${version}.run"; - sha256 = "1a25c7rsdkcjxr7ffvx2lwj7fxdbslg9qhr8ghaq1r53rcrqgzmf"; + hash = "sha256-CTcyv10Xz9G2LqHh4qOW9tKBEcB+rztE2R7xJIU4QBQ="; }; - i686 = x86_64; + x86_64-darwin = { + url = "https://www.sdrplay.com/software/SDRplayAPI-macos-installer-universal-3.15.1.pkg"; + hash = "sha256-XRSM7aH653XS0t9bP89G3uJ7YiLiU1xMBjwvLqL3rMM="; + }; + + aarch64-linux = x86_64-linux; + aarch64-darwin = x86_64-darwin; }; + + platforms = lib.attrNames sources; + + package = if stdenv.hostPlatform.isLinux then ./linux.nix else ./darwin.nix; + in -stdenv.mkDerivation rec { + +callPackage package { pname = "sdrplay"; inherit version; - src = fetchurl srcs."${arch}"; + src = + let + inherit (stdenv.hostPlatform) system; + source = + if lib.hasAttr system sources then + sources."${system}" + else + throw "SDRplay is not supported on ${system}"; - nativeBuildInputs = [ autoPatchelfHook ]; - - buildInputs = [ - libusb1 - udev - (lib.getLib stdenv.cc.cc) - ]; - - unpackPhase = '' - sh "$src" --noexec --target source - ''; - - sourceRoot = "source"; - - dontBuild = true; - - installPhase = '' - mkdir -p $out/{bin,lib,include,lib/udev/rules.d} - majorVersion="${lib.concatStringsSep "." (lib.take 1 (builtins.splitVersion version))}" - majorMinorVersion="${lib.concatStringsSep "." (lib.take 2 (builtins.splitVersion version))}" - libName="libsdrplay_api" - cp "${arch}/$libName.so.$majorMinorVersion" $out/lib/ - ln -s "$out/lib/$libName.so.$majorMinorVersion" "$out/lib/$libName.so.$majorVersion" - ln -s "$out/lib/$libName.so.$majorVersion" "$out/lib/$libName.so" - cp "${arch}/sdrplay_apiService" $out/bin/ - cp -r inc/* $out/include/ - cp 66-mirics.rules $out/lib/udev/rules.d/ - ''; + in + fetchurl source; meta = with lib; { + inherit platforms; + description = "SDRplay API"; longDescription = '' Proprietary library and api service for working with SDRplay devices. For documentation and licensing details see https://www.sdrplay.com/docs/SDRplay_API_Specification_v${lib.concatStringsSep "." (lib.take 2 (builtins.splitVersion version))}.pdf ''; + homepage = "https://www.sdrplay.com/downloads/"; sourceProvenance = with sourceTypes; [ binaryNativeCode ]; license = licenses.unfree; @@ -81,7 +61,7 @@ stdenv.mkDerivation rec { pmenke zaninime ]; - platforms = platforms.linux; + mainProgram = "sdrplay_apiService"; }; }