nixpkgs/pkgs/applications/radio/gnuradio/shared.nix
Silvan Mosberger 4f0dadbf38 treewide: format all inactive Nix files
After final improvements to the official formatter implementation,
this commit now performs the first treewide reformat of Nix files using it.
This is part of the implementation of RFC 166.

Only "inactive" files are reformatted, meaning only files that
aren't being touched by any PR with activity in the past 2 months.
This is to avoid conflicts for PRs that might soon be merged.
Later we can do a full treewide reformat to get the rest,
which should not cause as many conflicts.

A CI check has already been running for some time to ensure that new and
already-formatted files are formatted, so the files being reformatted here
should also stay formatted.

This commit was automatically created and can be verified using

    nix-build a08b3a4d19.tar.gz \
      --argstr baseRev b32a094368
    result/bin/apply-formatting $NIXPKGS_PATH
2024-12-10 20:26:33 +01:00

157 lines
5.0 KiB
Nix

{
lib,
stdenv,
python,
qt,
gtk,
removeReferencesTo,
featuresInfo,
features,
version,
sourceSha256,
# If overridden. No need to set default values, as they are given defaults in
# the main expressions
overrideSrc,
fetchFromGitHub,
}:
let
# Check if a feature is enabled, while defaulting to true if feat is not
# specified.
hasFeature = feat: (if builtins.hasAttr feat features then features.${feat} else true);
versionAttr = {
major = builtins.concatStringsSep "." (lib.take 2 (lib.splitVersion version));
minor = builtins.elemAt (lib.splitVersion version) 2;
patch = builtins.elemAt (lib.splitVersion version) 3;
};
in
{
src =
if overrideSrc != { } then
overrideSrc
else
fetchFromGitHub {
repo = "gnuradio";
owner = "gnuradio";
rev = "v${version}";
sha256 = sourceSha256;
};
nativeBuildInputs =
[ removeReferencesTo ]
++ lib.flatten (
lib.mapAttrsToList (
feat: info:
(lib.optionals (hasFeature feat) (
(lib.optionals (builtins.hasAttr "native" info) info.native)
++ (lib.optionals (builtins.hasAttr "pythonNative" info) info.pythonNative)
))
) featuresInfo
);
buildInputs = lib.flatten (
lib.mapAttrsToList (
feat: info:
(lib.optionals (hasFeature feat) (
(lib.optionals (builtins.hasAttr "runtime" info) info.runtime)
++ (lib.optionals (builtins.hasAttr "pythonRuntime" info) info.pythonRuntime)
))
) featuresInfo
);
cmakeFlags = lib.mapAttrsToList (
feat: info:
(
if feat == "basic" then
# Abuse this unavoidable "iteration" to set this flag which we want as
# well - it means: Don't turn on features just because their deps are
# satisfied, let only our cmakeFlags decide.
"-DENABLE_DEFAULT=OFF"
else if hasFeature feat then
"-DENABLE_${info.cmakeEnableFlag}=ON"
else
"-DENABLE_${info.cmakeEnableFlag}=OFF"
)
) featuresInfo;
disallowedReferences =
[
# TODO: Should this be conditional?
stdenv.cc
stdenv.cc.cc
]
# If python-support is disabled, we probably don't want it referenced
++ lib.optionals (!hasFeature "python-support") [ python ];
# Gcc references from examples
stripDebugList =
[
"lib"
"bin"
]
++ lib.optionals (hasFeature "gr-audio") [ "share/gnuradio/examples/audio" ]
++ lib.optionals (hasFeature "gr-uhd") [ "share/gnuradio/examples/uhd" ]
++ lib.optionals (hasFeature "gr-qtgui") [ "share/gnuradio/examples/qt-gui" ];
postInstall =
""
# Gcc references
+ lib.optionalString (hasFeature "gnuradio-runtime") ''
remove-references-to -t ${stdenv.cc} $(readlink -f $out/lib/libgnuradio-runtime${stdenv.hostPlatform.extensions.sharedLibrary})
''
# Clang references in InstalledDir
+ lib.optionalString (hasFeature "gnuradio-runtime" && stdenv.hostPlatform.isDarwin) ''
remove-references-to -t ${stdenv.cc.cc} $(readlink -f $out/lib/libgnuradio-runtime${stdenv.hostPlatform.extensions.sharedLibrary})
'';
# NOTE: Outputs are disabled due to upstream not using GNU InstallDIrs cmake
# module. It's not that bad since it's a development package for most
# purposes. If closure size needs to be reduced, features should be disabled
# via an override.
passthru =
{
inherit
hasFeature
versionAttr
features
featuresInfo
python
;
gnuradioOlder = lib.versionOlder versionAttr.major;
gnuradioAtLeast = lib.versionAtLeast versionAttr.major;
}
// lib.optionalAttrs (hasFeature "gr-qtgui") {
inherit qt;
}
// lib.optionalAttrs (hasFeature "gnuradio-companion") {
inherit gtk;
};
# Wrapping is done with an external wrapper
dontWrapPythonPrograms = true;
dontWrapQtApps = true;
# On darwin, it requires playing with DYLD_FALLBACK_LIBRARY_PATH to make if
# find libgnuradio-runtim.3.*.dylib .
doCheck = !stdenv.hostPlatform.isDarwin;
preCheck = ''
export HOME=$(mktemp -d)
export QT_QPA_PLATFORM=offscreen
export QT_PLUGIN_PATH="${qt.qtbase.bin}/${qt.qtbase.qtPluginPrefix}"
'';
meta = {
description = "Software Defined Radio (SDR) software";
mainProgram = "gnuradio-config-info";
longDescription = ''
GNU Radio is a free & open-source software development toolkit that
provides signal processing blocks to implement software radios. It can be
used with readily-available low-cost external RF hardware to create
software-defined radios, or without hardware in a simulation-like
environment. It is widely used in hobbyist, academic and commercial
environments to support both wireless communications research and
real-world radio systems.
'';
homepage = "https://www.gnuradio.org";
license = lib.licenses.gpl3;
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [
doronbehar
bjornfor
fpletz
jiegec
];
};
}