summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoron Behar <doron.behar@gmail.com>2020-12-05 17:14:37 +0200
committerGitHub <noreply@github.com>2020-12-05 17:14:37 +0200
commita5e44038df94f0021a4f507ff9303cd0901b8d02 (patch)
treee63e9dd83f34f6d57a9f4ae239894e78a1e877a3
parent00617447b268f11223654b4898157cec07423e16 (diff)
parent0f615e80a09b186c1086a8080f9580bd4f83218e (diff)
Merge pull request #99685 from doronbehar/pkg/gnuradio
gnuradio: rewrite
-rw-r--r--nixos/doc/manual/release-notes/rl-2103.xml13
-rw-r--r--pkgs/applications/radio/gnss-sdr/default.nix1
-rw-r--r--pkgs/applications/radio/gnuradio/3.7.nix295
-rw-r--r--pkgs/applications/radio/gnuradio/ais.nix4
-rw-r--r--pkgs/applications/radio/gnuradio/default.nix423
-rw-r--r--pkgs/applications/radio/gnuradio/gsm.nix4
-rw-r--r--pkgs/applications/radio/gnuradio/limesdr.nix4
-rw-r--r--pkgs/applications/radio/gnuradio/nacl.nix4
-rw-r--r--pkgs/applications/radio/gnuradio/osmosdr.nix5
-rw-r--r--pkgs/applications/radio/gnuradio/rds.nix4
-rw-r--r--pkgs/applications/radio/gnuradio/shared.nix135
-rw-r--r--pkgs/applications/radio/gnuradio/wrapper.nix140
-rw-r--r--pkgs/development/libraries/comedilib/default.nix4
-rw-r--r--pkgs/top-level/aliases.nix4
-rw-r--r--pkgs/top-level/all-packages.nix99
15 files changed, 941 insertions, 198 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2103.xml b/nixos/doc/manual/release-notes/rl-2103.xml
index 96061e9ca597..87a99f9ac8e7 100644
--- a/nixos/doc/manual/release-notes/rl-2103.xml
+++ b/nixos/doc/manual/release-notes/rl-2103.xml
@@ -26,6 +26,19 @@
<listitem>
<para>GNOME desktop environment was upgraded to 3.38, see its <link xlink:href="https://help.gnome.org/misc/release-notes/3.38/">release notes</link>.</para>
</listitem>
+ <listitem>
+ <para>
+ <link xlink:href="https://www.gnuradio.org/">GNURadio</link> 3.8 was
+ <link xlink:href="https://github.com/NixOS/nixpkgs/issues/82263">finnally</link>
+ packaged, along with a rewrite to the Nix expressions, allowing users to
+ override the features upstream supports selecting to compile or not to.
+ Additionally, the attribute <code>gnuradio<code> and <code>gnuradio3_7<code>
+ now point to an externally wrapped by default derivations, that allow you to
+ also add `extraPythonPackages` to the Python interpreter used by GNURadio.
+ Missing environmental variables needed for operational GUI were also added
+ (<link xlink:href="https://github.com/NixOS/nixpkgs/issues/75478">#7547</link>).
+ </para>
+ </listitem>
</itemizedlist>
</section>
diff --git a/pkgs/applications/radio/gnss-sdr/default.nix b/pkgs/applications/radio/gnss-sdr/default.nix
index cc89ffb4f870..d7e2d44c75ce 100644
--- a/pkgs/applications/radio/gnss-sdr/default.nix
+++ b/pkgs/applications/radio/gnss-sdr/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
orc
pkgconfig
pythonPackages.Mako
+ pythonPackages.six
# UHD support is optional, but gnuradio is built with it, so there's
# nothing to be gained by leaving it out.
diff --git a/pkgs/applications/radio/gnuradio/3.7.nix b/pkgs/applications/radio/gnuradio/3.7.nix
new file mode 100644
index 000000000000..54fb0d7d66cd
--- /dev/null
+++ b/pkgs/applications/radio/gnuradio/3.7.nix
@@ -0,0 +1,295 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+# Remove gcc and python references
+, removeReferencesTo
+, pkgconfig
+, cppunit
+, swig
+, orc
+, boost
+, log4cpp
+, mpir
+, doxygen
+, python
+, codec2
+, gsm
+, fftwFloat
+, alsaLib
+, libjack2
+, CoreAudio
+, uhd
+, comedilib
+, libusb1
+, SDL
+, gsl
+, cppzmq
+, zeromq
+# GUI related
+, gtk2
+, pango
+, cairo
+, qt4
+, qwt6_qt4
+# Features available to override, the list of them is in featuresInfo. They
+# are all turned on by default
+, features ? {}
+# If one wishes to use a different src or name for a very custom build
+, overrideSrc ? {}
+, pname ? "gnuradio"
+, versionAttr ? {
+ major = "3.7";
+ minor = "14";
+ patch = "0";
+}
+, fetchSubmodules ? true
+}:
+
+let
+ sourceSha256 = "1nh4f9dmygprlbqybd3j1byg9fsr6065n140mvc4b0v8qqygmhrc";
+ featuresInfo = {
+ # Needed always
+ basic = {
+ native = [
+ cmake
+ pkgconfig
+ orc
+ ];
+ runtime = [ boost log4cpp mpir ];
+ pythonNative = with python.pkgs; [ Mako six ];
+ };
+ volk = {
+ cmakeEnableFlag = "VOLK";
+ };
+ doxygen = {
+ native = [ doxygen ];
+ cmakeEnableFlag = "DOXYGEN";
+ };
+ sphinx = {
+ pythonNative = with python.pkgs; [ sphinx ];
+ cmakeEnableFlag = "SPHINX";
+ };
+ python-support = {
+ pythonRuntime = [ python.pkgs.six ];
+ native = [
+ swig
+ python
+ ];
+ cmakeEnableFlag = "PYTHON";
+ };
+ testing-support = {
+ native = [ cppunit ];
+ cmakeEnableFlag = "TESTING";
+ };
+ gnuradio-runtime = {
+ cmakeEnableFlag = "GNURADIO_RUNTIME";
+ };
+ gr-ctrlport = {
+ cmakeEnableFlag = "GR_CTRLPORT";
+ native = [
+ swig
+ ];
+ };
+ gnuradio-companion = {
+ pythonRuntime = with python.pkgs; [
+ pyyaml
+ cheetah
+ lxml
+ pygtk
+ numpy
+ # propagated by pygtk, but since wrapping is done externally, it help
+ # the wrapper if it's here
+ pycairo
+ pygobject2
+ ];
+ runtime = [
+ gtk2
+ pango
+ cairo
+ ];
+ cmakeEnableFlag = "GRC";
+ };
+ gr-blocks = {
+ cmakeEnableFlag = "GR_BLOCKS";
+ };
+ gr-fec = {
+ cmakeEnableFlag = "GR_FEC";
+ };
+ gr-fft = {
+ runtime = [ fftwFloat ];
+ cmakeEnableFlag = "GR_FFT";
+ };
+ gr-filter = {
+ runtime = [ fftwFloat ];
+ cmakeEnableFlag = "GR_FILTER";
+ };
+ gr-analog = {
+ cmakeEnableFlag = "GR_ANALOG";
+ };
+ gr-digital = {
+ cmakeEnableFlag = "GR_DIGITAL";
+ };
+ gr-dtv = {
+ cmakeEnableFlag = "GR_DTV";
+ };
+ gr-atsc = {
+ cmakeEnableFlag = "GR_ATSC";
+ };
+ gr-audio = {
+ runtime = []
+ ++ stdenv.lib.optionals stdenv.isLinux [ alsaLib libjack2 ]
+ ++ stdenv.lib.optionals stdenv.isDarwin [ CoreAudio ]
+ ;
+ cmakeEnableFlag = "GR_AUDIO";
+ };
+ gr-comedi = {
+ runtime = [ comedilib ];
+ cmakeEnableFlag = "GR_COMEDI";
+ };
+ gr-channels = {
+ cmakeEnableFlag = "GR_CHANNELS";
+ };
+ gr-noaa = {
+ cmakeEnableFlag = "GR_NOAA";
+ };
+ gr-pager = {
+ cmakeEnableFlag = "GR_PAGER";
+ };
+ gr-qtgui = {
+ runtime = [ qt4 qwt6_qt4 ];
+ pythonRuntime = [ python.pkgs.pyqt4 ];
+ cmakeEnableFlag = "GR_QTGUI";
+ };
+ gr-trellis = {
+ cmakeEnableFlag = "GR_TRELLIS";
+ };
+ gr-uhd = {
+ runtime = [ uhd ];
+ cmakeEnableFlag = "GR_UHD";
+ };
+ gr-utils = {
+ cmakeEnableFlag = "GR_UTILS";
+ };
+ gr-video-sdl = {
+ runtime = [ SDL ];
+ cmakeEnableFlag = "GR_VIDEO_SDL";
+ };
+ gr-vocoder = {
+ runtime = [ codec2 gsm ];
+ cmakeEnableFlag = "GR_VOCODER";
+ };
+ gr-fcd = {
+ runtime = [ libusb1 ];
+ cmakeEnableFlag = "GR_FCD";
+ };
+ gr-wavelet = {
+ cmakeEnableFlag = "GR_WAVELET";
+ runtime = [ gsl ];
+ };
+ gr-zeromq = {
+ runtime = [ cppzmq zeromq ];
+ cmakeEnableFlag = "GR_ZEROMQ";
+ };
+ gr-wxgui = {
+ pythonRuntime = with python.pkgs; [ numpy wxPython ];
+ cmakeEnableFlag = "GR_WXGUI";
+ };
+ };
+ shared = (import ./shared.nix {
+ inherit
+ stdenv
+ python
+ removeReferencesTo
+ featuresInfo
+ features
+ versionAttr
+ sourceSha256
+ overrideSrc
+ fetchFromGitHub
+ fetchSubmodules
+ ;
+ qt = qt4;
+ gtk = gtk2;
+ });
+ inherit (shared)
+ version
+ src
+ hasFeature # function
+ nativeBuildInputs
+ buildInputs
+ disallowedReferences
+ postInstall
+ passthru
+ doCheck
+ dontWrapPythonPrograms
+ meta
+ ;
+ cmakeFlags = shared.cmakeFlags
+ # From some reason, if these are not set, libcodec2 and gsm are
+ # not detected properly (slightly different then what's in
+ # ./default.nix).
+ ++ stdenv.lib.optionals (hasFeature "gr-vocoder" features) [
+ "-DLIBCODEC2_LIBRARIES=${codec2}/lib/libcodec2.so"
+ "-DLIBCODEC2_INCLUDE_DIR=${codec2}/include"
+ "-DLIBGSM_LIBRARIES=${gsm}/lib/libgsm.so"
+ "-DLIBGSM_INCLUDE_DIR=${gsm}/include/gsm"
+ ]
+ ;
+ stripDebugList = shared.stripDebugList
+ # gr-fcd feature was dropped in 3.8
+ ++ stdenv.lib.optionals (hasFeature "gr-fcd" features) [ "share/gnuradio/examples/fcd" ]
+ ;
+ preConfigure = ''
+ ''
+ # wxgui and pygtk are not looked up properly, so we force them to be
+ # detected as found, if they are requested by the `features` attrset.
+ + stdenv.lib.optionalString (hasFeature "gr-wxgui" features) ''
+ sed -i 's/.*wx\.version.*/set(WX_FOUND TRUE)/g' gr-wxgui/CMakeLists.txt
+ ''
+ + stdenv.lib.optionalString (hasFeature "gnuradio-companion" features) ''
+ sed -i 's/.*pygtk_version.*/set(PYGTK_FOUND TRUE)/g' grc/CMakeLists.txt
+ ''
+ # If python-support is disabled, don't install volk's (git submodule)
+ # volk_modtool - it references python.
+ #
+ # NOTE: The same is done for 3.8, but we don't put this string in
+ # ./shared.nix since on the next release of 3.8 it won't be needed there,
+ # but it will be needed for 3.7, probably for ever.
+ + stdenv.lib.optionalString (!hasFeature "python-support" features) ''
+ sed -i -e "/python\/volk_modtool/d" volk/CMakeLists.txt
+ ''
+ ;
+ patches = [
+ # Don't install python referencing files if python support is disabled.
+ # See: https://github.com/gnuradio/gnuradio/pull/3856
+ (fetchpatch {
+ url = "https://github.com/gnuradio/gnuradio/commit/acef55433d15c231661fa44751f9a2d90a4baa4b.diff";
+ sha256 = "2CEX44Ll8frfLXTIWjdDhKl7aXcjiAWsezVdwrynelE=";
+ })
+ (fetchpatch {
+ url = "https://github.com/gnuradio/gnuradio/commit/a2681edcfaabcb1ecf878ae861161b6a6bf8459d.diff";
+ sha256 = "2Pitgu8accs16B5X5+/q51hr+IY9DMsA15f56gAtBs8=";
+ })
+ ];
+in
+
+stdenv.mkDerivation rec {
+ inherit
+ pname
+ version
+ src
+ nativeBuildInputs
+ buildInputs
+ cmakeFlags
+ preConfigure
+ # disallowedReferences
+ stripDebugList
+ patches
+ postInstall
+ passthru
+ doCheck
+ dontWrapPythonPrograms
+ meta
+ ;
+}
diff --git a/pkgs/applications/radio/gnuradio/ais.nix b/pkgs/applications/radio/gnuradio/ais.nix
index 30c2638a72f8..46d46d1c3255 100644
--- a/pkgs/applications/radio/gnuradio/ais.nix
+++ b/pkgs/applications/radio/gnuradio/ais.nix
@@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio
-, makeWrapper, cppunit, gr-osmosdr
+, makeWrapper, cppunit, gr-osmosdr, log4cpp
, pythonSupport ? true, python, swig
}:
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
- cmake boost gnuradio makeWrapper cppunit gr-osmosdr
+ cmake boost gnuradio makeWrapper cppunit gr-osmosdr log4cpp
] ++ stdenv.lib.optionals pythonSupport [ python swig ];
postInstall = ''
diff --git a/pkgs/applications/radio/gnuradio/default.nix b/pkgs/applications/radio/gnuradio/default.nix
index dec968cd32d7..811eb37f4f31 100644
--- a/pkgs/applications/radio/gnuradio/default.nix
+++ b/pkgs/applications/radio/gnuradio/default.nix
@@ -1,165 +1,288 @@
{ stdenv
, fetchFromGitHub
-, makeWrapper
-, writeText
-# Dependencies documented @ https://gnuradio.org/doc/doxygen/build_guide.html
-# => core dependencies
+, fetchpatch
, cmake
+# Remove gcc and python references
+, removeReferencesTo
, pkgconfig
-, git
-, boost
, cppunit
-, fftw
-# => python wrappers
-# May be able to upgrade to swig3
+, swig
+, orc
+, boost
+, log4cpp
+, mpir
+, doxygen
, python
-, swig2
-, numpy
-, scipy
-, matplotlib
-# => grc - the gnu radio companion
-, Mako
-, cheetah
-, pygtk # Note: GR is migrating to Mako. Cheetah should be removed for GR3.8
-# => gr-wavelet: collection of wavelet blocks
-, gsl
-# => gr-qtgui: the Qt-based GUI
-, qt4
-, qwt
-, pyqt4
-# => gr-wxgui: the Wx-based GUI
-, wxPython
-, lxml
-# => gr-audio: audio subsystems (system/OS dependent)
-, alsaLib # linux 'audio-alsa'
-, CoreAudio # darwin 'audio-osx'
-# => uhd: the Ettus USRP Hardware Driver Interface
+, codec2
+, gsm
+, fftwFloat
+, alsaLib
+, libjack2
+, CoreAudio
, uhd
-# => gr-video-sdl: PAL and NTSC display
, SDL
-# Other
-, libusb1
-, orc
-, pyopengl
+, gsl
+, cppzmq
+, zeromq
+# GUI related
+, gtk3
+, pango
+, gobject-introspection
+, cairo
+, qt5
+, libsForQt5
+# Features available to override, the list of them is in featuresInfo. They
+# are all turned on by default.
+, features ? {}
+# If one wishes to use a different src or name for a very custom build
+, overrideSrc ? {}
+, pname ? "gnuradio"
+, versionAttr ? {
+ major = "3.8";
+ minor = "2";
+ patch = "0";
+}
+# Should be false on the release after 3.8.2.0
+, fetchSubmodules ? true
}:
-stdenv.mkDerivation rec {
- pname = "gnuradio";
- version = "3.7.14.0";
-
- src = fetchFromGitHub {
- owner = "gnuradio";
- repo = "gnuradio";
- rev = "v${version}";
- sha256 = "1nh4f9dmygprlbqybd3j1byg9fsr6065n140mvc4b0v8qqygmhrc";
- fetchSubmodules = true;
+let
+ sourceSha256 = "1mnfwdy7w3160vi6110x2qkyq8l78qi8771zwak9n72bl7lhhpnf";
+ featuresInfo = {
+ # Needed always
+ basic = {
+ native = [
+ cmake
+ pkgconfig
+ orc
+ ];
+ runtime = [
+ boost
+ log4cpp
+ mpir
+ ];
+ pythonNative = with python.pkgs; [
+ Mako
+ six
+ ];
+ };
+ # NOTE: Should be removed on the release after 3.8.2.0, see:
+ # https://github.com/gnuradio/gnuradio/commit/80c04479d
+ volk = {
+ cmakeEnableFlag = "VOLK";
+ };
+ doxygen = {
+ native = [ doxygen ];
+ cmakeEnableFlag = "DOXYGEN";
+ };
+ sphinx = {
+ pythonNative = with python.pkgs; [ sphinx ];
+ cmakeEnableFlag = "SPHINX";
+ };
+ python-support = {
+ pythonRuntime = [ python.pkgs.six ];
+ native = [
+ swig
+ python
+ ];
+ cmakeEnableFlag = "PYTHON";
+ };
+ testing-support = {
+ native = [ cppunit ];
+ cmakeEnableFlag = "TESTING";
+ };
+ gnuradio-runtime = {
+ cmakeEnableFlag = "GNURADIO_RUNTIME";
+ };
+ gr-ctrlport = {
+ # Thrift support is not really working well, and even the patch they
+ # recommend applying on 0.9.2 won't apply. See:
+ # https://github.com/gnuradio/gnuradio/blob/v3.8.2.0/gnuradio-runtime/lib/controlport/thrift/README
+ cmakeEnableFlag = "GR_CTRLPORT";
+ native = [
+ swig
+ ];
+ };
+ gnuradio-companion = {
+ pythonRuntime = with python.pkgs; [
+ pyyaml
+ Mako
+ numpy
+ pygobject3
+ ];
+ runtime = [
+ gtk3
+ pango
+ gobject-introspection
+ cairo
+ ];
+ cmakeEnableFlag = "GRC";
+ };
+ gr-blocks = {
+ cmakeEnableFlag = "GR_BLOCKS";
+ };
+ gr-fec = {
+ cmakeEnableFlag = "GR_FEC";
+ };
+ gr-fft = {
+ runtime = [ fftwFloat ];
+ cmakeEnableFlag = "GR_FFT";
+ };
+ gr-filter = {
+ runtime = [ fftwFloat ];
+ cmakeEnableFlag = "GR_FILTER";
+ };
+ gr-analog = {
+ cmakeEnableFlag = "GR_ANALOG";
+ };
+ gr-digital = {
+ cmakeEnableFlag = "GR_DIGITAL";
+ };
+ gr-dtv = {
+ cmakeEnableFlag = "GR_DTV";
+ };
+ gr-audio = {
+ runtime = []
+ ++ stdenv.lib.optionals stdenv.isLinux [ alsaLib libjack2 ]
+ ++ stdenv.lib.optionals stdenv.isDarwin [ CoreAudio ]
+ ;
+ cmakeEnableFlag = "GR_AUDIO";
+ };
+ gr-channels = {
+ cmakeEnableFlag = "GR_CHANNELS";
+ };
+ gr-qtgui = {
+ runtime = [ qt5.qtbase libsForQt5.qwt ];
+ pythonRuntime = [ python.pkgs.pyqt5 ];
+ cmakeEnableFlag = "GR_QTGUI";
+ };
+ gr-trellis = {
+ cmakeEnableFlag = "GR_TRELLIS";
+ };
+ gr-uhd = {
+ runtime = [ uhd ];
+ cmakeEnableFlag = "GR_UHD";
+ };
+ gr-utils = {
+ cmakeEnableFlag = "GR_UTILS";
+ };
+ gr-modtool = {
+ pythonRuntime = with python.pkgs; [
+ click
+ click-plugins
+ ];
+ cmakeEnableFlag = "GR_MODTOOL";
+ };
+ gr-video-sdl = {
+ runtime = [ SDL ];
+ cmakeEnableFlag = "GR_VIDEO_SDL";
+ };
+ gr-vocoder = {
+ runtime = [ codec2 gsm ];
+ cmakeEnableFlag = "GR_VOCODER";
+ };
+ gr-wavelet = {
+ cmakeEnableFlag = "GR_WAVELET";
+ runtime = [ gsl ];
+ };
+ gr-zeromq = {
+ runtime = [ cppzmq zeromq ];
+ cmakeEnableFlag = "GR_ZEROMQ";
+ };
};
+ shared = (import ./shared.nix {
+ inherit
+ stdenv
+ python
+ removeReferencesTo
+ featuresInfo
+ features
+ versionAttr
+ sourceSha256
+ overrideSrc
+ fetchFromGitHub
+ fetchSubmodules
+ ;
+ qt = qt5;
+ gtk = gtk3;
+ });
+ inherit (shared)
+ version
+ src
+ hasFeature # function
+ nativeBuildInputs
+ buildInputs
+ disallowedReferences
+ stripDebugList
+ passthru
+ doCheck
+ dontWrapPythonPrograms
+ meta
+ ;
+ cmakeFlags = shared.cmakeFlags
+ # From some reason, if these are not set, libcodec2 and gsm are not
+ # detected properly. NOTE: qradiolink needs libcodec2 to be detected in
+ # order to build, see https://github.com/qradiolink/qradiolink/issues/67
+ ++ stdenv.lib.optionals (hasFeature "gr-vocoder" features) [
+ "-DLIBCODEC2_LIBRARIES=${codec2}/lib/libcodec2.so"
+ "-DLIBCODEC2_INCLUDE_DIRS=${codec2}/include"
+ "-DLIBCODEC2_HAS_FREEDV_API=ON"
+ "-DLIBGSM_LIBRARIES=${gsm}/lib/libgsm.so"
+ "-DLIBGSM_INCLUDE_DIRS=${gsm}/include/gsm"
+ ]
+ ;
- nativeBuildInputs = [
- cmake
- pkgconfig
- git
- makeWrapper
- cppunit
- orc
- ];
-
- buildInputs = [
- boost
- fftw
- python
- swig2
- lxml
- qt4
- qwt
- SDL
- libusb1
- uhd
- gsl
- ] ++ stdenv.lib.optionals stdenv.isLinux [ alsaLib ]
- ++ stdenv.lib.optionals stdenv.isDarwin [ CoreAudio ];
-
- propagatedBuildInputs = [
- Mako
- cheetah
- numpy
- scipy
- matplotlib
- pyqt4
- pygtk
- wxPython
- pyopengl
- ];
-
- NIX_LDFLAGS = "-lpthread";
-
- enableParallelBuilding = true;
-
- postPatch = ''
- substituteInPlace \
- gr-fec/include/gnuradio/fec/polar_decoder_common.h \
- --replace BOOST_CONSTEXPR_OR_CONST const
- '';
-
- # Enables composition with nix-shell
- grcSetupHook = writeText "grcSetupHook.sh" ''
- addGRCBlocksPath() {
- addToSearchPath GRC_BLOCKS_PATH $1/share/gnuradio/grc/blocks
- }
- addEnvHooks "$targetOffset" addGRCBlocksPath
- '';
-
- setupHook = [ grcSetupHook ];
-
- # patch wxgui and pygtk check due to python importerror in a headless environment
- # wxgtk gui will be removed in GR3.8
- # c++11 hack may not be necessary anymore
+ postInstall = shared.postInstall
+ # This is the only python reference worth removing, if needed (3.7 doesn't
+ # set that reference).
+ + stdenv.lib.optionalString (!hasFeature "python-support" features) ''
+ ${removeReferencesTo}/bin/remove-references-to -t ${python} $out/lib/cmake/gnuradio/GnuradioConfig.cmake
+ ''
+ ;
preConfigure = ''
- export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-unused-variable ${stdenv.lib.optionalString (!stdenv.isDarwin) "-std=c++11"}"
- sed -i 's/.*wx\.version.*/set(WX_FOUND TRUE)/g' gr-wxgui/CMakeLists.txt
- sed -i 's/.*pygtk_version.*/set(PYGTK_FOUND TRUE)/g' grc/CMakeLists.txt
- find . -name "CMakeLists.txt" -exec sed -i '1iadd_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=c++11>)' "{}" ";"
- '';
-
- # Framework path needed for qwt6_qt4 but not qwt5
- cmakeFlags =
- stdenv.lib.optionals stdenv.isDarwin [ "-DCMAKE_FRAMEWORK_PATH=${qwt}/lib" ];
-
- # - Ensure we get an interactive backend for matplotlib. If not the gr_plot_*
- # programs will not display anything. Yes, $MATPLOTLIBRC must point to the
- # *dirname* where matplotlibrc is located, not the file itself.
- # - GNU Radio core is C++ but the user interface (GUI and API) is Python, so
- # we must wrap the stuff in bin/.
- # Notes:
- # - May want to use makeWrapper instead of wrapProgram
- # - may want to change interpreter path on Python examples instead of wrapping
- # - see https://github.com/NixOS/nixpkgs/issues/22688 regarding use of --prefix / python.withPackages
- # - see https://github.com/NixOS/nixpkgs/issues/24693 regarding use of DYLD_FRAMEWORK_PATH on Darwin
- postInstall = ''
- printf "backend : Qt4Agg\n" > "$out/share/gnuradio/matplotlibrc"
-
- for file in $(find $out/bin $out/share/gnuradio/examples -type f -executable); do
- wrapProgram "$file" \
- --prefix PYTHONPATH : $PYTHONPATH:$(toPythonPath "$out") \
- --set MATPLOTLIBRC "$out/share/gnuradio" \
- ${stdenv.lib.optionalString stdenv.isDarwin "--set DYLD_FRAMEWORK_PATH /System/Library/Frameworks"}
- done
- '';
+ ''
+ # If python-support is disabled, don't install volk's (git submodule)
+ # volk_modtool - it references python.
+ #
+ # NOTE: on the next release, volk will always be required to be installed
+ # externally (submodule removed upstream). Hence this hook will fail and
+ # we'll need to package volk while able to tell it to install or not
+ # install python referencing files. When we'll be there, this will help:
+ # https://github.com/gnuradio/volk/pull/404
+ + stdenv.lib.optionalString (!hasFeature "python-support" features) ''
+ sed -i -e "/python\/volk_modtool/d" volk/CMakeLists.txt
+ ''
+ ;
+ patches = [
+ # Don't install python referencing files if python support is disabled.
+ # See: https://github.com/gnuradio/gnuradio/pull/3839
+ (fetchpatch {
+ url = "https://github.com/gnuradio/gnuradio/commit/4a4fd570b398b0b50fe875fcf0eb9c9db2ea5c6e.diff";
+ sha256 = "xz2E0ji6zfdOAhjfPecAcaVOIls1XP8JngLkBbBBW5Q=";
+ })
+ (fetchpatch {
+ url = "https://github.com/gnuradio/gnuradio/commit/dbc8ad7e7361fddc7b1dbc267c07a776a3f9664b.diff";
+ sha256 = "tQcCpcUbJv3yqAX8rSHN/pAuBq4ueEvoVo7sNzZGvf4=";
+ })
+ ];
+in
- meta = with stdenv.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.linux ++ platforms.darwin;
- maintainers = with maintainers; [ bjornfor fpletz ];
- };
+stdenv.mkDerivation rec {
+ inherit
+ pname
+ version
+ src
+ nativeBuildInputs
+ buildInputs
+ cmakeFlags
+ preConfigure
+ # disallowedReferences
+ stripDebugList
+ patches
+ postInstall
+ passthru
+ doCheck
+ dontWrapPythonPrograms
+ meta
+ ;
}
diff --git a/pkgs/applications/radio/gnuradio/gsm.nix b/pkgs/applications/radio/gnuradio/gsm.nix
index e0b8d7dd44f7..4e2406fc07a0 100644
--- a/pkgs/applications/radio/gnuradio/gsm.nix
+++ b/pkgs/applications/radio/gnuradio/gsm.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio, log4cpp
, makeWrapper, cppunit, libosmocore, gr-osmosdr
, pythonSupport ? true, python, swig
}:
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
- cmake boost gnuradio makeWrapper cppunit libosmocore gr-osmosdr
+ cmake boost gnuradio makeWrapper cppunit libosmocore gr-osmosdr log4cpp
] ++ stdenv.lib.optionals pythonSupport [ python swig ];
postInstall = ''
diff --git a/pkgs/applications/radio/gnuradio/limesdr.nix b/pkgs/applications/radio/gnuradio/limesdr.nix
index 490caaaa7bea..b2f99164bec6 100644
--- a/pkgs/applications/radio/gnuradio/limesdr.nix
+++ b/pkgs/applications/radio/gnuradio/limesdr.nix
@@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio
-, pythonSupport ? true, python, swig, limesuite
+, pythonSupport ? true, python, swig, limesuite, log4cpp
} :
assert pythonSupport -> python != null && swig != null;
@@ -24,7 +24,7 @@ in stdenv.mkDerivation {
] ++ stdenv.lib.optionals pythonSupport [ swig ];
buildInputs = [
- boost gnuradio limesuite
+ boost gnuradio limesuite log4cpp
] ++ stdenv.lib.optionals pythonSupport [ python ];
diff --git a/pkgs/applications/radio/gnuradio/nacl.nix b/pkgs/applications/radio/gnuradio/nacl.nix
index e3d851e2e14a..3435d5cdb4f0 100644
--- a/pkgs/applications/radio/gnuradio/nacl.nix
+++ b/pkgs/applications/radio/gnuradio/nacl.nix
@@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio, uhd
-, makeWrapper, libsodium, cppunit
+, makeWrapper, libsodium, cppunit, log4cpp
, pythonSupport ? true, python, swig
}:
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
- cmake boost gnuradio uhd makeWrapper libsodium cppunit
+ cmake boost gnuradio uhd makeWrapper libsodium cppunit log4cpp
] ++ stdenv.lib.optionals pythonSupport [ python swig ];
postInstall = ''
diff --git a/pkgs/applications/radio/gnuradio/osmosdr.nix b/pkgs/applications/radio/gnuradio/osmosdr.nix
index ad54fc8d7c4f..9eb6fe648d02 100644
--- a/pkgs/applications/radio/gnuradio/osmosdr.nix
+++ b/pkgs/applications/radio/gnuradio/osmosdr.nix
@@ -8,6 +8,7 @@
, rtl-sdr
, soapysdr-with-plugins
, uhd
+, log4cpp
}:
assert pythonSupport -> python != null && swig != null;
@@ -24,10 +25,10 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
- cmake makeWrapper boost
+ cmake makeWrapper boost log4cpp
airspy gnuradio hackrf libbladeRF rtl-sdr uhd
] ++ stdenv.lib.optionals stdenv.isLinux [ soapysdr-with-plugins ]
- ++ stdenv.lib.optionals pythonSupport [ python swig ];
+ ++ stdenv.lib.optionals pythonSupport [ python swig python.pkgs.cheetah ];
postInstall = ''
for prog in "$out"/bin/*; do
diff --git a/pkgs/applications/radio/gnuradio/rds.nix b/pkgs/applications/radio/gnuradio/rds.nix
index 1f8ed211ef29..72838569bb3b 100644
--- a/pkgs/applications/radio/gnuradio/rds.nix
+++ b/pkgs/applications/radio/gnuradio/rds.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, boost, gnuradio, log4cpp
, makeWrapper, pythonSupport ? true, python, swig
}:
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
- cmake boost gnuradio makeWrapper
+ cmake boost gnuradio makeWrapper log4cpp
] ++ stdenv.lib.optionals pythonSupport [ python swig ];
postInstall = ''
diff --git a/pkgs/applications/radio/gnuradio/shared.nix b/pkgs/applications/radio/gnuradio/shared.nix
new file mode 100644
index 000000000000..66ce0a5f5132
--- /dev/null
+++ b/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.mapAttrsToLis