dotfiles/packages/scopehal-apps/default.nix
2024-11-07 16:25:41 -07:00

114 lines
3.6 KiB
Nix

#
# scopehal apps, including glscopeclient and optionally ngscopeclient
#
# vim: et:ts=2:sw=2:
#
{ deprekages, pkgs, lib, cmake, pkg-config, patchelf, ... }:
pkgs.stdenv.mkDerivation rec {
pname = "scopehal-apps";
version = "git";
# If this is set to true, we'll also install ngscopeclient.
includeUnstableNextGenClient = true;
src = pkgs.fetchgit {
url = "https://github.com/glscopeclient/scopehal-apps.git";
rev = "617b6ee1230d19be4b883f676413664c3d7c0d7e";
sha256 = "sha256-LJo1rcxDBYYngIU3+BiCV41HuQh/Ac/LG4wX9+IvVb8=";
fetchSubmodules = true;
};
nativeBuildInputs = [
cmake
pkg-config
patchelf
pkgs.git
];
buildInputs = with pkgs; [
deprekages.ffts
shaderc
deprekages.vulkan-sdk
# located via cmake module
glfw3
glew
libyamlcpp
libpng
# pkg-config
gtkmm3
pcre
pcre2
util-linux
libselinux
libsepol
libthai
libdatrie
];
cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
patches = [
# Fix a format string vulnerability that's preventing us from building with -Werror=format-security.
# Currently necessary due to https://github.com/glscopeclient/scopehal-apps/issues/571.
(pkgs.writeText "fix-format-security.patch" ''
--- scopehal-apps-0.0.1.orig/src/ngscopeclient/Dialog.cpp
+++ scopehal-apps-0.0.1/src/ngscopeclient/Dialog.cpp
@@ -207,7 +207,7 @@ void Dialog::HelpMarker(const string& he
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 50);
ImGui::TextUnformatted(header.c_str());
for(auto s : bullets)
- ImGui::BulletText(s.c_str());
+ ImGui::BulletText("%s", s.c_str());
ImGui::PopTextWrapPos();
ImGui::EndTooltip();
}
'')
]
# If we're configured to, include ngscopeclient; though it's unstable enough that we
# won't create a desktop entry for it, yet.
++ lib.lists.optional (includeUnstableNextGenClient) (pkgs.writeText "install-ng-client.patch" ''
diff --git a/src/ngscopeclient/CMakeLists.txt b/src/ngscopeclient/CMakeLists.txt
index 79171e0..b340af1 100644
--- a/src/ngscopeclient/CMakeLists.txt
+++ b/src/ngscopeclient/CMakeLists.txt
@@ -153,3 +153,11 @@ target_link_libraries(ngscopeclient
$${SIGCXX_LIBRARIES}
)
+
+install(TARGETS ngscopeclient RUNTIME)
+install(DIRECTORY fonts
+ DESTINATION share/ngscopeclient)
+install(DIRECTORY shaders
+ DESTINATION share/ngscopeclient)
+install(DIRECTORY icons
+ DESTINATION share/ngscopeclient)
'');
# scopehal's cmake files expect to find vulkan libraries using the VULKAN_SDK environment variable.
# (The top level's vulkan can be specified with -DVulkan_LIBRARY, but the environment variable is still
# used by the lower layers; which makes it better just to use this, here.
preConfigure = "export VULKAN_SDK=${deprekages.vulkan-sdk}";
# Link our e.g. stylesheets into places that Qt is willing to find them.
# TODO: figure out if there's a build define that changes this
postInstall = ''
cp -r $out/share/glscopeclient/* $out/bin/
cp -r $out/share/ngscopeclient/* $out/bin/
'';
meta = {
description = "test and measurement tool control applications";
longDescription =
'' Tools for remote controlling test and measurement tools.
Provides advanced visualization and decoding of output from oscilloscopes and control of various instruments.
'';
homepage = "https://www.antikernel.net/temp/glscopeclient-manual.pdf";
license = pkgs.lib.licenses.bsd3;
};
}