mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-10 06:04:14 +00:00
![Thomas Watson](/assets/img/avatar_default.png)
A recent upgrade to PyQt5 broke the build due to incompatibilities with SIP < 5. Upstream QGIS has supported SIP >= 5 for a while now so this patch corrects the issue by using the latest SIP and adding the necessary dependencies. The logic to find the PyQt5 libraries and SIP files is different for SIP >= 5, so a patch is included to correctly supply them. This also adds wrapGAppsHook to prevent opening file dialogs from crashing on non-NixOS distributions.
159 lines
2.9 KiB
Nix
159 lines
2.9 KiB
Nix
{ lib
|
|
, mkDerivation
|
|
, fetchFromGitHub
|
|
, cmake
|
|
, ninja
|
|
, flex
|
|
, bison
|
|
, proj
|
|
, geos
|
|
, xlibsWrapper
|
|
, sqlite
|
|
, gsl
|
|
, qwt
|
|
, fcgi
|
|
, python3
|
|
, libspatialindex
|
|
, libspatialite
|
|
, postgresql
|
|
, txt2tags
|
|
, openssl
|
|
, libzip
|
|
, hdf5
|
|
, netcdf
|
|
, exiv2
|
|
, protobuf
|
|
, qtbase
|
|
, qtsensors
|
|
, qca-qt5
|
|
, qtkeychain
|
|
, qt3d
|
|
, qscintilla
|
|
, qtserialport
|
|
, qtxmlpatterns
|
|
, withGrass ? true
|
|
, grass
|
|
, withWebKit ? true
|
|
, qtwebkit
|
|
, pdal
|
|
, zstd
|
|
, makeWrapper
|
|
, wrapGAppsHook
|
|
, substituteAll
|
|
}:
|
|
|
|
let
|
|
|
|
py = python3.override {
|
|
packageOverrides = self: super: {
|
|
pyqt5 = super.pyqt5.override {
|
|
withLocation = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
pythonBuildInputs = with py.pkgs; [
|
|
qscintilla-qt5
|
|
gdal
|
|
jinja2
|
|
numpy
|
|
psycopg2
|
|
chardet
|
|
python-dateutil
|
|
pyyaml
|
|
pytz
|
|
requests
|
|
urllib3
|
|
pygments
|
|
pyqt5
|
|
pyqt-builder
|
|
sip
|
|
setuptools
|
|
owslib
|
|
six
|
|
];
|
|
in mkDerivation rec {
|
|
version = "3.22.9";
|
|
pname = "qgis-ltr-unwrapped";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "qgis";
|
|
repo = "QGIS";
|
|
rev = "final-${lib.replaceStrings [ "." ] [ "_" ] version}";
|
|
sha256 = "sha256-QHdcK34e7tC0AUstE8pbsBHzHXbmOd3gI2/zqsxb6X4=";
|
|
};
|
|
|
|
passthru = {
|
|
inherit pythonBuildInputs;
|
|
inherit py;
|
|
};
|
|
|
|
buildInputs = [
|
|
openssl
|
|
proj
|
|
geos
|
|
xlibsWrapper
|
|
sqlite
|
|
gsl
|
|
qwt
|
|
exiv2
|
|
protobuf
|
|
fcgi
|
|
libspatialindex
|
|
libspatialite
|
|
postgresql
|
|
txt2tags
|
|
libzip
|
|
hdf5
|
|
netcdf
|
|
qtbase
|
|
qtsensors
|
|
qca-qt5
|
|
qtkeychain
|
|
qscintilla
|
|
qtserialport
|
|
qtxmlpatterns
|
|
qt3d
|
|
pdal
|
|
zstd
|
|
] ++ lib.optional withGrass grass
|
|
++ lib.optional withWebKit qtwebkit
|
|
++ pythonBuildInputs;
|
|
|
|
nativeBuildInputs = [ makeWrapper wrapGAppsHook cmake flex bison ninja ];
|
|
|
|
patches = [
|
|
(substituteAll {
|
|
src = ./set-pyqt-package-dirs.patch;
|
|
pyQt5PackageDir = "${py.pkgs.pyqt5}/${py.pkgs.python.sitePackages}";
|
|
qsciPackageDir = "${py.pkgs.qscintilla-qt5}/${py.pkgs.python.sitePackages}";
|
|
})
|
|
];
|
|
|
|
cmakeFlags = [
|
|
"-DWITH_3D=True"
|
|
"-DWITH_PDAL=TRUE"
|
|
] ++ lib.optional (!withWebKit) "-DWITH_QTWEBKIT=OFF"
|
|
++ lib.optional withGrass "-DGRASS_PREFIX7=${grass}/grass78";
|
|
|
|
dontWrapGApps = true; # wrapper params passed below
|
|
|
|
postFixup = lib.optionalString withGrass ''
|
|
# grass has to be availble on the command line even though we baked in
|
|
# the path at build time using GRASS_PREFIX.
|
|
# using wrapGAppsHook also prevents file dialogs from crashing the program
|
|
# on non-NixOS
|
|
wrapProgram $out/bin/qgis \
|
|
"''${gappsWrapperArgs[@]}" \
|
|
--prefix PATH : ${lib.makeBinPath [ grass ]}
|
|
'';
|
|
|
|
meta = {
|
|
description = "A Free and Open Source Geographic Information System";
|
|
homepage = "https://www.qgis.org";
|
|
license = lib.licenses.gpl2Plus;
|
|
platforms = with lib.platforms; linux;
|
|
maintainers = with lib.maintainers; [ lsix sikmir erictapen willcohen ];
|
|
};
|
|
}
|