nixpkgs/pkgs/applications/gis/qgis/unwrapped-ltr.nix
Thomas Watson c3aff2b7d7 qgis, qgis-ltr: fix build
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.
2022-08-06 19:17:07 -05:00

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 ];
};
}