aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/shared.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/shared.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/shared.nix135
1 files changed, 135 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/shared.nix b/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/shared.nix
new file mode 100644
index 000000000000..66ce0a5f5132
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/shared.nix
@@ -0,0 +1,135 @@
+{ stdenv
+, python
+, qt
+, gtk
+, removeReferencesTo
+, featuresInfo
+, features
+, versionAttr
+, sourceSha256
+# If overriden. No need to set default values, as they are given defaults in
+# the main expressions
+, overrideSrc
+, fetchFromGitHub
+, fetchSubmodules
+}:
+
+let
+ lib = stdenv.lib;
+in rec {
+ version = builtins.concatStringsSep "." (
+ lib.attrVals [ "major" "minor" "patch" ] versionAttr
+ );
+ src = if overrideSrc != {} then
+ overrideSrc
+ else
+ fetchFromGitHub {
+ repo = "gnuradio";
+ owner = "gnuradio";
+ rev = "v${version}";
+ sha256 = sourceSha256;
+ inherit fetchSubmodules;
+ }
+ ;
+ # Check if a feature is enabled, while defaulting to true if feat is not
+ # specified.
+ hasFeature = feat: features: (
+ if builtins.hasAttr feat features then
+ features.${feat}
+ else
+ true
+ );
+ nativeBuildInputs = lib.flatten (lib.mapAttrsToList (
+ feat: info: (
+ if hasFeature feat features then
+ (if builtins.hasAttr "native" info then info.native else []) ++
+ (if builtins.hasAttr "pythonNative" info then info.pythonNative else [])
+ else
+ []
+ )
+ ) featuresInfo);
+ buildInputs = lib.flatten (lib.mapAttrsToList (
+ feat: info: (
+ if hasFeature feat features then
+ (if builtins.hasAttr "runtime" info then info.runtime else []) ++
+ (if builtins.hasAttr "pythonRuntime" info then info.pythonRuntime else [])
+ else
+ []
+ )
+ ) 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 features 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" features) [ python ]
+ ;
+ # Gcc references from examples
+ stripDebugList = [ "lib" "bin" ]
+ ++ lib.optionals (hasFeature "gr-audio" features) [ "share/gnuradio/examples/audio" ]
+ ++ lib.optionals (hasFeature "gr-uhd" features) [ "share/gnuradio/examples/uhd" ]
+ ++ lib.optionals (hasFeature "gr-qtgui" features) [ "share/gnuradio/examples/qt-gui" ]
+ ;
+ postInstall = ''
+ ''
+ # Gcc references
+ + lib.optionalString (hasFeature "volk" features) ''
+ ${removeReferencesTo}/bin/remove-references-to -t ${stdenv.cc} $(readlink -f $out/lib/libvolk.so)
+ ''
+ + lib.optionalString (hasFeature "gnuradio-runtime" features) ''
+ ${removeReferencesTo}/bin/remove-references-to -t ${stdenv.cc} $(readlink -f $out/lib/libgnuradio-runtime.so)
+ ''
+ ;
+ # 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
+ qt
+ gtk
+ ;
+ };
+ # Wrapping is done with an external wrapper
+ dontWrapPythonPrograms = true;
+ # Tests should succeed, but it's hard to get LD_LIBRARY_PATH right in order
+ # for it to happen.
+ doCheck = false;
+
+ meta = with lib; {
+ description = "Software Defined Radio (SDR) software";
+ 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 = licenses.gpl3;
+ platforms = platforms.unix;
+ maintainers = with maintainers; [ doronbehar bjornfor fpletz ];
+ };
+}