|
|
|
@ -1,59 +1,99 @@ |
|
|
|
|
{ lib, stdenv, fetchFromGitHub, fetchpatch, libusb1, qtbase, zlib, IOKit, which, expat }: |
|
|
|
|
{ lib, stdenv, fetchFromGitHub, fetchurl, pkg-config, which |
|
|
|
|
, qtbase, qmake, qttools, qttranslations, wrapQtAppsHook |
|
|
|
|
, libusb1, shapelib, zlib |
|
|
|
|
, withGUI ? false, qtserialport |
|
|
|
|
, withMapPreview ? (!stdenv.isDarwin), qtwebengine |
|
|
|
|
, withDoc ? false, docbook_xml_dtd_45, docbook_xsl, expat, fop, libxml2, libxslt, perl |
|
|
|
|
}: |
|
|
|
|
|
|
|
|
|
stdenv.mkDerivation rec { |
|
|
|
|
pname = "gpsbabel"; |
|
|
|
|
version = "1.7.0"; |
|
|
|
|
version = "1.8.0"; |
|
|
|
|
|
|
|
|
|
src = fetchFromGitHub { |
|
|
|
|
owner = "gpsbabel"; |
|
|
|
|
repo = "gpsbabel"; |
|
|
|
|
rev = "gpsbabel_${lib.replaceStrings ["."] ["_"] version}"; |
|
|
|
|
sha256 = "010g0vd2f5knpq5p7qfnl31kv3r8m5sjdsafcinbj5gh02j2nzpy"; |
|
|
|
|
sha256 = "sha256-0w8LsO+HwqZF8SQmwd8bCKma9PCM0hAzXhzWR4DgAHs="; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
patches = [ |
|
|
|
|
(fetchpatch { |
|
|
|
|
url = "https://sources.debian.net/data/main/g/gpsbabel/1.5.3-2/debian/patches/use_minizip"; |
|
|
|
|
sha256 = "03fpsmlx1wc48d1j405zkzp8j64hcp0z72islf4mk1immql3ibcr"; |
|
|
|
|
}) |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
buildInputs = [ libusb1 qtbase zlib ] |
|
|
|
|
++ lib.optionals stdenv.isDarwin [ IOKit ]; |
|
|
|
|
|
|
|
|
|
checkInputs = [ expat.dev which ]; # Avoid ./testo.d/kml.test: line 74: which: command not found. Skipping KML validation phase. |
|
|
|
|
patches = map fetchurl (import ./debian-patches.nix); |
|
|
|
|
|
|
|
|
|
/* FIXME: Building the documentation, with "make doc", requires this: |
|
|
|
|
|
|
|
|
|
[ libxml2 libxslt perl docbook_xml_dtd_412 docbook_xsl fop ] |
|
|
|
|
postPatch = '' |
|
|
|
|
patchShebangs testo |
|
|
|
|
'' + lib.optionalString withGUI '' |
|
|
|
|
# See https://github.com/NixOS/nixpkgs/issues/86054 |
|
|
|
|
substituteInPlace gui/mainwindow.cc \ |
|
|
|
|
--replace 'QLibraryInfo::location(QLibraryInfo::TranslationsPath)' \ |
|
|
|
|
'QLatin1String("${qttranslations}/translations")' |
|
|
|
|
'' + lib.optionalString withDoc '' |
|
|
|
|
substituteInPlace gbversion.h.qmake.in \ |
|
|
|
|
--replace /usr/share/doc $doc/share/doc |
|
|
|
|
|
|
|
|
|
substituteInPlace testo.d/serialization.test \ |
|
|
|
|
--replace /usr/share/doc $doc/share/doc |
|
|
|
|
|
|
|
|
|
substituteInPlace xmldoc/gpsbabel_man.xml \ |
|
|
|
|
--replace /usr/share/doc $doc/share/doc |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
outputs = [ "out" ] ++ lib.optional withDoc "doc"; |
|
|
|
|
|
|
|
|
|
nativeBuildInputs = [ pkg-config qmake ] |
|
|
|
|
++ lib.optionals withGUI [ qttools wrapQtAppsHook ] |
|
|
|
|
++ lib.optionals withDoc [ docbook_xml_dtd_45 docbook_xsl expat fop libxml2 libxslt perl ]; |
|
|
|
|
|
|
|
|
|
buildInputs = [ libusb1 shapelib zlib ] |
|
|
|
|
++ lib.optional withGUI qtserialport |
|
|
|
|
++ lib.optional (withGUI && withMapPreview) qtwebengine; |
|
|
|
|
|
|
|
|
|
checkInputs = [ libxml2 which ]; |
|
|
|
|
|
|
|
|
|
preConfigure = lib.optionalString withGUI '' |
|
|
|
|
lrelease gui/*.ts gui/coretool/*.ts |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
qmakeFlags = [ |
|
|
|
|
"WITH_LIBUSB=pkgconfig" |
|
|
|
|
"WITH_SHAPELIB=pkgconfig" |
|
|
|
|
"WITH_ZLIB=pkgconfig" |
|
|
|
|
] ++ lib.optionals (withGUI && !withMapPreview) [ |
|
|
|
|
"CONFIG+=disable-mappreview" |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
But FOP isn't packaged yet. */ |
|
|
|
|
makeFlags = lib.optional withGUI "gui" |
|
|
|
|
++ lib.optionals withDoc [ "gpsbabel.pdf" "gpsbabel.html" "gpsbabel.org" ]; |
|
|
|
|
|
|
|
|
|
configureFlags = [ "--with-zlib=system" ] |
|
|
|
|
# Floating point behavior on i686 causes test failures. Preventing |
|
|
|
|
# extended precision fixes this problem. |
|
|
|
|
++ lib.optionals stdenv.isi686 [ |
|
|
|
|
"CFLAGS=-ffloat-store" "CXXFLAGS=-ffloat-store" |
|
|
|
|
]; |
|
|
|
|
# Floating point behavior on i686 causes nmea.test failures. Preventing |
|
|
|
|
# extended precision fixes this problem. |
|
|
|
|
NIX_CFLAGS_COMPILE = lib.optional stdenv.isi686 "-ffloat-store"; |
|
|
|
|
|
|
|
|
|
enableParallelBuilding = true; |
|
|
|
|
doCheck = true; |
|
|
|
|
|
|
|
|
|
dontWrapQtApps = true; |
|
|
|
|
|
|
|
|
|
doCheck = true; |
|
|
|
|
preCheck = '' |
|
|
|
|
patchShebangs testo |
|
|
|
|
substituteInPlace testo \ |
|
|
|
|
--replace "-x /usr/bin/hexdump" "" |
|
|
|
|
|
|
|
|
|
rm -v testo.d/alantrl.test |
|
|
|
|
'' |
|
|
|
|
# The raymarine and gtm tests fail on i686 despite -ffloat-store. |
|
|
|
|
+ lib.optionalString stdenv.isi686 "rm -v testo.d/raymarine.test testo.d/gtm.test;" |
|
|
|
|
# The gtm, kml and tomtom asc tests fail on darwin, see PR #23572. |
|
|
|
|
+ lib.optionalString stdenv.isDarwin "rm -v testo.d/gtm.test testo.d/kml.test testo.d/tomtom_asc.test testo.d/classic-2.test" |
|
|
|
|
# The arc-project test fails on aarch64. |
|
|
|
|
+ lib.optionalString stdenv.isAarch64 "rm -v testo.d/arc-project.test"; |
|
|
|
|
installPhase = '' |
|
|
|
|
install -Dm755 gpsbabel -t $out/bin |
|
|
|
|
'' + lib.optionalString withGUI (if stdenv.isDarwin then '' |
|
|
|
|
mkdir -p $out/Applications |
|
|
|
|
mv gui/GPSBabelFE.app $out/Applications |
|
|
|
|
install -Dm644 gui/*.qm gui/coretool/*.qm -t $out/Applications/GPSBabelFE.app/Contents/Resources/translations |
|
|
|
|
ln -s $out/bin/gpsbabel $out/Applications/GPSBabelFE.app/Contents/MacOS |
|
|
|
|
'' else '' |
|
|
|
|
install -Dm755 gui/objects/gpsbabelfe -t $out/bin |
|
|
|
|
install -Dm644 gui/gpsbabel.desktop -t $out/share/application |
|
|
|
|
install -Dm644 gui/images/appicon.png $out/share/icons/hicolor/512x512/apps/gpsbabel.png |
|
|
|
|
install -Dm644 gui/*.qm gui/coretool/*.qm -t $out/share/gpsbabel/translations |
|
|
|
|
'') + lib.optionalString withDoc '' |
|
|
|
|
install -Dm655 gpsbabel.{html,pdf} -t $doc/share/doc/gpsbabel |
|
|
|
|
cp -r html $doc/share/doc/gpsbabel |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
postFixup = lib.optionalString withGUI (if stdenv.isDarwin then '' |
|
|
|
|
wrapQtApp "$out/Applications/GPSBabelFE.app/Contents/MacOS/GPSBabelFE" |
|
|
|
|
'' else '' |
|
|
|
|
wrapQtApp "$out/bin/gpsbabelfe" |
|
|
|
|
''); |
|
|
|
|
|
|
|
|
|
meta = with lib; { |
|
|
|
|
broken = stdenv.isDarwin; |
|
|
|
@ -76,8 +116,9 @@ stdenv.mkDerivation rec { |
|
|
|
|
process data that may (or may not be) placed on a map, such as |
|
|
|
|
waypoints, tracks, and routes. |
|
|
|
|
''; |
|
|
|
|
homepage = "http://www.gpsbabel.org/"; |
|
|
|
|
homepage = "https://www.gpsbabel.org/"; |
|
|
|
|
license = licenses.gpl2Plus; |
|
|
|
|
platforms = platforms.all; |
|
|
|
|
platforms = platforms.unix; |
|
|
|
|
maintainers = with maintainers; [ sikmir ]; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|