3becac02f8
Write (similar) expressions for GNURadio 3.7 and 3.8 and make 3.8 available as `gnuradio`, and `gnuradio3_7` point to the 3.7 build. Teach both 3.7 & 3.8 expressions accept a `features` attribute set, that tells them what features to compile. There are dependencies within the different features, and we rely on upstream's cmake scripts to make sure the `configurePhase` will fail if a feature is not enabled and needed by another feature. All features are enabled by default. Put shared Nix functions and attributes for both 3.7 and 3.8 in: pkgs/applications/radio/gnuradio/shared.nix Add 2 patches accepted upstream, that don't install some python related examples if python-support is not enabled. Remove cmake python reference in 3.8 with removeReferencesTo, if python-support is turned off. Update gqrx (reverse dependency) to use a build of gnuradio3_7 without gui components and for it's gr-osmosdr as well. Write an external, `wrapper.nix` (shared for both 3.7 and 3.8). Teach it to handle extra `gr-` packages via `GRC_BLOCKS_PATH`. Likely enable it to accept extra python packages. Wrap the executables with env vars wrapGAppsHook and wrapQtAppsHook would have likely given them (hence, fix #87510). Point `gnuradio` to the wrapped 3.8 derivation. Add @doronbehar to maintainers of both 3.8 and 3.7. dirty: use upstreamed patches
298 lines
6.9 KiB
Nix
298 lines
6.9 KiB
Nix
{ 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, besides wxgui which is recommended by upstream
|
|
# in favor of gr-qtgui, see:
|
|
# https://www.gnuradio.org/news/2019-08-10-gnu-radio-v3-8-0-0-release/
|
|
, features ? { gr-wxgui = false; }
|
|
# 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
|
|
;
|
|
}
|